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

buildroot运行qemu进行pcie设备模拟,开发驱动的方式

  1. 下载buildroot
    https://buildroot.org/downloads/
    下载buildroot-2022.02.2.tar.gz
  2. 解压buildroot
    tar xvf buildroot-2022.02.2.tar.gz
  3. 配置buildroot
    make qemu_aarch64_virt_defconfig
    make -j8
  4. 下载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
  5. 编译与安装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

http://www.lryc.cn/news/593626.html

相关文章:

  • 【学习记录】智能客服小桃(进度更新ing)
  • 测试计划(抽奖系统)
  • Redis Sentinel哨兵集群
  • STC增强型单片机寄存器 PWM EEPROM TMOD TCON
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • JavaScript 中的继承
  • ADC选型设计
  • OpenCV 官翻 4 - 相机标定与三维重建
  • (LeetCode 每日一题) 1233. 删除子文件夹 (排序)
  • 数据集下载网站
  • aosp15上SurfaceFlinger的dump部分新特性-无Layer相关详细信息输出如何解决?
  • 基于Electron打包jar成Windows应用程序
  • 【2025/07/19】GitHub 今日热门项目
  • 【逻辑回归】MAP - Charting Student Math Misunderstandings
  • 2023 年 5 月青少年软编等考 C 语言八级真题解析
  • [故障诊断方向]基于二维时频图像和数据增强技术的轴承故障诊断模型
  • [黑马头条]-基于MinIO存储文章详情
  • 代码随想录算法训练营第二十五天
  • Streamlit 官翻 3 - 开发教程 Develop Tutorials
  • 80、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:栈空间对齐
  • Input输入和Screen相关
  • 轻松学习C++:基本语法解析
  • 从丢包到恢复:TCP重传机制的底层逻辑全解
  • 将HTML+JS+CSS数独游戏包装为安卓App
  • 微服务学习(六)之分布式事务
  • 华为擎云L420安装LocalSend
  • Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>
  • kafka--基础知识点--6.1--LEO、HW、LW
  • LeetCode Hot100【7. 整数反转】
  • 创意 C++ 文本冒险战斗游戏代码