news 2026/9/3 3:06:43

66.qemu设备树配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

验证是否有效

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 19:53:52

用这4招,优雅的实现Spring Boot 异步线程间数据传递

Spring Boot 自定义线程池可以实现异步开发&#xff0c;在实际开发中需要在父子线程之间传递一些数据&#xff0c;比如用户信息&#xff0c;链路信息等等比如用户登录信息使用ThreadLocal存放保证线程隔离&#xff0c;代码如下&#xff1a;/*** description 用户上下文信息*/ p…

作者头像 李华
网站建设 2026/9/2 20:41:45

ArcGIS汉化不成功的解决方案

很多粉丝朋友在ArcGIS10.X系列安装出现了不能汉化的问题&#xff0c;即使是在装了汉化包的情况下。今天我们来做一个总结&#xff01; &#xff08;ArcGIS Pro汉化不成功查看&#xff1a;ArcGIS Pro或ArcGIS汉化不了&#xff1f;汉化包装不上&#xff1f;&#xff09; ArcGIS的…

作者头像 李华
网站建设 2026/9/2 8:09:10

【毕业设计】python基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 20:41:32

MySQL——表操作及查询

一.表操作 MySQL的操作中&#xff0c;一些专用的词无论是大写还是小写都是可以通过的。 1.插入数据INSERT [INTO] table_name (列名称…)VALUES (列数据…), (列数据…);"[]"表示可有可无&#xff0c;插入时&#xff0c;如果不指定要插入的列&#xff0c;则表示默认全…

作者头像 李华
网站建设 2026/9/2 20:40:54

三份“私人资料“让AI理解你的世界,回答质量提升80%

作者通过喂给AI三份个人资料&#xff08;月度消费清单、童书和聊天记录&#xff09;&#xff0c;使AI从提供泛泛而谈的回答转变为能够理解个人需求的专属助手。这三份资料分别代表行为数据、认知素材和交互记录&#xff0c;帮助AI从三个维度理解"提问者"。文章强调&a…

作者头像 李华