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

Linux驱动小解一.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux驱动小解一.doc

驱动针对的对象是存储器和外设(包括cpu内部集成的存储器和外设),而不是针对cpu核。Linux将存储器和外设分为3大基础大类。 字符设备 块设备 网络设备 字符设备:指那些必须以串行顺序依次进行访问的设备。不经过系统的快速缓冲,对于flash设备而言,符合块设备的特点,但是我们还是以字符设备方式访问 块设备:可以任意顺序进行访问,以块为单位进行操作。经过系统的快速缓冲 虽然说两种设备有很大的差异,但是对于用户而言,他们都是使用文件接口函数来进行访问的,open(),close(),read(),write()等。 网络设备:Linux系统中,网络设备是针对数据包的发送和接收而设计的,它并不对应于文件系统的节点。与其他两个设备与内核之间通信方式完全不同。 对于一个Linux设备驱动与整个软硬件的系统的关系: 从用户应用程序—(c库)—linux系统调用接口—操作系统—硬件。 在操作系统中,有Linux文件系统、进程管理、内存管理、套接字等等 在操作系统和硬件之间的关系: 对于字符设备而言:Linux文件系统—字符设备驱动—硬件。 对于块设备而言:Linux文件系统—磁盘/Flash文件系统—块设备驱动—硬件 对于网络设备而言:套接字—TCP/IP—网络设备驱动—硬件 利用led驱动程序,提前体验一下驱动模块。 对于每一个模块而言 module_init(light_init); 在模块加载函数中,首先,根据主设备号和次设备生成dev_t,dev_t dev = MKDEV(light_major,0);要申请字符设备号:register_chrdev_region(dev,1,”LED”) 或者alloc_chrdev_region(dev,0,1,”LED”);light_major=MAJOR(dev); 分配设备结构体内存light_dev = kmalloc(sizeof(struct light_dev), GFP_KERNEL);memset(light_dev,0,sizeof(struct light_deb)) 设置字符设备cdev结构体:light_setup_cdev(light_devp,0) Light_gpio_init(); module_exit(xxx_exit); 在模块卸载函数中:首先,删除字符设备结构体cdev_del(light_devp-cdev)。其次, 释放light_init中分配的内存。 最后删除设备unsigister_chrdev_region(MKDEV(LIGHT_MAJOR,0,1)) Linux内核的组成部分 Linux内核主要有进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC) 进程调度: 启动内核线程函数:pid_t kernel_thread(int(*fun)(void),void *arg,unsigned long flags); 内存管理: 内存管理主要的作用是控制多个进程安全的共享主内存区域。当cpu提供内存管理单元的时候,linux内存管理完成每个进程进行虚拟内存到物理内存的转换。 虚拟文件系统: 网络接口: 网络接口对各种网络标准的存取和各种网络硬件的支持。在Linux中网络接口可以分为网络协议和网络驱动程序,网络协议部分是负责实现各种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相应的设备驱动程序。 进程间通信: Linux支持进程间的多种通信机制,包含信号量、共享内存、管道、消息队列等 ARM处理器分为7中工作模式:用户模式(usr)、快速中断模式(fiq)、外部中断模式(irq)、管理模式(svc)、数据访问终止模式(abt)、系统模式(sys)、未定义指令中止模式(umd) Linux内核模块 一个linux内核模块主要由以下几个部分组成: 模块加载函数: 当通道、过insmod或modprobe命令加载内核没,模块时,模块的加载函数回自动的被内核执行,完成本模块的相关初始化过程。 模块卸载函数: 当通过rmmod命令卸载某模块的时候模块的写在函数回自动的被内核执行,完成与模块加载相反的功能 模块许可申明函数: 许可证(LICENSE)声明描述内核模块的许可权限 模块参数(可选) 模块导出符号(可选) 模块作者等信息声明(可选) Linux字符设备驱动结构 cdev结构体:在cdev中,两个很重要的成员:dev_t dev(设备号)和file_operation(支持操作结构体) 同时Linux还提供了一组函数用于操作cdev结构体 void cdev_init(struct dcev *,struct file_operatio

文档评论(0)

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

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

1亿VIP精品文档

相关文档