嵌入式Linux新手问题

时间:2014-11-15 22:08:31

标签: linux-kernel embedded boot device-tree rootfs

所以我正在学习嵌入式Linux,并且有一些我似乎无法找到答案的问题。

1)编译时,内核是否依赖于dtb / dts文件?我认为内核只需要知道芯片架构(即arm),并且dtb文件由引导加载程序(uBoot)加载,因此内核只需要加载由dtb文件配置的驱动程序。

2)混合和匹配:我的印象是我可以混合搭配引导装载程序,dtb,内核,rootfs和模块的任意组合,具体如下

  • 内核:必须知道为哪个芯片编译
  • dtb:必须知道电路板的细节和芯片,即有多少内存,为SPI配置GPIO
  • boot loader:必须知道芯片,uEnv.txt必须有内核和dtb位置的参数
  • rootfs:完全独立
  • modules:必须使用特定版本的内核
  • 进行编译

3)驱动程序:如果我想加载SPI驱动程序,我是否需要任何特定内容,或者内核是否知道如何操作,因为dtb文件设置了所需的寄存器?

4)模块:这些只是依赖于内核还是他们需要了解芯片和电路板(当我说芯片我的意思是他们必须知道的不仅仅是一个简单的臂或x86架构)?

提前感谢您,我知道这些是一些基本问题,但感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

  

1)编译时,内核是否依赖于dtb / dts文件?我认为内核只需要知道芯片架构(即arm),并且dtb文件由引导加载程序(uBoot [sic])加载,因此内核只需要加载由dtb文件配置的驱动程序。

编译Linux内核时不依赖于设备树 内核的编译确实取决于芯片架构,但编译的代码模块取决于电路板配置和功能选择。
顺便说一句,它是用于通用引导的U-Boot,而不是microBoot。

  

2)混合和匹配:我的印象是我可以混合搭配引导装载程序,dtb,内核,rootfs和模块的任意组合,具体如下

     

内核:必须知道为哪个芯片编译      dtb:必须知道电路板的细节和芯片,即有多少内存,为SPI配置GPIO      boot loader:必须知道芯片和uEnv.txt必须有内核和dtb位置的参数
     rootfs:完全独立的      模块:必须使用特定版本的内核

进行编译

基本上是正确的,但通常一个人在尝试“混合匹配”时不会过分。通常有最佳或首选(或至少是适当的)选择 通过“rootfs”我假设你的意思是rootfs的文件系统类型,而不是rootfs的一些图像。 (见下面的附录。)

  

3)驱动程序:如果我想加载SPI驱动程序,我是否需要任何特定的或

有两种类型的“SPI驱动程序”,即主机和协议 SPI主控制器用于SPI控制器芯片,作为单接口主控制器。这通常是平台驱动程序, / dev 中没有设备节点 对于每个SPI从设备,必须有协议驱动程序。此驱动程序通常具有 / dev 中的设备节点。

  

内核是否知道如何操作,因为dtb文件设置了所需的寄存器?

设备树必须指定哪个驱动程序适用于哪个设备以及为每个设备分配/分配的任何/所有资源。

dtb文件没有“设置”任何内容。它只是配置数据;没有可执行代码。设备驱动程序通常在其探测或初始化阶段负责获取/分配其资源。

  

4)模块:这些只是依赖于内核还是需要了解芯片和电路板?

您对“模块”的使用含糊不清。源代码文件有时被称为“模块”。大概你真的是指可加载的内核模块。

虽然大多数人将内核模块(仅)与设备驱动程序相关联,但其他内核服务(如文件系统和网络协议处理程序)也可以构建为模块。 内核模块与静态链接(即内置在内核中)的主要原理是用于运行时可配置性(这反过来提高了内存效率)。可选功能,服务和驱动程序可以从引导的内核中删除,但仍可在以后需要时加载。

可加载模块“依赖”内核只是因为正确执行的链接要求。 “芯片和电路板知识”的程度显然取决于模块的功能,就像任何其他内核代码一样。

<强>附录

  

当我说rootfs我指的是预建的rootfs

内核映像和(预构建的)rootfs映像不是“完全独立”
rootfs映像中的可执行二进制文件和共享库必须与内核功能兼容。更重要的是,由于内核可加载模块安装在rootfs而不是内核映像中,并且这些模块可以严格地绑定到内核版本的特定版本,因此将内核映像与rootfs映像配对是有意义的。