Linux设备驱动GPIO子系统
1、内核中gpio的函数API--->gpiolib.c
[1]测试gpio端口是否合法:
int gpio_is_valid(int number);
[2]申请、释放gpio管脚
static inline int gpio_request(unsigned gpio, const char *label);
static inline void gpio_free(unsigned gpio);
[3]标记gpio的使用方向包括输入还是输出/*成功返回零失败返回负的错误值*/
static inline int gpio_direction_input(unsigned gpio);
static inline int gpio_direction_output(unsigned gpio , int value);
[4]获得gpio引脚的值和设置gpio引脚的值(对于输出)
static inline int gpio_get_value(unsigned gpio);
static inline void gpio_set_value(unsigned int gpio, int value);
[5]gpio当作中断口使用
static inline int gpio_to_irq(unsigned int gpio);
2、用户空间gpio的调用
在/sys/下提供了相关用户层与底层进行交互的属性文件;
/sys/class/gpio/
(2.0)内核配置
Device Drivers --->
-*- GPIO Support --->
[*] /sys/class/gpio/... (sysfs interface)
如果说用户空间想跟内核中的GPIO管叫进行交互的话,首先需要将该管脚导出至用户空间;
(2.1) export/unexport
/sys/class/gpio/export
(2.2) /sys/class/gpio/gpioN:pin
direction: in/out
value:0/1
(2.3)/sys/class/gpio/gpiochipN
3、gpio的led编写方式
(3.0)原理图中led对应管脚信息:
led2 gpx2_7
led3 gpx1_0
led4 gpf3_4
led5 gpf3_5
(3.1)GPIO管脚设备树的写法:
[1]改写设备树
设备树写法:
fs4412-leds-gpio{
compatible = "fs4412,leds";
/* index : 0 1*/
led2 = <&gpx2 7 0>;
led3 = <&gpx1 1 0>;
led4 = <&gpf3 4 0>;
led5 = <&gpf3 5 0>;
};
/*
就led2引用节点剖析:
gpx2这一组对应的设备树:exynos4x12-pinctrl.dtsi
582 gpx2: gpx2 {
583 gpio-controller;
584 #gpio-cells = <2>;---->表征的是其子节点或者是继承者的GPIO的<&gpx2 7 0>;
中&gpx2后边的参数个数,7代表第七个管脚,0代表工作模式
586 interrupt-controller;
587 #interrupt-cells = <2>;
588 };
*/
编译设备树:
make dtbs
拷贝设备树生成的文件至挂载目录:
cp xxx.dtb ~/tftpboot
[2]程序编写
[2.1]将设备树中的设备信息所在的节点获取
设备树节点信息获取:of_find_node_by_path
gpio管脚获取 :of_get_named_gpio
[2.2]获取该节点中的设备信息
[2.3]执行gpio相关的操作
【近期文章推荐】
1.2018高薪趋势的6大IT技术岗位,有你吗?
2.应届生一天收获4份offer,只因他做到了这4点
3.星创客金牌讲师录制STM32系列视频教程(免费领)
4.一周48家招聘单位要人 开发人员需求井喷
5.嵌入式11月高薪就业榜好犀利 最高月薪已突破20000元
6.一位资深程序员大牛给予Java初学者的学习路线建议
7.华清远见荣获腾讯“回响中国”2017年度影响力教育品牌大奖
回复“0-71”任一数字,即可查看往期文章精选哦
长按二维码3秒
与10万程序高手做朋友
每天干货享不停
(记得识别二维码哟)
或微信搜索华清远见,即可关注我们
免费讲座 | 干货分享 | 程序员生活 | 就业招聘
高端IT就业培训专家
m.embedu.org
- LinuxIDC.com论坛邀请码壹枚(12月14日)【速度抢】
- Fedora 25 Linux操作系统结束支持,请升级到Fedora 27
- 7 个使用 bcc/BPF 的性能分析神器
- Linux 上如何禁用 USB 存储
- 在红帽企业版 Linux 中将系统服务容器化(一)
- 如何在 Linux 系统里用 Scrot 截屏
- 《Linux就该这么学》双12优惠半价购书。
- 如何在 Linux 下统计高速网络中的流量
- 请允悲,发行了 23 年的《Linux Journal》最终停刊了
- 你所不了解的Linux(文末有福利)