linux设备树插件

什么是设备树插件?

在linux内核版本4.4之后,就引入了一个动态设备树(设备树插件)的概念。在4.4版本之前我们增加或修改设备的时候,需要进入内核源码中修改设备树并且编译下载到开发板中。为了使得开发更加方便快捷,就引入了类似于设备树“补丁”的设备树插件。我们只要写好设备树插件,就可以直接被内核识别并且将里面的内容补充到设备树中,不需要重新编译设备树。这样子还有一个好处就是通过修改设备树插件的内容来使能或者失能某些设备以便于复用为不同功能。
举个例子:usart3使用了引脚3和4,i2c也是可以用引脚3和4使能的。但是我现在不需要usart3了,于是我就可以在设备树插件中失能usart3并且使能i2c。这样子便于使得不同的引脚可以复用为不同的功能而不用在硬件上固定引脚为某些功能,某些成品项目不能随便修改设备树就可以使用这个方法扩展功能。

如何添加设备树插件

首先创建一个.dts后缀的文件,并且以如下设备树插件格式写好节点

/dts-v1/;
/plugin/;

 / {
        fragment@0 {
            target-path = "/";
            __overlay__ {
                /*在此添加要插入的节点*/
            };
        };
 };

/dts-v1/用于指定dts版本
/plugin/表示允许使用未定义的引用并记录它们,设备树插件中可以引用主设备树中的节点,而这些“引用的节点”对于设备树插件来说就是未定义的,所以设备树插件应该加上“/plugin/”。
target-path指定设备树插件的加载位置,默认我们加载到根节点下,既“target-path =“/”。
linux设备树插件_第1张图片
设备树插件与设备树一样都是使用DTC工具编译,只不过设备树编译为.dtb。而设备树插件需要编译为.dtbo。 我们可以使用DTC编译命令编译生成.dtbo,但是这样比较繁琐、容易出错。

我们可以修改内核目录/arch/arm/boot/dts/overlays下的Makefile文件, 添加我们编辑好的设备树插件。
linux设备树插件_第2张图片
在最下面添加一行并且以刚刚创建的文件名命名,后缀为.dtbo
然后将.dtb文件放入/arch/arm/boot/dts/overlays中使用make dtbs编译,生成的.dtbo位于内核根目录下的“/arch/arm/boot/dts/overlays”目录下。

最后,使用uboot加载编写好的设备树插件。将需要加载的.dtbo文件放入开发板的“/usr/lib/linux-image-4.19.35-imx6/overlays/”目录下。写入uEnv.txt配置文件书写格式为“dtoverlay=<设备树插件路径>”。 修改完成后保存、退出。执行reboot命令重启系统。正常情况下我们可以在“/proc/device-tree”找与插入的设备节点同名的文件夹。

你可能感兴趣的:(linux驱动开发,笔记)