@@ -27,138 +27,149 @@ AxVisor 及 EVM3588 的 SDK 仅支持在 Linux 系统进中进行开发。本文
2727
2828#### 获取 SDK
2929
30- 从英码嵌入式官方的百度网盘中下载提供的 SDK ` evm3588_linux_sdk-rkr3_v1.0.3-ab_v98.tar.gz ` 。下载的 SDK 实际上是一个仓库的源码的压缩包,直接使用 ` tar xvf evm3588_linux_sdk-rkr3_v1.0.3-ab_v98.tar.gz ` 解压即可。
30+ 从英码嵌入式官方的百度网盘中下载提供的 SDK ` evm3588_linux_sdk-rkr3_v1.0.3-ab_v98.tar.gz ` 。下载的 SDK 实际上是一个仓库的源码的压缩包,直接使用 ` tar xvf evm3588_linux_sdk-rkr3_v1.0.3-ab_v98.tar.gz ` 解压即可,其中的 ` build.sh ` 就是构建入口 。
3131
3232![ sdk_pkg] ( ./imgs_evm3588/sdk_pkg.png )
3333
34- #### 构建过程
34+ #### 移植适配
3535
36- 在初次构建( ` ./build.sh xxx ` )时会强制选择开发板板型号,选择之后会创建符号链接 ` device/rockchip/.BoardConfig.mk ` 指向 ` device/rockchip/rkxxx ` 目录下的配置文件,后续构建时就会默认使用此配置文件(可以通过 ` ./build.sh lunch ` 再次选择)。
36+ 由于 EVM3588 的 SDK 不支持使用 Python3 来构建,如果当前构建环境系统中 Python 版本是 Python3 版本,则需要做如下修改:
3737
38- ![ sdk_build ] ( ./imgs_evm3588/sdk_build.png )
38+ 1 . 修改 U-Boot 源码中的 ` u-boot/make.sh ` 文件,其中的如下位置来取消对于 Python2 的检测即可:
3939
40- 官方 SDK 除了支持单独编译 U-Boot、Linux kernel 等组件之外,还支持编译 debian 系统、Buildroot 系统以及 Ubuntu 系统三种 rootfs,默认编译 Buildroot 系统。
40+ 
4141
42- 1 . 首先 ` sudo apt install git ssh make gcc libssl-dev liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev libgucharmap-2-90-dev bzip2 expat cpp-aarch64-linux-gnu libgmp-dev libmpc-dev bc python-is-python3 ` 安装依赖工具包。
43- > 如果使用 Python2 环境,则不要安装 `python-is-python3` 这个包
42+ 2 . 修改 U-Boot 源码中的 ` u-boot/arch/arm/mach-rockchip/decode_bl31.py ` 文件,直接将开头的 ` #!/usr/bin/env python2 ` 改为 ` #!/usr/bin/env python3 ` 即可
4443
45- 2 . 执行 ` ./build.sh ` 然后选择 ` BoardConfig-evm3588.mk ` 对应的编号 3 就可以启动构建,默认构建所有镜像。但是,由于 EVM3588 的 SDK 不支持使用 Python3 来构建,如果当前构建环境系统中 Python 版本是 Python3 版本,则需要修改:
46- 1. 修改 U-Boot 源码中的 `u-boot/make.sh` 文件,其中的如下位置来取消对于 Python2 的检测即可:
44+ > 实际上,U-Boot 源码中还有大量基于 Python2 的脚本文件,在默认的构建中没有用的,因此这里不再继续修改
4745
48- 
46+ 3 . 修改 Kernel 源码中的 ` kernel/scripts/mkmultidtb.py ` ,直接改为如下内容:
47+ ```python
48+ #!/usr/bin/env python3
49+ # SPDX-License-Identifier: (GPL-2.0+ OR MIT)
50+ # Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
51+ #
4952
50- 2. 修改 U-Boot 源码中的 `u-boot/arch/arm/mach-rockchip/decode_bl31.py` 文件,直接将开头的 `#!/usr/bin/env python2` 改为 `#!/usr/bin/env python3` 即可
5153
52- > 实际上,U-Boot 源码中还有大量基于 Python2 的脚本文件,在默认的构建中没有用的,因此这里不再继续修改
54+ """
55+ Multiple dtb package tool
5356
54- 3. 修改 Kernel 源码中的 `kernel/scripts/mkmultidtb.py`,直接改为如下内容:
55- ```python
56- #!/usr/bin/env python3
57- # SPDX-License-Identifier: (GPL-2.0+ OR MIT)
58- # Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
59- #
57+ Usage: scripts/mkmultidtb.py board
58+ The board is what you defined in DTBS dictionary like DTBS['board'],
59+ Such as: PX30-EVB, RK3308-EVB
6060
61+ """
62+ import os
63+ import sys
64+ import shutil
65+ from collections import OrderedDict
6166
62- """
63- Multiple dtb package tool
67+ DTBS = {}
6468
65- Usage: scripts/mkmultidtb.py board
66- The board is what you defined in DTBS dictionary like DTBS['board'],
67- Such as: PX30-EVB, RK3308-EVB
69+ DTBS['PX30-EVB'] = OrderedDict([('px30-evb-ddr3-v10', '#_saradc_ch0=1024'),
70+ ('px30-evb-ddr3-lvds-v10', '#_saradc_ch0=512')])
6871
69- """
70- import os
71- import sys
72- import shutil
73- from collections import OrderedDict
72+ DTBS['RK3308-EVB'] = OrderedDict([('rk3308-evb-dmic-i2s-v10', '#_saradc_ch3=288'),
73+ ('rk3308-evb-dmic-pdm-v10', '#_saradc_ch3=1024'),
74+ ('rk3308-evb-amic-v10', '#_saradc_ch3=407')])
7475
75- DTBS = {}
76+ #_saradc_ch5=3750 => evm3588 b1
77+ DTBS['evm3588'] = OrderedDict([('evm3588', '#_saradc_ch5=2048'),
78+ ('evm3588-b1', '#_saradc_ch5=3754')])
7679
77- DTBS['PX30-EVB'] = OrderedDict([('px30-evb-ddr3-v10', '#_saradc_ch0=1024'),
78- ('px30-evb-ddr3-lvds-v10', '#_saradc_ch0=512')])
80+ def main():
81+ if (len(sys.argv) < 2) or (sys.argv[1] == '-h'):
82+ print (__doc__)
83+ sys.exit(2)
7984
80- DTBS['RK3308-EVB'] = OrderedDict([('rk3308-evb-dmic-i2s-v10', '#_saradc_ch3=288'),
81- ('rk3308-evb-dmic-pdm-v10', '#_saradc_ch3=1024'),
82- ('rk3308-evb-amic-v10', '#_saradc_ch3=407')])
85+ BOARD = sys.argv[1]
86+ TARGET_DTBS = DTBS[BOARD]
87+ target_dtb_list = ''
88+ default_dtb = True
8389
84- #_saradc_ch5=3750 => evm3588 b1
85- DTBS['evm3588'] = OrderedDict([('evm3588', '#_saradc_ch5=2048'),
86- ('evm3588-b1', '#_saradc_ch5=3754')])
90+ for dtb, value in TARGET_DTBS.items():
91+ if default_dtb:
92+ ori_file = 'arch/arm64/boot/dts/rockchip/' + dtb + '.dtb'
93+ board_name = dtb
94+ shutil.copyfile(ori_file, "rk-kernel.dtb")
95+ target_dtb_list += 'rk-kernel.dtb '
96+ default_dtb = False
97+ new_file = board_name + value + '.dtb'
98+ ori_file = 'arch/arm64/boot/dts/rockchip/' + dtb + '.dtb'
99+ shutil.copyfile(ori_file, new_file)
100+ target_dtb_list += ' ' + new_file
101+
102+ print(' '.join(target_dtb_list))
103+ os.system('scripts/resource_tool logo.bmp logo_kernel.bmp ' + target_dtb_list)
104+ os.system('rm ' + target_dtb_list)
105+
106+ if __name__ == '__main__':
107+ main()
108+ ```
109+ 3 . 默认的构建采用的是 Buildroot 来构建 rootfs,而默认配置中会使用 Buildroot 来构建一个内置的编译工具链,版本为 gcc11.3,然而 gcc11.3 的文档比较旧,与新版本的 ` texinfo ` 工具不兼容(报错:` extend.texi:2490: @itemx should not begin @table ` ),因此需要对 gcc11.3 的源码进行 patch,直接将 patch 放到 ` buildroot/package/gcc/11.3.0/ ` 目录下即可:
87110
88- def main():
89- if (len(sys.argv) < 2) or (sys.argv[1] == '-h'):
90- print (__doc__)
91- sys.exit(2)
111+ 
92112
93- BOARD = sys.argv[1]
94- TARGET_DTBS = DTBS[BOARD]
95- target_dtb_list = ''
96- default_dtb = True
113+ patch 需要我们 `git clone https://gcc.gnu.org/git/gcc.git`,然后 `git checkout releases/gcc-11.3.0`,然后修改 `extend.texi` 并提交,最后 `git format-patch --subject-prefix='PATCH' HEAD^` 来生成:
114+ ```
115+ From d4b2ac63d09849a78a5c93a875dd2f5dc50ff4d9 Mon Sep 17 00:00:00 2001
116+ From: ZCShou <72115@163.com>
117+ Date: Thu, 25 Sep 2025 06:36:51 +0000
118+ Subject: [PATCH] doc: fix extend.texi:2490: @itemx should not begin @table
119+
120+ ---
121+ gcc/doc/extend.texi | 2 +-
122+ 1 file changed, 1 insertion(+), 1 deletion(-)
123+
124+ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
125+ index 689ec7de4d3..84f9b9ecd66 100644
126+ --- a/gcc/doc/extend.texi
127+ +++ b/gcc/doc/extend.texi
128+ @@ -2487,7 +2487,7 @@ The following attributes are supported on most targets.
129+ @table @code
130+ @c Keep this table alphabetized by attribute name. Treat _ as space.
131+
132+ -@itemx access (@var{access-mode}, @var{ref-index})
133+ +@item access (@var{access-mode}, @var{ref-index})
134+ @itemx access (@var{access-mode}, @var{ref-index}, @var{size-index})
135+
136+ The @code{access} attribute enables the detection of invalid or unsafe
137+ --
138+ 2.43.0
139+ ```
140+ 4 . 修改 ` buildroot/package/rockchip/libv4l-rkmpp/libv4l-rkmpp.hash ` 中的 sha256 值为 ` 35eefaec3cec77144368c1bb2d860457cefcf7609b54745e90bc417d3ad1eeb6 ` ,默认的是错误的
97141
98- for dtb, value in TARGET_DTBS.items():
99- if default_dtb:
100- ori_file = 'arch/arm64/boot/dts/rockchip/' + dtb + '.dtb'
101- board_name = dtb
102- shutil.copyfile(ori_file, "rk-kernel.dtb")
103- target_dtb_list += 'rk-kernel.dtb '
104- default_dtb = False
105- new_file = board_name + value + '.dtb'
106- ori_file = 'arch/arm64/boot/dts/rockchip/' + dtb + '.dtb'
107- shutil.copyfile(ori_file, new_file)
108- target_dtb_list += ' ' + new_file
109-
110- print(' '.join(target_dtb_list))
111- os.system('scripts/resource_tool logo.bmp logo_kernel.bmp ' + target_dtb_list)
112- os.system('rm ' + target_dtb_list)
113-
114- if __name__ == '__main__':
115- main()
116- ```
117- 3. 默认的构建采用的是 Buildroot 来构建 rootfs,而默认配置中会使用 Buildroot 来构建一个内置的编译工具链,版本为 gcc11.3,然而 gcc11.3 的文档比较旧,与新版本的 `texinfo` 工具不兼容(报错:`extend.texi:2490: @itemx should not begin @table`),因此需要对 gcc11.3 的源码进行 patch,直接将 patch 放到 `buildroot/package/gcc/11.3.0/` 目录下即可:
118-
119- 
120-
121- patch 需要我们 `git clone https://gcc.gnu.org/git/gcc.git`,然后 `git checkout releases/gcc-11.3.0`,然后修改 `extend.texi` 并提交,最后 `git format-patch --subject-prefix='PATCH' HEAD^` 来生成:
122- ```
123- From d4b2ac63d09849a78a5c93a875dd2f5dc50ff4d9 Mon Sep 17 00:00:00 2001
124- From: ZCShou <72115@163.com>
125- Date: Thu, 25 Sep 2025 06:36:51 +0000
126- Subject: [PATCH] doc: fix extend.texi:2490: @itemx should not begin @table
127-
128- ---
129- gcc/doc/extend.texi | 2 +-
130- 1 file changed, 1 insertion(+), 1 deletion(-)
131-
132- diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
133- index 689ec7de4d3..84f9b9ecd66 100644
134- --- a/gcc/doc/extend.texi
135- +++ b/gcc/doc/extend.texi
136- @@ -2487,7 +2487,7 @@ The following attributes are supported on most targets.
137- @table @code
138- @c Keep this table alphabetized by attribute name. Treat _ as space.
139-
140- -@itemx access (@var{access-mode}, @var{ref-index})
141- +@item access (@var{access-mode}, @var{ref-index})
142- @itemx access (@var{access-mode}, @var{ref-index}, @var{size-index})
143-
144- The @code{access} attribute enables the detection of invalid or unsafe
145- --
146- 2.43.0
147- ```
148- 4. 修改 `buildroot/package/rockchip/libv4l-rkmpp/libv4l-rkmpp.hash` 中的 sha256 值为 `35eefaec3cec77144368c1bb2d860457cefcf7609b54745e90bc417d3ad1eeb6`,默认的是错误的
142+ 
149143
150- 
144+ 5 . 修改 ` buildroot/package/stressapptest/stressapptest.hash ` 中的 sha256 值为 ` cc35d5687c40cb368b7aa7704928285e1d756928bb4c5bab13c230efc0abc540 ` ,默认的是错误的
151145
152- 5. 修改 `buildroot/package/stressapptest/stressapptest.hash` 中的 sha256 值为 `cc35d5687c40cb368b7aa7704928285e1d756928bb4c5bab13c230efc0abc540`,默认的是错误的
146+ 
153147
154- 
148+ 6 . 如果要编译 debain 的 rootfs 则需要修改 ` debian/ubuntu-build-service/bullseye-base-arm64/Makefile ` 如下:
155149
156- 3 . 全编译时非常耗时,可选执行 ` ./build.sh uboot && ./build.sh kernel ` 等来只编译必要的组件,最后根据自身需要执行 ` ./build.sh debian 或 buildroot ` 生成 rootfs。正常编译完成之后就会在 ` rockdev ` 目录下生成相关镜像(符号链接到各个组件)
150+ 
151+
152+ #### 构建过程
153+
154+ 在初次执行 ` ./build.sh xxx ` 时会强制选择开发板板型号,选择之后会创建符号链接 ` device/rockchip/.BoardConfig.mk ` 指向 ` device/rockchip/rkxxx ` 目录下的配置文件,后续构建时就会默认使用此配置文件(可以通过 ` ./build.sh lunch ` 再次选择)。
155+
156+ ![ sdk_build] ( ./imgs_evm3588/sdk_build.png )
157+
158+ 官方 SDK 除了支持单独编译 U-Boot、Linux kernel 等组件之外,还支持编译 debian 系统、Buildroot 系统以及 Ubuntu 系统三种 rootfs,默认编译 Buildroot 系统。
159+
160+ 1 . 首先 ` sudo apt install git ssh make gcc libssl-dev liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev libgucharmap-2-90-dev bzip2 expat cpp-aarch64-linux-gnu libgmp-dev libmpc-dev bc python-is-python3 ` 安装依赖工具包。
161+ > 如果使用 Python2 环境,则不要安装 `python-is-python3` 这个包
162+
163+ 2 . 执行 ` ./build.sh ` 然后选择 ` BoardConfig-evm3588.mk ` 对应的编号 ` 3 ` (仅在第一次执行时需要选择)就可以启动构建,默认构建所有镜像。正常编译完成之后就会在 ` rockdev ` 目录下生成相关镜像(符号链接到各个组件)
157164
158165 
159166
167+ 3 . ** 【可选】** 全编译时非常耗时,可根据需要执行 ` ./build.sh uboot ` 、` ./build.sh kernel ` 、` ./build.sh debian 或 buildroot ` 等命令来只编译必要的组件。
168+
160169 1. `./build.sh yocto` 无法使用,因为默认的 SDK 中缺失了 yocto 部分的内容
161170
171+ 
172+
162173 2. `./build.sh debian` 会报错如下:
163174
164175 
0 commit comments