[RK3288]LED亮灯GPIO驱动编写及dts文件架构介绍(基于android8.1使用android studio3.6开发)
·
- 今天学习了RK3288的dts文件结构,特地写了一个gpio驱动点亮led灯,在这里把步骤代码分享给大家。
- 首先我们要在kernel/driver/gpio下创建个文件,文件名随便。

- 创建完之后我们要在当前路径下的Makefile文件添加声明(根据文件名添加)。

CONFIG_GPIO_RK8XX这个名字可以自己定,后面的.o文件一定要跟你创建的文件名一致。 - 当然这还不够,继续找到rockchip_defconfig配置文件添加声明。

注意:这里的CONFIG要与你上面定义要一致。 - 下面开始在刚刚创建的文件中写入gpio驱动代码(内容太多我就展示主要代码,要源码可以找我拿。Q:812417530)
static const struct of_device_id of_leds_match[] = {
{ .compatible = "firefly,led", },
{},
};
//of_device_id 用于device和driver的match
//compatible 在.dts文件的每个设备,都有一个compatible属性,compatible属性用户驱动和设备的绑定。
static int led_probe(struct platform_device *pdev)
{
int ret = -1;
int gpio;
enum of_gpio_flags flag;
struct device_node *led_node = pdev->dev.of_node;
//设备节点结构体
gpio = of_get_named_gpio_flags(led_node, "led-work", 0, &flag);
if (!gpio_is_valid(gpio)){
printk("invalid led-work: %d\n",gpio);
gpio_free(gpio);
return -1;
}
if (gpio_request(gpio, "led_work")) {
printk("gpio %d request failed!\n",gpio);
gpio_free(gpio);
return ret;
}
gpio_direction_output(gpio, 1);
return 0;
}
//of_get_named_gpio_flags 从设备树中读取 led-power 的 GPIO 配置编号和标志,gpio_is_valid 判断该 GPIO 编号是否有效。
//gpio_request 则申请占用该 GPIO。如果初始化过程出错,需要调用 gpio_free 来释放之前申请过且成功的 GPIO 。
//调用 gpio_direction_output 就可以设置输出高还是低电平,因为是 GPIO_ACTIVE_HIGH ,如果要灯亮,需要写入 1 。
- 在dts文件中添加驱动描述:
led222: led222{
compatible = "firefly,led";
led-work = <&gpio7 4 GPIO_ACTIVE_HIGH>;
status = "okay";
}
led222:led222{}这两个参数我感觉就是个变量名可以自己随便定,名字不一样也可以。
我的RK3288dts文件是"rk3288-evb-android-rk808-edp.dts",路径:/kernel/arch/arm/boot/bts
更详细dts解析可以参考dts解析
8. 编译kernel.img,resource.img烧录到板子
kernel 编译:
cd kernel
make ARCH = arm rockchip_deconfig
make ARCH = arm rk3288-evb-android-rk808-edp.img -j12
- 编译完成后会在kernel路径下生成kernel.img,resource.img,用烧录工具烧录到板子观看效果即可(烧录工具可以找我拿。Q:812417530)

- 观看效果,用adb命令查询gpio引脚高低电平
rk3288:/ # cat /sys/kernel/debug/gpio
cat /sys/kernel/debug/gpio
GPIOs 0-23, platform/pinctrl, gpio0:
gpio-5 ( |power ) in hi
gpio-6 ( |vcc_phy ) out hi
gpio-12 ( |otg_drv_gpio ) out lo
gpio-14 ( |vcc_host ) out hi
GPIOs 24-55, platform/pinctrl, gpio1:
GPIOs 56-87, platform/pinctrl, gpio2:
GPIOs 88-119, platform/pinctrl, gpio3:
GPIOs 120-151, platform/pinctrl, gpio4:
gpio-146 ( |bt_default_wake ) in hi
gpio-148 ( |reset ) out hi
gpio-149 ( |bt_default_reset ) out lo
gpio-151 ( |bt_default_wake_host) in hi
GPIOs 152-183, platform/pinctrl, gpio5:
gpio-163 ( |bt_default_rts ) in hi
GPIOs 184-215, platform/pinctrl, gpio6:
GPIOs 216-247, platform/pinctrl, gpio7:
gpio-218 ( |enable ) out hi
gpio-219 ( |led_work ) out hi

10. 如果上述内容对你有帮助,麻烦点赞关注一下哦,谢谢!!!
更多推荐



所有评论(0)