網(wǎng)站建設(shè)與開發(fā)跨境電商網(wǎng)站
本文檔模擬vexpress-a9開發(fā)板,作為鐵頭娃,要學(xué)就學(xué)最新的包
已經(jīng)上傳到github倉庫
目錄
- 編譯qemu-9.1
- 編譯linux-kernel-6.11
- 編譯busybox-1.36.1
- NFS掛載
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,配置環(huán)境變量
如果這個過程還缺什么依賴,可以根據(jù)提醒自行安裝,或者問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. 測試啟動內(nèi)核
模擬在Freescale sabrelite開發(fā)板上運行,不需要uboot也可以,參考文檔
這里沒有指定根文件系統(tǒng),所以卡在了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. 編譯最小根文件系統(tǒng)
3.1. 下載busybox1.36.1源碼
下載鏈接,進(jìn)入連接后往下滑找到最新的stabel版本就行如下圖所示
回到qemu_9.1目錄下下載busybox自行解壓,文件結(jié)構(gòu)如下
.
├── 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. 創(chuàng)建rootfs
不需要打包成rootfs.ext4,我們用NFS掛載
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文件復(fù)制到img文件夾中,此時qemu_9.1的文件結(jié)構(gòu)如下
$ tree -L 1
.
├── busybox
├── img
├── linux
├── qemu
└── u-boot-2024.10
img文件內(nèi)文件有如下所示
$ tree -L 1
.
├── rootfs
├── vexpress-v2p-ca9.dtb
└── zImage
4.2. 安裝NFS
# 安裝 NFS 服務(wù)器
sudo apt-get install nfs-kernel-server
sudo vim /etc/exports
# 在文件最后一行添加這行內(nèi)容,記得把路徑和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. 配置虛擬網(wǎng)卡
# 創(chuàng)建 tap 設(shè)備
sudo ip tuntap add dev tap0 mode tap
# 啟用 tap 設(shè)備
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,啟動運行
# 進(jìn)入img文件夾
touch Makefile
Makefile內(nèi)容如下所示:記得把文件路徑和IP地址改成你自己的
# 定義變量
DTB = ./vexpress-v2p-ca9.dtb
KERNEL = ./zImage
ROOTFS = ./rootfs
QEMU = qemu-system-arm# 默認(rèn)目標(biāo)
.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. 效果如下
已經(jīng)上傳到github倉庫
芯片的參考手冊可以到ARM官網(wǎng)下載,例如:
ARM CoreTile Express A9×4 TRM