Arm Total Compute 2(TC2)平台是Arm推出的高性能计算参考设计平台,采用多核Cortex-A系列处理器架构。该平台广泛应用于嵌入式系统开发、芯片验证和软件生态构建。OpenEuler Embedded则是华为开源的嵌入式Linux发行版,基于Yocto构建系统,专为嵌入式场景优化。
在TC2平台上运行OpenEuler Embedded需要解决几个关键技术点:
硬件环境:
软件依赖:
bash复制# Ubuntu/Debian系统安装基础工具链
sudo apt-get update
sudo apt-get install -y \
git make gcc g++ bison flex \
python3 python3-pip docker.io \
gawk wget diffstat texinfo \
gcc-multilib build-essential chrpath socat cpio
OpenEuler Embedded使用Docker容器隔离构建环境,需正确配置:
bash复制# 添加当前用户到docker组
sudo usermod -aG docker $(whoami)
sudo systemctl restart docker
# 验证Docker权限
docker run hello-world
# 设置Docker sock权限
sudo chmod a+rw /var/run/docker.sock
oebuild是OpenEuler Embedded的专用构建工具:
bash复制pip install oebuild -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证安装
oebuild --version
OpenEuler内核仓库包含针对TC2平台的适配补丁:
bash复制git clone https://gitee.com/openeuler/kernel.git kernel-OLK-6.6
cd kernel-OLK-6.6
git checkout -b tc2_support origin/openEuler-6.6
针对TC2平台需要特别注意以下配置项:
config复制# 文件系统支持
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT3_FS=y
CONFIG_EXT4_FS=m
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
# 平台特定驱动
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_ARM_SMMU_V3=y
CONFIG_PCI=y
使用aarch64工具链进行编译:
bash复制export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
# 应用默认配置
make openeuler_defconfig
# 自定义配置
make menuconfig
# 并行编译
make -j$(nproc) Image
编译完成后,内核镜像位于arch/arm64/boot/Image。
bash复制# 创建工作目录
mkdir -p ~/oe-tc2 && cd ~/oe-tc2
# 初始化oebuild环境
oebuild init tc2_build
cd tc2_build
# 更新元数据
oebuild update
创建compile.yaml配置文件:
yaml复制product: openeuler
platform: qemu-aarch64
build_type: debug
sdk: enable
extra_packages:
- openssh
- systemd
- networkmanager
生成构建目录:
bash复制oebuild generate -p qemu-aarch64 -d build_arm64
bash复制cd build/build_arm64
oebuild bitbake openeuler-image
构建过程可能需要2-4小时,取决于网络和主机性能。成功后会生成根文件系统:
code复制output/YYYYMMDDHHMMSS/openeuler-image-qemu-aarch64-YYYYMMDDHHMMSS.rootfs.cpio.gz
将QEMU格式的根文件系统转换为TC2可用的EXT3镜像:
bash复制# 解压根文件系统
mkdir -p ~/tc2-rootfs && cd ~/tc2-rootfs
gzip -dc ../openeuler-image-*.rootfs.cpio.gz | cpio -idm
# 创建1GB大小的EXT3镜像
dd if=/dev/zero of=openeuler_fs.img bs=1M count=1024
mkfs.ext3 openeuler_fs.img
# 挂载并复制文件
mkdir mnt
sudo mount -o loop openeuler_fs.img mnt
sudo cp -a ~/tc2-rootfs/* mnt/
sudo umount mnt
修改TC2平台的U-Boot启动参数:
diff复制--- a/files/u-boot/tc2/fvp.cfg
+++ b/files/u-boot/tc2/fvp.cfg
@@ -1,7 +1,7 @@
CONFIG_TARGET_TOTAL_COMPUTE_FVP=y
CONFIG_BOOTARGS="console=ttyAMA0 debug user_debug=31 earlycon=pl011,0x2A400000 loglevel=9 androidboot.hardware=total_compute androidboot.boot_devices=1c050000.mmci ip=dhcp androidboot.selinux=permissive allow_mismatched_32bit_el0 systemd.log_level=info"
-CONFIG_BOOTDELAY=1
-CONFIG_BOOTCOMMAND="virtio scan; ... root=/dev/mmcblk0p1 rw ..."
+CONFIG_BOOTDELAY=0
+CONFIG_BOOTCOMMAND="virtio scan; ... root=/dev/vda1 rw ..."
关键修改点:
修改TC2平台运行脚本以支持OpenEuler:
bash复制diff --git a/tc2/run_model.sh b/tc2/run_model.sh
index 1fe76b0..cd7a6b6 100755
--- a/tc2/run_model.sh
+++ b/tc2/run_model.sh
@@ -147,7 +147,8 @@ echo "Launching model: "`basename $MODEL`
$MODEL --version
DEPLOY_DIR=$RUN_SCRIPTS_DIR/../../output/${DISTRO}/deploy/tc2/
DEB_MMC_IMAGE_NAME=debian_fs.img
+OPENEULER_MMC_IMAGE_NAME=openeuler_fs.img
将构建产物复制到TC2部署目录:
bash复制mkdir -p output/openeuler/deploy/tc2/
cp arch/arm64/boot/Image output/openeuler/deploy/tc2/
cp openeuler_fs.img output/openeuler/deploy/tc2/
使用Arm提供的Fixed Virtual Platform运行系统:
bash复制./run-scripts/tc2/run_model.sh \
-m /path/to/FVP_TC2 \
-d openeuler \
-b uefi
成功启动后,通过串口登录系统并检查:
bash复制# 检查内核版本
uname -a
# 查看挂载点
df -h
# 验证系统服务
systemctl list-units
现象:内核panic或卡在启动早期阶段
排查步骤:
现象:内核报错"Unable to mount root fs"
解决方案:
现象:系统启动后无法连接网络
调试方法:
bash复制# 检查网络接口
ip link show
# 查看DHCP获取情况
journalctl -u NetworkManager
通过menuconfig移除不需要的驱动和模块:
bash复制make menuconfig
推荐关闭的选项:
通过以上步骤,开发者可以在TC2平台上完整部署OpenEuler Embedded系统。这套方案也适用于其他Arm64架构的嵌入式平台,只需根据具体硬件调整内核配置和设备树即可。