2014-11-15 62 views
1

所以我正在学习嵌入式Linux,并有几个问题,我似乎无法找到答案。嵌入式Linux新手问题

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

2)混合与匹配:我的印象是,我可以混合和匹配引导装载程序,DTB,内核,根文件系统,并给予模块的任意组合下列

  • 内核下:必须知道哪些芯片它是编译为
  • dtb:必须知道板的细节和芯片,即多少ram,配置一个GPIO的SPI
  • 引导加载程序:必须知道芯片和uEnv.txt必须有内核和dtb的参数位置
  • rootfs:完全独立
  • 模块:必须与内核

3)驱动程序的特定版本的编译:如果我想加载一个SPI驱动,我需要具体的事情还是会内核懂得,因为DTB文件操作本设置所需的寄存器?

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

先谢谢你,我知道这些都是一些基本的问题,但任何帮助表示赞赏。

回答

3

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

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

2)混合与匹配:我的印象是,我可以混合和匹配引导装载程序,DTB,内核,根文件系统的任意组合下,和模块给出以下

内核:必须知道哪些芯片被编译为
DTB:必须知道主板的详细资料和芯片,即多少RAM如何,对于SPI 引导加载器配置的GPIO:必须知道芯片和uEnv.txt必须为内核和DTB位置PARAMS
rootfs:完全独立
模块:必须与特定版本的内核一起编译

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

3)驱动程序:如果我想加载一个SPI驱动做我需要什么特定的或

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

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

设备树必须指定哪个驱动程序分配/分配给每个设备的设备和/或所有资源。

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

4)模块:这些只是依赖于内核,还是他们需要知道关于芯片和电路板的东西?

您对“模块”的使用不明确。源代码文件有时被称为“模块”。大概你真的意思是可加载的内核模块。

尽管大多数人将内核模块(仅)与设备驱动程序关联,但其他内核服务(如文件系统和网络协议处理程序)也可以构建为模块。 内核模块与静态链接(即构建在内核中)的主要基本原理是运行时可配置性(这反过来提高了内存效率)。可选特性,服务和驱动程序可以不在启动的内核之外,但仍可以在需要时加载。

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

附录

,当我说的rootfs我指的是一个预置的根文件

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

+0

谢谢你的回答。只是一件事,当我说rootfs时,我指的是预建的rootfs,而不是指它使用的文件系统。 – user2205930

+0

@ user2205930 - 参见Addentum。 – sawdust