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

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.xdnf.cn/news/15772.html

相关文章:

  • 【RK3576】【Android14】Android平台构建
  • 爬虫逆向之JS混淆案例(全国招标公告公示搜索引擎 type__1017逆向)
  • 重学Framework Input模块:如何实现按键一键启动Activity-学员作业
  • HTML5中的自定义属性
  • 【洛谷】询问学号、寄包柜、移动零、颜色分类(vector相关算法题p1)
  • 实验室危险品智能管控:行为识别算法降低爆炸风险
  • bws-rs:Rust 编写的 S3 协议网关框架,支持灵活后端接入
  • 汽车ECU控制器通信架构
  • Java学习--------消息队列的重复消费、消失与顺序性的深度解析​
  • Linux 内存管理(2):了解内存回收机制
  • Python实现智能文件搜索系统:从基础到高级应用
  • 【Oracle】ORACLE OMF说明
  • AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticLogAndTrace
  • Redisson RLocalCachedMap 核心参详解
  • kotlin部分常用特性总结
  • Ultralytics代码详细解析(三:engine->trainer.py主框架)
  • LVS——nat模式
  • 电机相关常见名词
  • 如何解决Flink CDC同步时间类型字段8小时时间差的问题,以MySQL为例
  • Redis Sentinel哨兵集群
  • Spring之【AnnotatedBeanDefinitionReader】
  • 针对大规模语言模型的上下文工程技术调研与总结(翻译并摘要)
  • 【C++】入门阶段
  • 基于开放API接口采集的定制开发开源AI智能名片S2B2C商城小程序数据整合与增长策略研究
  • 本地部署开源的 AI 驱动的搜索引擎 Perplexica 并实现外部访问
  • Spring Bean 的作用域(Bean Scope)
  • SpringAI_Chat模型_DeepSeek模型--基础对话
  • 扭蛋机系统开发:打造多元化娱乐生态的新引擎
  • Libevent(3)之使用教程(2)创建事件
  • Spring MVC @RequestParam注解全解析