Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb

这篇具有很好参考价值的文章主要介绍了Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

  • 首先想通过 Linux qemu 验证 设备树的加载与设备节点解析,原因是 qemu 可以 软件调试,而普通的 Linux 开发板,Linux 内核驱动调试起来反而很复杂。

  • 【记录】我竟然还没有在Linux 真实开发板上调试过Linux 内核,感觉自己就是个工具,配置、修改、下载,有问题加几行 LOG 日志分析。后面有时间深入研究一下 Linux 内核在真实硬件上调试的方法。

  • 在启动 qemu 时,我通过 -dtb xxx.dtb 传入自己编译的简单的设备树文件,发现卡住了,软件调试了一下,发现自己的设备树文件确实载入了,是运行死机,死在了一些驱动上,比如 定时器 timer

  • 如果不传入设备树,我发现设备树部分的代码照常执行,并且 平台的模型是: Machine model: linux,dummy-virt,我全局搜索了一下,发现 Linux 内核中,没有 dummy-virt 字符串,应该是有个【默认】设备树文件存在,就像是编译程序时,如果不指定链接脚本,ld 就会指定一个【默认】的链接脚本。

Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb,嵌入式Linux,linux,qemu,默认dtb

如何获取 qemu【默认】设备树

  • 搜索了一下 qemu 的官方教程,并且在网上找到了答案: 可以在启动命令行中,把 qemu 默认的设备树 dump 出来,存成一个文件,有了这个设备树 dtb 文件,再转换为 dts 文件,就可以手动更新 dts 文件了,修改后,再次编译为 dtb 文件,就实现了 qemu 设备树文件的更改,可以使用 qemu 进行设备树的一些调试与功能验证,如 设备树加载、设备树节点转 platform_device,比如 platfrom_driver 的工作流程梳理

  • qemu 导出 默认设备树 dtb 到文件的脚本

#!/bin/bash
echo "---------- boot qemu ----------"

sudo qemu-system-aarch64 \
        -M virt,dumpdtb=coretex-a57.dtb \
        -cpu cortex-a57 \
        -smp 4 \
        -m 512M \
        -kernel ../linux-6.7/arch/arm64/boot/Image.gz \
        -drive format=raw,file=rootfs_qemu.img \
        -nographic \
        -append "noinitrd root=/dev/vda rw console=ttyAMA0 init=/linuxrc ignore_loglevel" \
  • 注意这里 -M virt,dumpdtb=coretex-a57.dtb \,默认是 -M virt\,增加了 ,dumpdtb=coretex-a57.dtb ,这里
    coretex-a57.dtb 是导出的文件名,可以随便取,前面要有个 dumpdtb 命令

  • 运行后,发现导出了 一个 coretex-a57.dtb 文件,大小1MB,此时 qemu 并没有运行。

dtb 转 dts

  • 有了设备树 dtb 文件,可以使用 dtc 工具,转换为 dts 文件,那样比较容易阅读、修改。

  • dtc -I dtb -O dts coretex-a57.dtb -o coretex-a57.dts

Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb,嵌入式Linux,linux,qemu,默认dtb

  • 查看这个 生成的 dts 设备树源文件,发现确实有 linux,dummy-virt,也就是证实了 qemu 默认有个 dtb 文件,并且空间是 1MB,只是当前 dts 文件并不大,只有 10K 左右,预留的空间是 1MB,有了这个 dts 文件,就可以修改,并重新编译为 dtb 文件,然后使用 -dtb xxx.dtb 启动 qemu 了。

Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb,嵌入式Linux,linux,qemu,默认dtb

  • 这里我手动增加了几个设备树节点,发现 qemu 能正确的继续,这样就可以使用 VSCode + qemu 源码调试 Linux 内核了,感觉还不错

小结

  • 灵活使用 qemu 开发调试 Linux 内核,挺方便,并且高效。甚至比使用真实开发板都高效,可以调试大部分的软件机制、功能、硬件平台无关的软件模块,比如平台设备驱动、设备树节点解析流程等。

  • 后面继续细化 qemu 调试 Linux 内核,梳理设备树、设备驱动流程文章来源地址https://www.toymoban.com/news/detail-808246.html

