7Ji / ampart

A partition tool for Amlogic's proprietary emmc partition format
GNU General Public License v3.0
66 stars 26 forks source link

r3300l使用dclone模式报错 #6

Closed a520ass closed 1 year ago

a520ass commented 1 year ago

r3300l能使用dclone模式吗,试了好像会报错, 用的以下命令 ampart /dev/mmcblk1 --mode dclone data::-1:4

F8861EB5-7234-422A-BBB9-83467804C79C

7Ji commented 1 year ago

你用的是哪个r3300l的固件?如果是Milton的那个6.0自带root的固件的话,它的DTB里面标签有问题。一般的DTB要么只用phandle作为辅助指针,要么兼用linux,phandle。这个固件里面的分区节点外面两种情况都有,为了避免整崩系统,就直接拒绝写了(因为ampart的DTB读写模块是我从底层手写的,没有用libfdt,操作上比其他DTB调整的工具谨慎很多)。

相应的,在知道不会整崩设备的前提下,这个分区节点是可以自己修改的,下面是分区节点只有data的DTB,以及这个分区快照对应的容量最小的线刷镜像。r3300l_bareminumum.img这个线刷镜像只包含了bootloader等最基本的内容,没有任何安卓的文件,这个镜像刷入以后盒子是没法启动安卓的,但是可以进reset按住的升级模式,从而可以启动外面的系统;或者你有TTL手操u-boot设置启动参数也是可以的。

meson1.dtb这里面是只包含data这个分区的DTB,可以用下面这两条命令写入以后让ampart迁移分区

dd if=meson1.dtb of=/dev/mmcblk1 bs=256K seek=160 conv=notrunc
dd if=meson1.dtb of=/dev/mmcblk1 bs=256K seek=161 conv=notrunc
ampart /dev/mmcblk1 --mode dtoe

(注意必须用ampart的dtoe模式把DTB分区节点同步到EPT,ampart默认情况下会一并迁移必要分区(--migrate的默认参数是essential,足够用了;自己调来调去的话需要配合--migrate all);直接重启的话,Amlogic的u-boot会把DTB分区节点同步到EPT,但是不会迁移,然后因为数据没有迁移,盒子就砖了,要再线刷救回来)

r3300l_bareminumum.img.zip meson1.dtb.zip

a520ass commented 1 year ago

非常感谢回复,我的r3300l 刷的是Milton的那个6.0固件。是不是直接刷r3300l_bareminumum.img后,再进usb的系统,再刷这个dtb就可以了?

a520ass commented 1 year ago

r3300l是不是能提取acs.bin来生成主线u-boot啊,这样就不需要安卓的u-boot了

7Ji commented 1 year ago

这个线刷包里已经包括了那个DTB,刷入后直接用外置系统就行了。外置到内置的安装是同理的,分区步骤可以直接省略掉。这种线刷包就是通过用ampart删掉没用的分区以后,再修改镜像信息再打包得到的。有了这种刷机包,只需要一分钟就能救砖以及修改分区布局,而不需要十几分钟安卓的刷机。

如果你想搞的是EmuELEC,你甚至可以搞EmuELEC的线刷包,刷完开机就能玩。

hefeng @.***> 于 2022年12月31日周六 上午10:29写道:

非常感谢回复,我的r3300l 刷的是Milton的那个6.0固件。是不是直接刷r3300l_bareminumum.img后,再进usb的系统,再刷这个dtb就可以了?

— Reply to this email directly, view it on GitHub https://github.com/7Ji/ampart/issues/6#issuecomment-1368150284, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF2CYETRQZBT3ARYZHFHZI3WP6LCJANCNFSM6AAAAAATNH4W54 . You are receiving this because you commented.Message ID: @.***>

7Ji commented 1 year ago

我自己的r3300l的ram芯片烧了,没法试验。应该是可以的。

hefeng @.***> 于 2022年12月31日周六 上午10:32写道:

r3300l是不是能提取acs.bin来生成主线u-boot啊,这样就不需要安卓的u-boot了

— Reply to this email directly, view it on GitHub https://github.com/7Ji/ampart/issues/6#issuecomment-1368150915, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF2CYEXISGAY5DL7NQN2YN3WP6LKNANCNFSM6AAAAAATNH4W54 . You are receiving this because you commented.Message ID: @.***>

7Ji commented 1 year ago

