@@ -11,23 +11,37 @@ sidebar_label: "A1000域控制器"
1111
1212本文中的构建及部署环境均采用 Ubuntu 22.04 作为开发环境。
1313
14- ## 构建
14+ ## 获取源代码
1515
16- ### 构建 Linux 客户机镜像
16+ 1 . 创建工作目录
17+ ``` bash
18+ mkdir ~ /a1000-project
19+ cd ~ /a1000-project
20+ ```
1721
18- #### 获取 SDK
22+ 2 . 克隆必需仓库
23+ ``` bash
24+ # 克隆 AxVisor Hypervisor 源码
25+ git clone https://github.com/arceos-hypervisor/axvisor.git
1926
20- ``` bash
21- git clone git@ github.com: arceos-hypervisor/bst-a1000.git
27+ # 克隆 A1000 内核和工具源码
28+ git clone https:// github.com/ arceos-hypervisor/bst-a1000.git
2229```
30+ 3 . 验证目录结构
31+
32+ 执行成功后,目录结构应如下:
2333
2434![ 仓库目录] ( ./imgs_a1000/image.png )
2535
26- #### 构建过程
36+ ## 构建
37+
38+ ### 构建 Linux 客户机镜像
39+
40+ 客户机镜像是运行在 AxVisor Hypervisor 之上的 Linux 操作系统内核。
2741
28421 . 进入项目目录并赋予内核文件夹执行权限:
2943 ``` bash
30- cd bst-al000
44+ cd ~ /a1000-project/ bst-a1000
3145 sudo chmod -R 755 ./kernel/
3246 ```
3347
@@ -50,41 +64,49 @@ git clone git@github.com:arceos-hypervisor/bst-a1000.git
5064
5165 执行多线程编译,加速构建过程:
5266 ` ` ` bash
53- make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 O=build_bst \
54- -j$( nproc) CC=aarch64-linux-gnu-gcc-9
67+ make CROSS_COMPILE=aarch64-linux-gnu- \
68+ ARCH=arm64 \
69+ O=build_bst \
70+ -j$( nproc) \
71+ CC=aarch64-linux-gnu-gcc-9
5572 ` ` `
5673
5774 > 提示:` -j$( nproc) ` 参数会自动使用所有可用的 CPU 核心进行并行编译
5875
5976 ! [编译过程](./imgs_a1000/img-2.png)
6077
61- 4. 编译产物
78+ 4. 验证编译产物
6279
6380 编译成功后,内核镜像文件位于:
6481 ```
65- build_bst/arch/arm64/boot/Image
82+ # 检查内核镜像是否生成
83+ ls -lh build_bst/arch/arm64/boot/Image
84+
85+ # 查看镜像大小和时间戳
86+ file build_bst/arch/arm64/boot/Image
6687 ```
6788
68- # # 构建 AxVisor 镜像
89+ # ## 构建 AxVisor 镜像
90+
91+ 以下以 ** A 核** 为例演示构建过程,若使用 B 核,请相应调整配置文件和 DTB 文件。\
6992
70- 以下以 ** A 核** 为例演示构建过程,若使用 B 核,请相应调整配置文件和 DTB 文件。
71- # ## 步骤 1:编译客户机设备树
93+ # ### 步骤 1:编译客户机设备树
7294
73- # ### 1.1 准备设备树源文件
95+ # #### 1.1 准备设备树源文件
7496
7597AxVisor 源码的 ` configs/vms` 目录下提供了适用于 A1000 域控制器的设备树源文件:
7698
7799- ** A 核** :` linux-aarch64-a1000-smp8-fada.dts`
78100- ** B 核** :` linux-aarch64-a1000-smp8-fadb.dts`
79101
80- # ### 1.2 编译设备树
102+ # #### 1.2 编译设备树
81103
82104客户机设备树文件记录了传递给客户机的硬件设备信息(CPU、内存、外设等),这些信息** 必须与客户机配置文件保持一致** 。
83105
84106使用 ` dtc` 工具编译设备树:
85107` ` ` bash
86108# 编译 A 核设备树
87- cd configs/vms
109+ cd ~ /a1000-project/axvisor/ configs/vms
88110dtc -I dts -O dtb \
89111 -o linux-aarch64-a1000-smp8-fada.dtb \
90112 linux-aarch64-a1000-smp8-fada.dts
@@ -94,9 +116,9 @@ dtc -I dts -O dtb \
94116
95117---
96118
97- # ## 步骤 2:配置客户机参数
119+ # ### 步骤 2:配置客户机参数
98120
99- # ### 2.1 选择配置文件
121+ # #### 2.1 选择配置文件
100122
101123AxVisor 源码的 ` configs/vms` 目录下提供了配置文件模板:
102124```
@@ -110,7 +132,7 @@ configs/vms/linux-aarch64-a1000_smp8.toml
110132- 内存大小
111133- 设备资源等等
112134
113- #### 2.2 选择镜像加载方式
135+ ##### 2.2 选择镜像加载方式
114136
115137AxVisor 支持两种客户机镜像加载方式,根据使用场景选择合适的方式:
116138
@@ -119,7 +141,7 @@ AxVisor 支持两种客户机镜像加载方式,根据使用场景选择合适
119141| 从文件系统加载 | `image_location = "fs"` | 域控制器文件系统中的绝对路径 |
120142| 从内存加载 | `image_location = "memory"` | 本地构建环境中的绝对路径 |
121143
122- #### 2.3 编辑配置文件
144+ ##### 2.3 编辑配置文件
123145
124146打开配置文件 `configs/vms/linux-aarch64-a1000-smp8.toml`,根据选择的加载方式进行配置:
125147
@@ -172,9 +194,10 @@ dtb_path = "./configs/vms/linux-aarch64-a1000-smp8-fada.dtb"
172194
173195---
174196
175- ### 步骤 3:编译 AxVisor 镜像
197+ #### 步骤 3:编译 AxVisor 镜像
176198
177199``` bash
200+ cd ~ /a1000-project/axvisor
178201./axvisor.sh build \
179202 --plat aarch64-generic \
180203 --arceos-args " LOG=off,SMP=8" \
@@ -186,22 +209,44 @@ dtb_path = "./configs/vms/linux-aarch64-a1000-smp8-fada.dtb"
186209- ` --arceos-args ` :ArceOS 参数配置(日志级别、SMP 核心数等)
187210- ` --vmconfigs ` :客户机配置文件路径
188211
189- ### 步骤 4:生成可烧写镜像
212+ ** 验证编译结果**
213+
214+ ``` bash
215+ ls -lh axvisor_aarch64-generic.bin
216+
217+ # 查看文件信息
218+ file axvisor_aarch64-generic.bin
219+ ```
220+
221+ #### 步骤 4:生成可烧写镜像
222+
223+ 4.1 配置镜像描述文件 (ITS)
224+ ITS 文件 (Image Tree Source) 定义了如何将多个组件打包成一个可启动的 FIT 镜像。
225+ ``` bash
226+ cd ~ /a1000-project/bst-a1000
227+
228+ # 编辑 A 核 ITS 配置文件
229+ vim a1000b/bsta1000b-fada-arceos.its
230+ ```
231+
232+ 4.2 修改文件路径
233+ 需要修改三个关键路径:
190234
191- 切换到 ` bst-al000 ` 目录,编辑镜像配置文件 ` tools/a1000b/bsta1000b-fada-arceos.its ` ,修改以下数据路径:
192235``` its
193236images {
194237 kernel {
195238 description = "ArceOS for BST A1000B";
196- data = /incbin/("../../axvisor_aarch64-generic.bin");
239+ data = /incbin/("../../../axvisor/ axvisor_aarch64-generic.bin");
197240 ...
241+
198242fdt-fada {
199243 description = "bsta1000b-fada fdt";
200- data = /incbin/("/home/yanlien/Workspace/project_check/a1000/host /bsta1000b-fada.dtb");
244+ data = /incbin/("../../bst_dt /bsta1000b-fada.dtb");
201245 ...
246+
202247fdt-fadb {
203248 description = "bsta1000b-fadb fdt";
204- data = /incbin/("/home/yanlien/Workspace/project_check/a1000/host /bsta1000b-fadb.dtb");
249+ data = /incbin/(../../bst_dt /bsta1000b-fadb.dtb");
205250 ...
206251```
207252
@@ -211,21 +256,21 @@ fdt-fadb {
211256
2122571 . ** Axvisor 内核镜像路径**
213258``` its
214- data = /incbin/("../../axvisor_aarch64-generic.bin");
259+ data = /incbin/("../../../axvisor/ axvisor_aarch64-generic.bin");
215260```
216261 - 指向 AxVisor 编译生成的二进制镜像文件
217262 - 默认相对路径为 AxVisor 根目录下的 ` axvisor_aarch64-generic.bin `
218263
2192642 . ** A 核设备树路径**
220265``` its
221- data = /incbin/("path/to /bsta1000b-fada.dtb");
266+ data = /incbin/("../../bst_dt /bsta1000b-fada.dtb");
222267```
223268 - 替换为 A 核 Host 设备树的实际路径
224269 - 示例:` "/home/username/workspace/bst-al000/bsta1000b-fada.dtb" `
225270
2262713 . ** B 核设备树路径**
227272``` its
228- data = /incbin/("path/to /bsta1000b-fadb.dtb");
273+ data = /incbin/("../../bst_dt /bsta1000b-fadb.dtb");
229274```
230275 - 替换为 B 核 Host 设备树的实际路径
231276 - 示例:` "/home/username/workspace/bst-al000/bsta1000b-fadb.dtb" `
@@ -235,14 +280,13 @@ fdt-fadb {
235280> - 确保所有文件路径真实存在,否则 ` mkimage ` 打包将失败
236281> - 路径中不能包含中文字符或特殊字符
237282
238- 切换到bst-al000目录下,把bsta1000b-fada-arceos.its文件中的
239-
240283修改完成后保存文件,即可进行下一步的镜像打包操作。
241284
242285使用 ` mkimage ` 工具生成最终的可烧写镜像文件:
243286``` bash
244- ./tools/a1000b/mkimage \
245- -f ./tools/a1000b/bsta1000b-fada-arceos.its \
287+ cd ~ /a1000-project/bst-a1000
288+ ./a1000b/mkimage \
289+ -f ./a1000b/bsta1000b-fada-arceos.its \
246290 Image.itb
247291```
248292
@@ -284,10 +328,10 @@ mount /dev/mmcblk0p1 /mnt
284328在上位机终端执行以下命令,将新的 Host 设备树文件推送至域控制器:
285329``` bash
286330# 推送 A 核设备树
287- adb push bsta1000b-fada.dtb /mnt/bsta1000b-fada.dtb
331+ adb push ~ /a1000-project/bst-a1000/bst_dt/ bsta1000b-fada.dtb /mnt/bsta1000b-fada.dtb
288332
289333# 推送 B 核设备树
290- adb push bsta1000b-fadb.dtb /mnt/bsta1000b-fadb.dtb
334+ adb push ~ /a1000-project/bst-a1000/bst_dt/ bsta1000b-fadb.dtb /mnt/bsta1000b-fadb.dtb
291335```
292336
293337---
@@ -319,7 +363,7 @@ mount /dev/mmcblk0p1 /mnt
319363
320364在上位机终端执行以下命令,将新的内核镜像推送至域控制器:
321365``` bash
322- adb push Image.itb /mnt/Image.itb
366+ adb push ~ /a1000-project/bst-a1000/ Image.itb /mnt/Image.itb
323367```
324368
325369#### 5. 重启设备
0 commit comments