Linux LED子系统详解 天天速看料
2023-06-11 04:00:45
来源:
jf_30051736
LinuxLED子系统详解
(相关资料图)
1. 简介
专栏总目录Linux为了广泛通用性及适应性,各种框架都做得非常灵活而又复杂,小小的LED也不例外。支持了不 同的LED硬件设备,例如gpio接口,i2c接口,LED芯片等。为了支持各种点灯效果,使用了Trigger框架,除了系统默认的一些trigger外,用户可以创建自定义trigger。因此,为了点个灯,软件开发人员需要了解Linux中gpio, led, trigger三个模块。led框架核心文件:/kernel/include/linux/leds.h // 重要,led相关结构体,宏定义,trigger等目录 /kernel/driver/leds/ 下led-class.c // 定义led class及相关接口led-core.c // export 了闪烁,设置亮灭等接口led-gpio.c // "leds-gpio" 驱动leds.h // 提供几个接口,如:led_init_core
trigger 框架核心文件:目录 /kernel/driver/leds/ 下 led-triggers.c // export了许多接口,包括:led_trigger_register目录 /kernel/driver/leds/trigger 下 ledtrig-backlight.c ledtrig-camera.c ledtrig-cpu.c ledtrig-default-on.c ledtrig-disk.c ledtrig-gpio.c ledtrig-heartbeat.c // 心跳灯效果 ledtrig-mtd.c ledtrig-oneshot.c ledtrig-panic.c ledtrig-timer.c // 定时器ledtrig-transient.c
以参考上面的trigger例子写自己的trigger,或者改造,需要在make menuconfig里面选上才会编译,如下:
2. LED 调试
2.1 调试总览,调试步骤分析
步骤 一 : dts配置步骤 二 :编译烧写,调试2.2 调试过程
步骤 一 : dts配置① leds节点是在rk3588-evb.dtsi文件中定义
#include "rk3588-evb.dtsi"
② 定义四个led节点: (检查gpio是否被复用)
使用命令:dmesg | grep cannot检查是否有gpio冲突,有冲突的话驱动代码会中断,后面的dts就不会生效。
&leds { status = "okay"; compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = < &work1_led_gpio >, < &work2_led_gpio >,< &work3_led_gpio >,< &work4_led_gpio >; work1_led: work1{ default-state = "off"; gpios = < &gpio4 RK_PD2 GPIO_ACTIVE_HIGH >; }; work2_led: work2{ default-state = "off"; gpios = < &gpio4 RK_PD3 GPIO_ACTIVE_HIGH >; }; work3_led: work3{ default-state = "off"; gpios = < &gpio4 RK_PD4 GPIO_ACTIVE_HIGH >; }; work4_led: work4{ default-state = "off"; gpios = < &gpio4 RK_PD5 GPIO_ACTIVE_HIGH >; };};&pinctrl { leds{ work1_led_gpio: work1-led-gpio{ rockchip,pins = < 4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_down >; }; work2_led_gpio: work2-led-gpio{ rockchip,pins = < 4 RK_PD3 RK_FUNC_GPIO &pcfg_pull_down >; }; work3_led_gpio: work3-led-gpio{ rockchip,pins = < 4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down >; }; work4_led_gpio: work4-led-gpio{ rockchip,pins = < 4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down >; }; }; }
步骤二:调试,验证:在用户空间操作led
使用了驱动框架后可以不需要编写应用程序就可以测试led是否能正常被点亮与熄灭,这些都可以在sysfs文件系统中完成。在装载驱动后可以在/sys/class/leds/目录下看到对应的led设备目录,如本文中的work1(填充设备时的设备名字段)。
ls /sys/class/leds/work1
brightness power ueventmax_brightness subsystem
点亮led
echo 1 > brightness
熄灭led
echo 0 > brightness
审核编辑:汤梓红
[责任编辑:]
网罗天下
推荐内容
- 赵探长晒南苏丹训练视频 个个身高腿长&投篮精准 a>
- 神火股份上半年净利润27.39亿元 收购云南神火股权提升竞争力 a>
- 美国华人妈妈,正在批量制造谷爱凌 a>
- 奇思妙想的座驾精灵又来了 广汽丰田2023座驾精灵CSO创想营正式开营 a>
- tari 50游戏包或登陆Xbox、PlayStation和Switch a>
- 睡觉时手机在枕边充电有多危险?网上不少科普,但实际情况更复杂 a>
- 外墙脱落频伤人何解 a>
- 万祥科技8月22日快速回调 a>
- 巧取地下水 凉风徐徐来 “绿色空调”节能更怡人 a>
- 宝泰隆(601011):8月21日北向资金减持42.3万股 a>
- 林清玄散文读后感 优秀1000字作文 a>
- 武汉城市圈发展现状(新界定的武汉都市圈让武汉发展有两种变化 a>
- 深化合作 共同发展——八钢公司与金风科技签订战略合作协议 a>
- 如何做一个满分的“中考家长” a>
- LPR调降点评:非对称降息 维护银行净息差 a>
- “体育渣”变世界冠军,这个小姑娘太酷了! a>
- 辰字的含义是什么 a>
- 收评:两市缩量调整沪指跌1.24% 环保板块持续活跃 a>
- 美俄日丹4国宇航员本周将共同飞赴国际空间站 驻留半年 a>
- 北路智控:井下巡检机器人目前在部分场景下已经实现了订单 a>