[linux驱动开发--环境搭建] qemu-9.1+linux-kernel-6.11

本文档模拟vexpress-a9开发板,作为铁头娃,要学就学最新的包
已经上传到github仓库

目录

  1. 编译qemu-9.1
  2. 编译linux-kernel-6.11
  3. 编译busybox-1.36.1
  4. NFS挂载

1. qemu-stable-9.1源码编译安装

1.1. 下载qemu源码的stable-9.1分支

仓库地址

bash 复制代码
mkdir qemu_9.1
cd qemu_9.1
git clone https://gitlab.com/qemu-project/qemu.git --branch=stable-9.1 --depth=5
git submodule update --init --recursive
cd qemu

1.2. 安装依赖

参考文档

bash 复制代码
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
bash 复制代码
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 
bash 复制代码
sudo apt-get install libnfs-dev libiscsi-dev

文档中没有提及的依赖

bash 复制代码
sudo apt install python3-venv python3-pip tomli flex bison

1.3. 编译qemu,配置环境变量

如果这个过程还缺什么依赖,可以根据提醒自行安装,或者问AI

bash 复制代码
mkdir build
cd build
../configure
make qemu-system-arm -j12
echo 'export PATH="your_path/qemu_9.1/qemu/build:$PATH"' >> ~/.bashrc
source ~/.bashrc

2. linux kernel 6.11编译dtb和zImage

2.1. 下载kernel源码

仓库地址

bash 复制代码
cd ../../
git clone https://github.com/torvalds/linux.git --branch=v6.11 --depth=1
cd linux

2.2. 编译dtb和zImage

安装交叉编译工具链

bash 复制代码
sudo apt install gcc-arm-linux-gnueabihf

编译

bash 复制代码
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make imx_v6_v7_defconfig
make -j12

2.3. 测试启动内核

模拟在Freescale sabrelite开发板上运行,不需要uboot也可以,参考文档
这里没有指定根文件系统,所以卡在了kernel panic

bash 复制代码
qemu-system-arm -M sabrelite -smp 4 -m 1G \
    -display none -serial null -serial stdio \
    -kernel ./arch/arm/boot/zImage \
    -dtb ./arch/arm/boot/dts/nxp/imx/imx6q-sabrelite.dtb \
    -append "root=/dev/ram"

3. 编译最小根文件系统

3.1. 下载busybox1.36.1源码

下载链接,进入连接后往下滑找到最新的stabel版本就行如下图所示

回到qemu_9.1目录下下载busybox自行解压,文件结构如下

bash 复制代码
.
├── busybox
├── linux
├── qemu
└── u-boot-2024.10

3.2. 配置编译

bash 复制代码
cd busybox
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make menuconfig
# Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)
make -j12

3.3. 创建rootfs

不需要打包成rootfs.ext4,我们用NFS挂载

bash 复制代码
cd ..
mkdir img
cd img
mkdir rootfs
cd rootfs
mkdir proc sys dev etc tmp lib
cp -rf ../../busybox/_install/* ./
cp -rf /usr/arm-linux-gnueabihf/lib/* ./

4. NFS挂载

4.1. 文件汇总

把前面用到的kernel和.dtb文件复制到img文件夹中,此时qemu_9.1的文件结构如下

bash 复制代码
$ tree -L 1
.
├── busybox
├── img
├── linux
├── qemu
└── u-boot-2024.10

img文件内文件有如下所示

bash 复制代码
$ tree -L 1
.
├── rootfs
├── vexpress-v2p-ca9.dtb
└── zImage

4.2. 安装NFS

bash 复制代码
# 安装 NFS 服务器
sudo apt-get install nfs-kernel-server
sudo vim /etc/exports
# 在文件最后一行添加这行内容,记得把路径和IP地址改成你自己的
# ~/qemu_9.1/img/rootfs 192.168.3.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
sudo service nfs-kernel-server restart

4.3. 配置虚拟网卡

bash 复制代码
# 创建 tap 设备
sudo ip tuntap add dev tap0 mode tap
# 启用 tap 设备
sudo ip link set tap0 up
# 配置 IP 地址
sudo ip addr add 192.168.3.101/24 dev tap0
# 验证配置
ip addr show tap0

4.4. 编写Makefile,启动运行

bash 复制代码
# 进入img文件夹
touch Makefile

Makefile内容如下所示:记得把文件路径和IP地址改成你自己的

bash 复制代码
# 定义变量
DTB = ./vexpress-v2p-ca9.dtb
KERNEL = ./zImage
ROOTFS = ./rootfs
QEMU = qemu-system-arm

# 默认目标
.PHONY: all
all: run

# 运行 QEMU
.PHONY: run
run:
	$(QEMU) -cpu cortex-a9 -smp 4 -m 512 \
	    -machine type=vexpress-a9 -serial mon:stdio \
	    -kernel $(KERNEL) \
	    -dtb $(DTB) \
	    -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
	    -device virtio-net-device,netdev=net0 \
	    -append "root=/dev/nfs rw nfsroot=192.168.3.162:~/qemu_9.1/img/rootfs ip=192.168.3.106 console=ttyAMA0" \
	    -nographic

# 清理
.PHONY: clean
clean:
	@echo "Nothing to clean."
bash 复制代码
maek run

5. 效果如下

已经上传到github仓库
芯片的参考手册可以到ARM官网下载,例如:ARM CoreTile Express A9×4 TRM

相关推荐
刘一说7 分钟前
CentOS 系统 Java 开发测试环境搭建手册
java·linux·运维·服务器·centos
wdxylb6 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20077 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪7 小时前
关于Linux内核中头文件问题相关总结
linux
海绵不是宝宝8178 小时前
连接远程服务器上的 jupyter notebook,解放本地电脑
服务器·jupyter·github
Lovyk9 小时前
Linux 正则表达式
linux·运维
Fireworkitte10 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil90011 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char11 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
繁星¹⁸⁹⁵12 小时前
通过update-alternatives可以实现cuda的多版本切换
服务器