基于QEMU和U-Boot搭建嵌入式Linux模拟仿真环境
嵌入式系统学习涉及广泛的知识和技术。与特定种类的应用开发相比嵌入式系统软件的开发环境构建显得尤为“奢侈”。很多时侯我们需要购买许多价格不菲、种类各异的嵌入式开发板以及配套的各类工具如JTAG/SWI烧录器、串口连接线等等。而准备这一切不仅需要金钱还得有时间。而QEMU则可在一定程度缓解这种尴尬。本文记录在Ubuntu2204上基于QEMU搭建一个基础的嵌入式ARM开发板Vexpress-A9模拟运行环境的全过程。ARM express 全称versatile express family, 是ARM公司自己推出的开发板主要用于SOC厂商设计,验证和测试自己的SOC芯片。采用主板子板设计,主板提供各种外围接口,子板提供CPU运算支持的Cortex-A5/A9/A15/R5等处理器。一、安装QEMU安装qemu虚拟机工具。# For full system emulation sudo apt install qemu-system #For emulating Linux binaries sudo apt install qemu-user-static有兴趣的同学也可手动编译安装https://www.qemu.org/ https://wiki.qemu.org/Hosts/Linux git clone https://gitlab.com/qemu-project/qemu.git git checkout remotes/origin/stable-8.2 -b stable-8.2 sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build sudo apt-get install git-email sudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev sudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev sudo apt-get install librbd-dev librdmacm-dev sudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev sudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev sudo apt-get install valgrind xfslibs-dev sudo apt-get install libnfs-dev libiscsi-dev ./configure --target-listarm-softmmu --audio-drv-list make sudo make install测试安装结果qemu-system-arm --version #查看支持的开发板 qemu-system-arm -M help #vexpress-a9二、安装ARM交叉工具链安装arm交叉工具链sudo apt install -y gcc-arm-linux-gnueabihf sudo apt install -y g-arm-linux-gnueabihf工具链的命令规则一般是arch-core-kernel-system-language。其中一languag译语言表示该编译器用于编译何种语言最常见的就是gccg二arch体系架构如ARMMIPS等表示该编译器用的指令集和CPU架构三core使用的是哪个CPU Core如Cortex A8或者是指定工具链的供应商。如果没有特殊指定则留空不填。这一组命名比较灵活在某些厂家提供的交叉编译链中有以厂家名称命名的也有以开发板命名的或者直接是none或cross的四kernel所运行的OS见过的有Linuxuclinuxbare无OS五system交叉编译链所选择的库函数和目标映像的规范如gnugnueabi等。其中gnu等价于glibcoabignueabi等价于glibceabi。若不指定则也可以留空不填1.ABI二进制应用程序接口(Application Binary Interface(ABI) for the ARM Architecture),在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口,涵盖了数据类型的大小,布局和对齐,调用约定.2.EABI嵌入式ABI 嵌入式应用二进制接口指定了文件格式,数据类型,寄存器使用,堆积组织优化和在一个嵌入式软件中的参数的标准约定.Arm-none-gnueabi-linux比arm-linux-gcc要好,在可一致性,兼容性上面早期u-boot和Linux编译可能使用的都不是一个arm-linux-gcc版本3.HF启用硬浮点计算hf hard-float。 硬浮点hard-float依赖ARM CPU的浮点运算单元FPU执行浮点操作速度快、效率高需硬件支持如Cortex-A系列。 软浮点soft-float通过软件模拟浮点运算兼容性广但性能差适用于无FPU的低端ARM芯片如Cortex-M系列。三、安装编译U-BOOT一获取uboot源码git clone https://github.com/u-boot/u-boot.git二配置编译选项make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- vexpress_ca9x4_defconfig三编译ubootmake ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j $(nproc)编译结束后会在根目录下生成两个二进制文件uboot和uboot.bin。四测试uboot通过qemu运行uboot。qemu-system-arm -kernel u-boot -nographic运行结果四、编译Linux内核一 下载Linux内核源码git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git -b v5.4 linux-5.4二配置内核make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- vexpress_defconfig三编译内核make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j $(nproc)1.内核文件编译将在arch/arm/boot下生成zImage内核压缩文件。2.设备树文件在arch/arm/boot/dtb下生成vexpress-v2p-ca9.dtb设备树文件。五、制作根文件系统根文件系统是Linux内核启动后首先挂载的文件系统包含基本的shell命令,各种库,字符设备,配置脚本等提供了根目录/可以放在: nor/nand flash, SD卡, 磁盘, 网络空间上一般使用busybox构建嵌入式根文件系统。一编译安装busybox#1.下载源代码 https://busybox.net/ #2.修改Makefile ARCH arm CROSS_COMPILE arm-linux-gnueabi- #3.配置 make defconfig make menuconfig Settings --- [*] Build static binary (no shared libs) #4.编译 make -j $(nproc) #5.安装 make install #安装生成目录_install在编译配置时建议设置为表态连接。如果未选择“Build static binary (no shared libs)则需要将arm-linux-gnueabihf相关的库文件拷贝至根文件系统的/lib目录下。二制作SD卡镜像制作SD卡镜像文件#1.生成镜像 #bs: 缓冲区块的大小 #count: 块的个数 dd if/dev/zero ofsdcard.img bs1M count32 #2.格式化为ext3文件系统 mkfs.ext4 sdcard.img初始化镜像文件#3.将各种文件copy到文件系统镜像中 sudo mount -t ext4 sdcard.img /mnt -o loop #4.创建基础目录 sudo mkdir etc proc sys dev var boot #5.从busybox中拷贝程序与配置文件 sudo cp -rff ../busybox-1.32.0/_install/* /mnt/ sudo cp -rf ../busybox-1.32.0/examples/bootfloppy/etc/* /mnt/etc/ #6.从交叉编译库中拷贝库文件 cp -avf /usr/arm-linux-gnueabihf/lib/* /mnt/lib/创建设备节点#7.创建设备节点 #mknod: 创建块或字符设备节点 #-m 666: 权限读写 #tty1: 节点名称 #c: 字符设备 #4: 主设备号 #1: 次设备号 sudo mknod -m 666 tty1 c 4 1 sudo mknod -m 666 tty2 c 4 2 sudo mknod -m 666 tty3 c 4 3 sudo mknod -m 666 tty4 c 4 4 sudo mknod -m 666 console c 5 1 sudo mknod -m 666 null c 1 3拷贝内核镜像和设备树文件cd ../ sudo cp linux-5.4/arch/arm/boot/zImage rootfs/boot/ sudo cp linux-5.4/arch/arm/boot/dts/vexpress-v2p-ca9.dtb rootfs/boot/修改etc/fstab文件内容如下所示proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /var tmpfs defaults 0 0修改etc/init.d/rcS文件内容如下所示#! /bin/sh /bin/mount -a /sbin/mdev -sumount镜像sudo umount /mnt六、模拟运行编写启动脚本#/bin/sh qemu-system-arm -M vexpress-a9 \ -kernel u-boot \ -sd sdcard.img \ -no-reboot \ -nographic \ -m 512M运行进入uboot界面u-boot加载内核和设备树文件load mmc 0:0 0x66000000 boot/zImage load mmc 0:0 0x66500000 boot/vexpress-v2p-ca9.dtb设置启动参数setenv bootargs root/dev/mmcblk0 rw consolettyAMA0,115200 init/linuxrc启动内核并运行bootz 0x66000000 - 0x66500000运行界面如下七、总结至此一个基础的嵌入式模拟环境已经建立可为后续Linux内核、U-Boot等系统及嵌入式软件调试提供坚实的基础。

