‘壹’ 到什么程度才叫精通linux
许多同学触摸Linux不多,对Linux渠道的开发更是一窍不通。而如今的趋势越来越标明,作为一个优秀的软件开发人员,或计算机IT职业从业人员,把握Linux是一种很主要的营生资本与手法。
下来我将会结合自己的几年的个人开发经验,及对 Linux,更是类UNIX系统,及开源软件文化,谈谈Linux的学习方法与学习中应该注意的一些事。
就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是一无所知。所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进入入门的学习。
Linux入门是很简单的,问题是你是否有耐心,是否爱折腾,是否不排斥重装一类的大修。没折腾可以说是学不好Linux的,鸟哥说过,要真正了解Linux的分区机制,对LVM使用相当熟橡滑练,没有20次以上的Linux装机经验是积累不起来的,所以一定不要怕折腾。
由于大家之前都使用Windows,所以我也尽可能照顾这些“菜鸟”。我的推荐,如果你第一次接触Linux,那么首先在虚拟机中尝试它。虚拟机我推荐Virtual Box,我并不主张使用VM,原因是VM是闭源的,并且是收费的,我不希望推动盗版。当然如果你的Money足够多,可以尝试VM,但我要说的是即使是VM,不一定就一定好。
付费的软件不一定好。
首先,Virtual Box很小巧,Windows平台下安装包在80MB左右,而VM动辄600MB,虽然功能强大,但资源消耗也多,何况你的需求Virtual Box完全能够满足。所以,还是自己选。
如何使用虚拟机,是你的事,这个我不教你,因为很简单,不会的话Google或Bai都可以,英文好的可以直接看官方文档。现在介绍Linux发行版的知识。
正如你所见,Linux发行版并非Linux,Linux仅是指操作系统的内核,作为科班出生的你不要让我解释,我也没时间。
我推荐的发行版如下:
UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新应用,相对来说不太喜欢折腾的开发者。
Debian,相对UBUNTU难很多的发行版,突出特点是稳定与容易使用的包管理系统,缺点是企业支持不足,为社区开发驱动。
Arch,追逐时尚的开发者的首选,优点是包更新相当快,无缝升级,一次安装基本可以一直运作下去,没有如UBUNTU那样的版本概念,说的专业点叫滚动升级,保持你的系统一定是最新的。缺点显然易见,不稳定。同时安装配置相对Debian再麻烦点。
Gentoo,相对Arch再难点,考验使用者的综合水平,从系统安装到微调,内核编译都亲历亲为,是高手及黑客显示自己技术手段,按需配置符合自己要求的系统的首选。
Slackware与Gentoo类似。
CentOS,社区维护的RedHat的复刻版本,完全使用RedHat的源码重新编译生成,与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器,如网络管理,架站,那么CentOS是你的选择。
LFS,终极黑客显摆工具,完全从源代码安装,编译系统。安装前你得到的只有一份文档,你要做的就是照文档你的说明,一步步,一条条命令,一个个软件包的去构建你的Linux,完全由你自己控制,想要什么就是什么。如果你做出了LFS,证明你的Linux功底已经相当不错,如果你能拿LFS文档活学活用,再将Linux从源代码开始移植到嵌入式系统,我敢说中国的企业你可以混的很好。
1、Linux基础
你得宏如尺挑一个适合你的系统,然后在虚拟机安装它,开始使用它。如果你想快速学会Linux,我有一个建议就是忘记图形界面,不要想图形界面能不能提供你问题的答案,而是满世界的去找,去问,如何用命令行解决你的问题。
在这个过程中,你最好能将Linux的命令掌握的不错,起码常用的命令得知道,同时建立了自己的知识库,里面是你积累的各项知识。
2、Linux平台的C/C++开发,同时还有Bash脚本编程[java]
再下个阶段,你需要学习的是Linux平台的C/C++开发,同时还有Bash脚本编程,如果你对Java兴趣很深还有Java。同样,建议你蔽高抛弃掉图形界面的IDE,从VIM开始,为什么是VIM,而不是Emacs,我无意挑起编辑器大战,但我觉得VIM适合初学者,适合手比较笨,脑袋比较慢的开发者。 Emacs的键位太多,太复杂,我很畏惧。然后是GCC,Make,Eclipse(Java,C++或者)。
虽然将C++列在了Eclipse中,但我并不推荐用IDE开发C++,因为这不是Linux的文化,容易让你忽略一些你应该注意的问题。 IDE让你变懒,懒得跟猪一样。如果你对程序调试,测试工作很感兴趣,GDB也得学的很好,如果不是GDB也是必修课。这是开发的第一步,注意我并没有提过一句Linux系统API的内容,这个阶段也不要关心这个。你要做的就是积累经验,在Linux平台的开发经验。
我推荐的书如下:C语言程序设计。 C语言,白皮书当然更好。 C++推荐 C++ Primer Plus, Java我不喜欢,就不推荐了,附一个别人的书单:java 入门书籍。工具方面推荐VIM的官方手册,GCC中文文档,GDB中文文档,GNU开源软件开发指导(电子书),汇编语言程序设计(让你对库,链接,内嵌汇编,编译器优化选项有初步了解,不必深度)。
如果你这个阶段过不了就不必往下做了,这是底线,最基础的基础,否则离开,不要霍霍Linux开发。不专业的Linux开发者作出的程序是与Linux文化或UNIX文化相背的,程序是走不远的,不可能像Bash,VIM这些神品一样。所以做不好干脆离开。
3、UNIX环境高级编程
UNIX环境高级编程堪称神作,经典中的经典。
接下来进入Linux系统编程,不二选择,APUE,UNIX环境高级编程,一遍一遍的看,看10遍都嫌少,如果你可以在大学将这本书翻烂,里面的内容都实践过,有作品,你口头表达能力够强,你可以在面试时说服所有的考官。
(可能有点夸张,但APUE绝对是圣经一般的读物,即使是Windows程序员也从其中汲取养分, Google创始人的案头书籍,扎尔伯克的床头读物。)
这本书看完后你会对Linux系统编程有相当的了解,知道Linux与Windows平台间开发的差异在哪?它们的优缺点在哪?我的总结如下:做Windows平台开发,很苦,微软的系统API总在扩容,想使用最新潮,最高效的功能,最适合当前流行系统的功能你必须时刻学习。 Linux不是,Linux系统的核心API就100来个,记忆力好完全可以背下来。而且经久不变,为什么不变,因为要同UNIX兼容,符合POSIX标准。所以Linux平台的开发大多是专注于底层的或服务器编程。
这是其优点,当然图形是Linux的软肋,但我站在一个开发者的角度,我无所谓,因为命令行我也可以适应,如果有更好的图形界面我就当作恩赐吧。另外,Windows闭源,系统做了什么你更本不知道,永远被微软牵着鼻子跑,想想如果微软说Win8不支持QQ,那腾讯不得哭死。而Linux完全开源,你不喜欢,可以自己改,只要你技术够。
另外,Windows虽然使用的人多,但使用场合单一,专注与桌面。而Linux在各个方面都有发展,尤其在云计算,服务器软件,嵌入式领域,企业级应用上有广大前景,而且兼容性一流,由于支持POSIX可以无缝的运行在UNIX系统之上,不管是苹果的Mac还是IBM的AS400系列,都是完全支持的。另外,Linux的开发环境支持也绝对是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就连C#也支持。而微软除Visual Stdio套件以外,都不怎么友好,不是吗?
如果你看完APUE的感触有很多,希望验证你的某些想法或经验,推荐UNIX程序设计艺术,世界顶级黑客将同你分享他的看法。
4、选择方向:网络,图形,嵌入式,设备驱动
网络方向:服务器软件编写及高性能的并发程序编写
现在是时候做分流了。大体上我分为四个方向:网络,图形,嵌入式,设备驱动。
如果选择网络,再细分,我对其他的不是他熟悉,只说服务器软件编写及高性能的并发程序编写吧。相对来说这是网络编程中技术含量最高的,也是底层的。需要很多的经验,看很多的书,做很多的项目。
我的看法是以下面的顺序来看书:
APUE再深读– 尤其是进程,线程,IPC,套接字
多核程序设计- Pthread一定得吃透了,你很NB
UNIX网络编程– 卷一,卷二
TCP/IP网络详解– 卷一再看上面两本书时就该看了
5.TCP/IP 网络详解– 卷二我觉得看到卷二就差不多了,当然卷三看了更好,努力,争取看了
6.Lighttpd源代码- 这个服务器也很有名了
7.Nginx源代码– 相较于Apache,Nginx的源码较少,如果能看个大致,很NB。看源代码主要是要学习里面的套接字编程及并发控制,想想都激动。如果你有这些本事,可以试着往暴雪投简历,为他们写服务器后台,想一想全球的魔兽都运行在你的服务器软件上。
Linux内核 TCP/IP协议栈– 深入了解TCP/IP的实现
如果你还喜欢驱动程序设计,可以看看更底层的协议,如链路层的,写什么路由器,网卡,网络设备的驱动及嵌入式系统软件应该也不成问题了。
当然一般的网络公司,就算网络级别的也该毫不犹豫的雇用你。只是看后面这些书需要时间与经验,所以35岁以前办到吧!跳槽到给你未来的地方!
图形方向,我觉得图形方向也是很有前途的,以下几个方面。
Opengl的工业及游戏开发,国外较成熟。
影视动画特效,如皮克斯,也是国外较成熟。
GPU计算技术,可以应用在浏览器网页渲染上,GPU计算资源利用上,由于开源的原因,有很多的文档程序可以参考。如果能进火狐开发,或google做浏览器开发,应该会很好。
嵌入式方向:嵌入式方向没说的,Linux很重要。
掌握多个架构,不仅X86的,ARM的,单片机什么的也必须得懂。硬件不懂我预见你会死在半路上,我也想走嵌入式方向,但我觉得就学校教授嵌入式的方法,我连学电子的那帮学生都竞争不过。奉劝大家,一定得懂硬件再去做,如果走到嵌入式应用开发,只能祝你好运,不要碰上像Nokia,Hp这样的公司,否则你会很惨的。
驱动程序设计:
软件开发周期是很长的,硬件不同,很快。每个月诞生那么多的新硬件,怎么让他们在Linux上作业起来,这是你的作业。由于Linux的兼容性极好,假如不是太低层的驱动,根本C言语就能够搞定,体系架构的影响不大,由于有体系支撑,你可能做少许更改就能够在ARM上运用PC的硬件了,所以做硬件驱动开发不像嵌入式,对硬件常识的请求很高。
能够娴熟的建立常见的效劳,lnmp,ftp,dns,smba,假如呈现毛病,能够及时的排除去。。。常常运用Linux,必定能够变成大神。
原文链接:http://www.mage.com/71706.html
‘贰’ linux椹卞姩宸ョ▼甯堟湁鍓嶉斿悧linux椹卞姩宸ョ▼甯
Linux鍐呮牳鍜岄┍锷ㄥ紑鍙戝伐绋嫔笀镄勫彂灞曞墠鏅镐庝箞镙凤纻
鎴戜翰韬浣挞獙锛屾垜涔嫔墠鏄锅氭暟鎺х郴缁熷紑鍙戠殑锛屽仛浜嗘湁涓冨叓骞达纴链墄86镄勪骇鍝佷篃链塧rm镄勪骇鍝侊纴x86镄刲inux鐩稿瑰紑鍙戦┍锷ㄧ殑鍦版柟涓嶅氾纴arm涓婃瘆杈冨氾纴瀛桦偍锛屾樉绀虹殑锛寀sb镄勶纴钖勭嶆荤嚎镄勶纴阔抽戠殑锛岀绣缁灭殑锛屽緢澶氩湴鏂瑰彧瑕佹湁璁㈠埗闇姹傞兘瑕佹敼銆傞┍锷ㄥ紑闂ㄦ涙瘆杈冮珮锛屼富瑕佷细杞浠惰缮寰椾简瑙d簺纭浠剁煡璇嗭纴纭浠剁殑铡熺悊锲撅纴璁惧囩殑鏁版嵁镓嫔唽锛屽伐浣灭壒镐ч兘瑕佷细锛屽叆闂ㄩ毦浣嗘槸涓镞﹀叆闂ㄤ简灏辫窡鍏朵粬镄勪竴镙峰仛澶氢简灏辩啛鎭変简銆备箣鍓嶅叕鍙告槸linux+qt锛屼粖骞寸昏亴浜呜繘浜嗕竴瀹跺畨鍗揿紑鍙戠殑鍏鍙革纴鐜板湪杩桦湪锅氩畨鍗撶殑椹卞姩寮鍙戯纴镒熻夊ぇ钖屽皬寮傦纴鍙鏄纭浠跺钩鍙板彉浜嗭纴寮鍙戠殑鍐呭逛粛鏄娌″彉銆傞┍锷ㄨ繖涓鍧楋纴浜烘瘆杈冨皯锛岀浉瀵瑰緟阆囦篃浼氩ソ涓浜涳纴鐜板湪鎴戜篃涓岖煡阆撴湭𨱒ヤ细涓崭细闅忕潃骞撮缎瓒婂ぇ锛屼细琚娣樻卑鎺夛纴浣嗘槸linux链韬镄勫簲鐢ㄨ寖锲存槸鎸哄箍镄勶纴钥屼笖浣滀负涓涓鎴愬姛镄勫紑婧愰”鐩锛屽彧瑕佺ぞ浼氭湁闇姹傦纴钖庨溃搴旇ヨ缮鏄浼氲骞挎硾搴旂敤锛岃呖浜庝釜浜哄氨鐪嬭嚜宸辩殑鑳藉姏鍜岀簿锷涗简!
宓屽叆寮廘INUX椹卞姩宸ョ▼甯堢殑寰呴亣镐庝箞镙凤纻
涓鑸锛屽伐浣灭粡楠屽湪1-2骞寸殑宓屽叆寮忓伐绋嫔笀钖姘达纴锘烘湰浼氩湪5000-8000鍏幂殑锣冨洿锛岃岄殢镌宸ヤ綔骞撮檺镄勫炲姞锛岃柂璧勬按骞充篃浼氭湁杈冩槑鏄剧殑鎻愰珮銆3骞村伐浣灭粡楠岀殑1-2涓囷纴锘烘湰涓嶆垚闂棰樸傛垜链変竴涓澶у﹀悓瀛2013骞村湪鍗庢竻杩滆佸︿範杩囧祵鍏ュ纺寮鍙戯纴鐜板湪宸ヨ祫閮戒笂涓囦简锛佸氨鐪嬩綘镊宸辨庝箞𨱍
宓屽叆寮忓伐绋嫔笀涓庡悗绔寮鍙戝摢涓闅
宓屽叆寮忓伐绋嫔笀涓庡悗绔寮鍙戠浉姣旇缮鏄宓屽叆寮忓伐绋嫔笀姣旇缉闅俱傚祵鍏ュ纺椹卞姩宸ョ▼甯堬细缂栧啓鍜岀Щ妞嶅悇绉嶈姱鐗囬┍锷(濡傞煶棰戣姱鐗)锛屼紭鍖栫‖浠惰惧囬┍锷(濡傛俯婀垮害浼犳劅鍣)锛屽缑绮鹃氩悇绉岖‖浠舵帴鍙e岗璁(濡侷2C鍗忚)銆佺郴缁熻皟搴︺佷俊鍙烽噺銆侀挛链哄埗绛夌瓑锛屽紑鍙戦毦搴︽渶澶с
璇ョ被寮鍙戣呬竴鑸鏄杞纭浠剁患钖埚瀷浜烘墠锛屼竴鑸镄勫祵鍏ュ纺椹卞姩宸ョ▼甯堟寚LINUX涓婄殑椹卞姩寮鍙戝伐绋嫔笀锛岄渶瑕佺簿阃歀inux椹卞姩妗嗘灦(platform妗嗘灦銆乮nput瀛愮郴缁熸嗘灦绛)锛岀粨钖堣姱鐗囨湰韬铡荤紪鍐欓┍锷锛岄┍锷ㄧ殑濂藉潖寰埚ぇ绋嫔害涓婂喅瀹氢竴涓浜у搧镄勫ソ鍧忋
涓氱晫瀵归┍锷ㄤ汉镓岖殑瀹氢箟鏄涓夊勾镓岖畻鍏ラ棬锛屽彲瑙佹ら棬妲涗箣楂樸
‘叁’ 请问做嵌入式linux驱动开发的工作需要对驱动熟练到什么程度才行
你好,楼主:
我可以给出一些见解,我是通过培训,然后在此行业工作了近一年。针对你的问题,不同的公司有不同的录取规则,没有一个定式。当时找第一份工作前,我也有你的这种困扰,我把我的想法说一下,希望能帮到你。
如果你作为初级驱动工程师去面试,你只需要熟悉一些重要的驱动,比如I2C、SPI,而且自己做过此类驱动的小项目,再针对公司供应职业的需求好好做足功课。这个阶段是入职后更专业地学习驱动。
如果你作为资深工程师,有多年经验,自然地对大部分驱动十分了解,比如USB、网卡、存储设备等等。
对于驱动框架啊,你一定是要了解并十分熟悉框架的,这样才可以对相应驱动程序进行填充实现其功能。在面试找工作时这个方面会更重要些,但是我认为只要你认真地研究驱动代码,是很容易掌握的,关键是信心与毅力。
“还有对驱动编写完后的配置和编译需要到达什么程度?”这个问题问的好,这是企业和公司都关心的问题,它关心着产品的市场,至于到什么程度,基本的功能你一定要很好地实现,如果时间充裕,尽量优化你的代码,使驱动占用更少的资源、更省电、数据传输更好等等。
以上为个人见解,祝成功!
‘肆’ 如何学习Linux设备驱动
通常,内核的升级对从事linux应用程序开发的人员来说影响较小,因为系统调用基本保持兼容,影响比较大的是驱动开发人员。每次内核的更新都可能导致许多内核函数原型上的变化,其中既有内核本身提供的函数,也有硬件平台代码提供的函数,后者变化的更加频繁。这一点从许多经典书籍就可验证,当你按照手里的经典着作,如:Alessandro的《linux设备驱动程序》,编写驱动时,发现并不能够成功的在你的linux平台上编译通过、或不能正常执行,原因就在于你用的内核和书里的不一致。
本文从两个方面去解释这个问题,一方面是如何写好linux设备驱动,另一方面是如何应对不断升级的内核。
如何写好Linux设备驱动
Linux设备驱动是linux内核的一部分,是用来屏蔽硬件细节,为上层提供标准接口的一种技术手段。为了能够编写出质量比较高的驱动程序,要求工程师必须具备以下几个方面的知识:
● 熟悉处理器的性能
如:处理器的体系结构、汇编语言、工作模式、异常处理等。对于初学者来说,在还不熟悉驱动编写方法的情况下,可以先不把重心放在这一项上,因为可能因为它的枯燥、抽象而影响到你对设备驱动的兴趣。随着你不断地熟悉驱动的编写,你会很自然的意识到此项的重要性。
● 掌握驱动目标的硬件工作原理及通讯协议
如:串口控制器、显卡控制器、硬件编解码、存储卡控制器、I2C通讯、SPI通讯、USB通讯、SDIO通讯、I2S通讯、PCI通讯等。编写设备驱动的前提就是需要了解设备的操作方法,所以这些内容的重要程度不言而喻。但不是说要把所有设备的操作方法都熟悉了以后才可以写驱动,你只需要了解你要驱动的硬件就可以了。
● 掌握硬件的控制方法
如:中断、轮询、DMA 等,通常一个硬件控制器会有多种控制方法,你需要根据系统性能的需要合理的选择操作方法。初学阶段以实现功能为目的,掌握的顺序应该是,轮询->中断->DMA。随着学习的深入,需要综合考虑系统的性能需求,采取合适的方法。
● 良好的GNU C语言编程基础
如:C语言的指针、结构体、内存操作、链表、队列、栈、C和汇编混合编程等。这些编程语法是编写设备驱动的基础,无论对于初学者还是有经验者都非常重要。
● 良好的linux操作系统概念
如:多进程、多线程、进程调度、进程抢占、进程上下文、虚拟内存、原子操作、阻塞、睡眠、同步等概念及它们之间的关系。这些概念及方法在设备驱动里的使用是linux设备驱动区别单片机编程的最大特点,只有理解了它们才会编写出高质量的驱动。
● 掌握linux内核中设备驱动的编写接口
如:字符设备的cdev、块设备的gendisk、网络设备的net_device,以及基于这些基本接口的framebuffer设备的fb_info、mtd设备的mtd_info、tty设备的tty_driver、usb设备的usb_driver、mmc设备的mmc_host等。
Linux内核为设备驱动编写者提供了标准的接口,驱动编写者无需精通内核的各个部分,只需要明确内核提供给我们的接口,并实现此接口就可以了。内核提供的接口采用的是面向对象的思路,即把目标设备抽象成一个对象,通常利用一个结构体来描述这个对象。驱动工程师的任务就是实现这个对象。这个结构体中会包含设备的属性(用变量表示)和操作方法(用函数指针表示)。如:字符设备的cdev
struct cdev {
struct kobject kobj;
struct mole *owner;
const struct file_operations *ops; // 操作方法结合,其它项都是属性
struct list_head list;
dev_t dev;
unsigned int count;
};
开始阶段可以以模仿为主,即套用一些固定的模板、参考例程。
如何应对不断升级的内核
内核升级对驱动的影响主要体现在,(1)驱动接口定义的变化;(2)内核的一些功能函数的名称、参数、头文件、宏定义的变化;(3)平台代码关于硬件操作方面封装的一些函数的变化;(4)设备模型的影响。
● 驱动接口定义的变化
如:2.4内核中字符设备驱动的注册接口是:
int register_chrdev(unsigned int major, const char * name, struct file_operations *fops)
而2.6内核中已经不建议使用这种方法了,改为:
int cdev_add(struct cdev *p, dev_t dev, unsigned count)
这种接口定义及注册方法带来的变化,发生的并不频繁。解决方案是:参考内核中的代码。这种接口定义及注册方法在内核中非常容易找到,如:字符设备驱动的注册方法及接口定义可以参照内核driver/char/目录下的很多实例。
● 内核的一些功能函数的名称、参数、头文件、宏定义的变化
如:中断注册函数的格式及参数在2.4内核、2.6内核低版本和高版本之间都存在差别,在2.6.8中,中断注册函数的定义为:
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),unsigned long irq_flags, const char * devname, void *dev_id)
irq_flags的取值主要为下面的某一种或组合: SA_INTERRUPT、SA_SAMPLE_RANDOM、SA_SHIRQ
在2.6.26中,中断注册函数的定义为:
int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)
typedef irqreturn_t (*irq_handler_t)(int, void *); irq_flags的取值主要为下面的某一种或组合:(功能和2.6.8的对应)IRQF_DISABLED、IRQF_SAMPLE_RANDOM、IRQF_SHARED
当出现这些问题时,编译过程中,编译器会给我们比较明确的错误提示,根据这些提示你可以判断出是否是缺少头文件问题、是否是函数参数定义有误等。解决问题的最好办法还是到你的目标内核中找信息。此时找问题的方法可以借助于搜索,如:你可以在新的内核中搜索request_irq,看新内核中的驱动是如何使用它的,这种方法非常有效。
● 平台代码关于硬件操作方面封装的一些函数的变化
内核中,硬件平台相关的代码在内核更新过程中变化比较频繁,和我们的设备驱动也是息息相关,所以在针对一个新内核编写设备驱动前,一定要熟悉你的平台代码的结构。有时平台虽然提供了内核要求的接口函数,但使用起来功能却并不完善。下面还是先举个例子说明平台代码更新对设备驱动的影响。
如:在linux-2.6.8内核中,调用set_irq_type(IRQ_EINT0,IRQT_FALLING);去设置S3C2410的IRQ_EINT0的中断触发信号类型,你会发现不会有什么效果。跟踪代码发现内核的set_irq_type函数需要平台提供一个针对硬件平台的实现函数
static struct irqchip s3c_irqext_chip = {
.mask = s3c_irqext_mask,
.unmask = s3c_irqext_unmask,
.ack = s3c_irqext_ack,
.type = s3c_irqext_type
};
s3c_irqext_type就是linux内核需要的实现函数,而s3c_irqext_type在2.6.8中的实现为: static int s3c_irqext_type(unsigned int irq, unsigned int type)
{
irqdbf("s3c_irqext_type: called for irq %d, type %d\n", irq, type);
return 0;
}
原来并没有实现。而在较高版本的内核,如2.6.26内核中,这个函数是实现了的。所以你一定要小心。当平台函数不好用时,一定要查查原因,或者直接操作硬件寄存器来达到目的。
● 2.6内核设备模型对驱动的影响
在2.6内核中写设备驱动和在2.4内核中有着很大的不同,主要就是在设备驱动中融入了比设备驱动本身结构还复杂、还难以理解的设备模型。初学驱动时你可以不理会设备模型,但你会发现内核里的驱动代码基本上都是融入了设备模型的了。所以很多时候你不得不面对现实,还是要弄懂它,并且它也的注册方法也会随着内核的升级而发生变化。解决此类问题的最好方法还是参考目标内核驱动代码。