Linux kernel 设备树和代码大小

Linux kernel 设备树和代码大小,linux-kernel,kernel,arm,linux-device-driver,device-tree,Linux Kernel,Kernel,Arm,Linux Device Driver,Device Tree,根据我对设备树的理解,一个主要用途是从驱动程序中删除特定于平台的代码,以支持多个平台。设备树如何处理单个外设的多个配置 例如,如果我想在平台A中使用LCD面板A,在平台B中使用LCD面板B,我是否需要将LCD面板A和面板B的相关代码都保留在最终二进制文件中?如果是这种情况,并且有多个外设具有多个选项,那么二进制文件中似乎会有大量额外的代码 例如,如果我想在平台A中使用LCD面板A,在平台B中使用LCD面板B,那么我是否需要将LCD面板A和面板B的相关代码都保留在最终二进制文件中 司机有三种情况

根据我对设备树的理解,一个主要用途是从驱动程序中删除特定于平台的代码,以支持多个平台。设备树如何处理单个外设的多个配置

例如,如果我想在平台A中使用LCD面板A,在平台B中使用LCD面板B,我是否需要将LCD面板A和面板B的相关代码都保留在最终二进制文件中?如果是这种情况,并且有多个外设具有多个选项,那么二进制文件中似乎会有大量额外的代码

例如,如果我想在平台A中使用LCD面板A,在平台B中使用LCD面板B,那么我是否需要将LCD面板A和面板B的相关代码都保留在最终二进制文件中

司机有三种情况

  • 完全不同的芯片和总线/子系统
  • 相同的总线/子系统,但不同的芯片组
  • 相同的总线/子系统,相同的芯片组,不同的参数
  • 由此你应该明白答案。对于LCD而言,驱动程序通常位于SOC上,面板只需更改参数,如显示几何结构(1/4 VGA对1/2 VGA)、定时(50Hz对75HZ)以及可能的控制信号(OE主动低/高、主动/被动矩阵等)。实际上,设备树概念非常好地处理了这一问题

    在设备树
    之前,机器文件会将平台数据传递给驱动程序;其中包含上述参数。由于机器文件是代码,面板A和面板B的两个版本都必须包含在内核中。这并不太糟糕,但对于具有1000个面板的Ubuntu类型版本,这可能是一个问题。在此之前,引导加载程序只传递一个机器id,并键入要使用的机器文件。现在,设备树由引导加载程序传递,机器文件通常转换为设备树结构

    现在,如果机器有不同的以太网控制器芯片,您可以使用设备树和模块来降低内核大小。这是上面提到的第二个案例

    第三种情况也可以使用模块处理。例如,wifi驱动器和HSDPA调制解调器可以是不同平台上的通信机制。802.11子系统可以是一个模块,可以是n-gsm代码。此外,HSDPA调制解调器可以使用USB或UART,而wifi可以使用SPI或SDIO。其中一些代码可能无法转换为模块,因为它可能与网络堆栈紧密耦合。通常会尽一切努力将此开销降至最低

    因此,一般来说,设备树的概念实际上是减少代码;至少在SDRAM中,SDRAM是一种额外的主要资源。NAND闪存或其他大容量存储可能更大。您可以选择为特定的硬件静态配置设备。如果您打算在一个映像中支持两个面板,那么设备树会更好。事实上,它们在几乎所有情况下都更好

    例如,如果我想在平台A中使用LCD面板A,在平台B中使用LCD面板B,那么我是否需要将LCD面板A和面板B的相关代码都保留在最终二进制文件中

    司机有三种情况

  • 完全不同的芯片和总线/子系统
  • 相同的总线/子系统,但不同的芯片组
  • 相同的总线/子系统,相同的芯片组,不同的参数
  • 由此你应该明白答案。对于LCD而言,驱动程序通常位于SOC上,面板只需更改参数,如显示几何结构(1/4 VGA对1/2 VGA)、定时(50Hz对75HZ)以及可能的控制信号(OE主动低/高、主动/被动矩阵等)。实际上,设备树概念非常好地处理了这一问题

    在设备树
    之前,机器文件会将平台数据传递给驱动程序;其中包含上述参数。由于机器文件是代码,面板A和面板B的两个版本都必须包含在内核中。这并不太糟糕,但对于具有1000个面板的Ubuntu类型版本,这可能是一个问题。在此之前,引导加载程序只传递一个机器id,并键入要使用的机器文件。现在,设备树由引导加载程序传递,机器文件通常转换为设备树结构

    现在,如果机器有不同的以太网控制器芯片,您可以使用设备树和模块来降低内核大小。这是上面提到的第二个案例

    第三种情况也可以使用模块处理。例如,wifi驱动器和HSDPA调制解调器可以是不同平台上的通信机制。802.11子系统可以是一个模块,可以是n-gsm代码。此外,HSDPA调制解调器可以使用USB或UART,而wifi可以使用SPI或SDIO。其中一些代码可能无法转换为模块,因为它可能与网络堆栈紧密耦合。通常会尽一切努力将此开销降至最低


    因此,一般来说,设备树的概念实际上是减少代码;至少在SDRAM中,SDRAM是一种额外的主要资源。NAND闪存或其他大容量存储可能更大。您可以选择为特定的硬件静态配置设备。如果您打算在一个映像中支持两个面板,那么设备树会更好。事实上,它们在几乎所有的情况下都更好。假设:如果你有5个LCD面板和5个平台(机器),每一个面板保存5个DTSI文件,每个平台/机器都有不同的DTSI文件。p> 对于单个配置: 在您感兴趣的特定平台/机器的dtsi文件中包含特定的dtsi面板文件。 结果: -通过这种方式,您不必在板文件中传递所有面板配置和开关LCD选项。简单来说,您不必创建单独的boa