从 Armbian 构建并安装 jammy 到飞腾派
前段时间在 licheepi 4A
上学习了一段时间的 Armbian 构建工程,同时为Armbian/build 项目提交并合并了几个 pr.这次本着试试的态度尝试在飞腾派上通过 Armbian 构建出工程并计划提交到 Armbian 的上游。
经过一段时间的开发,目前已经可以编译出来 img 镜像
▸ ls output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img*
output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img
output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img.sha
output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img.txt
并经过特殊的手动烧写可以正常启动了。本章主要介绍下,现阶段如何使用 Armbian 构建出来的工程。
这部分代码,我整理好之后会尝试提交到Armbian/build ,因为目前缺少打包 fip-all-sd-boot.bin 这部分内容,暂时代码还在我自己的仓库,如果大家感兴趣,欢迎大家尝试自己构建出飞腾派的 Armbian 镜像。我的仓库地址是https://github.com/iysheng/build/tree/org_main
构建过程
下载 Armbian 的源码,并安装工具链到本地,考虑到网络问题,执行下述命令进行构建:
#!/bin/sh
export SHOW_LOG=yes
export SHOW_DEBUG=yes
export SHOW_COMMAND=yes
export NO_HOST_RELEASE_CHECK=yes
export GHCR_MIRROR=dockerproxy
./compile.sh build KERNEL_COMPILER=aarch64-none-linux-gnu- GITHUB_MIRROR=ghproxy REGIONAL_MIRROR=china BOARD=phytiumpi BRANCH=legacy BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=no RELEASE=jammy SKIP_EXTERNAL_TOOLCHAINS=yes
因为我是在 Fedora 38 PC上构建的而非官方建议的 Ubuntu 系列,所以我的代码中会有一些跳过 host 工具检查的地方,相信大家在编译过程中可以轻松解决这类命令找不到问题。
顺利构建完成后,就会在 output/images 目录下生成相应的 img 文件。
烧录过程
烧录过程着实让我研究了也会,经过几个小时的思考和测试,顺利的引导起来了系统。目前烧写分为如下几个步骤:
- 烧录网盘中的 fipsd-boot.bin 文件,这里面至少是由 uboot 的,有关这个文件是如何生成的?以及飞腾的启动引导流程,如果有了解的伙伴,希望可以指点指点。针对这个问题,我向萤火的技术支持也发送了邮件咨询,如果这部分内容我有进一步的了解,会继续填坑。
- 给sd卡分区,因为 Armbian 生成的 img,默认是包含有 boot 分区和 root 分区的,其中 boot 分区中包含了内核和设备树,root 分区包含的是根文件系统。具体如何分区呢,首先使用如下命令检查生成的 img 文件:
▸ fdisk -l output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img
Disk output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img: 1.27 GiB, 1367343104 bytes, 2670592 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2448961d
Device Boot Start End Sectors Size Id Type
output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img1 131072 655359 524288 256M ea Linux extended boot
output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img2 655360 2670591 2015232 984M 83 Linux
严格按照镜像信息进行分区,分为两个区。分好之后是这样的:
red@phytiumpi:~$ fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 14.88 GiB, 15980298240 bytes, 31211520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0001a0bd
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 131072 655359 524288 256M 83 Linux
/dev/mmcblk0p2 655360 30867456 30212097 14.4G 83 Linux
- 从 img 中提取 boot 分区内容到 sd 卡对应的分区,有了第二步骤的基础,这里的命令就简单了:
▸ sudo dd if=output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img of=/dev/mmcblk0p1 skip=131072 count=524288 status=progress
266297856 bytes (266 MB, 254 MiB) copied, 31 s, 8.6 MB/s
524288+0 records in
524288+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 41.5903 s, 6.5 MB/s
- 从 img 中提取 root 分区内容到 sd 卡对应的分区,有了第三步骤的基础,这里的命令就更简单了:
▸ sudo dd if=output/images/Armbian-unofficial_24.2.0-trunk_Phytiumpi_jammy_legacy_5.10.153_minimal.img of=/dev/mmcblk0p2 skip=655360 count=2015232 status=progress
1025802752 bytes (1.0 GB, 978 MiB) copied, 149 s, 6.9 MB/s
2015232+0 records in
2015232+0 records out
1031798784 bytes (1.0 GB, 984 MiB) copied, 154.554 s, 6.7 MB/s
启动测试
烧录好镜像之后,就开始启动测试了,需要注意,修改 bootcmd 和 bootargs,分别如下:
Phytium-Pi#printenv bootcmd
bootcmd=ext4load mmc 0:1 0x90100000 Image;ext4load mmc 0:1 0x90000000 dtb/phytium/phytiumpi_firefly.dtb;booti 0x90100000 -:- 0x90000000
Phytium-Pi#printenv bootargs
bootargs=console=ttyAMA1,115200 earlycon=pl011,0x2800d000 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw
接着就是引导启动了,首次会创建用户以及root密码等内容,这里就跳过了,这里展示几个系统截图:
因为为申请的项目偏向算法开发,所以对用户界面就没有过多要求,从我提供的构建脚本也可以看出,选择的是BUILD_DESKTOP=no BUILD_MINIMAL=yes
。本章暂时到这里了,更多内容敬请期待。