欢迎来到天天文库
浏览记录
ID:6127612
大小:73.50 KB
页数:8页
时间:2018-01-04
《linux简单的gpio驱动实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、今天完成了嵌入式linux的第一个驱动的编写和测试,虽然是个简单的程序,但是麻雀虽小,五脏俱全,希望可以给刚开始接触驱动编写的人一些提示,共同进步。源代码:分析如下: 下面是我的驱动程序:#include//配置头文件#include/*内核头文件,作为系统核心的一部分,设备驱动程序在申请和释放内存时,不是调用malloc和free,而是调用kmalloc和kfree*/#include//调度,进程睡眠,唤醒,中断申请,中断释放#include//时钟头文件#i
2、nclude//用户定义模块初始函数名需引用的头文件#include//模块加载的头文件#include#include//这个是2440的寄存器头文件,asm/srch只是个链接//实际根据自己的情况查找,一般是../../linux2.*.*/include/asm/arch-s3c2440里编译器//自己会查询链接,以前不知道,找了半天//GPIO_LEDDEVICEMAJOR#defineGPIO_LED_MAJOR 97 //定义主设备号//defi
3、neLEDSTATUS 我的板子LED在GPB0与GPB1 处大家根据自己情况改 #defineLED_ON 0//定义LED灯的状态开#defineLED_OFF1// //-------------------READ------------------------ 这个前面要加static否则警告staticssize_tGPIO_LED_read(structfile*file,char*buf,size_tcount,loff_t*f_ops){returncount;} //-------------------WRITE-----------------------statics
4、size_tGPIO_LED_write(structfile*file,constchar*buf,size_tcount,loff_t*f_ops){returncount;} //-------------------IOCTL-----------------------staticssize_tGPIO_LED_ioctl(structinode*inode,structfile*file,unsignedintcmd,longdata) //这个函数实现了led灯亮灭的接口{switch(cmd){caseLED_ON:{GPBDAT=0x01;break;} //根
5、据自己情况修改一个亮一个灭 caseLED_OFF:{GPBDAT=0x02;break;} //交替闪烁default:{printk("lcdcontrol:nocmdrun [--kernel--]");return(-EINVAL);}}return0;}//-------------------OPEN------------------------staticssize_tGPIO_LED_open(structinode*inode,structfile*file){MOD_INC_USE_COUNT;return0;} //-------------------RELEA
6、SE/CLOSE---------------staticssize_tGPIO_LED_release(structinode *inode,structfile*file){MOD_DEC_USE_COUNT; return0;}//-------------------------------------------------structfile_operationsGPIO_LED_ctl_ops={ open: GPIO_LED_open, //这段赋值代码必须放在接口函数申明之后read: GPIO_LED_read, //否则编译不
7、过去 write: GPIO_LED_write,ioctl: GPIO_LED_ioctl,release: GPIO_LED_release,}; //-------------------INIT------------------------staticintGPIO_LED_CTL_init(void){intret=-ENODEV; printk("----------------
此文档下载收益归作者所有