嵌入式实验六.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式实验六

实验六 嵌入式设备驱动程序设计 班级:计算机14-1 学号:140344123139 姓名:23223 成绩: 实验目的 1. 掌握设备驱动程序的基本框架结构; 2. 掌握设备进入点的创建、查看、删除方法; 3. 掌握设备驱动程序模块的加载、查看、卸载方法; 4. 编写简单字符设备驱动程序,并测试运行。 实验内容 编写一个字符设备驱动程序,可实现字符串的读、写操作,再编写一个调用该设备驱动程序功能接口(打开、关闭、读、写)的用户程序,测试该驱动程序是否能正常运行。 对上述驱动程序进行修改,实现设备的互斥访问(设备上锁)。 (1) (2)模块 (3) (4) (5) 程序代码如下 .c #include linux/kernel.h #include linux/module.h #include linux/fs.h #include linux/init.h #include linux/types.h #include linux/errno.h #include linux/uaccess.h #include linux/kdev_t.h #define MAX_SIZE 1024 static int my_open(struct inode *inode, struct file *file); static int my_release(struct inode *inode, struct file *file); static ssize_t my_read(struct file *file, char __user *user, size_t t, loff_t *f); static ssize_t my_write(struct file *file, const char __user *user, size_t t, loff_t *f); static char message[MAX_SIZE] = -------congratulations--------!; static int device_num = 0;//设备号 static int counter = 0;//计数用 static int mutex = 0;//互斥用 static char* devName = myDevice;//设备名 struct file_operations pStruct = { open:my_open, release:my_release, read:my_read, write:my_write, }; /* 注册模块 */ int init_module() { int ret; /* 函数中第一个参数是告诉系统,新注册的设备的主设备号由系统分配, * 第二个参数是新设备注册时的设备名字, * 第三个参数是指向file_operations的指针, * 当用设备号为0创建时,系统一个可以用的设备号创建模块 */ ret = register_chrdev(0, devName, pStruct); if (ret 0) { printk(regist failure!\n); return -1; } else { printk(the device has been registered!\n); device_num = ret; printk(1the virtual devices major number %d.\n, device_num); printk(1Or you can see it by using\n); printk(1------more /proc/devices-------\n); printk(1To talk to the driver,create a dev file with\n); printk(1------mknod /dev/myDevice c %d 0-------\n, device_num); printk(1Use \rmmode\ to remove the module\n); return 0; } } /* 注销模块,函数名很特殊 */ void cleanup_module() { unregister_chrdev(device_num, devName); printk(unregister it success!\n); } static int my_open(struct inode *inode, struct file *file) { if(m

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档