将dts中没必要的设备删掉以及defconfig中没必要的配置删掉,可以加快kernel的启动时间。
本文主要讲述如何通过dt_to_config
工具,将dts中的设备与.config中的配置匹配起来,通过它们之间的匹配关系,来决定优化哪些设备和模块。
dt_to_config介绍
在linux 4.8之后,引入了一个工具scripts/dtc/dt_to_config
,这个工具可以将dts或dtb的信息与当前kernel所使用的.config
一起解析,然后将dts中的节点信息与.config
的配置信息和所使用的源码信息一一匹配。dt_to_config
用法如下:
1 | sub usage() |
实践
刚好当前开发使用的是imx8 4.9.51的内核版本,需要优化Linux Kernel,刚好可以借助这个工具来看当前系统配置和使用了哪些资源。使用如下:
注意,必须在kernel的目录下执行。1 | # ./scripts/dtc/dt_to_config arch/arm64/boot/dts/freescale/fsl-imx8-xxx.dtb --short-name --config ./.config --config-format > dts_output.txt |
对于各个参数的解释如下:
1.
fsl-imx8-xxx.dtb
:为xxx项目所生成的dtb文件;2.
--short-name
:do not show the path portion of the node name3.
--config ./.config
:指定当前目录下的.config文件进行匹配4.
--config-format
:config file friendly output format最终,在
dts_output.txt
文件中会以如下的方式呈现出来:1 | # Md-c-------y- : camera : fsl,mxc-md : drivers/media/platform/imx8/mxc-media-dev.c : CONFIG_IMX8_MEDIA_DEVICE : y |
接下来以下面的信息来分段解释:
1 | -d-c-E-----y- : csi@58227000 : fsl,mxc-mipi-csi2 : drivers/media/platform/imx8/mxc-mipi-csi2.c : CONFIG_IMX8_MIPI_CSI2 : y |
1.
-d-c-E-----y-
:flags,具体干啥用的目前未知;2.
: csi@58227000
:dts里的node;3.
: fsl,mxc-mipi-csi2
:dts里的compatible属性;4.
: drivers/media/platform/imx8/mxc-mipi-csi2.c
:与之对应的驱动文件;5.
: CONFIG_IMX8_MIPI_CSI2
:与之对应的配置选项6.
: y
:配置的值关于这部分的内容可以参照:Dt_debugging_part_3
———————
## 注意事项
(1)、
dt_to_config
目前还不能完全解释dts文件,刚开始的时候我尝试去解析dts文件,但会报如下类似的错误:1 | arch/arm64/boot/dts/freescale/fsl-imx8-ca35.dtsi:16:45: error: no include path in which to search for dt-bindings/clock/imx8qxp-clock.h |
也就是说,目前还不能解析
#include带<>的文件
,需要将其转换为#include带” ”的文件
,可以将#include <dt-bindings/clock/imx8qxp-clock.h>
转换为#include “../include/dt-bindings/clock/imx8qxp-clock.h”
就不会报错了。但是,这种方法很费劲,最终干脆直接解析
.dtb
文件。(2)、
正如
dt_to_config
中的usage
所说的:> 该程序使用启发式技术来猜测每个驱动程序支持哪一个兼容的字符串和哪个配置选项启用驱动程序。不要相信所报告的信息是完全正确的。
这个程序的目的是帮助确定的过程设备树的正确内核配置,但事实并非如此一个完全自动化的过程 - 人类的参与可能仍然是需要!
所使用的驱动程序匹配启发式是搜索源文件包含用引号括起来的兼容字符串。此程序可能无法找到所有匹配a的驱动程序兼容字符串。
因此,最终的结果只是参考,并且需要自己去判断。
(3)、
关于device tree的讨论和改进,linux社区到现在还在努力着。关于device tree最新的消息,可以参照以下资料:
https://elinux.org/Device_Tree_frowand
https://elinux.org/Device_tree_future#presentation_material_2
https://elinux.org/images/e/e5/Dt_debugging_part_3.pdf
https://github.com/torvalds/linux/blob/master/scripts/dtc/dt_to_config