LEDS-GPIO驱动中遇到的问题总结
LEDs-GPIO驱动中遇到的问题总结 本文总结了LEDS-GPIO驱动中遇到的问题,涵盖了unlocked_ioctl与ioctl的区别、miscdevice函数、GPX三个控制寄存器等知识点。 1. #ifdef 语句 #ifdef 语句可以翻译为:如果宏定义了语句 1 则程序 2。作用是我们可以用它来区隔一些与特定头文件、程序库和其他文件版本有关的代码。 2. miscdevice 函数 miscdevice 函数用于混杂设备驱动。在 Linux 系统中,存在一类字符设备,他们共享一个主设备号(10),但此设备号不同,我们称这类设备为混杂设备(miscdevice)。查看/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 内核会自动为该设备创建设备文件。 3. unlocked_ioctl 与 ioctl 的区别 unlocked_ioctl 与 ioctl 的主要区别在于它们的使用场景。ioctl 是设备驱动程序中对设备的 I/O 通道进行管理的函数。它的调用个数如下:int ioctl(int fd, int cmd, …);其中 fd 就是用户程序打开设备时使用 open 函数返回的文件标示符,cmd 就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,和 cmd 的意义相关的。unlocked_ioctl 则是 ioctl 的变种,用于内核驱动程序中。为什么不写成 .ioctl = s3c6410_leds_ioctl?因为在应用程序中 ioctl 是兼容的,可直接用,不必变化;但加载到内核的驱动程序中我们的 ioctl 函数必须变化,采用 unlocked_ioctl,否则就会发生 cmd 参数的变化,驱动程序中这个指针函数变了之后最大的影响是参数中少了 inode,建议均采用unlocked_ioctl。 4. GPX 三个控制寄存器 GPX 有三个控制寄存器:GPxCON 配置寄存器,用于选择引脚功能。每两位控制一根引脚:00 表示输入,01 表示输出,10 表示特殊功能,11 保留不用。GPxDAT 数据寄存器,用于读写引脚数据。00 输入,读(read)可知该引脚电平状态—高或低;01 输出,写(write)可自己设定该引脚电平状态—高或低。GPxPUD 上拉电路使能寄存器,用于确定是否使用内部上拉电阻。1 该引脚无内部上拉电阻;0 该引脚使用内部上拉电阻。 5. 读写寄存器函数 readl(S3C64XX_GPMDAT) 内核函数,读取数据寄存器。writel(tmp,S3C64XX_GPMDAT) 内核函数,写入数据寄存器。__raw_readl(S3C64XX_GPMDAT);寄存器读取函数。readl(S3C64XX_GPMCON);内核函数,读取配置寄存器。 6. 引用端口的定义 在旧版本中,直接通过 S3C2410_GPmn 来定义端口 GPIOm 的第 n 个引脚,比如 GOIOB 的第 5 个引脚引用为 S3C2410_GPB5。在新版本中改为采用S3C2410_GPm(n)的方式,比如 GPIOB 的第 5 个引脚就改为 S3C2410_GPB(5)。这里的S3C2410_GPm(n)函数在 arch/arm/mach-2410/include/mach/gpio-nrs.h 中定义,共有S3C2410_GPA()~S3C2410_GPH()八组。 本文主要总结了LEDS-GPIO驱动中遇到的问题,涵盖了unlocked_ioctl与ioctl的区别、miscdevice函数、GPX三个控制寄存器等知识点,为开发者提供了有价值的参考。
- 粉丝: 2
- 资源: 14
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 从XML生成可与Ajax共同使用的JSON中文WORD版最新版本
- silverlight通过WebService连接数据库中文WORD版最新版本
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本