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

66.qemu设备树配置

//导出qemu设备树到内核根目录 qemu-system-aarch64 -machine virt -machine dumpdtb=origin.dtb //反编译成dts ./scripts/dtc/dtc -I dtb -O dts -o origin.dts origin.dtb //在origin.dts根节点下添加自定义节点 /{ quan{ #address-cells = <1>; #size-cells = <1>; compatible = "simple-bus"; myLed{ compatible = "my devicetree"; reg = <0xFDD60000 0x00000004>; }; }; }; //编译成dtb ./scripts/dtc/dtc -I dts -O dtb -o finalized.dtb origin.dts //启动qemu并指定指定自定义dtb(-dtb finalized.dtb) qemu-system-aarch64 -machine virt -cpu cortex-a57 -m 1024 -smp 4 -kernel arch/arm64/boot/Image -dtb finalized.dtb -drive file=./rootfs.ext4,format=raw,if=none,id=rootdev -device virtio-blk-device,drive=rootdev -append "root=/dev/vda rw console=ttyAMA0 earlycon=pl011,0x09000000 loglevel=8" -nographic --fsdev local,id=kmod_dev,path=$PWD/kmodules,security_model=none -device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount //启动之后会有如下打印

如何配置,使用qemu启动内核参考这里

Ubuntu下QEMU构建虚拟arm架构Linux

devicetree.c

#include <linux/module.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h> // 平台设备的初始化函数 static int my_platform_probe(struct platform_device *pdev) { printk(KERN_INFO "my_platform_probe: Probing platform device\n"); // 添加设备特定的操作 // ... return 0; } // 平台设备的移除函数 static void my_platform_remove(struct platform_device *pdev) { printk(KERN_INFO "my_platform_remove: Removing platform device\n"); // 清理设备特定的操作 // ... } const struct of_device_id of_match_table_id[] = { {.compatible="my devicetree"}, }; // 定义平台驱动结构体 static struct platform_driver my_platform_driver = { .probe = my_platform_probe, .remove = my_platform_remove, .driver = { .name = "my_platform_device", .owner = THIS_MODULE, .of_match_table = of_match_table_id, }, }; // 模块初始化函数 static int __init my_platform_driver_init(void) { int ret; // 注册平台驱动 ret = platform_driver_register(&my_platform_driver); if (ret) { printk(KERN_ERR "Failed to register platform driver\n"); return ret; } printk(KERN_INFO "my_platform_driver: Platform driver initialized\n"); return 0; } // 模块退出函数 static void __exit my_platform_driver_exit(void) { // 注销平台驱动 platform_driver_unregister(&my_platform_driver); printk(KERN_INFO "my_platform_driver: Platform driver exited\n"); } module_init(my_platform_driver_init); module_exit(my_platform_driver_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("quan");

makefile

obj-m += devicetree.o KDIR:=/home/linux/samba-mount/linux-kernel/linux-6.17.5 PWD?=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules echo $(PWD) clean: rm -rf *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order install: cp *.ko ../../linux-kernel/linux-6.17.5/kmodules

编译之后,通过共享目录给到qemu中的arm架构内核

如何配置,使用共享目录参考这里

Ubuntu下QEMU构建虚拟arm架构Linux

验证是否有效

http://www.jsqmd.com/news/217040/

相关文章:

  • 链表中倒数最后k个结点
  • 《P3228 [HNOI2013] 数列》
  • 42545
  • 一算钱领导就让用BigDecimal ,为什么它可以不丢失精度?
  • 用这套新工作流,把上线时间从半天压到3分钟
  • 删除链表的倒数第n个节点
  • 【毕业设计】机器学习 基于python深度学习的猫狗表情识别
  • 6784358
  • 【疾病识别】SVM农作物叶子虫害识别与分类【含GUI Matlab源码 14872期】
  • 两个链表的第一个公共结点
  • 深度学习毕设项目:基于CNN深度学习python的遥感图片识别沙漠湖泊和森林
  • 用这4招,优雅的实现Spring Boot 异步线程间数据传递
  • 【课程设计/毕业设计】基于python机器学习的猫狗表情识别
  • 【建议收藏】AI 音乐提示词终极指南|全网最全的创作控制手册|Suno 进阶指南|第 15 篇
  • 链表相加(二)
  • 深度学习毕设项目:基于python的印刷体数字和字母识别基于python深度学习的印刷体数字和字母识别
  • 在RabbitMQ中,怎么确保消息不会丢失?
  • 从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
  • 大数据领域Zookeeper的集群配置自动化工具推荐
  • 【交通标示识别】模板匹配雾霾交通标示识别【含GUI Matlab源码 14873期】
  • MYSQL_安装与配置(超详细,仅需一篇就能帮你成功安装MYSQL)
  • PO、VO、BO、DTO、DAO、POJO有什么区别?
  • ArcGIS Pro3.5.2安装包+安装详细教程+系统需求
  • MySQL进程CPU 飙升900%,领导让我查什么原因?
  • 【课程设计/毕业设计】基于 python的CNN深度学习的遥感图片识别沙漠湖泊和森林
  • ArcGIS Pro查看多期数据变化!卷帘+多地图联动齐上架
  • Stream流式编程 中间操作和终端操作介绍
  • 【苹果分级】基于matlab GUI机器视觉苹果质量检测及总分级系统【含Matlab源码 14878期】
  • 【课程设计/毕业设计】基于深度学习的印刷体数字和字母识别基于python深度学习的印刷体数字和字母识别
  • 深度学习计算机毕设之机器学习基于CNN深度学习的遥感图片识别沙漠湖泊和森林