地平线J5生成镜像

配置

配置文件说明

在build/device/horizon/j5series/下有gpt.conf配置文件

1:veeprom:none:34s:37s:1
1:reserved:none:38s:1023s:1
1:binfo1:none:1024s:2047s:1
1:binfo2:none:2048s:3071s:1
1:binfo3:none:3072s:4095s:1
1:sbl/${UBOOT_SPL_NAME}:none:4096s:4351s:1
1:sblbak0/${UBOOT_SPL_NAME}:none:4352s:4607s:1
1:sblbak1/${UBOOT_SPL_NAME}:none:4608s:4863s:1
1:sblbak2/${UBOOT_SPL_NAME}:none:4864s:5119s:1
1:ddrc_a/ddrc.img.bin:none:5120s:5631s:1
1:ddrc_b/ddrc.img.bin:none:5632s:6143s:1
1:ddrp_a/ddrp.img.bin:none:6144s:8447s:1
1:ddrp_b/ddrp.img.bin:none:8448s:10751s:1
1:uboot_a/${UBOOT_IMAGE_NAME}:none:10752s:14847s:1
1:uboot_b/${UBOOT_IMAGE_NAME}:none:14848s:18943s:1
1:bl31_a/${BL31_IMAGE_NAME}:none:18944s:20991s:1
1:bl31_b/${BL31_IMAGE_NAME}:none:20992s:23039s:1
1:mcore_a:none:23040s:23295s:1
1:mcore_b:none:23296s:23551s:1
1:misc:none:23552s:23807s:1
1:ubootenv:none:23808s:23815s:1
1:HB_APDP:none:23816s:24063s:1
1:veeprombak:none:24064s:25087s:1
1:vbmeta_a/${VBMETA_IMAGE_NAME}:none:25088s:25343s:1
1:vbmeta_b/${VBMETA_IMAGE_NAME}:none:25344s:25599s:1
1:boot_a/${BOOT_PART_IMAGE_NAME}:none:25600s:74751s:1
1:boot_b/${BOOT_PART_IMAGE_NAME}:none:74752s:123903s:1
1:system_a:ext4:123904s:1172479s:0
1:system_b:ext4:1172480s:2221055s:0
1:app_a:ext4:2221056s:8512511s:0
1:app_b:ext4:8512512s:14803967s:0
1:app_param:ext4:14803968s:15213567s:0
1:ota:ext4:15213568s:27796479s:0
1:log:ext4:27796480s:36185087s:0
1:backhaul:ext4:36185088s:46670847s:0
1:userdata:ext4:46670848s:61350911s:0
1:map:ext4:61350912s:122224606s:0

配置文件说明:

分区使能:分区名:分区文件系统格式:起始分区位置:结束分区位置

分区使能:表示这一行是否需要建立真正的分区表,1表示需要建立分区,0不需要建立。

分区名:分区表的名称,也是作为建立好后拷贝进分区的img名字。

分区文件系统格式:可以支持下面格式(ubuntu14.04)如果为none,则表示不需要建立文件系统,当前为仅支持ext4。

分区起始地址:分区起始地址一定要是512字节的整数倍,s代表的是emmc 的一个section 的缩写即512B。

分区结束地址:分区结束地址一定要是512字节的整数倍,s代表的是emmc 的一个section 的缩写即512B。

分区结束地址 - 分区起始地址 = 分区大小

禁止出现小数和负数

注意:起始位置和结束分区位置之间的大小计算方式为,结束分区位置-起始位置+1s。例如userdata这一行,61350911s - 46670848s + 1s = 14680064s。

分区表

序号

分区名

大小

文件系统

用途

1

veeprom

2K

none

存储OTA标志

2

reserved

493K

none

分区对齐使用

3

binfo1

512K

none

地平线启动标志

4

binfo2

512K

none

地平线启动标志

5

binfo3

512K

none

地平线启动标志

6

sbl

128K

none

第二级bootloader

7

sblbak0

128K

none

第二级bootloader

8

sblbak1

128K

none

第二级bootloader

9

sblbak2

128K

none

第二级bootloader

10

ddrc_a

256K

none

ddr controller的配置代码

11

ddrc_b

256K

none

ddr controller的配置代码

12

ddrp_a

1152K

none

是ddr controller的参数信息

13

ddrp_b

1152K

none

是ddr controller的参数信息

14

uboot_a

