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开发环境

相关推荐
普通网友1 分钟前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集18 分钟前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师1 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈1 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB2 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记2 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌2 小时前
MongoDB 4.2——选择片键
数据库·mongodb
天天进步一点点3 小时前
QSqlQuery删除sqlite数据库执行drop数据表报错database table is locked unable to fetch row问题
数据库·oracle·sqlite
音视频工程实战3 小时前
PromptQL 新手入门与实战指南
数据库·sql·算法
清川渡水3 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地
数据库·人工智能·sql