LED 灯使用了 GPIO1_IO03 这个 PIN
1、添加 pinctrl 节点
打开 imx6ull-alientekemmc.dts,iomuxc 节点的 imx6ul-evk 子节点下创建一个名为“pinctrl_led”的子节点,节点前缀一定要为“pinctrl_”
/* zuozhongkai LED */
pinctrl_led: ledgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
>;
};
2、添加 LED 设备节点
在根节点“/”下创建 LED 灯节点,节点名为“gpioled”
gpioled {
#address-cells = <1>;
#size-cells = <1>;
compatible = "atkalpha-gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led>;
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
3.检查PIN是否被其他外设使用
4.进入“/proc/device-tree”目录中,检查节点是否存在
LED 灯驱动程序编写
/* newchrled设备结构体 */
struct newchrled_dev{
dev_t devid; /* 设备号 */
struct cdev cdev; /* cdev */
struct class *class; /* 类 */
struct device *device; /* 设备 */
int major; /* 主设备号 */
int minor; /* 次设备号 */
struct device_node *nd; /* 设备节点 */
int led_gpio; /* led 所使用的 GPIO 编号 */
};
init初始化函数
{
//获取设备树信息
获取设备节点: gpioled
获取设备树中的 gpio 属性,得到 LED 所使用的 LED 编号
设置 GPIO1_IO03 为输出
//字符设备驱动相关
创建设备号
初始化 cdev
添加一个 cdev
创建class
创建device
}
exit退出函数
{
取消REG映射
删除 cdev
注销设备号
device_destroy
class_destroy
}
write函数
{
gpio_set_value(dev->led_gpio, 0); /* 打开 LED 灯 */
gpio_set_value(dev->led_gpio, 1); /* 关闭 LED 灯 */
}