TQIMX6UL 内核版本4.1.15 以下使用扩展接口的PWM2_OUT引脚为例介绍修改一个被占用的管脚,将其修改为普通gpio 1.在引脚定义arch/arm/boot/dts/imx6ul-pinfunc.h文件中搜索 PWM2_OUT,搜索的结果如下所示: #define MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x0080 0x030C 0x0000 0x0 0x0 #define MX6UL_PAD_GPIO1_IO09__WDOG1_WDOG_ANY 0x0080 0x030C 0x0000 0x1 0x0 #define MX6UL_PAD_GPIO1_IO09__SPDIF_IN 0x0080 0x030C 0x0618 0x2 0x0 #define MX6UL_PAD_GPIO1_IO09__CSI_HSYNC 0x0080 0x030C 0x0524 0x3 0x1 #define MX6UL_PAD_GPIO1_IO09__USDHC2_RESET_B 0x0080 0x030C 0x0000 0x4 0x0 #define MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x0080 0x030C 0x0000 0x5 0x0 #define MX6UL_PAD_GPIO1_IO09__USDHC1_RESET_B 0x0080 0x030C 0x0000 0x6 0x0 #define MX6UL_PAD_GPIO1_IO09__UART5_DCE_CTS 0x0080 0x030C 0x0000 0x8 0x0 #define MX6UL_PAD_GPIO1_IO09__UART5_DTE_RTS 从搜索可以看出,PWM2_OUT对应的GPIO是GPIO1_IO09管脚 2.打开 arch/arm/boot/dts/tq-imx6ul.dts,搜索 PWM2_OUT pinctrl_pwm2: pwm2grp { fsl,pins = < MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 >; }; 可知 PWM2_OUT被用于串口 PWM2. 搜索pinctrl_pwm2将status改为disabled关闭该pwm2引脚功能 &pwm4 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm4>; clocks = <&clks IMX6UL_CLK_PWM4>, <&clks IMX6UL_CLK_PWM4>; clock-names = "ipg", "per"; status = "disabled"; }; 再搜索gpio1 9相关,将gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;屏蔽 reg_sd1_vmmc: regulator@1 { compatible = "regulator-fixed"; regulator-name = "VSD_3V3"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; //gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; enable-active-high; }; 3.将 PWM2_OUT配置成 gpio: 搜索 imx6ul-evk,在组里面添加步骤 1搜索到的 gpio,MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 imx6ul-evk { pinctrl_gpmi_nand_1: gpmi-nand-1 { fsl,pins = < ... MX6UL_PAD_NAND_CE1_B__RAWNAND_CE1_B 0xb0b1 MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B 0xb0b1 MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B 0xb0b1 MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00 0xb0b1 MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01 0xb0b1 MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02 0xb0b1 MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03 0xb0b1 MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04 0xb0b1 MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05 0xb0b1 MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06 0xb0b1 MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07 0xb0b1 MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0xb0b1 >; }; 6.检查哪里还有配置GPIO1_IO09或者PWM2_OUT相关定义,没有则可重新编译,将修改后的设备树烧录至板子。 7.应用层测试: 编号计算:引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数 举例: GPIO为GPIO1_09,引脚编号为32*(1-0)+9=9 GPIO为GPIO3_21,引脚编号为32*(3-1)+21=85 echo 9 > /sys/class/gpio/export //映射引脚 echo "out" > /sys/class/gpio/gpio9/direction //设置定义输入输入方向,out为输出,in为输入 echo 1 > /sys/class/gpio/gpio9/value //设置高电平 echo 0 > /sys/class/gpio/gpio9/value //设置低电平 使用万用表测量电压,如果设置的电平和量出电平一致则该GPIO修改成功为普通可控GPIO,如果提示busy则改脚未修改成功,需重新检查设备树。