添加简单的字符设备教程

上传人:xzh****18 文档编号:42128942 上传时间:2018-06-01 格式:DOCX 页数:4 大小:116.59KB
返回 下载 相关 举报
添加简单的字符设备教程_第1页
第1页 / 共4页
添加简单的字符设备教程_第2页
第2页 / 共4页
添加简单的字符设备教程_第3页
第3页 / 共4页
添加简单的字符设备教程_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《添加简单的字符设备教程》由会员分享,可在线阅读,更多相关《添加简单的字符设备教程(4页珍藏版)》请在金锄头文库上搜索。

1、编写简单的字符设备的驱动由于用户进程是通过设备文件同硬件打交道,对设备文件的操作方式不外乎就 是一些系 统调用,如 open,read,write,close.而这些系统调用通过定义 struct file_operations 结构体和设 备驱动程序相关联。所以,编写 设备驱动程序的主要工作就是编写子函数,并填充 file_operations 的各个域。具体步骤如下: 1 随便在一个目录下,新建一个目录叫 mydev ,再在此目录下新建三个文件分别叫 Makefile mydev.c main.c。其中 Makefile 是编译文件,mydev.c 是我们编写的字符设备驱动程 序,main

2、.c 则是用于测试字符设备驱动的测试程序。三个文件的源程序代码详见附录 2. 2 打开终端 使用 su 命令,切换到 super user 身份,然后写位到 mydev 目录下。 3 输入 make 命令,编译 驱动程序 chardev.c。 4 输入 gcc main.c 命令,编译 测试程序。 5 输入 insmod mydev.ko 加载驱动模块。 6 输入 gedit /proc/devices 查看 mydev 驱动模块的主设备号。 7 输入 mknod /dev/mydev c 250 0 在/dev/目录下,创建设备 mydev。其中,c 代码字 符驱动,250 是驱动主设备号,

3、0 是次设备号。次设备号一般都为 0。 8 输入 ./a.out 运行测试程序。 9 测试程序退出后,输入 rmmod mydev 卸载 驱动模块,并输入 rm -rf /dev/mydev 删除 /dev/目录下的 mydev 设备。其安装过程和运行结果如图 3-1图 3-3 所示。图 3-1 查看驱动模块主设备号图 3-2 创建 mydev源代码:Makefileobj-m:=mydev.oKDIR:=/lib/modules/$(shell uname -r)/buildSRCPWD:=$(shell pwd)all:make -C $(KDIR) M=$(SRCPWD) modules

4、clean:rm -rf chardev.omydev.c#include #include #include #include #include static int mydevread(struct file *filp,char _user *buffer,size_t,loff_t *); static int mydevopen(struct inode *,struct file *); static int mydevwrite(struct file *filp,const char _user *buffer,size_t ,loff_t*);static int mydev

5、release(struct inode *,struct file *); static int major;static char buf100=“Mydev is working!“;static const struct file_operations file_ops = .read = mydevread,.write = mydevwrite,.open = mydevopen,.release = mydevrelease;static int _init mydev_init(void) int result;major = 0;result = register_chrde

6、v(major, “mydev“, if (result 0) printk(“register mydev failed!n“);return result;if (major = 0) major = result;return 0;static int mydevopen(struct inode *inode,struct file *file)try_module_get(THIS_MODULE);printk(“mydev open called!n“);return 0;static int mydevrelease(struct inode *inode,struct file

7、 *file)module_put(THIS_MODULE);printk(“mydev clean called!n“);return 0;static int mydevread(struct file *filp,char _user *buffer,size_t length,loff_t *offset) int rd;rd=copy_to_user(buffer,if(rd)return length;return -1;static int mydevwrite(struct file *filp,const char _user *buffer,size_t length,loff_t *offset)int wt;wt=copy_from_user(if(wt)return length;return -1;static void _exit mydev_close(void)unregister_chrdev(major, “mydev“);module_init(mydev_init);module_exit(mydev_close);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号