当前位置: 首页 > article >正文

qemu-9.1+linux-kernel-6.11+busybox-1.36.1+NFS挂载

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

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

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

仓库地址

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. 安装依赖

参考文档

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

文档中没有提及的依赖

sudo apt install python3-venv python3-pip tomli flex bison

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

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

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源码

仓库地址

cd ../../
git clone https://github.com/torvalds/linux.git --branch=v6.11 --depth=1
cd linux

2.2. 编译dtb和zImage

安装交叉编译工具链

sudo apt install gcc-arm-linux-gnueabihf

编译

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make imx_v6_v7_defconfig
make -j12

2.3. 测试启动内核

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

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自行解压,文件结构如下

.
├── busybox
├── linux
├── qemu
└── u-boot-2024.10

3.2. 配置编译

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挂载

cd ..
mkdir img
cd img
mkdir rootfs
cd rootfs
mkdir proc sys dev etc tmp
cp -rf ../../busybox/_install/* ./

4. NFS挂载

4.1. 文件汇总

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

$ tree -L 1
.
├── busybox
├── img
├── linux
├── qemu
└── u-boot-2024.10

img文件内文件有如下所示

$ tree -L 1
.
├── rootfs
├── vexpress-v2p-ca9.dtb
└── zImage

4.2. 安装NFS

# 安装 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. 配置虚拟网卡

# 创建 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,启动运行

# 进入img文件夹
touch Makefile

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

# 定义变量
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."

maek run

5. 效果如下

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


http://www.kler.cn/a/371711.html

相关文章:

  • Spring Boot 经典九设计模式全览
  • 股票基础交易规则!最小变动数量规则!最大数量限制规则!
  • Apache POI—读写Office格式文件
  • 交叉编译 lmbench(riscv64)
  • 电源完整性
  • 87456
  • Java设计模式—观察者模式详解
  • 问题排查思路
  • 记录一次mmpretrain训练数据并转onnx推理
  • 流刷新定位
  • Ubuntu24.04配置samba共享
  • 微服务的雪崩问题
  • 提问GPT
  • 流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(三)
  • SpringBoot 下的Excel文件损坏与内容乱码问题
  • Zustand介绍与使用 React状态管理工具
  • Golang的跨平台开发
  • 从零到一:大学新生编程入门攻略与成长指南
  • 【flask-wtf】 表单验证器
  • Spring Boot 集成 Shiro:会话管理、加密与登录次数限制
  • 以太网交换安全:DHCP Snooping
  • 闲话10.40 :)
  • Mac安装Ruby
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的体育馆管理系统的设计与实现
  • 华为应用市场增长优化(一)
  • 使用 Nginx 配置真实 IP 地址转发