没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
三 星 4412 利 用 设 备 树 pinctrl 控 制
GPIO 之夜空中最亮的灯
设备树:顾名思义利用树形结构描述设备的文件。
Pinctrl:依据 Linux 设计分离的思想,简化驱动对芯片引脚的控制。驱动通过 pinctrl 来
控制引脚,各个芯片厂家已经对 pinctrl 相关代码封装好了。只需要通过文档直接调用相
关 API 即可,大大简化了驱动编写的工作量。
查找相关文档:由于每个厂家的硬件不一样,所以使用方法也略有差异,我们需要通过相
关 文 档 查 看 官 方 给 出 的 例 程 。 路 径 为 内 核 目 录 下 的 /Documentation/devicetree/
bindings/pinctrl
我使用的是三星的芯片,因此只关注 samsung-pinctrl.txt
在 Pinctrl 中添加需要的引脚:打开文件 arch/arm/boot/dts/exynos4412-pinctrl.dtsi
自己创建的设备树节点添加的位置,我使用的是 L0-2 引脚。
打开 4412 的 datasheet 如下:
L0 的基地址为 0x11000000,因此需要寻找 dtsi 文件中对应的一级设备树节点。
在官方源码中发现 pinctrl1 的一级节点地址与之对应。因此我们需要将自己的节点添加到
这里。如下所示:
/*添加自己需要用得到的引脚,添加到 pinctrl_1 下,和 1 级节点的地址有关,不要加错
地方!*/
my_gpio1_high:my_gpio1_high {
samsung,pins = "gpl2-0" ; /*引脚为 l2-0*/
samsung,pin-function = <1>; /*引脚功能设置为输出模式 */
samsung,pin-val = <1>; /*引脚初始值设置为 1*/
samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; /*引脚设置为上拉模式*/
};
my_gpio1_low:my_gpio1_low {
samsung,pins = "gpl2-0" ; /*引脚为 l2-0*/
samsung,pin-function = <1>; /*引脚功能设置为输出模式 */
samsung,pin-val = <0>; /*引脚初始值设置为 0*/
samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; /*引脚设置为上拉模式*/
};
这样仅仅是添加了和 pinctrl 相关的节点,我们还要再设备树的根节点下添加供自己编写
的驱动调用的设备树节点。
在相同目录下我们打开文件 arch/arm/boot/dts/exynos4412-itop-elite.dts 在 根 节
点下创建自己的一级子节点。
这里需要注意的是此处的 pinctrl-0 和上面添加代码的 pinctrl 不是一个意思。这里的
pinctrl-0 表示对应的 pinctrl-name 的第一个属性值,如果 pinctrl-name 有多个属性值,
用逗号隔开。那么各个属性值按顺序会依次对应 pinctrl-0,pinctrl-1,pinctrl-2 ………
到这里我们设备树添加设备相关的工作就已经做完。
在内核目录下使用 make dtbs 编译修改后的设备树文件,如果报错可以使用 root 模
式再次尝试,把生成的 exynos4412-itop-elite.dtb 文件更新到芯片。打开超级终端查看
是否设置成功。
在超级终端中进入 linux 跟文件系统:
在/proc/device-tree 目录下有所有的 node 的信息表明节点已经创建成功
在/sys/devices/platform/目录下有所有设备 node 的信息。表明设备注册了,最后驱动
才能进入 probe
编写对应驱动调用 GPIO
这里我们需要在代码中编写两部分内容
1:杂项设备的注册,这样才可以生成设备节点供上层应用调用
2:注册驱动,注册驱动的 compatible 与设备树中的匹配才能调用驱动
驱动源代码如下:
剩余10页未读,继续阅读
资源评论
小小的技术宅
- 粉丝: 4
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功