不用设备树 pinctrl 子系统下——使能GPIO的办法:
1. 定义相关宏——各寄存器的物理地址

2. 进行重映射——各寄存器的虚拟地址

3. 为各个寄存器写入参数

使用设备树 pinctrl 子系统下——使能GPIO的办法:
1. 添加pinctrl 信息

2. 添加设备节点信息:

注意:设备节点中pinctrl-0 要用到添加的 pinctrl 信息,名字应该相同(这里不同,是错误示范)。
3. 驱动文件中:找到设备树节点

4. 驱动文件中:确定GPIO编号

5. 由上一步得到的GPIO编号,设置GPIO的输入输出模式

对比之下:
1. 设备树方式不需要定义地址宏,不需要查找和设置其时钟寄存器、GDIR、DR寄存器的地址,需要在设备树文件中添加 pinctrl 信息,再在相应的节点添加相应的属性。
2. 设备树方式不需要执行 writel 写入命令,而是通过 GPIO 编号和Linux 提供的 API 函数来设置GPIO的输入输出模式,输出电平。
其中of_find_node_by_path() 在其中起着连接驱动文件和设备树的作用。