《嵌入式LINUX应用开发完全手册》_第1页
《嵌入式LINUX应用开发完全手册》_第2页
《嵌入式LINUX应用开发完全手册》_第3页
《嵌入式LINUX应用开发完全手册》_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、写数据到文件led亮、灭,这个文件怎么来的?写数据到这个文件后,led怎么就会亮、灭?这些工作,就是“驱动人员”做的。上层只管:open, read, write,其他的不管;我们就是提供可以read/write的文件,他们read时,我们提供数据;他们write时,我们执行指令。现在看看这个ppt,user space就是老总,就是用户;vfs就是这套open, read, write接口;device driver就是我们写的驱动程序。当然了,整个linux系统还可以细分,看看前一页ppt,里面涉及进程管理、内存管理、文件系统支持、设备控制、网络等等。我的观点是:先了解总体概念,然后用到什

4、么再深入学习什么。方向太多,会累死人的。(ppt翻到第5页linux内核源码树,并在电脑上打开内核顶层目录),稍稍讲解各目录的内容。kernel目录是内核的核心,比如sched.c实现进程的调度,signal.c里是信号的处理函数,fork.c实现进程的复制、创建等drivers目录下是各种驱动程序,大家可以看到,名字是五花八门,很多都没听说过。我们今天的重点在字符设备,它们在driverschar目录下。很多芯片的驱动程序都放在这里。这里先插说一下,linux内核功能多,所支持的芯片多,从软盘、硬件、光盘到声卡、网卡等等,支持的文件系统也多,比如有fat16、fat32、ext2、ext3,

5、还有在嵌入式系统里用的jffs2、yaffs等。对于某个产品来说,是不可能全部用到这些功能的,所以要在linux内核里把不需要的功能裁剪掉。同学们有没有自己配置过内核?make menuconfig,然后在菜单里选择、修改就可以了:y表示这个模块被编译进内核去,m表示编译为一个可加载模块,用到的时间再加载,或称为安装。make menuconfig的结果都存在内核根目录下的.config里,=y表示对应的功能被编译进内核去、=m表示单独编译为一个模块在make menuconfig里,怎样才能知道哪个选项对应哪个模块?在内核源码里,怎样才能知道哪些文件对应哪个模块?在make menuconf

6、ig里,可以按h键知道它的配置名是什么;可以用“/配置名”查找到文字解释是什么在内核目录下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_us

7、er 3. 知道怎么操作硬件: ioremap 1. 框架:知道怎么填充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页需要说

8、明的是,poll_wait函数并不阻塞,程序中poll_wait(filp, &outq, wait)这句话的意思并不是说一直等待outq信号量可获得,真正的阻塞动作是上层的select/poll函数中完成的。select/poll会在一个循环中对每个需要监听的设备调用它们自己的poll支持函数以使得当前进程被加入各个设备的等待列表。若当前没有任何被监听的设备就绪,则内核进行调度(调用schedule)让出cpu进入阻塞状态,schedule返回时将再次循环检测是否有操作可以进行,如此反复;否则,若有任意一个设备就绪,select/poll都立即返回。自旋锁 43页spinlock_t spin spin_lock_init(lock) spin_lock(lock) spin_trylock(lock) spin_unlock(lock) 信号量 45页与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态通 知近期的课程已经讲完了arm,进入了u-boot移植,相对这部分的课程是比较难理解和掌握的,若没有掌握和利用合适自己的学习方法,学习的压力会很大,所以近期大家都有不同程度的烦躁情绪。为了帮助大家更快、更好的掌握学习方法,我们请了几位学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论