首页 > 其他分享 >RK3588 Android12 编译打包私有ext4格式vendor.img并挂载到新增vendor_private分区

RK3588 Android12 编译打包私有ext4格式vendor.img并挂载到新增vendor_private分区

时间:2023-05-04 16:23:02浏览次数:54  
标签:ext4 vendor img dev private root block

一、制作ext4格式的vendor.img

使用simg2img工具直接将现有的vendor.img转换成ext4格式的vendor.disk即可

 ./out/host/linux-x86/bin/simg2img   out/target/product/ribeye/vendor.img    vendor.disk

然后就可以直接挂载到新增分区对应的目录: mount vendor.disk /vendor_private

 

另外也可以手动创建一个空的磁盘文件用于挂载:

(1).创建一个800M大小的虚拟磁盘
dd if=/dev/zero of=vendor.disk bs=1024 count=819200

(2).loop虚拟磁盘vendor.disk
busybox losetup /dev/block/loop7 vendor.disk

(3).对虚拟磁盘进行格式化
busybox mkfs.ext4 /dev/block/loop7

(4).挂载虚拟磁盘到/vendor_private文件夹
mount -o loop -t ext4 /dev/block/loop7 /vendor_private

 

二、新增分区vendor_private并挂载

(1)在根目录下创建vendor_private目录

diff --git a/rootdir/Android.mk b/rootdir/Android.mk
index 99d8f9a83..c9b302e27 100644
--- a/rootdir/Android.mk
+++ b/rootdir/Android.mk
@@ -128,6 +128,10 @@ LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/overlay $(TARGET_ROOT_OUT)/odm/ov
 LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/priv-app $(TARGET_ROOT_OUT)/odm/priv-app
 LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/usr $(TARGET_ROOT_OUT)/odm/usr
+LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor_private

 # For /vendor_dlkm partition.
 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor_dlkm

(2)给vendor_private添加权限

diff --git a/sepolicy/private/file_contexts b/sepolicy/private/file_contexts
index 4df1488..7e02f88 100644
--- a/sepolicy/private/file_contexts
+++ b/sepolicy/private/file_contexts
@@ -3,3 +3,9 @@

 # All Rockchip configs
 /data/misc/cfg_rockchip(/.*)?                   u:object_r:rockchip_config_data_file:s0
+/vendor_private(/.*)?                               u:object_r:cache_file:s0

(3)在fstab下添加新分区,挂载为ext4文件系统

在源码配置好编译环境之后,通过该指令找到当前工程使用的stab的模板文件:get_build_var PRODUCT_FSTAB_TEMPLATE

例如:device/rockchip/common/scripts/fstab_tools/fstab.in

+/dev/block/by-name/vendor_private  /vendor_private    ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard    wait,check

(4)在parameter里面添加vendor_private分区

diff --git a/device/rockchip/rk3588/ribeye/BoardConfig.mk b/device/rockchip/rk3588/ribeye/BoardConfig.mk
index 61980dc2..5dc04219 100755
--- a/device/rockchip/rk3588/ribeye/BoardConfig.mk
+++ b/device/rockchip/rk3588/ribeye/BoardConfig.mk
@@ -81,3 +81,8 @@ ifeq ($(BUILD_WITH_KERNEL_MEMORY_DEBUG), true)
         PRODUCT_KERNEL_CONFIG += dten_memdbg.config
     endif
 endif

+BOARD_WITH_PRIVATE_PARTITIONS := vendor_private:800M

如果要添加多个分区则用逗号分隔:BOARD_WITH_PRIVATE_PARTITIONS := vendor_private:800M,data_private:1024M

(5)在RebuildParameter.mk中添加BOARD_WITH_PRIVATE_PARTITIONS 

diff --git a/build/rockchip/RebuildParameter.mk b/build/rockchip/RebuildParameter.mk
index 4e120e0..c6bd46d 100644
--- a/build/rockchip/RebuildParameter.mk
+++ b/build/rockchip/RebuildParameter.mk
@@ -42,6 +42,11 @@ ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE
 partition_list := $(partition_list),data:$(BOARD_USERDATAIMAGE_PARTITION_SIZE)
 endif

+ifneq ($(strip $(BOARD_WITH_PRIVATE_PARTITIONS )), )
+partition_list := $(partition_list),$(BOARD_WITH_PRIVATE_PARTITIONS)
+endif

通过以上步骤编译的固件就是新增了一个vendor_private分区,并且挂载到了创建的vendor_private目录,查看目录内容就是分区上的内容。

查看有哪些分区:ls -l /dev/block/by-name/

total 0
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 backup -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 baseparameter -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 boot -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 cache -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 dtbo -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 metadata -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 misc -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root 18 2023-05-04 03:26 mmcblk0 -> /dev/block/mmcblk0
lrwxrwxrwx 1 root root 23 2023-05-04 03:26 mmcblk0boot0 -> /dev/block/mmcblk0boot0
lrwxrwxrwx 1 root root 23 2023-05-04 03:26 mmcblk0boot1 -> /dev/block/mmcblk0boot1
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 recovery -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 security -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 super -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 trust -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 uboot -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 userdata -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root 20 2023-05-04 03:26 vbmeta -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root 21 2023-05-04 03:26 vendor_private -> /dev/block/mmcblk0p16

并可通过 cat /proc/partitions 查看当前所有分区的大小。

 

三、编译阶段打包文件系统到新增分区

分区需要有文件系统才能进行挂载,所以在新建分区后需要烧写一个带ext4文件系统的img到新建分区中,可以通过芯片厂商的工具进行手动分区烧录。