相关新闻

智慧医疗RAG系统构建数据准备与预处理

智慧医疗RAG系统构建数据准备与预处理

1. 解决"文档分块的简单粗暴化"问题 原始问题:直接使用LangChain的RecursiveCharacterTextSplitter,固定512字符分块。 避坑实践: 多策略分块器设计: class MedicalDocumentChunker:def __init__(self):# 针对不同文…

2026/7/3 2:13:54 阅读更多 →
智慧医疗RAG系统构建检索系统避坑

智慧医疗RAG系统构建检索系统避坑

1. 解决"向量嵌入的领域失配"问题 避坑实践: 领域适配嵌入模型选择: class MedicalEmbeddingModel:def __init__(self):# 尝试多个领域专用模型self.models {"sentence-transformers/all-mpnet-base-v2": "通用",&quo…

2026/7/3 14:22:45 阅读更多 →
互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析

互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析

互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析 第一轮提问:Spring WebFlux的基本原理与应用场景 面试官李云龙:谢宝庆,简单说说Spring WebFlux的基本原理和区别于Spring MVC的地方。 谢宝庆:呃&a…

2026/7/3 14:22:44 阅读更多 →

最新新闻

电机控制进阶——PID速度环参数整定实战与调优

电机控制进阶——PID速度环参数整定实战与调优

1. PID速度环控制基础概念 第一次接触电机PID控制时,我盯着那三条看似简单的曲线发愣——比例、积分、微分,这三个数学概念怎么就能让电机转速乖乖听话呢?后来在实验室熬了三个通宵才明白,PID控制就像教小朋友骑自行车&#xff1a…

2026/7/5 5:41:44 阅读更多 →
Meshroom完整指南:免费开源3D重建软件从入门到精通

Meshroom完整指南:免费开源3D重建软件从入门到精通

Meshroom完整指南:免费开源3D重建软件从入门到精通 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 你是否曾想过,能否将手机拍摄的普通照片变成逼真的3D模型&#xff1…

2026/7/5 5:41:44 阅读更多 →
企业级接口自动化测试框架搭建:基于pytest+requests+Allure+YAML实战

企业级接口自动化测试框架搭建:基于pytest+requests+Allure+YAML实战

1. 项目概述:为什么我们需要一个企业级接口自动化框架? 在当前的软件研发流程中,接口作为前后端、微服务之间通信的基石,其稳定性和正确性直接决定了整个系统的质量。如果你还在用 Postman 手动点来点去,或者写一堆零…

2026/7/5 5:37:43 阅读更多 →
MeshLab终极指南:3D网格处理从入门到精通完整教程

MeshLab终极指南:3D网格处理从入门到精通完整教程

MeshLab终极指南:3D网格处理从入门到精通完整教程 【免费下载链接】meshlab The open source mesh processing system 项目地址: https://gitcode.com/gh_mirrors/me/meshlab 你是否曾经面对杂乱无章的3D扫描数据感到束手无策?或者想要优化模型却…

2026/7/5 5:33:41 阅读更多 →
三步搞定开源DPS统计工具:深度解析《碧蓝幻想:Relink》战斗数据

三步搞定开源DPS统计工具:深度解析《碧蓝幻想:Relink》战斗数据

三步搞定开源DPS统计工具:深度解析《碧蓝幻想:Relink》战斗数据 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/gb…

2026/7/5 5:33:41 阅读更多 →
硅光人才需求暴涨,光电融合赛道四家优质企业全景解读

硅光人才需求暴涨,光电融合赛道四家优质企业全景解读

在人工智能与高性能计算的驱动下,数据中心对芯片算力的需求呈指数级增长。然而,一个核心瓶颈日益凸显:连接这些算力芯片的数据互连技术,其发展速度已难以跟上算力增长的步伐,传统铜缆电互连技术难以匹配高带宽、低功耗…

2026/7/5 5:33:41 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