重庆网站建设技术支持,超炫个人业务网站源码,重庆网站备案需要几天,商业网站开发需求目录
一、引言
二、设备树插件格式
三、实验说明
四、实验准备
4.1 通过内核工具编译设备树插件
五、实验效果
5.1 uboot加载
5.2 加载RGB驱动 一、引言
Linux4.4以后引入了动态设备树#xff08;Dynamic DevicesTree#xff09;#xff0c;这里翻译位“设备树插件…目录
一、引言
二、设备树插件格式
三、实验说明
四、实验准备
4.1 通过内核工具编译设备树插件
五、实验效果
5.1 uboot加载
5.2 加载RGB驱动 一、引言
Linux4.4以后引入了动态设备树Dynamic DevicesTree这里翻译位“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中并被内核识别。例如如果要在系统中增加RGB灯驱动那么可以针对RGB这个引荐设备写一个设备树插件然后编译、加载到系统即可无需重更新编译整个设备树。
二、设备树插件格式
设备树插件拥有相对固定的格式甚至可以认为它知识把设备节点加了一个“壳”编译内核能够动态加载它。格式如下。
/* 设备树插件基本格式*/
/dts-v1/
/plugin//{fragment0 {target-path /;__overlay__{/*在此添加要插入的节点*/}}
}
第2行用于指定dts版本。第3行表示允许使用未定义的引用并记录他们设备树插件中可以引用主设备树中的节点而这些“引用的节点”对于设备树插件来说就是未定义的所以设备树插件应该加上“/plugin”。第7行指定设备树插件的加载位置默认我们加载到根节点下既“target-path “/”。第8-9行我们要插入的设备及节点或者要引用追加的设备树节点放在__overlay__{...};内。
三、实验说明
实现方法是复制上一节RGB灯的设备节点到设备树插件模板中如下所示。 /dts-v1/;/plugin/;#include ../imx6ul-pinfunc.h#include dt-bindings/gpio/gpio.h/ {fragment0 {target-path /;__overlay__ {rgb_led{#address-cells 1;#size-cells 1;compatible fire,rgb_led;ranges;/*红灯节点*/rgb_led_red0x020C406C{compatible fire,rgb_led_red;reg 0x020C406C 0x000000040x020E006C 0x000000040x020E02F8 0x000000040x0209C000 0x000000040x0209C004 0x00000004;status okay;};/*绿灯节点*/rgb_led_green0x020C4074{compatible fire,rgb_led_green;reg 0x020C4074 0x000000040x020E01E0 0x000000040x020E046C 0x000000040x020A8000 0x000000040x020A8004 0x00000004;status okay;};/*蓝灯节点*/rgb_led_blue0x020C4074{compatible fire,rgb_led_blue;reg 0x020C4074 0x000000040x020E01DC 0x000000040x020E0468 0x000000040x020A8000 0x000000040x020A8004 0x00000004;status okay;};};};};};
第4-5行RGB灯设备节点使用到的头文件第11-46行之前编写的RGB灯设备节点
这样RGB灯的设备树插件已经做好了下面重点是编译设备树插件并把设备树插件添加到系统。
四、实验准备
在板卡上的部分GPIO可能会被系统占用在使用前请根据需要修改/boot/uEndv.txt文件可注释掉某些设备树插件的加载重启系统释放相应的GPIO引脚。 如若运行代码时出现“Devices or resources busy”或者运行代码卡死等等现象请按照上述情况检查并按上述步骤操作。
4.1 通过内核工具编译设备树插件
设备树插件与设备树一样都是使用DTC工具编译只不过设备树编译为.dtb。而设备树插件需要编译为.dtbo。可以使用DTC编译命令编译生成.dtbo但是这样比较繁琐容易出错。
可以修改内核目录/arch/arm/boot/dts/overlays下的Makefile文件添加编译好的设备插件。并把设备树插件文件放到和Makefile文件同级目录下以进行设备树插件的编译。 在内核的根目录下执行如下命令即可 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- npi_v7_defconfig make ARCHarm -j4 CROSS_COMPILEarm-linux-gnueabihf- dtbs 生成的.dtbo位于内核根目录下的/arch/arm/boot/dts/overlays目录下。 五、实验效果
上一节编译生成了.dtbo。.dtbo可以被动态的加载系统这一小节介绍将设备树插件加入系统的方法。
5.1 uboot加载
linux内核从4.4开始支持设备号树插件支持并不代表默认开启。所以使用之前要配置内核开启整个功能。
首先要把编译好的设备树插件文件上传到开发板中。
可以使用uboot加载编写好的设备树插件只需要完成简单的两个步骤
1、将需要加载的.dtbo文件放入“/usr/lib/linux-image-4.19.35-imx6/overlays/”目录下。 2、将对应的设备树插件加载配置写入uEnv.txt配置文件系统启动过程中会自动从uEnv.txt读取要加载的设备树文件。 添加好重启开发板并输入对应的命令可以查看设备树插件是否加载成功 ls /sys/firmware/devicetree/base/ #或者 ls /proc/device-tree 看到这些文件证明已经加载成功了 删除设备树“插件”时只需要将对应的插件在“/boot”目录下uEnv.txt文件中添加#号注释即可。
5.2 加载RGB驱动
驱动程序和应用程序的使用方法与上一节完全一致。