以下是修改源码的编译脚本,实现直接打包文件系统到主固件的对应分区:

(1)修改device/rockchip/common/mkimage.sh (注:需要更新到源码根目录下),将源码vendor/private/vendor_private.img 拷贝到 Image/ 目录下

diff --git a/mkimage.sh b/mkimage.sh
index 69b733e..417744e 100755
--- a/mkimage.sh
+++ b/mkimage.sh
@@ -254,4 +254,12 @@ if [ $IS_EBOOK == "true" ]; then
     fi
 fi

+cp vendor/private/vendor_private.img $IMAGE_PATH/vendor_private.img

(2)修改打包配置文件(包含需要打包的img路径):RKTools/linux/Linux_Pack_Firmware/rockdev/package-file

diff --git a/linux/Linux_Pack_Firmware/rockdev/package-file b/linux/Linux_Pack_Firmware/rockdev/package-file
index 98ffc9f..e1527fc 100755
--- a/linux/Linux_Pack_Firmware/rockdev/package-file
+++ b/linux/Linux_Pack_Firmware/rockdev/package-file
@@ -13,6 +13,9 @@ vbmeta      Image/vbmeta.img
 recovery    Image/recovery.img
 baseparameter    Image/baseparameter.img
 super      Image/super.img

+vendor_private  Image/vendor_private.img

 

再编译生成的update.img就会发现大一些,说明已经编译打包Image/vendor_private.img 到对应的 vendor_private分区。

注:RKTools/linux/Linux_Pack_Firmware/rockdev/gen-package-file.sh 打包脚本会过滤.img的后缀,所以新增的私有img无论何种格式直接.img作为后置命名或者就得改脚本了。

 

标签:ext4,vendor,img,dev,private,root,block
From: https://www.cnblogs.com/blogs-of-lxl/p/17371611.html

相关文章

  • imgui是什么?
    如果从事过C++Windows客户端开发,大家对MFC、Qt、DuiLib等各种DirectUI应该有了解,本篇给大家介绍一个超级轻量级的C++开源跨平台图形界面框架ImGUI.ImGUI主要用于游戏行业,所有的控件都需要手绘实现,当然性能也是满满的,毕竟是直接用dx/opengl来实现。参考:https://blog.csdn.net/ya......
  • Dear ImGui
    DearImGui(全称为DearImgui:Bloat-freeImmediateModeGraphicalUserinterface)是一个开源的基于C++的图形用户界面库,它专门用于创建快速、轻量级的用户界面。与传统的基于控件树的GUI框架不同,DearImGui采用了立即模式(immediatemode)的设计理念,意味着每一帧都需要重新渲染......
  • blockimgdiff中方法分析01
    https://blog.csdn.net/Android_2016/article/details/98947824 关于blockimgdiff文件,本篇文档将详细分析初步生成transfer对象和生成diff的字典,并对几个重要方法进行解析.一、传入blockimgdiff的参数分析二、blockimgdiff中方法分析 一、传入blockimgdiff的参数分析......
  • Vue插件图片预览hevue-img-preview
    安装#安装npminstallhevue-img-preview--save#main.js引入importhevueImgPreviewfrom'hevue-img-preview'Vue.use(hevueImgPreview)#使用#//给任意对象添加任意事件,例如<img:src="imgurl"@click="previewImg(imgurl)">#//在事件里调用方法进行预......
  • 我要提取text4文本中的邮箱号 正则应该怎么写?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【膨胀西瓜汁】问了一个Python正则表达式的问题,这里拿出来给大家分享下。代码如下:二、实现过程这里【甯同学】给了一个思路,如下图所示:直接使用字符串+列表推导式搞定了,太强了!不过粉丝正好在学习正则表达式,所以还是希望......
  • # yyds干货盘点 # 我要提取text4文本中的邮箱号 正则应该怎么写?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【膨胀西瓜汁】问了一个Python正则表达式的问题,这里拿出来给大家分享下。代码如下:二、实现过程这里【甯同学】给了一个思路,如下图所示:直接使用字符串+列表推导式搞定了,太强了!不过粉丝正好在学习正则表达式,所以还是希望能够用正则......
  • JAVA 基础(学习img)
    Date:2023-04-2418:57:14尚硅谷Java零基础全套视频教程PS:只记重要的,自己不会的P1课程简介P2课程目录P3JAVA学习路线对我重要的step14IDEA安装使用P4谈谈JAVA吹水P5学习路线2023最新Java学习路线学习路线P6计算机硬件P7常见DOS命令P8不同编程语......
  • make_ext4fs error: make_file: failed to allocate inode
    make_ext4fserror:make_file:failedtoallocateinodeerror:do_inode_allocate_extents:Failedtoallocate1146blocksmakemenuconfigTargetImages--->[*]ext4--->(60000)Maximumnumberofinodesinrootfilesystem无脑6000改为60000同样的还有改sys......
  • python调用imgkit将html转图片pdf问题实例wkhtmltox
    wkhtmltox的下载地址:https://wkhtmltopdf.org/downloads.html或者:https://github.com/wkhtmltopdf/wkhtmltopdf0.12.6版本按网络上的教程会出现一个错误:IOError:wkhtmltopdfexitedwithnon-zerocode1.error:[blank]解决方法参见:https://stackoverflow.com/questions/......
  • Centos7 开机时遇到initramfs-xxx.img not found错误导致虚拟机无法开启问题处理
    1、背景一台运行在Esxi上面的VM重启后报initramfs-xxx.imgnotfound错误。按任意键后出现以下错误。之前在运维Centos7的时候解决过Kernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(0.0)错误,以为按照之前的解决方案,重启服务器,按Esc进入选择内......