IMX6ULL嵌入式Linux驱动学习
IMX6ULL-Linux开发学习
以下内容是我在学习正点原子IMX6ULL开发板alpha中记录的笔记,部分摘录自正点原子IMX6ULL开发手册。
正常工作中进行驱动开发的方式——子系统。
一、pinctrl子系统
借助pinctrl来设置一个pin的复用和电气属性。
pinctrl 子系统主要工作内容如下:
- 获取设备树中的
pin信息。 - 根据获取到的
pin信息来设置pin的复用功能。 - 根据获取到的
pin信息来设置pin的电气特性,比如上/下拉、速度、驱动能力等。
对于使用者来说,只要在设备树里面设置某个pin的相关属性即可,其他的初始化工作由pinctrl子系统来完成,pinctrl子系统源码目录为drivers/pinctrl。根据设备的类型,会创建对应的子节点,然后设备所用pin都放到此节点。
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059 /* SD1 RESET */
>;
};
......
};
二、gpio子系统
使用gpio子系统来使用gpio。
三、驱动编写
- 设备树修改
/ {
......
gpioled {
compatible = "atkalpha,gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpioled>;
led-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
};
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059 /* SD1 RESET */
>;
};
/* 自己定义的led */
pinctrl_gpioled: ledgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0X10B0
>;
};
......
};
};
&tsc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_tsc>;
xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
measure-delay-time = <0xffff

最低0.47元/天 解锁文章
2009

被折叠的 条评论
为什么被折叠?



