3355 发表于 2022-2-21 20:25:07

制作工厂烧录固件,定制userdata分区问题

我的应用案例,需要制作工厂烧录固件时,在userdata分区预置一些 私有数据。并且userdata分区要尽可能大

使用了以下2个方式尝试:

1、方式1生成userdata.img
修改了firefly-rk3399-ubuntu.mk
#userdata config
export RK_USERDATA_DIR=userdata_normal
并在userdata_normal目录下放入私有数据

执行./build.sh后,在rockdev下看到了生成的userdata.img

但烧录rockdev/pack下的生成固件后,userdata分区数据下没有看到 我放的私有数据
然后,通过AndroidTool_Release_v2.71单独升级userdata.img后,可以看到userdata分区数据是更新了,但是分区大小不对,没有根据内存大小自动设置。

对于userdata是最后一个分区的情况,但如何生成userdata.img?

2、通过 ff_export_rootfs 导出系统rootfs
   导出rootfs(生成的rootfs中包含了userdata分区的数据)后,通过./build.sh生成新的固件。
   升级后,查看私有数据确实放到了userdata分区。

   但root-ro分区空间大小不对,有几个GB的空间浪费。
   (由于在导出rootfs时,rootfs文件中 包含了userdata分区的数据。因此rootfs文件大小比实际的root-ro更大,最终打包固件时,分区表是根据rootfs文件大小分配rootfs分区的大小。)
================================================
   有谁能告诉一下,该如何解决这个问题?

895816513 发表于 2022-3-7 15:00:19

对你的以上方法进行回复:
1.你修改了userdata.img是不可行的
系统上写后,第一次上电会userdata进行格式化。

2.ff_export_rootfs 导出系统rootfs这个方法是可行的

2.1
可能你的SDK比较旧,后面有个补丁文件可以自动调整userdata分区大小

my_sdk/tools/linux/Linux_Pack_Firmware/rockdev$
mkupdate.sh -> rk3399-mkupdate.sh*

16d7b70- zouxf    2020-03-04 : firefly: add userdata partition, auto modify rootfs size

最终文件
http://git.t-firefly.com:8081/rk-linux/tools/blob/rk3399/firefly/linux/Linux_Pack_Firmware/rockdev/rk3399-mkupdate.sh


2.2
如果没有自动调整分区的补丁,手动修改分区表rockdev/parameter.txt
具体要改多少,可以参考这个
https://wiki.t-firefly.com/AIO-3399C/customize_android_firmware.html

3355 发表于 2022-3-7 16:02:52

895816513 发表于 2022-3-7 15:00
对你的以上方法进行回复:
1.你修改了userdata.img是不可行的
系统上写后,第一次上电会userdata进行格式 ...

你好,可能我没有讲清

我主要的问题是,root-ro的分区有空间浪费。如下:
--------------------------------------------------------------------------------
root@coshipG2000:~# df -h
Filesystem            SizeUsed      Avail Use% Mounted on
udev                     1.9G   0      1.9G   0% /dev
tmpfs                      385M748K384M1% /run
/dev/mmcblk1p7   10G   6.6G   3.0G    70% /root-ro
/dev/mmcblk1p8   19G   2.2G   17G   12% /userdata
overlayroot            19G      2.2G   17G    12% /
tmpfs                      1.9G   0      1.9G   0% /dev/shm
tmpfs                      5.0M    4.0K   5.0M1% /run/lock
tmpfs                      1.9G   0      1.9G   0% /sys/fs/cgroup
tmpfs                      385M   0      385M 0% /run/user/0
---------------------------------------------------------------------------------

root-ro是只读的。对于我来说,意味着,32个G的内存,我有3个G的浪费!!!

然后,我跟踪了一下原因,发现是 在执行ff_export_rootfs时,root-ro这个分区的空间大小,是根据导出的roofs大小生成的。
而,通过ff_export_rootfs导出的rootfs,包含了userdata的数据。最终烧下去后,root-ro中,就有了3个G的没有使用的空间。请帮忙看下,怎样解决我的问题,谢谢!

895816513 发表于 2022-3-7 17:36:18

刚刚链接我给错了

分别是:
https://gitlab.com/firefly-linux/tools/-/commit/16d7b70d6d1fae16b534aae27ecde6055a62e7e5

https://gitlab.com/firefly-linux/tools/-/blob/firefly/linux/Linux_Pack_Firmware/rockdev/rk356x-mkupdate.sh


你的意思是/dev/mmcblk1p7本来就多出了3G,然后导出的固件把这3G空的空间也包含进去了。

895816513 发表于 2022-3-7 17:39:34

3355 发表于 2022-3-7 16:02
你好,可能我没有讲清

我主要的问题是,root-ro的分区有空间浪费。如下:


e2fsck -p -f linuxroot.img
resize2fs-M linuxroot.img

导出固件后用这几个命令重新压缩大小

3355 发表于 2022-3-8 16:21:05

895816513 发表于 2022-3-7 17:39
e2fsck -p -f linuxroot.img
resize2fs-M linuxroot.img



好的,谢谢!

tiger3981 发表于 2022-4-22 16:24:42

895816513 发表于 2022-3-7 15:00
对你的以上方法进行回复:
1.你修改了userdata.img是不可行的
系统上写后,第一次上电会userdata进行格式 ...

您好,我想要删掉userdata分区,全部分配给/root,通过修改配置文件为rk3399的parameter-ubuntu-nouserdata.txt。编译通过了,烧录上能显示firefly的boot加载图片,然后就黑屏了。请问正确的给root扩容的方式是什么?

895816513 发表于 2022-5-26 18:08:41

SDK/rockdev/parameter.txt

这里有个链接文件,你可以手动修改分区表大小

月球村委会主任 发表于 2022-7-28 16:12:58

支持

额额呃呃额额 发表于 2024-10-11 18:13:23

895816513 发表于 2022-3-7 15:00
对你的以上方法进行回复:
1.你修改了userdata.img是不可行的
系统上写后,第一次上电会userdata进行格式 ...

请问,系统烧写后,第一次上电为什么会有格式化userdata的操作?
页: [1]
查看完整版本: 制作工厂烧录固件,定制userdata分区问题