您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 嵌入式Linux设备驱动开发
NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam日程安排•Linux设备驱动介绍•Linux内核模块•Linux设备驱动配置、编译关系•嵌入式Linux按键设备驱动分析•Q&ANetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam驱动程序的概念•驱动程序是硬件与内核/应用程序的接口–驱动硬件,向内核和应用程序提供一定的功能•驱动程序隐藏了硬件工作的细节–上层应用程序可以通过标准化的API来操作硬件,不用关心硬件的各种细节•具体的说,在Linux中设备被当做文件来进行处理–上层应用需要操作硬件设备时,只需要获得设备的文件描述符,就可以通过系统调用open()、read()、write()、ioctl()、close()等来操作设备–与操作普通的文件是非常类似的–应用程序并不需要关心硬件细节–硬件的操作由驱动程序来完成:应用程序发出系统调用指令以后,会从用户态转换到内核态,通过内核将open()这样的系统调用转换成对物理设备的操作NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam设备驱动•阅读Datasheet•选择设备类型•编写设备驱动•测试设备驱动NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam设备驱动分类•字符设备•块设备•网络设备•还有其他的特殊类型,如USB,PCI,I2C,RTC等。NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam中查看字符////块设备#ls-l/devtotal0crw-------1rootroot5,1Jul1610:02console...lrwxrwxrwx1rootroot3Oct610:02cdrom-hdc...brw-rw----1rootdisk3,0Oct62007hdabrw-rw----1rootdisk3,1Oct62007hda1...crw-------1roottty4,1Oct610:20tty1crw-------1roottty4,2Oct610:02tty2c表示字符设备,b表示块设备,l为符号链接第五列为主设备编号,第六列为从设备号NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam中查看网络设备#ifconfigeth0eth0Linkencap:EthernetHWaddr00:0C:29:F3:3B:F2inetaddr:192.168.0.10Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:78errors:0dropped:0overruns:0frame:0TXpackets:104errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:11679(11.4Kb)TXbytes:14077(13.7Kb)Interrupt:10Baseaddress:0x1080#ethtooleth0Settingsforeth0:Supportedports:[TP]Supportedlinkmodes:10baseT/Half10baseT/Full100baseT/Half100baseT/Full1000baseT/FullSupportsauto-negotiation:YesAdvertisedlinkmodes:10baseT/Half10baseT/Full100baseT/Half100baseT/Full1000baseT/FullAdvertisedauto-negotiation:YesSpeed:1000Mb/sDuplex:FullPort:TwistedPairPHYAD:0Transceiver:internalAuto-negotiation:onSupportsWake-on:umbgWake-on:dLinkdetected:yesNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam字符设备与块设备比较•与字符设备一样,块设备也通过位于/dev目录下的文件结点来存取.块设备(例如磁盘)可以通过文件系统来管理.•在部分的Unix系统,通常块设备只能处理以数据块为单位的I/O操作,数据块的长度通常是512字节(或更大,但必须为2的幂).•在Linux中,不必拘泥于这种形式,应用程序可以像读写一个字符设备一样来读写一个块设备,并且允许一次传送任意数目的字节.就此而言,块设备和字符设备的区别仅仅在于内核在内部数据管理的方式上有所不同,并且因此在内核/驱动的软件接口上不同.与字符设备一样,块设备通过文件结点存取,它们之间的区别对用户是透明的.•块驱动和字符驱动相比,与内核的接口完全不同.NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam内核模块•Linux操作系统的内核是单一体系结构(monolithickernel,单内核)•有了模块机制后,提高Linux操作系统的可扩充性,内核编程不再是一个恶梦•什么是模块呢?•模块的全称是“动态可加载内核模块”(LoadableKernelModule,LKM)•模块在内核空间运行•模块实际上是一种目标对象文件•没有链接,不能独立运行,但是其代码可以在运行时链接到系统中作为内核的一部分运行或从内核中取下,从而可以动态扩充内核的功能•这种目标代码通常由一组函数和数据结构组成NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam模块相关命令•insmodmodule.ko[moduleparameters]–Loadthemodule–注意,只有超级用户才能使用这个命令•rmmod–Unloadthemodule•lsmod–Listallmodulesloadedintothekernel–这个命令和cat/proc/modules等价NetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeamNetworkOptimizationExpertTeam内核模块演示#includelinux/init.h#includelinux/module.hMODULE_LICENSE(DualBSD/GPL);staticinthello_init(void){printk(KERN_ALERTHello,world\n);return0;}staticvoidhello_exit(void){printk(KERN_ALERTGoodbye,cruelwor
本文标题:嵌入式Linux设备驱动开发
链接地址:https://www.777doc.com/doc-1310856 .html