Linux设备驱动程序学习笔记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux设备驱动程序学习笔记 简介 Linux设备驱动程序的作用 设备 驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。? 大多数编程可以分为两个部分: 机制:需要提供什么功能 策略:如何使用这些功能 内核的功能划分: 进程管理,内存管理,文件系统,设备控制,网络功能? 设备和驱动模块 三种类型的设备: 字符设备 字符设备是个能像字节流(类似文件)一样被访问的设备,由字符设备驱动来实现这种特性。字符设备驱动通常至少实现open,close,read,write系统调用。 块设备 一个块设备驱动程序主要通过传输固定大小的数据来访问设备。块设备和字符设备的区别仅仅在于内核管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符取得相比,块设备具有完全不同的接口。 网络接口设备 任何网络事物都经过一个网络接口形成,即一个能够和其它主机交换数据的设备。它可以是个硬件设备,但也可能是个纯软件设备。访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数而不是read、write等。? 知识点: 1.任何从内核中得到的内存,都必须在提供给用户进程或者设备之前清零或者以其它方式初始化,否则就可能发生信息泄露(如数据和密码泄露等)。 2.一个经过恶意修改过的内核可能会允许任何人装载内核,所有,下载内核的地址应该选择正规网站。 背景:??????? 阅读新闻 Linux设备驱动程序学习笔记 构造和运行模块 [日期:2011-08-28] 来源:Linux社区? 作者:en_wang [字体:大?中?小] 设置测试系统 1.在的镜像网站上获得一个“主线”内核。 2.准备好一个内核源代码树。 2.6内核的模块要和内核源代码树中的目标文件链接,通过这种方式,构造一个更加健壮的模块装载器。 Hello World模块 #includelinux/init.h #inlcudelinux/module.h MODULE_LICENSE(Dual BSD/GPL); static int hello_init(void) { ????????????? printk(KERN_ALERT hello,world\n); ?????????????? return 0; } static void hello_exit(void) { ????????????? printk(KERN_ALERT Goodbye,cruel world\n); } module_init(hello_init); module_exit(hello_exit); 涉及知识点: module_init(init_function),module_exit(cleanup_function), MODULE_LICENSE, printk,KERN_ALERT等, insmod,modprobe,rmmod, makefile,make, ? 根据系统传递消息行机制的不同,读者得到的输出结果可能不一样。需要特别指出的是,上面的屏幕输出是在文本控制台上得到的;如果读者在某个与运行在windows系统下的终端仿真器中运行insmod,rmmod,则不会在屏幕上看到任何输出。实际上,他可能输出到某个系统日志文件中,比如:/var/log/messages ? 核心模块与应用程序的对比 应用程序 vs 核心模块 vs 事件驱动的应用程序 ? 用户空间 vs 内核空间 cpu在被设计时,有保护系统软件不被应用程序破坏的功能。且这种保护功能分为不同级别,当 cpu中存在多个级别时,unix通常使用最高级和最低级,即:超级用户级和用户级,也即内核空间和用户空间。 内核中的并发 常见引起并发原因:1.linux系统中通常正在运行多个并发进程,并且可能有多个进程同时使用我们的驱动程序2.大多数设备能够中断处理器,而中断处理程序异步运行,而且可能在驱动程序正试图处理其他任务时被调用。3.linux可以运行在多处理器上,因此可能同时有多个处理器在使用该进程。 ? 当前进程 Current 在asm.current.h中定义,是一个指向struct task_struct的指针,而task_struct结构在linux/sched.h中定义。 Current指针指向当前正在运行的进程; 在open

文档评论(0)

youyang99 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档