https://github.com/7Ji/u-boot/commit/1563219ecf306021b829a85d4c1f722c2ed207ee

顺便,你要打包主线的话,我这里有已经适配的主线u-boot

7Ji @.***> 于 2022年12月31日周六 上午10:42写道:

我自己的r3300l的ram芯片烧了,没法试验。应该是可以的。

hefeng @.***> 于 2022年12月31日周六 上午10:32写道:

r3300l是不是能提取acs.bin来生成主线u-boot啊,这样就不需要安卓的u-boot了

— Reply to this email directly, view it on GitHub https://github.com/7Ji/ampart/issues/6#issuecomment-1368150915, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF2CYEXISGAY5DL7NQN2YN3WP6LKNANCNFSM6AAAAAATNH4W54 . You are receiving this because you commented.Message ID: @.***>

a520ass commented 1 year ago

这个线刷包里已经包括了那个DTB,刷入后直接用外置系统就行了。外置到内置的安装是同理的,分区步骤可以直接省略掉。这种线刷包就是通过用ampart删掉没用的分区以后,再修改镜像信息再打包得到的。有了这种刷机包,只需要一分钟就能救砖以及修改分区布局,而不需要十几分钟安卓的刷机。 如果你想搞的是EmuELEC,你甚至可以搞EmuELEC的线刷包,刷完开机就能玩。 hefeng @.***> 于 2022年12月31日周六 上午10:29写道:

我试试,ampart很强大,只不过我还没理解它的用法,先用你这个线刷包试下。我还有s905l2 ,s905l3的其他盒子,也没法用ampart修改分区,不清楚什么问题

a520ass commented 1 year ago

7Ji/u-boot@1563219 顺便,你要打包主线的话,我这里有已经适配的主线u-boot 7Ji @.***> 于 2022年12月31日周六 上午10:42写道:

我是用你这个补丁编译的u-boot,版本用的是2022.04,现在是用安卓u-boot来加载这个u-boot,原厂bootloader好像没法提取出acs.bin,不知道你有没有办法

7Ji commented 1 year ago

s905l2 ,s905l3的其他盒子,也没法用ampart修改分区,不清楚什么问题

我没这些具体的盒子,没法具体判断问题。我的Amlogic设备只有这些,而且各有问题:

不少是ampart、HybridELEC、EmuELEC、CoreELEC开发过程中大量物理折磨给整坏的

原厂bootloader

你确定有原厂bootloader吗,我的盒子20年拿到手以后就刷了Milton的包,没有备份任何东西。我没有找到过真的原厂镜像,只提取过Milton镜像里面的内容,但是我之前把RAM烧了,盒子已经废了,打包的bootloader到BL31检测不到RAM芯片就卡住了。

不知道你有没有办法

gxlimg这个项目,参考作者在一个issue里的回复,可以拆到bl2.sign, bl301.enc, bl30.enc , bl31.enc, bl33.enc, fip, fip.enc。把bl33替换以后重新打包理论就行了,但我盒子RAM烧了没法试。

a520ass commented 1 year ago

r3300l用了你的dtb,已经可以使用ampart修改分区了。其他不能修改分区的,可能也是这问题,能请教下这个meson1.dtb是怎么改的吗?

a520ass commented 1 year ago

我的r3300l,可能也不是原厂bootloader,暂时也不弄主线u-boot了

7Ji commented 1 year ago

r3300l用了你的dtb,已经可以使用ampart修改分区了。其他不能修改分区的,可能也是这问题,能请教下这个meson1.dtb是怎么改的吗?

如果刷机包里的DTB是gzip的,解压;如果是多DTB,根据https://github.com/7Ji/ampart/blob/d1df3f47b670e9aff2d2fc5bf289f5e32c577a4d/include/dtb.h#L83 这里的结构手拆,或者用 https://github.com/Wilhansen/aml-dtbtools 。这样的话得到你需要的那个板子的DTB。这一系列拆分不一定是必要的,HK1 BOX的固件里面的DTB是单一的DTB;Milton的R3300L固件里是6个不同的DTB打包,其中只有gxl_p211_1g是需要的。注意一切修改完以后如果成品的DTB大于256KiB-16B需要用gzip再压,一般不需要。

用dtc把这个得到的DTB反编译得到DTS。

