嵌入式linux应用开发完全手册韦东山

上传人:shaoy****1971 文档编号:108164900 上传时间:2019-10-22 格式:DOC 页数:5 大小:20.50KB
返回 下载 相关 举报
嵌入式linux应用开发完全手册韦东山_第1页
第1页 / 共5页
嵌入式linux应用开发完全手册韦东山_第2页
第2页 / 共5页
嵌入式linux应用开发完全手册韦东山_第3页
第3页 / 共5页
嵌入式linux应用开发完全手册韦东山_第4页
第4页 / 共5页
嵌入式linux应用开发完全手册韦东山_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《嵌入式linux应用开发完全手册韦东山》由会员分享,可在线阅读,更多相关《嵌入式linux应用开发完全手册韦东山(5页珍藏版)》请在金锄头文库上搜索。

1、精华 嵌入式LINUX应用开发完全手册一书作者:韦东山() 的部分备课笔记- 特别说明:此文章的原始出处http:/ 的部分备课笔记,笔记语言比较风趣,比较好玩,此文档欢迎转载,但转载请保留相应个人信息及此段说明,谢谢!- 第1天1入门介绍大家好,这两天我们将一起度过。我叫韦东山,韦小宝的韦,东方的东,高山的山,大家直接叫我名字就可以了,也别叫我老师。可能比你们都大上几年,在LINUX方面比你们早入门了几年门。今天有幸来讲第一节课,我很乐意帮助大家解决一些入门问题。当然,入门问题也有很难的问题,回答不上请大家见谅,等我下班后,回到家,找到了答案再告诉大家。好了,下面开始我们的课程。大家的基础各

2、不相同,所以我只能假定大家第一次接触LINUX的驱动编写。其实LINUX系统的一些原理,跟人类社会很有相通之处,那就分层分工,各司其职。假设你是一个集团的老总,下面有很多子公司。那你想了解公司的运营情况时,是不可能去实地考察每个公司的。那怎么办?只能看每个子公司的财务报表。打开报表阅读报表,嗯,明白了批示、下发。报表怎么来的呢?老总可不管,都是由底下的人弄好的;批示怎么执行的呢?老总也不管,都是由底下的人做的。这些“底下的人”,就是“驱动人员” 回到我们的LINUX系统,我们控制电路板上的LED,怎么办呢?同样:打开LED文件写数据到文件LED亮、灭,这个文件怎么来的?写数据到这个文件后,LE

3、D怎么就会亮、灭?这些工作,就是“驱动人员”做的。上层只管:open, read, write,其他的不管;我们就是提供可以read/write的文件,他们read时,我们提供数据;他们write时,我们执行指令。现在看看这个PPT,user space就是老总,就是用户;VFS就是这套open, read, write接口;DEVICE DRIVER就是我们写的驱动程序。当然了,整个LINUX系统还可以细分,看看前一页PPT,里面涉及进程管理、内存管理、文件系统支持、设备控制、网络等等。我的观点是:先了解总体概念,然后用到什么再深入学习什么。方向太多,会累死人的。(PPT翻到第5页LINUX

4、内核源码树,并在电脑上打开内核顶层目录),稍稍讲解各目录的内容。Kernel目录是内核的核心,比如sched.c实现进程的调度,signal.c里是信号的处理函数,fork.c实现进程的复制、创建等Drivers目录下是各种驱动程序,大家可以看到,名字是五花八门,很多都没听说过。我们今天的重点在字符设备,它们在driverschar目录下。很多芯片的驱动程序都放在这里。这里先插说一下,LINUX内核功能多,所支持的芯片多,从软盘、硬件、光盘到声卡、网卡等等,支持的文件系统也多,比如有FAT16、FAT32、EXT2、EXT3,还有在嵌入式系统里用的JFFS2、YAFFS等。对于某个产品来说,是

5、不可能全部用到这些功能的,所以要在LINUX内核里把不需要的功能裁剪掉。同学们有没有自己配置过内核?make menuconfig,然后在菜单里选择、修改就可以了:Y表示这个模块被编译进内核去,M表示编译为一个可加载模块,用到的时间再加载,或称为安装。Make menuconfig的结果都存在内核根目录下的.config里,=y表示对应的功能被编译进内核去、=m表示单独编译为一个模块在make menuconfig里,怎样才能知道哪个选项对应哪个模块?在内核源码里,怎样才能知道哪些文件对应哪个模块?在make menuconfig里,可以按h键知道它的配置名是什么;可以用“/配置名”查找到文字

6、解释是什么在内核目录下grep 来找到对应哪些文件12页的“模块编译与装/卸载”在编写驱动时再说2. 驱动分类:我们下面就讲解驱动了,不过我们先了解一下为什么要写驱动。以前我们说过了,这个社会是分层分工,各司其职。因为人的精力是有限的,Module_init linux/init.h fs/dchar_dev.c: register_chrdev = register_chrdev_region & cdev_add 字符驱动:1. 框架:知道怎么填充2. 知道怎么传送数据:copy_form_user, copy_to_user 3. 知道怎么操作硬件: ioremap 1. 框架:知道怎么

7、填充21页,填充file_operations结构,对应应用程序的open,read,write,ioctl函数2. 知道怎么传送数据:copy_form_user, copy_to_user 33页,地址的映射也说一说3. 知道怎么操作硬件: ioremap 典型分析:例子不好,自己做一个?地址的映射也说一说4. 休眠(有中断)、poll、select、信号、异步通知5. 同步、互斥、阻塞、睡眠母亲怎么才能知道房间里的孩子醒了?陪他,在旁边休息:休眠不时进去看他:POLL 等他哭:异步通知POLL、SELECT 57页需要说明的是,poll_wait函数并不阻塞,程序中poll_wait(f

8、ilp, &outq, wait)这句话的意思并不是说一直等待outq信号量可获得,真正的阻塞动作是上层的select/poll函数中完成的。select/poll会在一个循环中对每个需要监听的设备调用它们自己的poll支持函数以使得当前进程被加入各个设备的等待列表。若当前没有任何被监听的设备就绪,则内核进行调度(调用schedule)让出cpu进入阻塞状态,schedule返回时将再次循环检测是否有操作可以进行,如此反复;否则,若有任意一个设备就绪,select/poll都立即返回。自旋锁 43页spinlock_t spin spin_lock_init(lock) spin_lock(l

9、ock) spin_trylock(lock) spin_unlock(lock) 信号量 45页与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态通 知近期的课程已经讲完了ARM,进入了U-BOOT移植,相对这部分的课程是比较难理解和掌握的,若没有掌握和利用合适自己的学习方法,学习的压力会很大,所以近期大家都有不同程度的烦躁情绪。为了帮助大家更快、更好的掌握学习方法,我们请了几位学习较好的师兄回来,给我们讲授一下他们的学习方法和感受,2010年11月7日下午2:00(星期天)在本班教室进行一次新老学员交流会,届时可以向师兄们请教他们的学习方法,有很好的借鉴意义,请大家相互通知并准时参加!特此通知! 深圳华清远见嵌入式培训中心 2010年11月3日星期三

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号