本文由博主girlkoo编写,关于E9与TQIMX6Q开发平台新版BSP之KEY、LED的文章。 经过前面的移植,内核已经可以在tqimx6q上正常挂载根文件系统了,接下来开始移植各类设备驱动,本文先来移植按键和LED。之所以从按键和LED开始是因为这两种设备的驱动是最简单的。 按键驱动移植 查看tqimx6q的原理图可知,这块开发板有5个按键,其中,除了reset键之外还有个电源键,这个电源键与其它键有些不同,因此,本文移植剩余的这三个键(电源键在移植电源管理模块时处理)。通过阅读原理图可知,K1、K2、K3分别连接到了GPIO1_28、GPIO4_5和GPIO1_30上,基于内核的gpio-keys驱动模块,可如下编写DTS: - gpio-keys {
- compatible = "gpio-keys";
-
- home {
- label = "HOME Button";
- gpios = <&gpio1 28 1>;
- linux,code = <102>;
- };
-
- enter {
- label = "Enter Button";
- gpios = <&gpio4 5 1>;
- linux,code = <28>;
- };
-
- esc {
- label = "ESC button";
- gpios = <&gpio1 30 1>;
- linux,code = <1>;
- };
- };
LED驱动移植 同样的,查看tqimx6q的原理图可知,tqimx6q的led4、led5、led6分别接到了GPIO3_21、GPIO3_22和GPIO3_23上,其它LED是电源相关的,无法通过GPIO控制。基于内核的gpio-leds驱动,可如下编写DTS: - gpio-leds {
- compatible = "gpio-leds";
-
- led4 {
- label = "led4";
- gpios = <&gpio3 21 0>;
- default-state = "off";
- };
-
- led5 {
- label = "led5";
- gpios = <&gpio3 22 0>;
- default-state = "off";
- };
-
- led6 {
- label = "led6";
- gpios = <&gpio3 23 0>;
- default-state = "off";
- };
- };
测试方法 将以上修改添加到DTS后重新编译DTS并使用新得到的DTB启动内核。按键可以通过hexdump指令测试: - hexdump /dev/input/event0
从内核启动的log可以看出,gpio-keys驱动创建的输入设备节点是event0,因此,使用hexdump该节点可以测试按键是否有效。执行以上指令后按tqimx6q上的K1、K2、K3,hexdump会打印出一排数字,就表示按键驱动已经移植成功了,效果如下: - @tqimx6q #hexdump /dev/input/event0
- 0000000 000c 0000 398c 0005 0001 0066 0001 0000
- 0000010 000c 0000 398c 0005 0000 0000 0000 0000
- 0000020 000c 0000 f56e 0007 0001 0066 0000 0000
- 0000030 000c 0000 f56e 0007 0000 0000 0000 0000
- 0000040 000d 0000 5dc5 0005 0001 001c 0001 0000
- 0000050 000d 0000 5dc5 0005 0000 0000 0000 0000
- 0000060 000d 0000 ba4d 0008 0001 001c 0000 0000
- 0000070 000d 0000 ba4d 0008 0000 0000 0000 0000
- 0000080 000e 0000 e45c 0006 0001 0001 0001 0000
- 0000090 000e 0000 e45c 0006 0000 0000 0000 0000
- 00000a0 000e 0000 c9fb 0009 0001 0001 0000 0000
- 00000b0 000e 0000 c9fb 0009 0000 0000 0000 0000
LED驱动移植完成之后会将led相关的控制节点创建到/sys/class/leds目录下,通过cd切换到该目录下之后会发现有对应的目录:led4、led5、led6,通过如下指令可以点亮相应的led灯: - echo 1 > /sys/class/leds/led4/brightness
通过如下指令可以关闭指定的led灯: - echo 0 > /sys/class/leds/led4/birghtness
其中,brightness是led4目录下一个文件节点,可以通过该节点控制led4的亮度,由于本文使用的led不是pwm控制亮度的,因此,只要不为0,led灯就点亮了。 至此,按键和LED就移植好了。有误之处欢迎指出,有任何疑问可以留言讨论。 相关产品: TQIMX6Q套装:http://www.embedsky.com/index.php?s=/Product/show/id/83.html
|