用文本编辑器修改DTS里面的/partitions节点。注意看外面的各个节点比如cpu下面的指针标签是只有phandle还是也有linux,phandle,其中linux, phandle是现在已经弃用的指针标签。修改partitions里面的节点的时候分区只能减少不能增加,除非你会手算空余的phandle。然后把partitions本身和各个分区的phandle和linux, phandle情况和外面做统一:如果外面只用phandle,partitions下面也要只用phandle;如果外面两者都用,partitions下面也都用。ampart主要是拒绝对这种不统一的情况做操作,所以你只要搞到一个最简的只有data的phandle情况稳定的分区布局,然后编译回dtb。

然后因为phandle和linux,phandle的混用情况不再有问题,你就可以用ampart对这个dtb调整分区了,ampart不再会拒绝操作。建议是上面调整前用dsnapshot拿到快照,这里用dclone放一个自己想要的布局进去。这个过程中分区可以增加。所以可以保留全部安卓分区的前提下增加其他系统用的分区。

把这个成品dtb放回刷机包再打包就行。如果你有新的分区,也把新分区的分区文件放进去。

a520ass commented 1 year ago

非常感谢,目前S905L2,S905L3 都能正常使用ampart来修改分区了。很多dtb都需要处理这个phandle和linux, phandle的问题

QQ截图20230105112232

7Ji commented 1 year ago

很多dtb都需要处理这个phandle和linux, phandle的问题

这是不应该的,linux,phandle这个标签在很久之前就被Linux弃用了: https://elinux.org/Device_Tree_Linux#:~:text=Property%20%22linux%2Cphandle%22%20is%20obsolete.%20If%20it%20exists%2C%20its,device%20tree.%20phandle%20access%20in%20kernel%20%28by%20drivers%29 现在Linux内核和其他设备树读写用户一样只用phandle这个标签。

对应到Amlogic的魔改内核上的话,按理说只有3.14的老内核才可能用linux,phandle,4.9以后的就只用phandle了。3.14是给gxbb, gxl用的,4.9是给gxl, g12a, g12b, sm1用的,所以混用一般在gxl上。l2和l3是比较新的设备,不应该像gxl一样存在混用情况

a520ass commented 1 year ago

很多dtb都需要处理这个phandle和linux, phandle的问题

这是不应该的,linux,phandle这个标签在很久之前就被Linux弃用了: https://elinux.org/Device_Tree_Linux#:~:text=Property%20%22linux%2Cphandle%22%20is%20obsolete.%20If%20it%20exists%2C%20its,device%20tree.%20phandle%20access%20in%20kernel%20%28by%20drivers%29 现在Linux内核和其他设备树读写用户一样只用phandle这个标签。

对应到Amlogic的魔改内核上的话,按理说只有3.14的老内核才可能用linux,phandle,4.9以后的就只用phandle了。3.14是给gxbb, gxl用的,4.9是给gxl, g12a, g12b, sm1用的,所以混用一般在gxl上。l2和l3是比较新的设备,不应该像gxl一样存在混用情况

S905L2,S905L2B(gxlx),S905L3 ,S905L3B(gxlx2) 好像都属于老芯片。我这个dtb有问题的都是linux,***_cma节点里面缺了phandle

QQ截图20230105163816

7Ji commented 1 year ago

@a520ass 刚把移植到2023.01的r3300l的u-boot给打成了bootloader镜像,你可以到我u-boot仓库的发布页去下载

https://github.com/7Ji/u-boot/releases/tag/v2023.01-r3300l

a520ass commented 1 year ago

@a520ass 刚把移植到2023.01的r3300l的u-boot给打成了bootloader镜像,你可以到我u-boot仓库的发布页去下载

大佬厉害啊,r3300l-u-boot.bin.sd.bin就是主线bootloader吧。是用的amlogic-boot-fip来生成的吗?

7Ji commented 1 year ago

不是,用的gxlimg

a520ass commented 1 year ago

不太懂这个怎么生成,我用r3300l试试这个bootloader。大佬是学嵌入式专业的吗,还是业余爱好?我这个嵌入式专业的后面都没搞这个了

7Ji commented 1 year ago

业余

a520ass commented 1 year ago

大佬就是厉害,这个gxlimg还能解开厂商的bootloader吗?

7Ji commented 1 year ago

对,具体用法你到那个项目去看看吧,我只是拉取构建直接拿来用的

