设备节点添加

有时应用层需要对GPIO口进行控制,这时就需要我们给应用层提供一个接口,供他们调用控制。这种一般创建一个设备节点供他们读写控制就可以了。看了下,大部分采用在sys目录下创建一个设备节点。这个看看以往大家提交的代码记录,copy一份出来就可以了。以下则为添加一个GPIO口控制所需要修改的文件。

  • kernel-3.10/arch/arm/mach-mt8127/Y6801N/Makefile
  • + kernel-3.10/arch/arm/mach-mt8127/Y6801N/usb_power/Makefile
  • + kernel-3.10/arch/arm/mach-mt8127/Y6801N/usb_power/usb_power.c
  • vendor/mediatek/proprietary/custom/Y6801N/kernel/dct/dct/cust_gpio_usage.h

 

其中usb_power这个目录则为GPIO驱动文件目录,很简单,就两个文件,一个Makefile,一个驱动C文件。Makefile文件则是编译这个C文件的规则,很简单。C文件就是驱动,待会再看。

Y6801目录下的Makefile文件原本就存在,我们需要在上面增加我们的驱动模块,如下:

 

cust_gpio_usage.h则是关于GPIO口的宏定义:引脚号,使能,失能。。。如下:

这里的宏定义主要是在驱动文件中使用。

 

下面说说较重要的驱动文件:usb_power.c

 

从驱动入口说起吧,注册和注销,如下:

可以看到,系统调用usb_camera_init进行注册,调用usb_camera_exit进行注销。那向系统注册了什么样的设备呢?

如下可看出,定义了索要注册的设备和驱动的一些属性,其中要注意的是,设备名和驱动名要保持一致,这样在总线上才能匹配上。

device的内容比较简单,可以省略不看。

从上图可看出,驱动中有四个方法,这四个方法分别是usb_camera_probe,usb_camera_suspend,usb_camera_resume,usb_camera_remove.

其中probe函数是在系统往内核注册的时候所调用的,主要是做了如下工作:

看代码,不难看出,主要是创建了一个uPower的class,然后在class的目录下又创建了一个power的文件(设备节点),那这个设备节点都具有哪些属性呢,具体需要看看class_create_file函数中的第二个参数attr,这是个结构体变量,如下是它的定义:

power是节点名称,可自己修改,0666是读写权限,这里是可读可写,power_showstate是读该文件的时候所调用的方法,power_storestate是写该文件的时候所调用的方法。

 

如此就很明了了,我们还需要定义读写方法,即控制GPIO口和读GPIO口状态。直接贴代码,看代码吧

 

 

suspend和resume在这里无意义,所以不需要实现,就挂起和恢复的时候,要做的事,这里可以不用实现。

 

到这里,分析完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值