rk3566-11.0新增device分区

1.增加块设备

2.修改根目录节点权限

3.开机启动自动挂载

增加块设备

1.修改parameter.txt文件,新增块设备大小及命名

device/rockchip/rk356x/rk3566_r/parameter.txt
FIRMWARE_VER: 11.0
MACHINE_MODEL: rk3566_r
MACHINE_ID: 007
MANUFACTURER: rockchip
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: rk3566_r
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00002000@0x0000a000(dtbo),0x00000800@0x0000c000(vbmeta),0x00014000@0x0000c800(boot),0x00030000@0x00020800(recovery),0x000c0000@0x00050800(backup),0x000c0000@0x00110800(cache),0x00008000@0x001d0800(metadata),0x00000800@0x001d8800(baseparameter),0x00614000@0x001d9000(super),0x00614000@0x007ed000(device),-@0x00e12000(userdata:grow)
//红色部分代表新增的块设备
@符号前是分区的大小
@符号后是分区的起始地址
括号中是分区的名字
单位都是 sector(512Bytes)
比如 uboot 起始地址为 0x2000 sectors (4MB)的位置,大小为 0x2000 sectors(4M)
另外 flash 最大的 block 是 4M(0x2000 sectors),所以每个分区需要 4MB 对齐,即每个分区必须为 4MB 的整数倍。
,0x00038000@0x00038000(backup)
backup 分区前的分区为固件区 uboot、trust、misc、resource、kernel、boot、recovery 。
后续升级时不能修改分区大小
backup 分区后的分区 cache、system、metadata、baseparamer、userdata
是可以读写的,可以调整分区大小。但是修改分区大小后需要进入 recovery 系统格式化 cache

2.修改recovery

    修改recovery.fstab,使得recovery阶段处理新增分区
    device/rockchip/rk356x/recovery.fstab
diff --git a/rk3566_r/recovery.fstab b/rk3566_r/recovery.fstab
old mode 100644
new mode 100755
index 0856791..28c47f7
--- a/rk3566_r/recovery.fstab
+++ b/rk3566_r/recovery.fstab
@@ -8,6 +8,7 @@
/dev/block/by-name/product               /product             ext4             defaults                  defaults
/dev/block/by-name/system_ext            /system_ext          ext4             defaults                  defaults
/dev/block/by-name/cache                 /cache               ext4             defaults                  defaults
+/dev/block/by-name/device                /device              ext4             defaults                  defaults
/dev/block/by-name/metadata              /metadata            ext4             defaults                  defaults
/dev/block/by-name/userdata              /data                f2fs             defaults                  defaults
/dev/block/by-name/cust                  /cust                ext4             defaults                  defaults
    修改recovery.cpp,使得recovery阶段格式化新增分区
    bootable/recovery/recovery.cpp
diff --git a/install/include/install/wipe_data.h b/install/include/install/wipe_data.h
old mode 100644
new mode 100755
index c177f59..15cd951
--- a/install/include/install/wipe_data.h
+++ b/install/include/install/wipe_data.h
@@ -30,5 +30,6 @@ bool WipeCache(RecoveryUI* ui, const std::function<bool()>& confirm);
bool WipeData(Device* device, bool convert_fbe);


void SureMetadataMount();
+void SureDeviceMount();
void WipeFrp();
int ResizeData(Device* device);
diff --git a/install/wipe_data.cpp b/install/wipe_data.cpp
old mode 100644
new mode 100755
index a16e62c..bbc62dc
--- a/install/wipe_data.cpp
+++ b/install/wipe_data.cpp
@@ -36,6 +36,7 @@
constexpr const char* CACHE_ROOT = "/cache";
constexpr const char* DATA_ROOT = "/data";
constexpr const char* METADATA_ROOT = "/metadata";
+constexpr const char* DEVICE_ROOT = "/device";