2048K

none

uboot镜像

15

uboot_b

2048K

none

uboot镜像

16

bl31_a

1024K

none

Arm trusted environment firmware,

运行在EL3状态,处理security相关操作

17

bl31_b

1024K

none

Arm trusted environment firmware,

运行在EL3状态,处理security相关操作

18

mcore_a

128K

none

签名后的mcore的镜像

19

mcore_b

128K

none

签名后的mcore的镜像

20

misc

128K

none

存储AB分区标志

21

ubootenv

4K

none

存储uboot环境变量

22

HB_APDP

124K

none

内部调试使用

23

veeprombak

512K

none

存储IP和网关

24

vbmeta_a

128K

none

用于系统AVB启动校验的签名镜像

25

vbmeta_b

128K

none

用于系统AVB启动校验的签名镜像

26

boot_a

24M

none

kernel镜像(image+dtb)和rootfs

27

boot_b

24M

none

kernel镜像(image+dtb)和rootfs

28

system_a

512M

ext4

系统运行必要的库、命令等,rootfs

运行时被挂载到system目录,dm-verity

只读分区

29

system_b

512M

ext4

系统运行必要的库、 命令等,rootfs

运行时被挂载到system目录,dm-verity

只读分区

30

app_a

3072M

ext4

app分区镜像,rootfs运行时被挂载到app目录,只读分区

31

app_b

3072M

ext4

app分区镜像,rootfs运行时被挂载到app目录,只读分区

32

app_param

200M

ext4

存储app运行时的参数

33

ota

6144M

ext4

存储ota升级缓存包

34

log

4096M

ext4

存储日志文件

35

backhaul

5120M

ext4

数据回传功能分区,仅用于数据存放

36

userdata

7168M

ext4

存储用户数据

37

map

other

ext4

存储地图相关数据,根据实际具体需求分配

文件系统配置表设置

文件系统配置表存放路径:

build/device/horizon/common/emmc.fstab

根据 建立Build环境 中build系统时自定义 fstab 文件可以设置你需要的文件系统配置,系统在启动的时候,会调用 mount –at 命令,完成对/etc/fstab 文件的解析,从而挂载设置的文件系统。

文件系统目录权限

序号

目录

权限

用途

1

/system

只读

系统system镜像

2

/app

只读

应用程序的镜像

3

/map

读写

存放地图相关数据

4

/backhaul

读写

存放回传相关数据

5

/app_param

读写

存放app运行参数

6

/ota

读写

存放ota升级包

7

/log

读写

存放日志文件

8

/userdata

读写

存放用户数据等

根文件系统内容修改

增减rootfs或system源文件

根文件系统路径:prebuilts/root_hijack/hobot/,想要增减根文件系统文件,需要两步操作:

user.name@hz-server-1:~/work/pull/platform_sdk$ ls
prebuilts/root_hijack/hobot/

etc init.normal.rc init.rc init.recovery.rc lib sbin usr verity_key

1.在prebuilts/root_hijack/hobot/ 目录下增减相应的文件。

2.文件增加到rootfs,在build/device/horizon/j5/debug-rootfs.manifest中,增加-文件,在build/device/horizon/j5/debug-kernel-rootfs.manifest中,增加+文件。

文件增加到system,在build/device/horizon/j5/debug-rootfs.manifest中,不操作,在build/device/horizon/j5/debug-kernel-rootfs.manifest中,不操作。

示例:在rootfs中添加 /usr/bin/hdiffz 文件。首先确认在prebuilts/root_hijack/hobot/ 目录的usr/bin下已添加hdiffz 文件。在build/device/horizon/j5/debug-kernel-rootfs.manifest 中增加+/usr/bin/hdiffz,再在build/device/horizon/j5/debug-rootfs.manifest中增加-/usr/bin/hdiffz。最后重新编译。

Boardid与DTS映射关系

概述

board_id 是J5 dts中根节点下属性board_type 的值;board_type 属性顾名思义,它是为了区分不同J5板级差异的标记。当需要增加内核DTS与产品Boardid映射关系时,需要做后面小节的修改,以保证启动时能根据读取到的Boardid找到期望的DTB文件。

Boardid 的定义

程序中根据board_type决定使用哪一份dts 文件,各个dts 文件描述板级之间存在差异的J5 board。board_type 节点在J5 分为uboot 的部分与kernel 的部分。

