为什么LINUX下小红点驱动的驱动这么好

linux下驱动开发面试题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
linux下驱动开发面试题
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢如何查看linux的驱动有没有装好?请高手指点一下!_百度知道博客访问: 191313
博文数量: 56
博客积分: 1495
博客等级: 上尉
技术积分: 784
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
嵌入式之对学习Linux设备驱动的看法& & 从接触ARM到现在半年多了(准确地说应该是大三下学期才开始的),在这半年的时间里,有过快乐,也有过痛苦,有过成功的高兴,也有过失败的难过,总之,在这个程中,所尝到了应该尝到的,由于在大二的时候学习过DSP,对嵌入式的概念有一点了解,所以,在接触ARM时,并没有花大多的时间去入门,直接一边看手册,一边写驱动了。开发板一到手就开始了对ARM驱动程序的开发。没有多久就一边学习裸机驱动,一边学习基于Linux操作系的驱动,因为这样可以一起学习,其实,裸机驱动开发成功,再移植到Linux操作系统上不难,难的是怎样写出一个可移植的,稳定的驱动。& &很多人认为只学习Linux驱动就可以了,完全看不起裸机驱动。不然,Linux驱动是在你对裸机的了解的基础上实现的,如果连裸机驱动的写不对,何以对理解、修改,书写基于Linux系统的驱动呢?比如,SPI总线系统,如果你连SPI协议都不清楚,你需要驱动的是一般的SPI接口的EEPROM,还是CAN总线驱动器,还是其它SPI接口的硬件,需要怎么样的时序都不懂(在嵌入式领域,时序很重要,我在写DS18B20驱动时,因为几个ns的时序,折腾了三天)。你能看懂内核SPI总线子系统下的源码,你能真正的应用?所以,裸机也一样的重要,在真正了解裸机驱动的基础上来了解Linux驱动,会更加内容。& &没有开始写基于Linux驱动程序之前,在网上听说《LDD3》这本书不错,但是,还好,在网上下载到相应的chm格式文档,也许是由于个人的原因为吧,总喜欢看PDF格式的,所以花了点时间把它转化为PDF格式,刚开始看的时候,怎么也看不懂,说实在的,《LDD3》这本书不太适合初学者看,有幸在图书馆借到《Linux设备驱动开发技术与应用》,才慢慢的走进基于Linux操作系统的驱动的门,这本书这一学期来一直在我的手里,一直没有还回去,继借了一次,马上还了又马上借过来,暑假区间,手里的资金还可以,就把这本书给买下来了,对于《LDD3》,虽然也不错,还是看原版的吧,中文版看得不太明白,翻译太差了,有个电子版的就行了,这两本书在一起看的话,应该很好入门了,但是更多时候还是看看《Linux设备驱动开发技术与应用》,这是个人的认为,也许跟你的认为不一样,请原谅。& & 转眼间,暑假就快完了,这个暑假没有做多少事,很多时候是在看Linux内核相关驱动的源码,终于明白了别人告诉我一句话,如果真的想学好Linux设备驱动,去看内核相关的驱动吧,里面的东西太多了,能看懂,再写出相应的应用程序,那么证明你不错了。刚开始不以为然,后来,由于IIC总线的需要的,所以开始看内核提供的IIC总线子系统,也看到了自己的C与别人的差距,有时候,别说去了解某行代码的用途,连看懂是怎么声明的有点难,所以,这对C的要求有点高,但是,如果你的C够用,那么,看Linux内核源码可以使你的C更进一步,指针,特别是函数指针(非指针函数),在其中应用得最多;再者宏定义技术,内联函数,应用预定义处理控制调试信息,在源码中保留调试信息,为以后的维护提供方便。& & 好了,我们回到Linux驱动上来,在Linux内核中,有很多稳定的,很有价值的驱动源码,而且这些源码都可以为我们提供服务,我们直接应用,也可修改一下就可以应用的,所以,在商品化产品来说,还是直接应用或者修改内核提供的驱动最好,因为这在稳定性与可移植性上得到一定的认可,当然,前提是你能正确应用与修改,这就得要求去了解与懂这些驱动源码。当然,这不是一般的人都能懂的,你可以写一个LED驱动,应用register_chrdev_region或者register_chrdev进行注册,应用unregister_chrdev_region或者unregister_chrdev进行注销,也就可以应用输入子系统(input subsystem)所提供的 & input_register_device来进行注册,应用input_unregister_device来进行注销,当然,你也可以应用其它的注册与注销方式来进行,只要是你掌握的,你想怎么做都行,前提是你必须掌握。& & 刚开始学习的时候,都是自己从头开始写驱动,自己实现read,write,ioctl,open等,没有想到Linux内核那么丰富而又稳定的代码,一般输入类型的驱动,现在知道尽量应用input subsystem来实现,比如usbmouse,触摸屏,游杆等应用输入子系统可以为我们提供很多东西,但是,前提是你必须了解输入子系统的构架,能看懂其源码。其实,看懂别人的源码,有时候是很困难的一件事,不过,还好,在内核的Documentation目录下有相关的帮助文档。在这些帮助文档的帮助下,应该可以看懂,到应用了吧,这需要时间,某些子系统内部的结构很复杂,没有一两天,或者更长的时间是搞不懂的,也许你会问,一个LED驱动,太简单了,我自己写一个也就一个小时不到的时间,何必花那么多时间去了解输入子系统呢,这就是Linux操作系在嵌入式之所以受欢迎的原因为,我是这样认为,当你真正的了解,懂了输入子系统的时候,你会的不只是LED驱动,在这个基础上,你可以很顺手地开发其它的输入型驱动了,这就是也许就是所谓的经验吧。& & 目前Linux中有多少子系统,我不太清楚,但是坚信,每一个子系统的存在,都是有用的,虽然没有必要去把每个子系统都搞懂,这也是不可能的,但是,尽量搞懂你目前正在学习的子系统,比如,一般IIC总线子系统,SPI子系统,CD卡,输入子系统,Framebuffer(LCD相关驱动构架)子系统这些比较常见的子系统,应该得去了解吧,在工作中,我们还会接很多子系统,硬件的发展,Linux内核也在不断更新其子系统的分类,所以,我认为,能快速看懂内核子系统,并能正确应用,这就是最终的目的,在Linux世界里,修改也是一种能力,能把内核中相近类型的硬件驱动修改为自己所用,这也是个人的修为。& & 很多人都喜欢最新的Linux内核,对于学习来说,我更加喜欢能应用目前资料中的例子能应行的,资料最多的内核版本(我用的内核版本还是Linux-2.6.13,还没有自己移植过Linux操作系统,在对Linux相关构架不了解的情况下,不会去做,真正了解了,移植应该不在话下),这样在学习过程中会减少很多不必要的事,如果真正的在一个内核版本中把想学的学好了,那么换个内核,也就是头文件所在的目录不大相同,某此内容不同罢了,看看一两个例子,或者直接到内核里面去看看,修改一下就行了,学习,不是学习某一内核版本下的驱动,学习是某一种操作系统下的思想,有了思想也就是所谓的神,还有什么不会的,在说,你在学校学习的是Linux2.6.32,但是,在公司,也许会让你应用2.6.13或者其它的版本来写驱动,那么,如果你只会你学习过的,你可以走人了,证明你更本就没有学会,因为你没有思候。& & 好了,这是个人的一点看法,也许你有你自己的看法,有不对的地放,请给予指正,让我也有学习的机会。舒稳于长沙理工大学
阅读(1734) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
讲得不错啊,老乡。&&我现在也正开始学习驱动,对于大四应该算是晚了很多啊。&&但是我还是得坚持。&&希望老乡能多多指导下啊
请登录后评论。Linux驱动之hello world
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
启动终端,首先用VI编写一个C程序:vi hello.c#include "stdio.h"int main(){printf("hello world!!!\n");return 0;}接着用GCC进行编译:gcc -o hello hello.c,最后运行该程序:./hello,在终端上你会看到:hello world!!!上面的是在操作系统基础上进行的用户应用程序的开发。然而对于驱动程序的开发是绝然不同的,因为驱动程序的开发是运行在内核空间的,而应用程序是运行在用户空间的。也就是说,程序不能直接通过指针,把用户空间的数据地址传递给内核(因为MMU映射的地址根本不一样)。要想在应用程序和驱动程序之间传递数据(指针),就需要经过转换。把用户态“看到”的空间地址转换成内核态可访问的地址。Linux内核把驱动程序划分为3种类型:字符设备、块设备和网络设备。应用程序对于字符设备的每一个I/O操作,都会直接传递给系统内核对应的驱动程序;而应用程序对于块设备的操作,要经过系统的缓冲区管理,间接传递给驱动程序处理。块设备的这种管理方式是为存储提供优化的;而字符设备的管理方式是为操作提供优化的。至于网络设备,它在Linux系统中是一类比较特殊的设备它不像字符设备或块设备那样通过对应的设备文件节点去访问,内核也不再通过read和write等调用去访问网络设备。Linux的网络系统主要是基于BSD UNIX的套接字机制,在系统和驱动程序之间有专门的数据结构进行数据传输。在Linux系统中,驱动程序都做成模块的形式,也就是module。简单的说,一个模块提供一个功能,这些模块是可以按照需要随时装入内核空间和从内核空间卸载的。因此,内核模块是为了给内核动态增减功能而设计的,并不仅仅是限于驱动程序。当用户输入命令“insmod 模块文件名”加载内核模块时,系统会检测此模块能否被加载,如果能被加载,内核调用模块的初始化函数module_init()(2.4内核为init_module())。当用户输入命令“rmmod 模块文件名”卸载内核模块时,此时,系统会检测此模块是否能被卸载,内核将调用模块清除函数module_exit()(2.4内核为cleanup_module())。
本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
排队的时候你会发现一个规律:另一排总是动的比较快,当你换到另一排,你会发现,你原来站的那一排就开始动的比较快了。你站的越久,越可能感觉自己是站错了排。这就是神奇的墨菲定理。所以,不让自己后悔的最好办法,就是坚持。坚持你的人生梦想,而不去张望别人并受之影响。坚信自己当下的选择,不犹疑,不浮躁,心怀梦想,务实前行!相信成功就是将别人坚持不下来的事情坚持做下去。
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.net在Linux中使用thinkpad的小红点+中键 – 易水博客

我要回帖

更多关于 小红点驱动 的文章

 

随机推荐