Skip to content

Commit d26e7af

Browse files
committed
更新了 evm3588
1 parent 6206688 commit d26e7af

File tree

3 files changed

+111
-100
lines changed

3 files changed

+111
-100
lines changed

docs/quickstart/evm3588.md

Lines changed: 111 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
![sdk_build_c1](./imgs_evm3588/sdk_build_c1.png)
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-
![sdk_build_c1](./imgs_evm3588/sdk_build_c1.png)
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+
![sdk_build_c2](./imgs_evm3588/sdk_build_c2.png)
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-
![sdk_build_c2](./imgs_evm3588/sdk_build_c2.png)
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+
![sdk_build_c3](./imgs_evm3588/sdk_build_c3.png)
149143

150-
![sdk_build_c3](./imgs_evm3588/sdk_build_c3.png)
144+
5. 修改 `buildroot/package/stressapptest/stressapptest.hash` 中的 sha256 值为 `cc35d5687c40cb368b7aa7704928285e1d756928bb4c5bab13c230efc0abc540`,默认的是错误的
151145

152-
5. 修改 `buildroot/package/stressapptest/stressapptest.hash` 中的 sha256 值为 `cc35d5687c40cb368b7aa7704928285e1d756928bb4c5bab13c230efc0abc540`,默认的是错误的
146+
![sdk_build_c4](./imgs_evm3588/sdk_build_c4.png)
153147

154-
![sdk_build_c4](./imgs_evm3588/sdk_build_c4.png)
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+
![sdk_build_c5](./imgs_evm3588/sdk_build_c5.png)
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
![sdk_build_images](./imgs_evm3588/sdk_build_images.png)
159166

167+
3. **【可选】** 全编译时非常耗时,可根据需要执行 `./build.sh uboot``./build.sh kernel``./build.sh debian 或 buildroot` 等命令来只编译必要的组件。
168+
160169
1. `./build.sh yocto` 无法使用,因为默认的 SDK 中缺失了 yocto 部分的内容
161170

171+
![sdk_build_e2](./imgs_evm3588/sdk_build_e2.png)
172+
162173
2. `./build.sh debian` 会报错如下:
163174

164175
![sdk_build_e1](./imgs_evm3588/sdk_build_e1.png)
225 KB
Loading
35.3 KB
Loading

0 commit comments

Comments
 (0)