RK3568实战:用QEMU在x86电脑上模拟构建和调试ARM64 Ubuntu 22.04根文件系统
RK3568开发实战基于QEMU的ARM64根文件系统高效构建与调试指南引言在嵌入式Linux开发领域RK3568作为一款性能优异的四核Cortex-A55处理器正被广泛应用于各类智能硬件设备。传统开发流程中开发者往往需要在物理开发板上反复刷写系统进行测试这种烧录-调试-再烧录的循环不仅效率低下还会缩短存储设备寿命。本文将介绍一种革命性的开发方法——利用QEMU在x86主机上模拟构建和调试ARM64架构的Ubuntu 22.04根文件系统实现一次构建多处部署的高效工作流。这种方法的核心优势在于开发效率提升x86主机的强大性能可大幅缩短编译和配置时间环境隔离性避免频繁刷写对开发板存储造成的物理损耗版本控制友好可在宿主机上轻松管理多个文件系统版本团队协作便捷构建好的文件系统镜像可快速共享给团队成员1. 环境准备与基础配置1.1 获取ARM64基础系统镜像Ubuntu官方提供了精简版的base镜像非常适合作为嵌入式系统的起点。我们可以从清华大学开源镜像站获取更快的下载速度wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/releases/22.04/ubuntu-base-22.04.5-base-arm64.tar.gz解压镜像到工作目录mkdir -p ~/rk3568_rootfs/ubuntu_arm64 sudo tar -xpf ubuntu-base-22.04.5-base-arm64.tar.gz -C ~/rk3568_rootfs/ubuntu_arm641.2 配置QEMU用户态模拟为了让x86主机能够运行ARM64架构的程序需要安装qemu-user-staticsudo apt update sudo apt install qemu-user-static binfmt-support将QEMU静态二进制文件复制到目标文件系统sudo cp /usr/bin/qemu-aarch64-static ~/rk3568_rootfs/ubuntu_arm64/usr/bin/提示确保已启用binfmt_misc内核模块可通过lsmod | grep binfmt检查2. 挂载与进入ARM64环境2.1 创建自动化挂载脚本编写mount_rootfs.sh脚本简化挂载流程#!/bin/bash ROOTFS_DIR$2 mount_bind() { sudo mount --bind /dev ${ROOTFS_DIR}/dev sudo mount --bind /dev/pts ${ROOTFS_DIR}/dev/pts sudo mount -t proc /proc ${ROOTFS_DIR}/proc sudo mount -t sysfs /sys ${ROOTFS_DIR}/sys sudo mount -t tmpfs tmpfs ${ROOTFS_DIR}/run } umount_all() { sudo umount ${ROOTFS_DIR}/dev/pts sudo umount ${ROOTFS_DIR}/dev sudo umount ${ROOTFS_DIR}/proc sudo umount ${ROOTFS_DIR}/sys sudo umount ${ROOTFS_DIR}/run } case $1 in -m) mount_bind ;; -u) umount_all ;; *) echo Usage: $0 {-m|-u} ROOTFS_PATH 2 exit 1 esac赋予执行权限chmod x mount_rootfs.sh2.2 进入chroot环境执行以下命令进入ARM64环境sudo ./mount_rootfs.sh -m ~/rk3568_rootfs/ubuntu_arm64 sudo chroot ~/rk3568_rootfs/ubuntu_arm64 /bin/bash此时您已经在一个完整的ARM64 Ubuntu环境中可以执行任何ARM64架构的命令。3. 系统配置与软件安装3.1 基础系统配置首先更新软件源并设置时区apt update apt upgrade -y apt install locales tzdata -y dpkg-reconfigure locales dpkg-reconfigure tzdata配置网络相关工具apt install net-tools iproute2 network-manager ifupdown -y3.2 开发工具链安装针对RK3568开发建议安装以下工具包apt install -y \ build-essential \ crossbuild-essential-arm64 \ git \ cmake \ python3-dev \ libssl-dev \ libncurses5-dev \ flex \ bison3.3 常见问题解决方案问题1sudo命令权限错误解决方法chmod 4755 /usr/bin/sudo chown root:root /usr/bin/sudo问题2locale警告在/etc/environment中添加LANGen_US.UTF-8 LC_ALLen_US.UTF-8然后执行locale-gen en_US.UTF-8 update-locale LANGen_US.UTF-84. 系统优化与定制4.1 创建普通用户建议创建一个普通用户而非直接使用rootuseradd -m -s /bin/bash developer passwd developer usermod -aG sudo developer4.2 配置SSH远程访问安装并配置SSH服务apt install openssh-server -y sed -i s/#PermitRootLogin prohibit-password/PermitRootLogin no/ /etc/ssh/sshd_config systemctl enable ssh4.3 内核模块与硬件支持针对RK3568的特殊硬件可能需要预装以下驱动和工具apt install -y \ linux-firmware \ alsa-utils \ i2c-tools \ spi-tools \ usbutils5. 打包与部署到RK35685.1 清理与压缩文件系统退出chroot环境后执行清理sudo rm -rf ~/rk3568_rootfs/ubuntu_arm64/var/cache/apt/archives/* sudo rm -f ~/rk3568_rootfs/ubuntu_arm64/usr/bin/qemu-aarch64-static创建ext4格式的系统镜像dd if/dev/zero ofubuntu_rootfs.img bs1M count2048 mkfs.ext4 ubuntu_rootfs.img sudo mount -o loop ubuntu_rootfs.img /mnt sudo cp -a ~/rk3568_rootfs/ubuntu_arm64/* /mnt/ sudo umount /mnt5.2 烧写到RK3568开发板使用RKDevTool将生成的ubuntu_rootfs.img烧写到开发板将开发板进入Loader模式连接USB OTG到主机打开RKDevTool选择根文件系统分区加载并烧写ubuntu_rootfs.img5.3 启动验证系统启动后检查以下关键信息uname -a # 确认架构为aarch64 lsmod # 检查已加载的内核模块 df -h # 查看分区挂载情况6. 高级调试技巧6.1 使用gdb-multiarch进行交叉调试在x86主机上安装调试工具sudo apt install gdb-multiarch调试ARM64程序gdb-multiarch --args qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./arm64_program6.2 性能分析与优化使用QEMU内置的性能分析工具qemu-aarch64 -d cpu,exec ./arm64_program6.3 自动化构建脚本示例创建build_rootfs.sh自动化脚本#!/bin/bash set -e # 定义变量 ROOTFS_DIRubuntu_arm64 OUTPUT_IMGrk3568_ubuntu_rootfs.img SIZE2G # 清理旧文件 [ -d $ROOTFS_DIR ] sudo rm -rf $ROOTFS_DIR [ -f $OUTPUT_IMG ] rm -f $OUTPUT_IMG # 创建并解压基础系统 mkdir -p $ROOTFS_DIR wget -qO- https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/releases/22.04/ubuntu-base-22.04.5-base-arm64.tar.gz | sudo tar -xzp -C $ROOTFS_DIR # 配置QEMU sudo cp /usr/bin/qemu-aarch64-static $ROOTFS_DIR/usr/bin/ # 挂载并配置系统 sudo ./mount_rootfs.sh -m $ROOTFS_DIR sudo chroot $ROOTFS_DIR /bin/bash EOT apt update apt upgrade -y apt install -y sudo ssh net-tools vim exit EOT sudo ./mount_rootfs.sh -u $ROOTFS_DIR # 创建镜像文件 dd if/dev/zero of$OUTPUT_IMG bs1 count0 seek$SIZE mkfs.ext4 $OUTPUT_IMG sudo mount -o loop $OUTPUT_IMG /mnt sudo cp -a $ROOTFS_DIR/* /mnt/ sudo umount /mnt echo Root filesystem image created: $OUTPUT_IMG
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2487555.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!