Ubuntu22.04 中搭建基于 Qemu 的内核(驱动)开发环境

1. 用源码安装 Qemu

编译过程特别耗时,建议用使用在线安装

bash 复制代码
# 设置软件源镜像
$ sudo sed -i'.bak' 's,/[a-z]*.ubuntu.com,/mirrors.tuna.tsinghua.edu.cn,' /etc/apt/sources.list
# 安装依赖库
$ sudo apt-get install ninja-build
$ sudo apt-get install zlib1g zlib1g-dev
$ sudo apt-get install libglib2.0-dev
$ sudo apt-get install libpixman-1-dev
# 下载源码
$ wget https://download.qemu.org/qemu-7.2.0.tar.xz
$ tar xvJf qemu-7.2.0.tar.xz
$ cd qemu-7.2.0
# 配置
$ ./configure
# 编译
$ make
# 安装
$ sudo make install
# 验证
$ qemu-system-arm --version
QEMU emulator version 7.2.0
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
2. 配置交叉编译工具链

点击该链接 跳转下载交叉编译工具压缩包:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

bash 复制代码
# 建立目录存放交叉编译工具
$ sudo mkdir /usr/local/arm

# 将下载的交叉编译工具压缩包移动到刚才目录并解压
$ mv gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/
$ sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

# 打开 /etc/profile,在文件最后添加环境变量
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
$sudo vi /etc/profile

# 安装依赖
$ sudo apt-get install lsb-core lib32stdc++6

# 验证
$ arm-linux-gnueabihf-gcc -v
Thread model: posix
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
3. 编译内核源码

内核源码下载地址是 https://www.kernel.org/pub/ ,选择下载 linux-4.4.232.tar.xz。

bash 复制代码
# 解压源码并进入源码目录
$ tar -vxf linux-4.4.232.tar.xz
$ cd linux-4.4.232

# 安装依赖要不然编译会报错
$ sudo apt-get install lzop

# 开始编译
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j2
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs -j2
4. 编译 busybox

busybox 下载地址是https://busybox.net/downloads/,选择下载 busybox-1.32.0.tar.bz2。

bash 复制代码
# 解压并进入源码目录
$ tar -jxvf busybox-1.32.0.tar.bz2
$ cd busybox-1.32.0

# 配置
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig

# 使用图形化配置, 进入Settings选项,找到Build Options,
# 点y键将选项 Build static binary(编译成静态)选中,保存退出。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install
5. 制作虚拟SD卡启动镜像

这里采用 从 Qemu 模拟的SD卡启动系统

bash 复制代码
# 首先进入工作目录依次执行下列命令:
$ mkdir rootfs
$ cd rootfs/
$ cp -ra ../busybox-1.32.0/_install/* .
$ mkdir lib
$ cp -ra /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/* ./lib

# 在rootfs下创建必要的设备结点
$ mkdir dev
$ cd dev/
$ sudo mknod -m 666 tty5 c 4 5
$ sudo mknod -m 666 tty3 c 4 3
$ sudo mknod -m 666 tty4 c 4 4
$ sudo mknod -m 666 tty2 c 4 2
$ sudo mknod -m 666 tty1 c 4 1
$ sudo mknod -m 666 console c 5 1
$ sudo mknod -m 666 null c 1 3

# 回到rootfs同一级目录,制作SD卡系统镜像
$ cd ..
$ dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
$ mkfs.ext3 rootfs.ext3
$ sudo mount -t ext3 rootfs.ext3 /mnt -o loop
$ sudo cp -ra rootfs/* /mnt/
$ sudo umount /mnt/ 

# 进入 linux 内核源码目录并启动系统(qemu 模拟的开发板),如下图所示结果
$ cd linux-4.4.232
$ qemu-system-arm -M mcimx6ul-evk -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/imx6ul-14x14-evk.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttymxc0" -sd /home/yao/Desktop/rootfs.ext3

也可以是其他架构开发版,注意和内核运行的是同一硬件平台
# qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd ../rootfs.ext3
6. 参考文献

10分钟用QEMU搭建嵌入式开发环境学习Linux

Ubuntu2204安装qemu

使用qemu搭建arm嵌入式linux开发环境

相关推荐
__zRainy__14 小时前
Redis系列:核心数据类型与基础 API 解读
数据库·redis·缓存
雨辰AI15 小时前
人大金仓慢 SQL 根治方法论:问题定位 - 分析 - 优化全流程
数据库·后端·sql·mysql·政务
guslegend15 小时前
2.Redis核心数据结构
数据结构·数据库·redis
Daydream.V15 小时前
Redis 零基础入门到实战:数据结构 + 常用命令 + 场景全覆盖
数据结构·数据库·redis
小a彤15 小时前
atvoss:Vector 算子子程序模板库,让 Ascend C 开发效率提升 5 倍
android·c语言·数据库
不爱洗脚的小滕15 小时前
【向量数据库】Milvus 稠密与稀疏向量核心解析
数据库·人工智能·milvus
AI周红伟16 小时前
Windows 支持 Hermes Agent 吗:原生 Windows 安装 + WSL2 路径完整指南
数据库·人工智能·windows·阿里云·职场和发展·计算机外设
电商API_1800790524716 小时前
价格波动预警|用API实时监控淘宝京东商品价格,实现自动化竞品调价与捡漏
大数据·运维·数据库·人工智能·数据挖掘·自动化
问心无愧051316 小时前
ctf show web 入门173
数据库·笔记·sql·mysql
LT101579744416 小时前
2026年性能测试平台报告生成:专业可视化与合规适配指南
大数据·数据库·人工智能