【问题标题】:Embedded Linux Newbie Questions嵌入式 Linux 新手问题
【发布时间】:2015-01-13 02:26:37
【问题描述】:

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

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

2) 混合和匹配:我的印象是,我可以混合和匹配引导加载程序、dtb、内核、rootfs 和模块的任意组合

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

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

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

在此先感谢您,我知道这些是一些基本问题,但我们非常感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    2) 混合和匹配:我的印象是,我可以混合和匹配引导加载程序、dtb、内核、rootfs 和模块的任意组合

    内核:必须知道它是为哪个芯片编译的
    dtb:必须知道板子详细信息和芯片,即多少ram,为SPI配置一个GPIO 引导加载程序:必须知道芯片和 uEnv.txt 必须有内核和 dtb 位置的参数
    rootfs:完全独立
    模块:必须使用特定版本的内核编译

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

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

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

    由于 dtb 文件设置了所需的寄存器,内核会知道如何操作吗?

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

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

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

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

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

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

    附录

    当我说 rootfs 时,我指的是预构建的 rootfs

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

    【讨论】:

    • 感谢您的回答。只是一件事,当我说 rootfs 时,我指的是预构建的 rootfs,而不是它使用的文件系统。
    • @user2205930 - 见附录。
    猜你喜欢
    • 2011-11-30
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多