1、Linux 设备驱动程序设计实例 2007-03-03 23:09Linux 系统中,设备驱动程序是操作系统内核的重要组成部分,在 与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设备驱动程序,可以深入理解 Linux 系统和进行系统开发。本文通过一个简单的例子来说明设备驱动程序的设计。1、 程序清单/ MyDev.c 2000 年 2 月 7 日编写#ifndef _KERNEL_# define _KERNEL_ /按内核模块编译#endif#ifndef M
2、ODULE# define MODULE /设备驱动程序模块编译#endif#define DEVICE_NAME “MyDev“ #define OPENSPK 1#define CLOSESPK 2/必要的头文件#include /同 kernel.h,最基本的内核模块头文件#include /同 module.h,最基本的内核模块头文件#include /这里包含了进行正确性检查的宏#include /文件系统所必需的头文件#include /这里包含了内核空间与用户空间进行数据交换时的函数宏#include /I/O 访问int my_major=0; /主设备号static int
3、Device_Open=0;static char Message=“This is from device driver“;char *Message_Ptr;int my_open(struct inode *inode, struct file *file)/每当应用程序用 open 打开设备时,此函数被调用printk (“ndevice_open(%p,%p)n“, inode, file);if (Device_Open)return -EBUSY; /同时只能由一个应用程序打开Device_Open+;MOD_INC_USE_COUNT; /设备打开期间禁止卸载return 0;
4、static void my_release(struct inode *inode, struct file *file)/每当应用程序用 close 关闭设备时,此函数被调用printk (“ndevice_release(%p,%p)n“, inode, file);Device_Open -;MOD_DEC_USE_COUNT; /引用计数减 1ssize_t my_read (struct file *f,char *buf,int size,loff_t off)/每当应用程序用 read 访问设备时,此函数被调用int bytes_read=0; #ifdef DEBUGprin
5、tk(“nmy_read is called. User buffer is %p,size is %dn“,buf,size);#endifif (verify_area(VERIFY_WRITE,buf,size)=-EFAULT) return -EFAULT;Message_Ptr=Message;while(size size -;bytes_read+;return bytes_read; ssize_t my_write (struct file *f,const char *buf, int size,loff_t off)/每当应用程序用 write 访问设备时,此函数被调用
6、int i;unsigned char uc;#ifdef DEBUGprintk(“nmy_write is called. User buffer is %p,size is %dn“,buf,size);#endifif (verify_area(VERIFY_WRITE,buf,size)=-EFAULT) return -EFAULT;printk(“nData below is from user program:n“);for (i=0;i#include #include #define DEVICE_NAME MyDev#define OPENSPK 1#define CLO
7、SESPK 2char buf128;int main()int f=open(DEVICE_NAME,O_RDRW);if (f=-1) return 1;printf(“nHit enter key to read device.“);read(f,buf,128); printf(buf);printf(“nHit enter key to write device .“);write(f,“test“,4);printf(“nHit enter key to open PCs speaker.“);ioctl(f,OPENSPK);printf(“nHit enter key to c
8、lose PCs speaker.“);ioctl(f,CLOSESPK);close(f);喜欢交朋友的加我 qq 1064074789现在物价上涨,什么都贵,商场啊,超市的东西都贵了,地皮贵了,房租涨了,涨到了咋顾客头上,雪上加霜,咋办?为了减少我们的受害程度,我建议大家往淘宝上买东东,因为淘宝商店不用租金,又是从厂里直接进货,价格应该公道,然而淘宝店铺千千万,当然还有些不法分子卖假货等,怎样避免这些呢?淘宝推出了淘宝商城,里面的卖 物 品 都是 正 品 行 货 , 接 受 买 家 的 监 督 和 淘 宝 的 监 督 。 在 百 度 百 科 里 你 能 看 到 淘 宝商 城 的 介 绍 ,
9、 他 比 普 通 店 铺 更 有 吸 引 力 的 是 他 的 服 务 , 他 不 光 是 大 卖 家 和 大品 牌 的 集 合 , 同 时 也 提 供 比 普 通 店 铺 更 加 周 到 的 服 务 : 1、 七 天 无 理 由 退换 货 ; 2、 正 品 保 障 。1. 综 合 入 口集 结 淘 宝 最 丰 富 的 强 势 类 目 , 精 选 最 优 质 的 卖 家 和 商 品 , 达 到 最 广 泛 的 买 家覆 盖 率 。2. 淘 宝 商 城 入 口淘宝商城,亚洲最大最全最专业的网上购物网站淘宝网打造的在线 B2C 购物平台。 淘宝商城频道集合了全球最知名的品牌包括联想、惠普、迪士尼、K
10、appa、乐扣乐扣、JackJones 等,给买家带来全新的一站式购物体验。2.女 人 频 道频 道 描 述 :淘 宝 最 权 威 的 女 装 风 向 标 , 集 合 了 淘 宝 最 热 卖 的 优 质 商 品 , 给 买家 带 来 全 新 的 购 物 体 验 。3.男 人 频 道淘宝客男人频道,精选淘宝网热销男装。3. 食品频道齐集淘宝疯狂促销食品、让你买得省心、吃得放心。4. 家装频道集合淘宝商城最大牌的商家和最优质的产品,从家装服务到建材、家具、入住、保养,应有尽有,是买家放心家装的首选!5. 淘宝美容馆精选商品、疯狂畅销、打造买家自己的美容小馆。6. 饰品鞋包淘宝最权威的鞋包配饰风向标,集合了淘宝最热卖的优质商品,让买家了解每季最时尚的配饰。7. 数码频道引领淘宝数码时尚,为你带来淘宝最受追捧的新潮数码产品,让你追随时尚永不 out!8. 家具玩具打造第一居家达人馆,网罗更多创意极品和居家商品,为你共同打造属于你的浪漫满屋!