- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LEDS-GPIO驅动中遇到的问题总结
1、#ifdef 语句1
????// 程序2
#endif可翻译为:如果 HYPERLINK /view/2076445.htm \t _blank 宏定义了语句1则程序2。
作用:我们可以用它区隔一些与特定 HYPERLINK /view/668911.htm \t _blank 头文件、 HYPERLINK /view/421066.htm \t _blank 程序库和其他 HYPERLINK /view/2303554.htm \t _blank 文件版本有关的代码。
遇到的几个函数:
2、miscdevice函数,为混杂设备驱动。在Linux系统中,存在一类字符设备,他们共享一个主设备号(10),但此设备号不同,我们称这类设备为混杂设备(miscdeivce),查看/proc/device中可以看到一个名为misc的主设备号为10。所有的混杂设备形成一个链表,对设备访问时内存根据次设备号找到对应的miscdevice设备。包含以下三个变量minor次设备号,*name设备名,*fops文件操作函数集即可。
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = dev_fops,
};
Linux内核使用misc_register函数注册一个混杂设备。注册成功后,linux内核为自动为该设备创建设备文件。?
int?misc_register(struct?miscdevice?*misc)?
3、.unlocked_ioctl与ioctl的区别
.unlocked_ioctl = s3c6410_leds_ioctl,为什么不写成
.ioctl = s3c6410_leds_ioctl,?
在应用程序中ioctl是兼容的,可直接用,不必变化;但加载到内核的驱动程序中我们的ioctl函数必须变化,采用unlocked_ioctl,否则就会发生cmd参数的变化,驱动程序中这个指针函数变了之后最大的影响是参数中少了inode,建议均采用unlocked_ioctl。
ioctl是 HYPERLINK /view/15565.htm \t _blank 设备驱动程序中对设备的 HYPERLINK /view/1431426.htm \t _blank I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, int cmd, …);其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就能在用户程序中使用ioctl函数控制设备的I/O通道。
返回值:成功为0,出错为-1
4、GPX有三个控制寄存器,
GPxCON配置寄存器,用于选择引脚功能。每两位控制一根引脚:00表示输入,01表示输出,10表示特殊功能,11保留不用。
GPxDAT数据寄存器,用于读写引脚数据。00输入,读(read)可知该引脚电平状态—高或低;01输出,写(write)可自己设定该引脚电平状态—高或低。
GPxPUD上拉电路使能寄存器,用于确定是否使用内部上拉电阻。1该引脚无内部上拉电阻;0该引脚使用内部上拉电阻。
上拉电阻的作用:当GPIO引脚处于第三态(既不是输出高电平,也不是输入低电平,而是呈高阻态,即相当于没接芯片)时,该引脚的电平状态由上拉电阻、下拉电阻确定。
5、readl(S3C64XX_GPMDAT); 内核函数,读取数据寄存器
writel(tmp,S3C64XX_GPMDAT); 内核函数,写入数据寄存器
__raw_readl(S3C64XX_GPMDAT);寄存器读取函数
readl(S3C64XX_GPMCON); 内核函数,读取配置寄存器
6、A、引用端口的定义,旧版本直接通过S3C2410_GPmn来定义端口GPIOm的第n个引脚,比如GOIOB的第5个引脚引用为S3C2410_GPB5。在新版本中改为采用S3C2410_GPm(n)的方式,比如GPIOB的第5个引脚就改为S3C2410_GPB(5)。这里的S3C2410_GPm(n)函数在arch/arm/march-2410/include/mach/gpio-nrs.h中定义,共有S3C2410_GPA()~S3C2410_GP
文档评论(0)