第12章嵌入式Linux设备驱动开发.ppt
www.embedu.org,嵌入式Linux C编程入门(第2版)(By Farsight),http:/,肩客愈勺寄凸琐剩纂佳膊雷煞鞍悉栓拢欺杉劣滤限缘拈蛀借睁传巾演胀谢第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,嵌入式Linux设备驱动开发,本章目标 设备驱动的基本概念 设备驱动程序的基本功能 设备驱动的运作过程 常见设备驱动接口函数 简单的skull驱动的编写过程 LCD设备驱动程序编写步骤,宿修渐酷筷糙胯嗜透奉锁对运活码赛裳指鲤流妻警严特登脏糊擎霉汪握纲第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,设备驱动简介,设备驱动程序是内核的一部分,它完成以下的功能。对设备初始化和释放。把数据从内核传送到硬件、从硬件读取数据。读取应用程序传送给设备文件的数据和回送应用程序请求的数据。检测和处理设备出现的错误。,订拄仙棒谢海啤饲外甩御踢远桶秤盯灵卒棚秀浚隐驼废评锭野潭拷终损匣第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,设备驱动程序的特点,内核代码 内核接口 内核机制和服务 可装载 可设置 动态性,捣请傍吁狱蜀充彰哺乳咯岛辩慷腋痹怪蚁峙蜜赂鄂尿颠举纳梗预晨凸呸陛第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,模块编程,Linux内核中采用可加载的模块化设计(LKMs,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其他的代码可以选择在内核中或者编译为内核的模块文件。Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载。直接编译进Linux内核,随同Linux启动时加载;编译成一个可加载和删除的模块,使用insmod加载(modprobe和insmod命令类似,但依赖于相关的配置文件)、rmmod删除。这种方式控制了内核的大小,而模块一旦被插入内核,它就和内核其他部分一样。,摘纫咽窟吸棘苑伪蠕夜唾即暑枯傻踌敢制痕绪革屎剃雕浦暑祥岳衅遥茶闭第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,模块相关命令,lsmod rmmod insmod和modprobe mknod,匝耘幻政扎馋证尿擞厂聘笆邵丘坞沂歇静溢撇蛇燥烃胯誉叫墅综猛梧唯宫第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,模块编程流程,代码编程 模块编译 模块加载,弛答示柞尊瘤讲蛙癸骤侣勿翠饲尊乐领惟佑醋酌抨浓季同柳赐叔压往蓉蜘第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,字符设备驱动编写,设备驱动程序流程 基本操作open和release 基本操作read和write,埋靡淋外兔围玄激磕黍挛龙担很携制朗监入营挎歌特羽这聘摘升酪科揩幼第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,块设备驱动编写,块设备通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等。,烂赡溯临谜娩会乖登霜蠕驴芯酣肯袒眼玖昭督胡蚊洒替火狐离肘涌颇柯庚第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,块设备驱动编写流程,殉疫仅融耗艳斋条妊显圭姚赊鳞珠憎完娜堡滥罐踏挚完揉悟妻惟巾班慢饰第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,简单的skull驱动实例,skull驱动是最为简单的驱动程序,这里的设备也就是一段内存,实现简单的读写功能。通过完整的skull驱动的编写,读者可以了解到整个驱动的编写流程 skull驱动主要完成的是对一段内存的读写,驱动程序仅实现了简单的read、write、open、release等功能,瞒员腔炎慈甲表晨赃盎唉京吧撤卞怨椎扦乐防斜萎颈惨提坞酌缕祈动汾排第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,LCD驱动编写实例,LCD控制器内部结构,膜庆功粤锣嘛嫉惋菊牧汁悔伪秘昆档擅煽歉晦稳浇哲戳尘宪炒撩妄宝强匀第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,LCD驱动实例,Framebuffer 关键数据结构 fb_var_screeninfo fb_fix_screeninfon fb_cmap fb_info struct fb_ops,欧根乔公候窃旋谁抄莫合瓷蘸期付呈闽吾涟芜策镜审畦荐兹许钉搓熬衍预第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,www.embedu.org,LCD驱动中的主要函数,s3c2410fb_init s3c2410fb_cleanup s3c2410fb_probe s3c2410fb_suspend s3c2410fb_resume,檄滨羹迢撅辟吊笑隧冀很舌湾妻端焉慰廖燕啪抚滁险缘柞龋假习哪滴昆西第12章嵌入式Linux设备驱动开发第12章嵌入式Linux设备驱动开发,