• 了解Linuxdtb

    2017-04-09 17:38:50
    在以前的内核版本中: 1)内核包含了对硬件的全部描述; 2)bootloader会加载一个二进制的内核镜像,并执行它,比如uImage或者zImage; 3)bootloader会提供一些额外的信息,成为ATAGS,它的地址会通过r2寄存器传...
    在以前的内核版本中:
    1)内核包含了对硬件的全部描述;
    2)bootloader会加载一个二进制的内核镜像,并执行它,比如uImage或者zImage;
    3)bootloader会提供一些额外的信息,成为ATAGS,它的地址会通过r2寄存器传给内核;
    ATAGS包含了内存大小和地址,kernel command line等等;
    4)bootloader会告诉内核加载哪一款board,通过r1寄存器存放的machine type integer;
    5)U-Boot的内核启动命令:bootm 

    6)Barebox变量:bootm.image 

    现今的内核版本使用了Device Tree:
    1)内核不再包含对硬件的描述,它以二进制的形式单独存储在另外的位置:the device tree blob
    2)bootloader需要加载两个二进制文件:内核镜像和DTB
    内核镜像仍然是uImage或者zImage;
    DTB文件在arch/arm/boot/dts中,每一个board对应一个dts文件;
    3)bootloader通过r2寄存器来传递DTB地址,通过修改DTB可以修改内存信息,kernel command line,以及潜在的其它信息;
    4)不再有machine type;
    5)U-Boot的内核启动命令:bootm - 
    6)Barebox变量:bootm.image,bootm.oftree

    有些bootloader不支持Device Tree,或者有些专门给特定设备写的版本太老了,也不包含。为了解决这个问题,CONFIG_ARM_APPENDED_DTB被引进。 
    它告诉内核,在紧跟着内核的地址里查找DTB文件;
    由于没有built-in Makefile rule来产生这样的内核,因此需要手动操作:
    cat arch/arm/boot/zImage arch/arm/boot/dts/myboard.dtb > my-zImage
    mkimage ... -d my-zImage my-uImage
    (cat这个命令,还能够直接合并两个mp3文件哦!so easy!)
    另外,CONFIG_ARM_ATAG_DTB_COMPAT选项告诉内核去bootloader里面读取ATAGS,并使用它们升级DT。


    展开全文
  • dtb文件作用的描述是,使用dtb可以减少linux内核版本的数量。同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用自己的dtb文件。 关于dtb,我有以下疑问 1,是如何使用dtb文件的? 我的理解是,在linux...
    dtb文件作用的描述是,使用dtb可以减少linux内核版本的数量。同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用自己的dtb文件。
    关于dtb,我有以下疑问

    1,是如何使用dtb文件的? 我的理解是,在linux内核启动过程中会解析dtb文件,根据dtb文件中设备列表进行加注各个外设的驱动模块。不知这样理解是否正确?

    正确,解析dtb并创建platform device 过程请参见of_platform_populate和of_platform_bus_probe。


    2,dtb文件中外设列表,和在linux内核中使能各个外设驱动模块(设置*或M)有什么关系? 是否可以这么理解,要想一份linux kernel可以运行在多块板卡上,必须在linux kernel配置中包括所有这些板卡的driver 模块,这样在linux启动过程中才能根据dtb 中的列表进行加载模块。

    dtb里面最后被kernel解析,并创建为platform device, 相应的 你也必须要有platform driver 才行。


    3,是否可以这么理解?PC机在启动时会自动扫描外设,而在嵌入式中,linux内核启动过程中只是解析dtb文件,从而加载对应的模块。

    因为PC机基本就是暗指X86,这样X86架构上外设都是基于PCI或者PCIE总线,这类总线可以在启动的时候,动态扫描。 嵌入式里面,ARM和PowerPC, SOC 主要的设备控制器都是基于soc总线,其不像pci/pcie总线可以动态的扫描。所以需要dtb。


    4,是否可以这么理解?编译linux内核时必须选择某外设模块,并且dtb中包括该外设的信息。在linux内核启动过程中才能自动加载该模块。



    展开全文
  • linux kernel 启动块 其实很小,之前会把启动参数编译进code 里这样 vmlinux.lz 就会比比较到 而且调用比较费时间,所以就需要需要kernel.dtb 文件来辅助启动。 所以在kernel 启动项中比较重要,不能没有 不然就无法...

    linux kernel 启动块 其实很小,之前会把启动参数编译进code 里这样 vmlinux.lz 就会比比较到 而且调用比较费时间,所以就需要需要kernel.dtb 文件来辅助启动。 所以在kernel 启动项中比较重要,不能没有 不然就无法正常启动。

    展开全文
  • dtb文件格式dtb文件的格式如下图 NOTE:不同部分顺序可能不一样文件头boot_param_headerstruct boot_param_header { u32 magic;----------------用于标dtb文件头,等于OF_DT_HEADER=“0xd00dfeed” u32 ...

    dtb文件格式

    dtb文件的格式如下图
    这里写图片描述
    NOTE:不同部分顺序可能不一样

    文件头boot_param_header

    struct boot_param_header {
            u32     magic;----------------用于标dtb文件头,等于OF_DT_HEADER=“0xd00dfeed”
            u32     totalsize;------------dtb文件大小
            u32     off_dt_struct;--------DT structure偏移
            u32     off_dt_strings;-------DT strings偏移
            u32     off_mem_rsvmap;-------memory reserve map偏移
            u32     version;--------------版本号
            u32     last_comp_version;----兼容最早版本号
    
            /* version 2 fields below */
            u32     boot_cpuid_phys;------physical CPU id
    
            /* version 3 fields below */
            u32     size_dt_strings;------size of the strings block
    
            /* version 17 fields below */
            u32 size_dt_struct;-----------size of the DT structure block
    };

    保留内存memory reserve map

    这段保存的是一个保留内存映射列表,每个表由一对64位的物理地址和大小组成

    device-tree structure&strings

    由于某些属性(比如compatible)在大多数节点下都会存在,为了减少dtb文件大小,就需要把这些属性字符串只指定一个存储位置即可,这样每个节点的属性只需要按照位置找到属性字符串的位置就可以得到是哪个属性,所以dtb把device-tree strings单独列出来存储,下图是device-tree structure的格式,节点嵌套节点
    这里写图片描述
    上面的宏定义如下

    #define FDT_MAGIC   0xd00dfeed  /* 4: version, 4: total size */
    #define FDT_TAGSIZE sizeof(uint32_t)
    
    #define FDT_BEGIN_NODE  0x1     /* Start node: full name */
    #define FDT_END_NODE    0x2     /* End node */
    #define FDT_PROP    0x3     /* Property: name off,
                           size, content */
    #define FDT_NOP     0x4     /* nop */
    #define FDT_END     0x9
    
    #define FDT_V1_SIZE (7*sizeof(uint32_t))
    #define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(uint32_t))
    #define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(uint32_t))
    #define FDT_V16_SIZE    FDT_V3_SIZE
    #define FDT_V17_SIZE    (FDT_V16_SIZE + sizeof(uint32_t))

    总图
    这里写图片描述

    展开全文
  • 答: 使用dtc工具,如:  <kernel source code dir>/scripts/dtc/dtc -I dts -O dtb -o <... 如: ./script/dtc/dtc -I dts -O dtb -o jello.dtb jello.dts (当然也可以单独安装dtc工具来...

    答: 使用dtc工具,如:

      <kernel source code dir>/scripts/dtc/dtc -I dts -O dtb -o <dtb filename> <dts filename>

      如: ./script/dtc/dtc  -I dts -O dtb -o jello.dtb jello.dts (当然也可以单独安装dtc工具来进行设备树的转换)

     

      那么将dtb转换成dts的命令如下:

        dtc  -I dtb -O dts -o jello.dts jello.dtb

      

    转载于:https://www.cnblogs.com/dakewei/p/10938156.html

    展开全文
  • Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/...
  • 1、下载Linux内核 除了以下两种正统方法,还可以到我的云盘下载。<链接> 方法一: 在终端使用git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/进行自动下载。 下载的速度...
  • kernel 动态修改dtb方案

    2018-03-26 09:32:29
    DTB是在uboot进kernel时,被load到内存中, 然后在linux中 start_kernel -&gt;setup_arch-&gt;unflatten_device_tree 中,从内存中读取,展开成树型的数据结构,供内核驱动查找。一般来说,linux中,不会对...
  • 九、编译设备树dts为dtb前面的linux内核源码目录中已经包含了设备树编译器Device Tree Compiler(dtc),在目录arch/arm/boot/dts/目录下。将前面生成的xilinx.dts文件拷贝到ubuntu下,使用如下命令进行编译dtc -I...
  • dts文件通过编译生成dtb格式文件<br data-tomark-pass> 属性的定义 value取值类型 属性名=值只有三种取值 第一种 <1 0x3 0x123> (一个或多个32位数据) arrays of cells 第二种 “字符串” (用...
  • dtb文件编译

    2017-11-01 18:09:50
    root@HK:~/kernel-imx-4.1.15-r0# make ARCH=arm CROSS_COMPILE=/usr/local/gcc-x64/4.9.3/bin/arm-none-linux-gnueabihf- imx6ul.dtb
  • 06.dtb工程建立,生成dtb文件   设备树生成 Device Tree是一种描述硬件的数据结构,由一系列被命名的结点(node)和属性(property)组成,而结点本身可包含子结点。所谓属性,其实就是成对出现的name和value。在...
  • Linux设备树, .dtb文件

    2017-08-17 20:01:45
    宋宝华 Barry Song 本文部分案例和文字英文原版来源于 ...Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in th
  • 1.1. 选择bootz模式启动zImage内核 之前选择bootm模式启动boot.im,boot.img带有its格式的header,需要根据header去header。现在直接启动zImage,需要通过do bootz()函数启动。方式如下: 1.1.1. 在uboot目下执行...
  • dtb 文件的作用及生成

    2018-06-25 17:44:15
    dtb文件作用的描述是, 使用DTB文件 可以减少内核的版本数,比如同一块板子,在外设不同的情况下不使用dtb文件需要编译多个版本的内核。当使用dtb文件时同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用...
  • Linux版本:Ubuntu14.04 SDCard大小:2G(最小使用2G,因为根文件系统比较大) 通过VM虚拟机进行的操作 uboot、kernel、rootfs、dtb的镜像文件是通过在NXP官网提供的MFGTools工具里面找到的,该工具里面有很多镜像,...
  • dts文件通过编译生成dtb格式文件 [[File:ldd_devicetree_chapter2_1_001.jpg|800px]] ##属性的定义 value取值类型 属性名=值只有三种取值 *第一种 &amp;amp;amp;amp;lt;1 0x3 0x123&amp;amp;amp;amp;gt...
  • linux设备树dtb格式 设备树的一般操作方式是:开发人员根据开发需求编写dts文件,然后使用dtc将dts编译成dtb文件。 dts文件是文本格式的文件,而dtb是二进制文件,在linux启动时被加载到内存中,接下来我们需要来...
  • Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/...
1 2 3 4 5 ... 20
收藏数 7,170
精华内容 2,868
热门标签