buildroot运行qemu进行pcie设备模拟,开发驱动的方式
- 下载buildroot
https://buildroot.org/downloads/
下载buildroot-2022.02.2.tar.gz - 解压buildroot
tar xvf buildroot-2022.02.2.tar.gz - 配置buildroot
make qemu_aarch64_virt_defconfig
make -j8 - 下载qemu
wget https://download.qemu.org/qemu-4.1.0.tar.bz2
5.解压qemu
tar -xjf qemu-4.1.0.tar.bz2
6.修改vim cat default-configs/aarch64-softmmu.mak
CONFIG_EDU=y
7.配置qemu的configure
./configure --prefix=$PWD/ --target-list=aarch64-softmmu --enable-debug --enable-sdl --enable-kvm --enable-tools --disable-curl
8.安装必要软件
sudo apt-get install libsdl2-2.0
sudo apt-get install libsdl2-dev
sudo apt-get install libpixman-1-dev - 编译与安装qemu
make && make install
10.制作rootfs
mkdir -p release/qemu-arm64
cp qemu/bin qemu/libexec qemu/share release/qemu-arm64
11.Kernel Image的安装
cd buildroot-2022.02.2/output/images
cp * ~/work/qemu-edu/release/qemu-arm64/bin
12.修改start-qemu.sh并运行
在start-qemu.sh后面添加 -device edu以及-dtb qemu-my.dtb然后直接运行,然后直接运行
补充内容(编写并加入驱动的方式):
1,先编写驱动,在这个路径下:buildroot-2022.02.2/output/build/linux-5.15.18/drivers/hello(这个hello是我自己写的驱动)
2,在hello文件夹下添加Makefile,内容如下
#Makefile
obj-m += hello_test.o //-m 是编译成模块 -y是编译进内核
3,在hello文件夹下添加Kconfig
Kconfig
config HELLO_MODULEtristate "Hello World Module"helpThis is a simple Hello World Linux kernel module.
4,在上一级目录下的Kconfig中添加以下内容
source "drivers/hello/Kconfig"
5,在上一级的Makefile中添加如下内容
obj-$(CONFIG_HELLO_MODULE) += hello/
6,在/buildroot-2022.02.2 下输入 make linux-menuconfig 打开配置菜单找到如下内容
ymbol: HELLO_MODULE [=y] │ │ Type : tristate │ │ Defined at drivers/hello/Kconfig:2 │ │ Prompt: Hello World Module │ │ Location: │ │ (1) -> Device Drivers
按键按下y选中打开
7,编译内核输入 make linux 编译
8,在buildroot-2022.02.2/output/images 目录下找到image,拷贝到**/home/monisa/Linux/qemu/release/qemu-arm64/bin** 目录下
9,挂载文件系统,先创建一个挂载点
sudo mkdir /mnt/rootfs
10,挂载
sudo mount -o loop rootfs.ext2 /mnt/rootfs
11,拷贝刚刚编译出的hello模块到文件系统中:
sudo cp /home/monisa/Linux/qemu/buildroot-2022.02.2/output/build/linux-5.15.18/drivers/hello/hello_test.ko /mnt/rootfs/root
12,输入start-qemu.sh启动
13,直接加载模块
insmod hello_test.ko
添加自己的节点加载设备树的方式:
1,打开qemu_tree.dts
2,加入如下内容
monisa_device@12340000 {compatible = "monisa,my-device";reg = <0x0 0x12340000 0x0 0x1000>;status = "okay";};
3,编译设备树:
dtc -I dts -O dtb -o qemu-my.dtb qemu_tree.dts
4,在start-qemu.sh中添加:
-dtb qemu-my.dtb exec qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -smp 1 -kernel Image -append "rootwait root=/dev/vda console=ttyAMA0" -netdev user,id=eth0 -device virtio-net-device,netdev=eth0 -drive file=rootfs.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -dtb qemu-my.dtb ${EXTRA_ARGS} -device edu)
5,启动后在 /proc/device-tree/可以看到
ls /proc/device-tree/monisa_device@12340000/
compatible name reg status
#
这里提供PCIE设备的设备树:https://pan.baidu.com/s/1DVFOWo6zM5WkNKx4YYI1BQ提取码:pcie
关于PCIE的测试以及驱动的开发方法可以观看如下视频学习:
https://www.bilibili.com/video/BV1zx4y1Y7D2/?spm_id_from=333.999.0.0
pcie驱动代码参考:
https://blog.csdn.net/qq_38113006/article/details/140450481
https://www.cnblogs.com/r1ng0/p/12809667.html