硬件上: 使用 rk3588s
软件上: 使用 android12
驱动层:
参考文档: 正点原子的 6ull 的手册。
驱动的位置: 3588s-android12/kernel-5.10/drivers/leds/ leds-gpio.c
驱动的说明:3588s-android12/kernel-5.10/Documentation/devicetree/bindings/leds/common.yaml
目前我使用的是客户的板子进行测试,
客户板子上 使用的是 GPIO4A7, r67 是没有电压的,正好我可以用来测试。
设备树的编写:
至于为什么 会有两个 节点,我不清楚,要去看 驱动源码,我这里抄的正点原子的。
gpio_leds {
compatible = "gpio-leds";
led0 {
label = "red";
gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
pinctrl-names = "default";
pinctrl-0 = <&gpio_led>;
};
接下来还需要配置一下, pinctrl
led{
gpio_led:gpio_led{
rockchip,pins = <4 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
};
我自己的猜测: 必须要在设备树中加上 pinctrl-0 , 节点才行。 我看 pinctrl 节点中 ,所有的服用都写了,驱动的设置应该不是 根据 pinctrl 来设置的。
最终又加上了这些。
menuconfig 使能:
可以看到 menuconfig里面默认是是能的。
device drivers/led support/ led support for gpio connected
默认已经编译成了 .o
先来编译 + 烧写测试一下:
是可以的, gpio 已经变成了高电平。
接下来是 关于 led 驱动的解析:
我看了一下,这部分比较难的,我自己看不懂。
大致的模型是这样的。
关于设备数的配置。
看一下我自己的源码的设置。
关于 .o 文件。
去驱动文件夹 看一下。可以看到 ,这几个 文件都是有了。
所以 这几个 宏定义, 应该是 都有的。
网上的资料有一个 比较有意思。
接下来就是 关于源码的分析了。
疑问: led 驱动,使用的是 platform 子系统,但是我看到最后 也没有看到 platform_register
只有一个 关于 fs 的 regiter , 不是很理解这里。
led-gpio.c 是关于操作硬件的,最终会涉及到对寄存器的操作。
应用层:
测试: