RK3288 Android6 新增分区
背景
特定情况下需要新增分区,比如开辟一个分区专门用于保存系统日志,恢复出厂默认时不会被清理. 以新增slog分区为例,说明RK3288 Android6新增分区的方法。
代码结构
# package-file
FFTools/mkupdate/package-file
# 分区表
FFTools/parameter/rk3288-3.10-uboot-android.parameter.txt
# 开机自动挂载相关
device/rockchip/rk3288/
|-- fstab.rk30board.bootmode.emmc
|-- init.rc
`-- slog
`-- README.md
# 创建 slog.img
mkimage.sh
新增分区
修改分区表
FFTools/parameter/rk3288-3.10-uboot-android.parameter.txt
--- a/FFTools/parameter/rk3288-3.10-uboot-android.parameter.txt
+++ b/FFTools/parameter/rk3288-3.10-uboot-android.parameter.txt
@@ -10,4 +10,4 @@ PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x62008000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
-CMDLINE:console=ttyS0 androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyS0 root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00300000@0x00092000(system),0x00008000@0x00392000(metadata),0x00002000@0x0039A000(baseparamer),-@0x003BC000(userdata)
+CMDLINE:console=ttyS0 androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyS0 root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00300000@0x00092000(system),0x00008000@0x00392000(metadata),0x00002000@0x0039A000(baseparamer),0x00200000@0x003BC000(slog),-@0x005BC000(userdata)
从原来的userdata
分区分了1G出来,用于创建新的分区 slog.-@0x003BC000(userdata)
变为 0x00200000@0x003BC000(slog),-@0x005BC000(userdata)
。
@
前面0x00200000
代表分区大小, 单位为1个block,也就是512Bytes@
后面0x003BC000
代表分区在emmc
中的起始地址- 新增slog分区后,
userdata
起始地址需要更新为0x003BC000 + 0x00200000 = 0x005BC000
修改 package-file
FFTools/mkupdate/package-file
package-file
用于打包update.img
,新增分区后,也需要添加新的slog.img信息。
--- a/FFTools/mkupdate/package-file
+++ b/FFTools/mkupdate/package-file
@@ -12,6 +12,7 @@ kernel Image/kernel.img
boot Image/boot.img
recovery Image/recovery.img
system Image/system.img
+slog Image/slog.img
修改 fstab
device/rockchip/rk3288/fstab.rk30board.bootmode.emmc
fstab
是系统启动后用于挂载分区的配置表,为了自动挂载slog分区,需要修改这个文件。
--- a/fstab.rk30board.bootmode.emmc
+++ b/fstab.rk30board.bootmode.emmc
@@ -10,6 +10,7 @@
/dev/block/platform/ff0f0000.rksdmmc/by-name/metadata /metadata ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard wait,check
/dev/block/platform/ff0f0000.rksdmmc/by-name/userdata /data f2fs noatime,nodiratime,nosuid,nodev wait,check,encryptable=/metadata/key_file
/dev/block/platform/ff0f0000.rksdmmc/by-name/userdata /data ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard,errors=panic wait,check,encryptable=/metadata/key_file
+/dev/block/platform/ff0f0000.rksdmmc/by-name/slog /slog ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard wait,check
# /dev/block/platform/ff0f0000.rksdmmc/by-name/radical_update /radical_update ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard wait
/devices/ff0c0000.rksdmmc/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
新增一行 slog 配置。
/dev/block/platform/ff0f0000.rksdmmc/by-name/slog /slog ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard wait,check
- /dev/block/platform/ff0f0000.rksdmmc/by-name/slog: 指定要挂载的分区设备路径。
- /slog: 指定挂载点,即分区将被挂载到文件系统中的 /slog 目录。
- ext4: 文件系统类型,表明该分区使用 ext4 文件系统。
- noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard: 这是挂载选项,具体含义如下:
- noatime: 不更新文件和目录的访问时间。
- nodiratime: 不更新目录的访问时间。
- nosuid: 防止设置 setuid 位的执行文件的 suid 权限。
- nodev: 不允许在文件系统上执行设备文件。
- noauto_da_alloc: 禁用自动的数据区块分配。
- discard: 启用 TRIM/DISCARD支持,允许文件系统通知底层设备已删除的块,适用于 SSD,有助于提高性能。
- wait: 表明系统在挂载时会等待直到这个分区可用。
- check: 表示在挂载前会检查文件系统。
修改 init.rc
device/rockchip/rk3288/init.rc
--- a/init.rc
+++ b/init.rc
@@ -62,6 +62,7 @@ on init
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /backup
+ mkdir /slog
init.rc
中需要创建挂载点 /slog
。
新增 slog 目录
device/rockchip/rk3288/slog
为了生成 slog.img 镜像,需要有原始文件目录,当然也可以是个空目录。这里仅放了一个 README.md
# README
this is slog partition.
修改 mkimage.sh
mkimage.sh
--- a/mkimage.sh
+++ b/mkimage.sh
@@ -28,6 +28,7 @@ echo IMG_TARGET=$IMG_TARGET , ota = $TARGET
IMAGE_PATH=rockdev/Image-$TARGET_PRODUCT
UBOOT_PATH=u-boot
KERNEL_PATH=kernel
+SLOG_PATH=device/rockchip/rk3288/slog
PARAMETER=FFTools/parameter/rk3288-3.10-uboot-android.parameter.txt
rm -rf $IMAGE_PATH
@@ -155,6 +156,19 @@ then
echo "done."
fi
+if [ -d $SLOG_PATH ]
+then
+ echo -n "create slog.img..."
+ slog_size=10485760
+ MAKE_EXT4FS_ARGS=" -L slog -a slog $IMAGE_PATH/slog.img $SLOG_PATH"
+ make_ext4fs -l $slog_size $MAKE_EXT4FS_ARGS >/dev/null 2>&1 &&
+ tune2fs -c -1 -i 0 $IMAGE_PATH/slog.img >/dev/null 2>&1 &&
+ e2fsck -fyD $IMAGE_PATH/slog.img >/dev/null 2>&1 || true
+ echo "done."
+fi
+
if [ -f $KERNEL_PATH/resource.img ]
then
echo -n "create resource.img..."
这里主要是为了创建 slog.img.
到此,整个分区相关的配置都改好了,编译后完整固件后,在系统中就可以看到/slog
目录了,也可以看到分区默认挂载好了。
注意事项
- 重新烧录固件后,slog分区也会被清除
- 恢复出厂默认设置时,slog分区不会被清除
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 litreily的博客!