快速业务通道

Davinci DM6446开发攻略——LINUX GPIO驱动源码移植

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16
case 1: //gpio = 1 if(0==arg) { gpio_direction_output(DM644X_GPIO_LED0, 1); } else if(1==arg) { gpio_direction_output(DM644X_GPIO_LED1, 1); } else if(2==arg) { gpio_direction_output(DM644X_GPIO_BUZZER, 1); } else { return -EINVAL; } break; default: return -EINVAL; } } /*定义驱动设备文件API,在linux系统当中,任何设备都可以当做文件的方式操作,这一点和单片机和MCU有很大差别*/ static const struct file_operations davinci_dm644x_gpio_fileops = { .owner = THIS_MODULE, .open = davinci_dm644x_gpio_open, .ioctl = davinci_dm644x_gpio_ioctl, }; static int __init davinci_dm644x_gpio_init(void) /*内核初始化会调用该函数*/ { int ret; gpio_direction_output(DM644X_GPIO_LED0, 1); //led0 is on udelay(1); gpio_direction_output(DM644X_GPIO_LED1, 1); //led1 is on udelay(1); gpio_direction_output(DM644X_GPIO_BUZZER, 1); //BUZZER is on mdelay(500); /*初始化时,buzzer 发出声音500ms*/ gpio_direction_output(DM644X_GPIO_BUZZER, 1); //BUZZER is off ret = register_chrdev(GPIO_MAJOR, DEVICE_NAME, &davinci_dm644x_gpio_fileops); if(ret < 0) { printk(DEVICE_NAME " register falid!\n"); return ret; } printk (DEVICE_NAME" initialized\n"); return ret; } static void __exit davinci_dm644x_gpio_exit(void) { unregister_chrdev(GPIO_MAJOR, DEVICE_NAME); } module_init(davinci_dm644x_gpio_init); module_exit(davinci_dm644x_gpio_exit); MODULE_AUTHOR("xxx <>"); MODULE_DESCRIPTION("Davinci DM644x gpio driver"); MODULE_LICENSE("GPL"); 这个驱动源码是一种比较老的驱动移植,即register_chrdev(GPIO_MAJOR, DEVICE_NAME, &davinci_dm644x_gpio_fileops),静态分配设备节点,适合linux-2.4.x和linux-2.6.10前的版本,当然也可以在2.6.18及以后的版本使用,现在新的版本char字符设备的移植可以参考davinci_resizer.c、davinci_previewer.c等文件. 上面的初始化函数调用udelay和msdelay,udelay一般适用于一个比较小的delay,如果你填的数大于2000,系统会认为你这个是一个错误的delay函数,因此如果需要2ms以上的delay需要使用mdelay函数. 这些delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将调用它的进程睡眠参数指定的时间. 寄存器级的驱动gpio_direction_output()函数是定义在linux-2.6.18_pro500/arch/arm/mach-davinci/下的gpio.c里,里边还有gpio_direction_input()和GPIO中断函数. 三、修改内核配置文件 在linux-2.6.18_pro500/drivers/char目录下, 修改Kconfig文件,在menu "Character devices"下面,加入 config DAVINCI_DM644X_GPIOS tristate "Davinci DM644x GPIO GPIOs"

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号