/**
  * reset hdmi after restore factory.
@@ -164,6 +165,15 @@ bool WipeData(Device* device, bool convert_fbe) {
   return success;
}


+void SureDeviceMount() {
+  if (ensure_path_mounted(DEVICE_ROOT)) {
+    printf("mount device fail,so formate...\n");
+    reset_tmplog_offset();
+    format_volume(DEVICE_ROOT);
+    ensure_path_mounted(DEVICE_ROOT);
+  }
+}
+
void SureMetadataMount() {
   if (ensure_path_mounted(METADATA_ROOT)) {
     printf("mount metadata fail,so formate...\n");
diff --git a/recovery.cpp b/recovery.cpp
old mode 100644
new mode 100755
index eda573b..4f309a1
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -1170,6 +1170,8 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
   device->StartRecovery();


   SureMetadataMount();
+
+  SureDeviceMount();


   printf("Command:");
   for (const auto& arg : args) {
   .....

修改根目录节点权限

1.修改BoardConfig.mk,新增TARGET_FS_CONFIG_GEN  += device/rockchip/common/config.fs

device/rockchip/common/BoardConfig.mk
diff --git a/BoardConfig.mk b/BoardConfig.mk
index d642ffd..beb78c9 100755
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -132,6 +132,9 @@ BOARD_ODMIMAGE_FILE_SYSTEM_TYPE ?= ext4
TARGET_COPY_OUT_VENDOR := vendor
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE ?= ext4


+#test for fs_config
+TARGET_FS_CONFIG_GEN  += device/rockchip/common/config.fs
+
# default.prop & build.prop split
BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED ?= true

2.新增config.fs,指明根目录/device的权限状态

# Copyright (C) 2018 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


# This file is used to define the properties of the filesystem
# images generated by build tools (mkbootfs and mkyaffs2image) and
# by the device side of adb.


[AID_VENDOR_NEW_SERVICE]
value: 2900


[AID_VENDOR_NEW_SERVICE_TWO]
value:2902


[vendor/bin/service1]
mode: 0755
user: AID_SYSTEM
group: AID_VENDOR_NEW_SERVICE
caps: CHOWN DAC_OVERRIDE


[device/]
mode: 0777
user: AID_SYSTEM
group: AID_SYSTEM
caps: 0


[device/f7s/]
mode: 0777
user: AID_SYSTEM
group: AID_SYSTEM
caps: 0

开机启动自动挂载

修改init.rc和fstab.in,在init阶段创建/device目录并模拟/cache目录的挂载参数

device/rockchip/common/scripts/fstab_tools/fstab.in
device/rockchip/common/recovery/etc/init.rc
diff --git a/recovery/etc/init.rc b/recovery/etc/init.rc
old mode 100644
new mode 100755
index 2ed0ea6..7fb4d09
--- a/recovery/etc/init.rc
+++ b/recovery/etc/init.rc
@@ -32,6 +32,7 @@ on init
     mkdir /data
     mkdir /cache
     mkdir /sideload
+       mkdir /device
     mount tmpfs tmpfs /tmp


     chown root shell /tmp
diff --git a/scripts/fstab_tools/fstab.in b/scripts/fstab_tools/fstab.in
index 10c3d2e..9a1d1e0 100755
--- a/scripts/fstab_tools/fstab.in
+++ b/scripts/fstab_tools/fstab.in
@@ -10,6 +10,7 @@ ${_block_prefix}system_ext /system_ext  ext4 ro,barrier=1 ${_flags},first_stage_
/dev/block/by-name/metadata /metadata ext4 nodev,noatime,nosuid,discard,sync wait,formattable,first_stage_mount,check
/dev/block/by-name/misc         /misc               emmc      defaults     defaults
/dev/block/by-name/cache          /cache              ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check
+/dev/block/by-name/device         /device             ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check


/devices/platform/*usb*   auto vfat defaults      voldmanaged=usb:auto

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Rockchip RK3566是一款由Rockchip推出的高性能应用处理器,其集成了四核ARM Cortex-A55 CPU和ARM Mali-G52 GPU。在移植U-Boot 2023.04时,我们需要考虑以下几个方面的工作: 1. 了解RK3566芯片的硬件架构和技术规格,包括处理器核心、内存控制器、外设接口等。这将有助于理解U-Boot如何与硬件交互,并进行相应的配置。 2. 下载并准备U-Boot 2023.04的源代码。在Rockchip官方网站或开源社区中可以找到最新的U-Boot源代码。将其下载并解压到开发机上。 3. 设置交叉编译环境。因为U-Boot是一个跨平台的项目,所以需要配置适合RK3566的交叉编译器,确保能够正确编译U-Boot源代码。 4. 配置U-Boot。根据RK3566的硬件架构和技术规格,需要进行相应的配置,包括处理器、内存、外设等设置。这些设置在U-Boot的配置文件中进行,可以根据需求进行修改。 5. 编译U-Boot。在配置好U-Boot后,使用交叉编译器编译U-Boot源代码。编译完成后,将生成的U-Boot二进制文件烧录到RK3566的启动设备上,如eMMC或SD卡。 6. 测试U-Boot。将准备好的启动设备插入RK3566开发板中,根据开发板的启动方式,进入U-Boot命令行界面。在命令行界面中可以进行各种操作和调试,如加载内核、启动操作系统等。 7. 调试和优化。在移植和测试U-Boot过程中,可能会出现一些问题和不稳定的情况。需要通过调试和优化来解决这些问题,确保U-Boot的正常运行和稳定性。 总之,移植U-Boot 2023.04到Rockchip RK3566需要了解芯片的硬件架构和技术规格,配置和编译U-Boot源代码,进行测试和调试。这样可以确保U-Boot能够与RK3566正常交互,并为后续的操作系统加载和启动提供基础支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值