uboot部分的board_type节点

文件:uboot/arch/arm/dts/hobot-j5.dtsi

board_type: board_type@adc1_5 {
        compatible = "hobot,adc-type";

        adc_dev = &adc_sensor_0, &adc_sensor_1;
        adc_channel = <1 5>;
        board_type_array =
                <51 140 51 140 J5_MATRIXP1A_BOARD_ID 0 0 1 0 1 1 1 1 0>,
                <51 140 151 240 J5_MATRIXP1B_BOARD_ID 0 0 1 0 2 2 2 1 0>,
                <51 140 251 340 J5_MATRIXP1C_BOARD_ID 0 0 1 0 3 3 3 1 0>,
                <51 140 351 440 J5_MATRIXP1D_BOARD_ID 0 0 1 0 4 4 4 2 0>,
                <51 140 451 540 J5_MATRIXDUOA_BOARD_ID 1 0 3 1 1 1 1 0 1>,
                <51 140 551 640 J5_MATRIXDUOB_BOARD_ID 1 0 3 1 2 2 2 1 1>,
                <51 140 651 740 J5_V2_MATRIXDUOA_BOARD_ID 1 2 3 2 1 7 1 0 1>,
                <51 140 751 840 J5_V2_MATRIXDUOB_BOARD_ID 1 2 3 2 2 8 2 1 1>,
                <151 240 51 140 J5_MATRIXP2A_BOARD_ID 1 0 2 1 1 1 1 1 1>,
                <151 240 151 240 J5_MATRIXP2B_BOARD_ID 1 0 2 1 2 2 2 1 1>,
                <151 240 251 340 J5_MATRIXP2C_BOARD_ID 1 0 2 1 3 3 3 1 1>,
                <151 240 351 440 J5_MATRIXP2D_BOARD_ID 1 0 2 1 4 4 4 2 1>,
                <151 240 451 540 J5_MATRIXSOLO_BOARD_ID 1 2 4 1 1 7 1 0 1>,
                <151 240 551 640 J5_V2_MATRIXSOLO_BOARD_ID 1 2 4 2 1 7 1 0 1>,
                <151 240 651 740 J5_V3_MATRIXSOLO_BOARD_ID 1 2 4 3 1 7 1 0 1>,
                <251 340 51 140 J5_V2_MATRIXP2A_BOARD_ID 1 0 2 2 1 1 1 1 1>,
                <251 340 151 240 J5_V2_MATRIXP2B_BOARD_ID 1 0 2 2 2 2 2 1 1>,
                <251 340 251 340 J5_V2_MATRIXP2C_BOARD_ID 1 0 2 2 3 3 3 1 1>,
                <251 340 351 440 J5_V2_MATRIXP2D_BOARD_ID 1 0 2 2 4 4 4 2 1>,
                <251 340 651 740 J5_V3_MATRIXDUOA_BOARD_ID 1 2 3 3 1 7 1 0 1>,
                <251 340 751 840 J5_V3_MATRIXDUOB_BOARD_ID 1 2 3 3 2 8 2 1 1>,
                <551 640 51 140 J5_V2_DVBMAXA_BOARD_ID 0 2 0 2 1 1 1 2 0>,
                <551 640 151 240 J5_V2_DVBMAXB_BOARD_ID 0 2 0 2 2 2 2 1 0>,
                <551 640 251 340 J5_V2_DVBMAXC_BOARD_ID 0 2 0 2 3 3 3 1 0>,
                <551 640 351 440 J5_V2_DVBMAXD_BOARD_ID 0 2 0 2 4 4 4 1 0>,
                <551 640 0 0xffffffff J5_V2_DVBMAX_BOARD_ID 0 2 0 2 0 0 0 0 0>,
                <651 740 251 340 J5_EVM2_EP_BOARD_ID 0 0 0 0 0 6 6 1 3>,
                <651 740 451 540 J5_EVM2_RC_BOARD_ID 0 0 0 0 0 5 5 2 3>,
                <651 740 651 740 J5_EVM_EP_BOARD_ID 0 0 0 0 0 6 6 1 3>,
                <651 740 751 900 J5_EVM_RC_BOARD_ID 0 0 0 0 0 5 5 2 3>,
                <651 740 0 0xffffffff J5_EVM_BOARD_ID 0 0 0 0 0 0 0 0 3>,
                <751 840 51 140 J5_DVBMAXA_BOARD_ID 0 2 0 1 1 1 1 2 0>,
                <751 840 151 240 J5_DVBMAXB_BOARD_ID 0 2 0 1 2 2 2 0 0>,
                <751 840 251 340 J5_DVBMAXC_BOARD_ID 0 2 0 1 3 3 3 0 0>,
                <751 840 351 440 J5_DVBMAXD_BOARD_ID 0 2 0 1 4 4 4 0 0>,
                <751 840 0 0xffffffff J5_DVBMAX_BOARD_ID 0 2 0 1 0 0 0 0 0>,
                <0 0xffffffff 51 140 J5_DVBA_BOARD_ID 0 2 0 0 1 1 1 2 0>,
                <0 0xffffffff 151 240 J5_DVBB_BOARD_ID 0 2 0 0 2 2 2 1 0>,
                <0 0xffffffff 251 340 J5_DVBC_BOARD_ID 0 2 0 0 3 3 3 1 0>,
                <0 0xffffffff 351 440 J5_DVBD_BOARD_ID 0 2 0 0 4 4 4 1 0>,
                <0 0xffffffff 651 740 J5_CVB_EP_BOARD_ID 0 0 0 0 0 0 0 1 4>,
                <0 0xffffffff 751 900 J5_CVB_RC_BOARD_ID 0 0 0 0 0 0 0 2 4>,
                <0 0xffffffff 0 0xffffffff J5_BOARD_ID 0 2 0 0 0 0 0 0 0>;
        hardware_array = "j5dvb", "matrix5", "pac";
        ethact_array = "default", "ethernet@59110000", "ethernet@59120000";
        sub_board_name = "default", "p1", "p2", "duo", "solo";
        sub_board_version = "default", "pre", "v2", "v3";
        sub_board_j5 = "default", "j5a", "j5b", "j5c", "j5d";
        net_eth0_ipaddr = "192.168.2.10", "192.168.2.11", "192.168.2.12",
                          "192.168.2.13", "192.168.2.14", "192.168.2.15",
                          "192.168.2.16", "192.168.6.11", "192.168.6.12";
        net_eth1_ipaddr = "192.168.1.10", "192.168.1.11", "192.168.1.12",
                          "192.168.1.13", "192.168.1.14", "192.168.1.15",
                          "192.168.1.16";
        pcie_mode = "default", "ep", "rc";
        board_name_array = "j5dvb", "matrix5", "pac", "j5evm", "j5cvb";
};

