网站大量收购独家精品文档,联系QQ:2885784924

基于linux的嵌入式软件开发.ppt

  1. 1、本文档共182页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 卸载:如果驱动程序编译成模块(动态加载)模式,那么它需要一个清理函数。当移除一个内核模块时这个函数被调用执行清理工作。清理函数的函数原型定义为: typedef void (*exitcall_t)(void); * * 驱动程序是通过module_exit宏来声明清理函数的: static void __exit hello_exit(void) { printk(KERN_ALERT Goodbye World!n); } module_exit(hello_exit); * * 版权信息:Linux内核是按照GPL发布的,同样Linux的驱动程序也要提供版权信息,否则当加载到内核中是系统会给出警告信息。Hello World例子中的版权信息是GPL。 MODULE_LICENSE(GPL); * * 3.9.2字符设备驱动框架 用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。 * * /*******drivedemo.c*****/ #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif /***********头文件******************************/ #include linux/mm.h #include linux/module.h #include asm/segment.h #include asm/uaccess.h /* COPY_TO_USER */ #include linux/init.h #include linux/kernel.h /* printk() */ #include linux/slab.h /* kmalloc() */ #include linux/fs.h /* everything... */ #include linux/errno.h /* error codes */ #include linux/types.h /* size_t */ #include linux/proc_fs.h #include linux/fcntl.h /* O_ACCMODE */ #include asm/system.h /* cli(), *_flags */ /***********定义常量、变量、函数******************/ #define DEVICE_NAME demodrv #define demo_MAJOR 267 #define demo_MINOR 0 static int MAX_BUF_LEN=1024; static char drv_buf[1024]; static int WRI_LENGTH=0; static ssize_t demo_write(struct file *,const char *, size_t ); static ssize_t demo_read(struct file *, char *, size_t , loff_t *); * * /***********定义驱动接口结构体***********************/ static struct file_operations demo_fops = { owner:THIS_MODULE, //open:demo_open, read:demo_read, write:demo_write, //llseek:demo_llseek(), //ioctl:demo_ioctl, //release:demo_release, }; /***********子函数**************************************/ /*******1.do_write()函数:将缓冲区中的数逆序****/ static void do_write() { int i; int len = WRI_LENGTH; char tmp; for(i = 0; i (len1); i++,len--) { tmp = drv_buf[len-1]; drv_buf[len-1] = drv_buf[i]; drv_buf[i] = tmp; } } /***********demo_read()函数**************

文档评论(0)

131****9010 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档