hefeng @.***> 于 2023年2月4日周六 下午10:31写道:

大佬就是厉害,这个gxlimg还能解开厂商的bootloader吗?

— Reply to this email directly, view it on GitHub https://github.com/7Ji/ampart/issues/6#issuecomment-1416767876, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF2CYEQYLQ52OEMJDYKI4J3WVZR35ANCNFSM6AAAAAATNH4W54 . You are receiving this because you modified the open/close state.Message ID: @.***>

a520ass commented 1 year ago

对,具体用法你到那个项目去看看吧,我只是拉取构建直接拿来用的

那个项目只看到了生成,用的BL2好像是libretech-cc的,没看到解开厂商bootloader的方法

7Ji commented 1 year ago

gxlimg这个项目,参考作者在https://github.com/repk/gxlimg/issues/6#issuecomment-573714687 里的回复,可以拆到bl2.sign, bl301.enc, bl30.enc , bl31.enc, bl33.enc, fip, fip.enc。把bl33替换以后重新打包理论就行了,但我盒子RAM烧了没法试。

在上面回复里提到的这个issue里有写

整个提取镜像到打出来bootloader的命令和日志

[nomad7ji@laptop7ji r3300l]$ aml_image_v2_packer -d r3300l-milton-bare.img firmware/
[Msg]Image package version 0x2
[Msg]Unpack item [USB         ,              DDR] to (firmware//DDR.USB) size:49152 bytes
[Msg]Unpack item [USB         ,            UBOOT] to (firmware//UBOOT.USB) size:737280 bytes
[Msg]Unpack item [UBOOT       ,     aml_sdc_burn] to (firmware//aml_sdc_burn.UBOOT) size:786944 bytes
[Msg]Unpack item [ini         ,     aml_sdc_burn] to (firmware//aml_sdc_burn.ini) size:602 bytes
[Msg]Unpack item [PARTITION   ,       bootloader] to (firmware//bootloader.PARTITION) size:786432 bytes
[Msg]Unpack item [xml         ,         manifest] to (firmware//manifest.xml) size:59521 bytes
[Msg]Unpack item [dtb         ,           meson1] to (firmware//meson1.dtb) size:215040 bytes
[Msg]Unpack item [conf        ,         platform] to (firmware//platform.conf) size:201 bytes
[Msg]Write config file "firmware//image.cfg" OK!
Image unpack OK!
[nomad7ji@laptop7ji r3300l]$ mkdir bootloader
[nomad7ji@laptop7ji r3300l]$ gxlimg -e firmware/bootloader.PARTITION bootloader
[nomad7ji@laptop7ji r3300l]$ gxlimg -c -t bl3x mainline-u-boot/u-boot.bin mainline-u-boot/u-boot.enc
[nomad7ji@laptop7ji r3300l]$ gxlimg -c -t fip --bl2 bootloader/bl2.sign --bl30 bootloader/bl30.enc --bl301 bootloader/bl301.enc --bl31 bootloader/bl31.enc --bl33 mainline-u-boot/u-boot.enc bootloader_with_mainline.img
a520ass commented 1 year ago

试了一下可以解开厂商bootlaoder,也能生成主线bootloader,我刷进去试试

a520ass commented 1 year ago

大佬的r3300l是修好了吗

7Ji commented 1 year ago

不算好,Win下线刷RAM必定无法初始化,Linux下线刷部分区域写不了(伪成功,结束后还是原来内容)。不过所幸还能写bootloader,所以够我去u-boot手操启动外面的alarm再反过来操作eMMC

7Ji commented 1 year ago

https://github.com/7Ji/ampart/commit/bad48eb5bcafab1f8b341bf0289bdcfb3195aed6

这个commit以后可以修改phandlelinux,phandle不匹配的DTB了,在milton的r3300l线刷包上测试通过,你可以试下在手里其他的有这个问题的设备上能不能修改

对应构建在这里下载: https://github.com/7Ji/ampart/actions/runs/4290022419

要是没问题的话我就打标1.3版本正式发布了

7Ji commented 1 year ago

Closed by bad48eb5bcafab1f8b341bf0289bdcfb3195aed6

a520ass commented 1 year ago

周末去试试看,好久没玩了。刚看了一下大佬的记录,又弄出好多amlogic的新玩法啊,太厉害了。有些东西是不是可以提交到主线内核去