到了这里,关于Linux学习笔记 : ARM64 平台下 qemu virt 有默认的设备树 dtb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】RK3399平台开发系列——设备树的学习笔记

    设备树(Device Tree)是用于描述硬件设备和系统关系的树形数据结构,主要用于 Linux 操作系统中的设备驱动程序。在嵌入式系统中,由于硬件的多样性和复杂性,设备树变得越来越流行,用户可以用设备树来描述各种外设的属性和配置信息,以帮助内核识别和管理外设。 在

    2024年02月04日
    浏览(45)
  • Windows11 上使用 QEMU 创建 Ubuntu aarch64(ARM64)虚拟机

    最近在实现一个混沌测试工具,对汽车上分布式系统执行测试。计划运行在 Linux aarch64 环境,需要确定在目标环境能不能运行,但自己和实验室的电脑都是 x86_64,所以打算建一个虚拟机。 通过 Docker容器或VMware都不支持在 x86_64 宿主机运行 aarch64 容器/虚拟机, Virtual Box 似乎也

    2024年02月03日
    浏览(49)
  • 在amd64平台构建适用于linux/arm64/v8平台的Docker镜像

    该镜像内置了Redis、MySQL、Nginx、JDK11功能 Docker 提供了一种名为 Buildx 的功能,它允许在不同的平台上进行多架构构建。我们可以使用 Buildx 在 amd64 平台上构建适用于 linux/arm64/v8 平台的 Docker 镜像。 请按照以下步骤进行操作: 确保您的 Docker 安装中已启用 Buildx。您可以运行以

    2024年02月17日
    浏览(41)
  • debian 11 arm64 aarch64 D2000 平台编译 box86 box64 笔记

    参考资料 https://github.com/ptitSeb/box86/blob/master/docs/COMPILE.md 源码地址 GitHub - ptitSeb/box86: Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices deb在线源地址(打不开): Itai\\\'s box86 apt repo 源码编译 apt install gcc-arm-linux-gnueabihf mkdir build; cd build; cmake .. -DPHYTIUM=1 -DCMAKE_BUILD_TY

    2024年01月16日
    浏览(52)
  • 基于Linux平台交叉编译 flutter arm64应用

        操作系统ubuntu 20.04,开发工具Android Studio + Flutter,运行平台RK3566 Linux。截止现在Flutter官方尚未正式对Linux arm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。     本文仅记

    2024年02月06日
    浏览(81)
  • 使用QEMU(x86)模拟运行ARM64架构并进行内核调试

    在 x86 上使用 QEMU 虚拟机模拟并调试 ARM64。 参考:ubuntu虚拟机中使用QEMU搭建ARM64环境 主机 ubuntu 20.04, Linux 5.16.0 QEMU emulator version 7.2.92 (v8.0.0-rc2-23-gefcd0ec14b) :qemu-7.2.29 合适的ARM64内核源码:linux-4.14.221.tar.gz 安装交叉编译工具: sudo apt-get install gcc-aarch64-linux-gnu 命令安装以及源码

    2024年02月09日
    浏览(61)
  • 在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils

    Binutils 是GNU(https://www.gnu.org/)提供的一组二进制工具的集合。通常,在已经安装了Linux操作系统的个人电脑上,系统就已经自带了这个工具集。但在进行嵌入式开发的时候,可能会用到支持ARM64平台的Binutils,这时就需要用到交叉编译。 此前,在【1】我们已经介绍过Ubuntu中交

    2024年02月05日
    浏览(80)
  • qemu+kvm安装银河麒麟V10SP1 arm64 虚拟机

    系统镜像 Kylin-Desktop-V10-SP1-Release-2107-arm64.iso QEMU_EFI.fd(下载地址 http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd) 注:麒麟系统要求磁盘大小在50G以上. 参数说明: -m 4096 指定内存大小,单位MB -cpu cortex-a72 CPU 型号 -smp 8,cores=8,threads=1,sockets=1 1颗CPU,8核8线

    2024年01月21日
    浏览(113)
  • 注意避坑:centos7官方版镜像不支持arm架构(docker请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配)fauria/vsftpd

    注意是centos7 docker官方版镜像不支持arm架构(FROM centos:7),不是centos7不支持arm 今天基于fauria/vsftpd在我们的arm盒子上做了个docker镜像,但是用镜像run容器的时候提示: 翻译就是: 警告:请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配,并且没有请求

    2024年02月08日
    浏览(50)
  • Linux 之搭建 arm 的 qemu 模拟器

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包