ubuntu22.04安装qemu-9.1并在i.MX6上运行linux kernel 6.11
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 -j6
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 -j6
3. 启动内核
模拟在Freescale sabrelite开发板上运行,不需要uboot也可以,参考文档
这里没有指定根文件系统,所以卡在了kernel panic
../qemu/build/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"
4. 总结
再编译一份根文件系统就可以愉快的学习驱动框架了,如果玩开发板的话,前期需要大量的工作在部署开发环境和uboot和kernel的移植,而qemu可以避开这些问题直接进入驱动学习。