adc_dev = &adc_sensor_0, &adc_sensor_1; adc_channel = <1 5>;

这两个属性的意思是:使用 adc_sensor_0 的通道1 与 adc_sensore_1 的通道5 获取电压值,单位mv。

board_type_array 数组的意思如下:

<51 140 51 140 0x601>

如果J5 从board的adc_senesor_0 读取到的电压值在 51mv ~ 140mv ,adc_sensor_1 读取到的电压值在 51mv ~ 140mv ,则赋值该板子的board id = 0x601;

<0 0xffffffff 51 140 0x501> 数组的意思是:利用线性数组的特性,依次match 匹配。

如果J5 从board的adc_senesor_0 读取到的电压值不在 51mv ~ 140mv ,adc_sensor_1 读取到的电压值在 51mv ~ 140mv ,则赋值该板子的board id = 0x501。

2.kernel部分的board_type 节点

文件:kernel/arch/arm64/boot/dts/hobot/hobot-j5-dvb.dts

修改流程

如果想自定义添加board id,根据board id 的定义修改以下两个地方:

  1. 需要根据新的定义,同步修改uboot下uboot/arch/arm/dts/hobot-j5.dtsi数组board_type_array;

  2. kernel dts中的同步修改board id值。

增加dtb文件流程

增加dts文件及编译选项

涉及文件:

在下述路径增加对应dts文件,例如,增加hobot-j5-sample.dts:

kernel/arch/arm64/boot/dts/hobot/hobot-j5-sample.dts

添加完dts文件后,在下述文件中增加所需编译选项:

kernel/arch/arm64/boot/dts/hobot/Makefile

以hobot-j5-sample.dts为例,增加:

dtb-$(CONFIG_HOBOT_J5) += hobot-j5-sample.dtb

如何使用Build

J5-dvb板通用镜像(包含emmc和nor-flash镜像)

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

./build.sh -e all

结果如下:

J5-dvb板nor-flash镜像

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

./build.sh -e all –b j5dvb_nor

J5-dvb板hyper-flash镜像

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

./build.sh -e all –b j5dvb_hyper

J5-dvb板编译客户自定义app

需要客户在源码根目录下创建一个目录,存放已经编译好的程序,比如vendor目录,编译打包如下:

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

./build.sh -e all –a vendor

RT和非RT版本编译

platform_sdk支持rt和非rt编译,开关是ENABLE_RT_PATCH环境变量,设置为true表示开RT;设置为false表示关闭RT,默认RT打开(可以通过ENABLE_RT_PATCH环境变量的值进行确认),关RT编译如下:

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

export ENABLE_RT_PATCH=false

./build.sh -e all –a vendor

编译时添加version

编译时,为了方便追述板子上的代码,可以指定version信息,如下编译:

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

./build.sh -e all –a vendor -v xx_20220815

可以在板子上执行,如下命令进行查看:

root@j5dvb:/# cat /etc/version

xxx_20220815 debug

单独模块编译

模块单独编译产生的是未签名的镜像,还需要再进行镜像签名,才能烧录使用,否则启动会失败。

首先建立编译环境:

source build/envsetup.sh

lunch 1 # horizon_j5series-debug_gcc9.64

Uboot

cd uboot/

./build.sh -o emmc/nor/hyper

Kernel

cd kernel/

./build.sh all

MCore

进入 repo根目录/mcore,执行build.sh,即可得到Mcore.bin与Mcore.elf。

编译成功会提示如下信息

image6

VDSP

获取vdsp firmware代码后

cd vdsp

source env.sh

make

cd sample

make

镜像签名与加密

前提:之前所有镜像都已经编译完成,还需要经过镜像签名后才能生成可用的镜像文件。

直接执行build/目录下的Makefile,即可完成下面所有的镜像文件加密签名。

cd build/

make

Build输出

目前由build编译系统编译生成的系统镜像如下表所示:

镜像名字

对应分区

用途说明

镜像生成位置

veeprom

存储OTA标志

gpt_main-secure.img

binfo1

binfo2

binfo3

地平线启动标志

./build.sh –e all

命令才会生成

out/target/product/packages

binfo-nor-secure.img

binfo1

binfo2

binfo3

地平线启动标志

./build.sh –e all –b j5dvb_nor

命令才会生成

out/target/product/packages

binfo-hyper-secure.img

binfo1

binfo2

binfo3

地平线启动标志

./build.sh –e all –b j5dvb_hyper

命令才会生成

out/target/product/packages

spl.img0.bin

sbl

sblbak0

sblbak1

sblbak2

第二级bootloader

out/target/product/packages

ddrc.img.bin

ddrc_a

ddrc_b

ddrc.img.bin是ddr

controller的配置代码。

out/target/product/packages

ddrp.img.bin

ddrp_a

ddrp_b

是ddr controller的参数信息

uboot.img.bin

uboot_a

uboot_b

运行在EL1状态的第3级bootloader,

下载boot.img或recovery.img到

DDR,启动kernel和ramdisk。

out/target/product/packages

bl31.img.bin

bl31_a

bl31_b

Arm trust environment firmware,

运行在EL3状态,初始化arm,gic和sysc

ounter,处理security相关操作,管理

power和clock等功能。

out/target/product/packages

mcore.img.bin

mcore_a

mcore_b

签名后的mcore的镜像

out/target/product/packages

misc

存储AB分区标志

ubootenv

存储uboot环境变量

HB_APDP

内部调试使用

veeprombak

存储IP和网关

vbmeta.img

vbmeta_a

vbmeta_b

用于系统AVB启动校验的签名镜像

out/target/product/packages

boot.img

boot_a

boot_b

用于系统正常模式下的kernel镜像(image

+dtb)和ramdisk(最小rootfs)

out/target/product/packages

bpu_image.bin

bpu_a

bpu_b

BPU模型文件

out/target/product/packages

system.img

system_a

system_b

系统rootfs镜像,在boot.img中

的ramdisk运行时被mount。

out/target/product/packages

app.img

app_a

app_b

app分区镜像,在系统启动

后会挂载到app分区中

out/target/product/packages

userdata

存储用户数据

log

存放日志文件

ota

存放ota升级包

map

存放地图相关数据

app_param

存放app运行参数

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏马潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值