dts配置
如果想在其它模块中改变gpio引脚的配置,需要在dts中做出相应修改,具体内容如下。不建议在dtsi中修改,我个人理解dtsi面向芯片,由芯片设计厂家完成。开发人员拿到芯片后,依据芯片设计硬件电路板,硬件电路板相关的模块配置都记录在dts文件中,编译时,dts中的配置会覆盖dtsi中的配置。
1.在dts(dtsi)的目标模块中添加-gpio或者gpios节点。
&dvb_widgets {
status = "disabled";
dw_name = "dvb-widgets";
dw_num = <8>;
led-gpios = <&porta 27 GPIO_ACTIVE_HIGH>;
};
2.dts的gpio节点需要添加gpio-ranges,pinctrl-names,pinctrl-0属性。
&gpio0 {
status = "disabled";
porta: gpio-port@0 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio27_default>;
gpio-ranges = <&pinctrl 27 55 111>;
3.dts的pinctrl节点需要添加引脚复用相关配置。如果不进行引脚复用,倘若要操作的引脚被复用成spi功能引脚,gpiolib函数调用后可能无法改变引脚电平。
&pinctrl {
status = "disabled";
pinctrl_gpio27_default: gpio27-default{
mux{
groups = "gpio27_group";
function = "gpio27_func";
};
conf {
groups = "gpio27_group";
input-enable = <1>;
};
};
};
驱动配置
Linux driver dts使用,实例驱动编写-CSDN博客https://blog.csdn.net/songyulong8888/article/details/78115512 具体的驱动配置,可以参考这篇文章。在使用过程中,需要添加相关头文件,必须要添加#include <linux/gpio/consumer.h>。我是通过中断加打印信息的方式,验证gpiolib函数调用有无成功。本人是通过zebu环境,远程操作验证的,如果单纯验证功能是否实现,可以使用软件示波器操作。但抓波形后,系统加载过程终止(我是在芯片原厂进行驱动维护,要保证系统正常加载)。所以我采用上面的博客链接,添加了虚拟驱动,并在该驱动中改变gpio27引脚的电平,以触发与之相连的gpio0引脚的中断。这样,可以兼顾系统加载与gpiolib测试的需要。