![fac90a2b9f906851bcb0d8446d85a630.png](https://i-blog.csdnimg.cn/blog_migrate/31baea8477497ccb3c5546cc419c6912.jpeg)
来源:百问网
作者:韦东山
本文字数:924,阅读时长:3分钟
阅读本节前先阅读:
Pinctrl子系统重要概念
GPIO子系统重要概念
基于GPIO子系统的LED驱动程序
1.1 确定引脚并生成设备树节点
NXP公司对于IMX6ULL芯片,有设备树生成工具。我们也把它上传到GIT去了,使用GIT命令载后,在这个目录下:
01_all_series_quickstart04_快速入门_正式开始02_嵌入式Linux驱动开发基础知识source05_gpio_and_pinctrloolsimx
安装“Pins_Tool_for_i.MX_Processors_v6_x64.exe”后运行,打开IMX6ULL的配置文件“MCIMX6Y2xxx08.mex”,就可以在GUI界面中选择引脚,配置它的功能,这就可以自动生成Pinctrl的子节点信息。
100ASK_IMX6ULL使用的LED原理图如下,可知引脚是GPIO5_3:
![89ca8b4040f50d65d120d35224ca5782.png](https://i-blog.csdnimg.cn/blog_migrate/e604c833883a739a80a982eaf5ef5bb2.jpeg)
在设备树工具中,如下图操作:
![13009a6dd29bd90e02cc7ac3b401024b.png](https://i-blog.csdnimg.cn/blog_migrate/a2748b1d2f6654bbfad16005f4ed99f9.jpeg)
把自动生成的设备树信息,放到内核源码arch/arm/boot/dts/100ask_imx6ull-14x14.dts中,代码如下:
a. Pinctrl信息:
&iomuxc_snvs {…… myled_for_gpio_subsys: myled_for_gpio_subsys{ fsl,pins = < MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0 >; };
b. 设备节点信息(放在根节点下):
myled { compatible = "100ask,leddrv"; pinctrl-names = "default"; pinctrl-0 = ; led-gpios = ; };
1.2 编译程序
编译设备树后,要更新设备树。
编译驱动程序时,“leddrv_未测试的原始版本.c”是有错误信息的,“leddrv.c”是修改过的。
测试方法,在板子上执行命令:
#insmod leddrv.ko#ls /dev/100ask_led0#./ledtest /dev/100ask_led0 on#./ledtest /dev/100ask_led0 off