新聞中心
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,操作系統(tǒng)的選擇越來越多樣化。Linux作為一款自由和開源的操作系統(tǒng),日益受到更多人的喜愛。而作為Linux系統(tǒng)的核心,設(shè)備驅(qū)動程序的編寫也變得越來越重要。那么,,該從何處開始呢?

創(chuàng)新互聯(lián)建站長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為江北企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),江北網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
1.了解Linux系統(tǒng)
在學(xué)習(xí)Linux設(shè)備驅(qū)動程序之前,首先需要了解Linux系統(tǒng)的基本概念和組成部分。特別是內(nèi)核的概念,因?yàn)樵O(shè)備驅(qū)動程序就是內(nèi)核中的一部分。同時(shí),還需要熟悉Linux的文件系統(tǒng)、進(jìn)程和進(jìn)程間通信等概念。
2.了解設(shè)備驅(qū)動程序的基本原理
設(shè)備驅(qū)動程序是Linux系統(tǒng)中的一種特殊的驅(qū)動程序,它是計(jì)算機(jī)系統(tǒng)與硬件設(shè)備之間的橋梁。設(shè)備驅(qū)動程序主要負(fù)責(zé)為硬件提供接口,使得操作系統(tǒng)能夠與硬件設(shè)備進(jìn)行通信。因此,了解設(shè)備驅(qū)動程序的基本原理是至關(guān)重要的。
3.學(xué)習(xí)Linux內(nèi)核編程
學(xué)習(xí)Linux設(shè)備驅(qū)動程序之前,必須要了解Linux內(nèi)核編程的基礎(chǔ)知識。該知識包括如何編譯內(nèi)核,并了解內(nèi)核中的文件、數(shù)據(jù)結(jié)構(gòu)、宏和函數(shù)等。此外,還需要學(xué)習(xí)如何調(diào)試內(nèi)核代碼,這對于設(shè)備驅(qū)動程序的編寫非常重要。
4.學(xué)習(xí)Linux設(shè)備驅(qū)動程序的編寫
在學(xué)習(xí)完必要的基礎(chǔ)知識之后,就可以開始學(xué)習(xí)Linux設(shè)備驅(qū)動程序的編寫了。編寫設(shè)備驅(qū)動程序需要掌握C語言編程技術(shù)和Linux內(nèi)核編程技術(shù)。通常情況下,設(shè)備驅(qū)動程序的編寫需要熟悉設(shè)備驅(qū)動程序注冊、設(shè)備文件的創(chuàng)建、設(shè)備驅(qū)動程序的主要函數(shù)等。
5.了解常用的Linux設(shè)備驅(qū)動程序
在學(xué)習(xí)Linux設(shè)備驅(qū)動程序的過程中,了解常用的設(shè)備驅(qū)動程序是非常有益的。常見的設(shè)備驅(qū)動程序包括字符設(shè)備驅(qū)動程序、塊設(shè)備驅(qū)動程序、網(wǎng)絡(luò)設(shè)備驅(qū)動程序等。通過了解這些設(shè)備驅(qū)動程序,可以更好地掌握設(shè)備驅(qū)動程序的編寫技巧。
6.調(diào)試和測試設(shè)備驅(qū)動程序
設(shè)備驅(qū)動程序的編寫完成之后,必須進(jìn)行調(diào)試和測試。在調(diào)試和測試設(shè)備驅(qū)動程序的過程中,需要使用一些工具和技術(shù)。例如,可以使用printk()函數(shù)輸出日志信息,使用gdb調(diào)試器進(jìn)行調(diào)試,使用strace命令跟蹤設(shè)備驅(qū)動程序的系統(tǒng)調(diào)用等。
需要了解Linux系統(tǒng)、設(shè)備驅(qū)動程序的基本原理、Linux內(nèi)核編程等基礎(chǔ)知識。同時(shí),還需要學(xué)習(xí)正規(guī)的編碼方法和調(diào)試技巧。經(jīng)常與其他開發(fā)者交流、尋找其他資料和方法也是十分必要的。掌握了這些基礎(chǔ)知識,我們就可以更好地編寫自己的設(shè)備驅(qū)動程序,在Linux系統(tǒng)中發(fā)揮自己的技術(shù)水平。
相關(guān)問題拓展閱讀:
- 我準(zhǔn)備考程序員要學(xué)什么?
- 嵌入式需要學(xué)什么?嵌入式需要學(xué)哪些課程和內(nèi)容?
我準(zhǔn)備考程序員要學(xué)什么?
1、Java
Java編程語言(第三版)—Java四大名著—-James Gosling(Java之父)
Java編程思想(第2版)—-Java四大名著—-Bruce Eckel
Java編程思想(第3版)—-Java四大名著–Bruce Eckel
JAVA 2核心技術(shù) 卷I:基礎(chǔ)知識(原書第7版)—Java四大名著—–Cay Horstmann
JAVA 2核心御氏技術(shù) 卷II:高級特性(原書第7版)—-Java四大名著—–Cay Horstmann
Effective Java中文版——Java四大名著Joshua Bloch
精通Struts:基于MVC的Java Web設(shè)計(jì)與開發(fā)—孫衛(wèi)琴
精通Hibernate:Java對象持久化技術(shù)詳解—孫衛(wèi)琴
Tomcat與Java Web開發(fā)技術(shù)詳解孫衛(wèi)琴
Java與模式–閻宏
2、c#
C#程序設(shè)計(jì)Charles Petzold“windows編程泰山北斗”—C#語言“倚天屠龍雙劍”
C# Primer中文版Stanley B.Lippman—C#語言“倚天屠龍雙劍”
.NET框架程序設(shè)計(jì)(修訂版)Jeffrey Richter“windows編程泰山北斗”—.NET平臺四大天王
c#Windows程序設(shè)計(jì)Charles Petzold“windows編程泰山北斗”——.NET平臺四大天王
.NET程序設(shè)計(jì)技術(shù)內(nèi)幕Jeff Prosise—.NET平臺四大天王
.NET本質(zhì)論–第1卷:公共語言運(yùn)行庫(中文版)Chris Sells—.NET平伍拆碧臺四大天王
3、C++
C++程序設(shè)計(jì)語言(特別版)—c++八大金剛—-Bjarne Stroustrup“C++之父”
C++ Primer (第3版)中文版—-c++八大金剛—Stanley B.Lippman
C++ Primer (第4版)中文版—-c++八大金剛—Stanley B.Lippman
C++標(biāo)準(zhǔn)程序庫—自修教程與參考手冊–c++八大金剛–Nicolai M.Josuttis
C++語言的設(shè)計(jì)和演化—–c++八大金剛—-Bjarne Stroustrup“C++之父”
深度探索C++對象模型—c++八腔舉大金剛—-Stanley B.Lippman
Essential C++中文版—c++八大金剛—Stanley B.Lippman
Effective C++中文版 2nd Edition—–c++八大金剛——Scott Meyers
More Effective C++中文版—-c++八大金剛——Scott Meyers
C++編程思想(第2版) 第1卷:標(biāo)準(zhǔn)C++導(dǎo)引Bruce Eckel
C++編程思想(第2版)第2卷:實(shí)用編程技術(shù)Bruce Eckel
C++程序設(shè)計(jì)譚浩強(qiáng)
C++ 程序設(shè)計(jì)教程(第2版)錢能
C++ Primer Plus(第五版)中文版—Stephen Prata
廣博如四庫全書The c++ programming language、c++ Primer 深奧如山重水復(fù)Inside the c++ object model 程序庫大全The c++ standard libray 工程經(jīng)驗(yàn)之積累Effective c++、More Effective c++、Exceptional c++
c++八大金剛: 1、Essentital c++—lippman—C++之父,旁枝暫略,主攻核心,輕薄短小,初學(xué)者
2、The c++ programming language—-C++之父,技術(shù)權(quán)威,用詞深峻,思想深遠(yuǎn),c++百科全書代表,圣經(jīng)。 3、c++ Primer—-lippman—縱橫書市十?dāng)?shù)年,c++更佳教本,c++百科全書代表。 4、Inside the c++ object model—–lippman—-揭示c++底層,非常好,非常難。 5、Effective c++—–通過50個編程實(shí)例,展示專家經(jīng)驗(yàn),行文有趣,深處淺出。 6、More Effective c++----通過35個編程實(shí)例,展示專家經(jīng)驗(yàn),行文有趣,深處淺出。 7、The c++ standard libray---c++標(biāo)準(zhǔn)庫的百科全書。 8、設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)------good!
4、c
C程序設(shè)計(jì)語言(第2版·新版)—C語言“倚天屠龍雙劍”—Brian W.Kernighan“C語言之父”
C Primer Plus中文版(第五版)C語言“倚天屠龍雙劍”—Stephen Prata
C程序設(shè)計(jì)(第三版)譚浩強(qiáng)
C語言大全(第四版)HERBERT SCHILDT
C語言接口與實(shí)現(xiàn):創(chuàng)建可重用軟件的技術(shù)DAVID R.HANSON
C語言參考手冊(原書第5版)Samuel P.Harbison
C程序設(shè)計(jì)教程—–H.M.Deitel/P.J.Deitel
C陷阱與缺陷Andrew Koenig
5、VB
Visual Basic .NET技術(shù)內(nèi)幕—–VB編程三劍客Francesco Balena“vb首席大師”
Windows程序設(shè)計(jì)-Visual Basic.NET語言描述–VB編程三劍客—–Charles Petzold“windows編程泰山北斗”—
.NET框架程序設(shè)計(jì):Visual Basic.NET語言描述–VB編程三劍客–Jeffrey Richter“windows編程泰山北斗”—,F(xiàn)rancesco Balena“vb首席大師”
Visual Basic 6編程技術(shù)大全Francesco Balena“vb首席大師”
Visual Basic.NET 從入門到精通Petroutsos,E.
高級VISUAL BASIC編程MATTHEW CURLAND
6、Delphi
Inside VCL(深入核心——VCL架構(gòu)剖析)李維
Delphi 7高效數(shù)據(jù)庫程序設(shè)計(jì)李維
面向?qū)ο箝_發(fā)實(shí)踐之路(Delphi版)李維
7、VC
Windows 程序設(shè)計(jì)(第5版)—–Charles Petzold“windows編程泰山北斗”—
Windows核心編程Jeffrey Richter“windows編程泰山北斗”—
Windows高級編程指南Jeffrey Richter“windows編程泰山北斗”—
深入淺出MFC(第二版)—–“MFC四大天王”侯捷
MFC Windows程序設(shè)計(jì)(第2版)—MFC四大天王”Jeff Prosise
Visual C++ 技術(shù)內(nèi)幕(第4版)–MFC四大天王”David Kruglinski
深入解析MFCMFC四大天王”George Shepherd
Visual C++.NET 技術(shù)內(nèi)幕(第6版)-MFC四大天王”David Kruglinski
8、VF
Visual Foxpro程序設(shè)計(jì)參考手冊—–張洪舉
專家門診——Visual FoxPro開發(fā)答疑160問—–張洪舉
Visual FoxPro 6.0/9.0解決方案與范例大全—–張洪舉
Visual FoxPro軟件開發(fā)模式與應(yīng)用案例—–張洪舉
9、黑客
應(yīng)用密碼學(xué)(協(xié)議算法與C源程序Bruce Schneier
網(wǎng)絡(luò)信息安全的真相Bruce Schneier
黑客大曝光:網(wǎng)絡(luò)安全機(jī)密與解決方案(第5版)STUART MCCLURE
軟件加密技術(shù)內(nèi)幕看雪學(xué)院
加密與解密——軟件保護(hù)技術(shù)與完全解決方案看雪學(xué)院
加密與解密(第二版)段鋼
10、匯編
Intel微處理器結(jié)構(gòu)、編程與接口(第六版)Barry B. Brey
80*86、奔騰機(jī)匯編語言程序設(shè)計(jì)Barry B. Brey
Windows環(huán)境下32位匯編語言程序設(shè)計(jì)(第2版)羅云彬
IBM-PC匯編語言程序設(shè)計(jì)(第2版) 本書是國內(nèi)優(yōu)秀教材沈美明 溫冬嬋
IBM PC匯編語言程序設(shè)計(jì)(第五版) 這本書籍是國外優(yōu)秀教材PETER ABEL著,沈美明 溫冬蟬譯
11、驅(qū)動開發(fā)
Windows WDM設(shè)備驅(qū)動程序開發(fā)指南Chris Cant
Windows 2023/XP WDM設(shè)備驅(qū)動程序開發(fā)(第2版)武安河
WINDOWS 2023/XP WDM設(shè)備驅(qū)動程序開發(fā)—- 武安河
12、網(wǎng)絡(luò)
計(jì)算機(jī)網(wǎng)絡(luò)第四版中文版—-網(wǎng)絡(luò)編程三劍客Andrew S.Tanenbaum
TCP/IP詳解3卷本——Richard Stevens—-網(wǎng)絡(luò)編程三劍客
UNIX網(wǎng)絡(luò)編程2卷本——Richard Stevens—-網(wǎng)絡(luò)編程三劍客
用TCP/IP進(jìn)行網(wǎng)際互聯(lián)Douglas E. Comer
高級TCP/IP編程—–Jon C. Snader
C++網(wǎng)絡(luò)編程Douglas Schmidt
UNIX環(huán)境高級編程(第2版)——Richard Stevens
13、算法
計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)Donald.E.Knuth算法“倚天屠龍”雙劍
算法導(dǎo)論—Thomas H. Cormen算法“倚天屠龍”雙劍
離散數(shù)學(xué)及其應(yīng)用Kenneth H.Rosen
具體數(shù)學(xué)—計(jì)算機(jī)科學(xué)基礎(chǔ)Donald.E.Knuth
14、圖形編程 Windows 圖形編程–FENG YUAN –圖形編程界的Charles Petzold之書
15、數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu) C++語言描述》58.00(Data Structures C++) William Ford,William Topp 劉衛(wèi)東 沈官林
數(shù)據(jù)結(jié)構(gòu)算法與應(yīng)用-C++語言描述》49.00Sartej Sahni 汪詩林 孫曉東等機(jī)械工業(yè)出版社
16、軟件工程
設(shè)計(jì)模式–可復(fù)用面向?qū)ο筌浖幕A(chǔ)
重構(gòu)—改善既有代碼的設(shè)計(jì)
17、操作系統(tǒng)
深入理解計(jì)算機(jī)系統(tǒng)(修訂版)RANDAL E.BRYANT
18、Unix
UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版第三版 UNIX 編程藝術(shù) UNIX環(huán)境高級編程(英文影印第2版—–UNIX編程“圣經(jīng) UNIX環(huán)境高級編程(英文影印版)(第2版) 99-UNIX環(huán)境高級編程(第2版) UNIX環(huán)境高級編程(第2版)—UNIX編程“圣經(jīng) UNIX網(wǎng)絡(luò)編程 第1卷:套接口API(第3版) UNIX網(wǎng)絡(luò)編程卷2:進(jìn)程間通信(第2版)(英文影印版) UNIX 網(wǎng)絡(luò)編程(第二版)第2卷:進(jìn)程間通信 UNIX編程環(huán)境 UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版第三版 UNIX系統(tǒng)編程 UNIX環(huán)境高級編程 UNIX環(huán)境高級編程(英文影印版 88-LINUX內(nèi)核分析及編程 UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版第三版) UNIX網(wǎng)絡(luò)編程 第1卷:套接口API(第3版) UNIX 網(wǎng)絡(luò)編程(第二版)第2卷:進(jìn)程間通信 UNIX網(wǎng)絡(luò)編程卷2:進(jìn)程間通信(第2版)(英文影印版) UNIX 網(wǎng)絡(luò)編程(第2版)第1卷:套接口API和X/Open 傳輸接口API UNIX網(wǎng)絡(luò)編程(卷1):連網(wǎng)的APLS:套接字與XTI(第二版)(英文影印版) UNIX環(huán)境高級編程 UNIX 環(huán)境高級編程(英文版) UNIX環(huán)境高級編程(第2版) Unix技術(shù)手冊
19、Linux
Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn) Linux內(nèi)核完全注釋 LINUX內(nèi)核分析及編程 GNU/Linux 編程指南(第二版) Linux設(shè)備驅(qū)動程序(第三版)嵌入式設(shè)計(jì)及Linux驅(qū)動開發(fā)指南——基于ARM 9處理器 Linux設(shè)備驅(qū)動程序 第三版(英文影印版) Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(第2版) Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(英文影印版)(第2版) linux技術(shù)手冊
20、游戲編程
Windows游戲編程大師技巧(第二版游戲之旅–我的編程感悟 OpenGL超級寶典:第三版 OpenGL編程指南(第四版) Java 游戲高級編程 J2ME手機(jī)游戲編程入門 游戲之旅——我的編程感悟游戲開發(fā)中的人工智能(英文影印版) 3D游戲:卷2 動畫與高級實(shí)時(shí)渲染技術(shù)面向?qū)ο蟮挠螒蜷_發(fā) Java 游戲高級編程 3D游戲編程大師技巧游戲編程精粹面向?qū)ο蟮挠螒蜷_發(fā) 3D游戲 卷1:實(shí)時(shí)渲染與軟件技術(shù) 3D游戲:卷2 動畫與高級實(shí)時(shí)渲染技… J2ME手機(jī)游戲編程入門 Direct3D游戲編程入門教程(第二版…
21、移動開發(fā)
Windows Mobile手機(jī)應(yīng)用開發(fā) SYMBIAN OS C++手機(jī)應(yīng)用開發(fā) 68-Windows Mobile手機(jī)應(yīng)用開發(fā)–傅曦 齊宇 徐駿 48-SYMBIAN OS C++手機(jī)應(yīng)用開發(fā) (第2卷)—-RICHARD HARRISON著,周良忠 王伯欣譯 68-SYMBIAN OS C++手機(jī)應(yīng)用開發(fā)-RICHARD HARRISON著,周良忠譯 Windows CE.net內(nèi)核定制及應(yīng)用程序開發(fā)周毓林 寧楊 陸貴強(qiáng) 付林林 嵌入式系統(tǒng)Windows CE 開發(fā)技巧與實(shí)例–傅曦 Palm OS編程實(shí)踐—絕版
22、單片機(jī)
單片機(jī)輕松入門——周堅(jiān)(平凡老師)
單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航求是科技
例說–張義和 陳敵北
KEIL CX51 V7.0單片機(jī)高級語言編程與ΜVISION2應(yīng)用實(shí)踐—–徐愛鈞
單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)(修訂版)——周航慈
8051單片機(jī)實(shí)踐與應(yīng)用—吳金戎
MCS-51系列單片機(jī)實(shí)用接口技術(shù)李華
23、串并口通訊
Visual C++/Turbo C串口通信編程實(shí)踐—-龔建偉
VISUAL BASIC與RS-232串行通信控制(最新版)范逸之
24、電子
無線電識圖與電路故障分析輕松入門(第二版)——胡斌
無線電元器件檢測與修理技術(shù)輕松入門(第二版)——胡斌
圖表細(xì)說電子技術(shù)識圖—–胡斌
圖表細(xì)說電子元器件—–胡斌
圖表細(xì)說元器件及實(shí)用電路—–胡斌
嵌入式需要學(xué)什么?嵌入式需要學(xué)哪些課程和內(nèi)容?
重點(diǎn)也就是單片機(jī)[包括arm這類比較強(qiáng)大的]和FPGA了
專業(yè)基礎(chǔ)課就一大堆了,像樓喊敗弊上說的那些,其實(shí)還有更多。。。
不過如果像fpga這類東西學(xué)精了,可以自己設(shè)計(jì)處理器,然后開發(fā)專用的系統(tǒng),再做編譯枯告器,做配套的數(shù)據(jù)庫。。。。
不過一般似乎沒人這么玩,太累鄭族了。。。
1.1 有哪些設(shè)備使用單片機(jī)或Linux
所有的電子產(chǎn)品,所用技術(shù)都可以認(rèn)為要么是單片機(jī),要么是Linux;GUI方面主要是QT/Android,它們都是運(yùn)行于Linux之上的。我們說的單片機(jī)不使用操作系統(tǒng),但是使用單片機(jī)設(shè)備肯定遠(yuǎn)遠(yuǎn)超過Linux。很多人也是先學(xué)悄彎習(xí)單片機(jī),從單片機(jī)進(jìn)入電子工程師行業(yè),日常生活中,有哪些產(chǎn)品使用單片機(jī)、Linux呢?下面舉一些例子:
我們設(shè)計(jì)一個產(chǎn)品時(shí),是使用單片機(jī)還是Linux,取決于成本:硬件成本、軟件成本、維護(hù)成本、升級成本。而不應(yīng)該根據(jù)個人偏好來選擇:我喜歡單片機(jī),所以就排斥使用Linux;我喜歡Linux,就排斥使用單片機(jī)。為了有更多的選擇,我們需要既懂單片機(jī),又懂Linux。
1.2 在硬件操作上單片機(jī)和Linux是類似的
以點(diǎn)燈為例,
無論是單片機(jī)還是Linux,我們要做的事情都一樣:
看原理圖,確定引腳是哪一個,確定它輸出什么電平才可以
看芯片手冊,確定要怎么操作寄存器
寫程序
但是,怎么編寫程序,單片機(jī)和Linux有很大不同。
1.3 在單片機(jī)中點(diǎn)燈、使用LCD
使用單片機(jī)開發(fā)程序時(shí),我們一上來就寫一個main函數(shù),下面是一些簡化的代碼:
請點(diǎn)擊輸入圖片描述
LED程序里面的init_led、led_on、led_off函數(shù)是你一個人寫的,愛取什么名就取什么名,愛怎么寫就怎么寫。
LCD程序里的函數(shù)也是你寫的,完全是自由發(fā)揮。
很多單片機(jī)項(xiàng)目不是很復(fù)雜,2、3個坦隱人從上到下統(tǒng)統(tǒng)搞定,里面的函數(shù)大多時(shí)間是直接去讀寫寄存器。
很多單片機(jī)項(xiàng)目嚴(yán)重依賴于硬件,換一個芯片后怎么辦?重寫一套代碼唄。
在單片機(jī)程序里,沒有應(yīng)用程序、驅(qū)動程序的概念,很可能一個人包攬了硬件設(shè)計(jì)、模塊調(diào)試(或稱之為驅(qū)動)、功能開發(fā)(或稱之為應(yīng)用)的全部活。
1.4 在Linux中點(diǎn)燈、使用LCD
在Linux中,不允許應(yīng)用開發(fā)人員直接去操作硬件,比如你想點(diǎn)個燈,不好意思,你無法直接訪問寄存器;你需要通過驅(qū)動程序來訪問寄存器。
為什么?有幾大原因:
Linux系統(tǒng)中運(yùn)行著眾多程序,必須保證質(zhì)量差的程序無法破壞系統(tǒng):假設(shè)你寫的程序比較爛,那我不能讓你去隨便訪問寄存器,把系統(tǒng)搞崩潰了怎么辦?你本意是去點(diǎn)燈,但是你看錯了寄存器,你把電源關(guān)了怎么辦?所以這些操作硬件的活,還是交給信得過的人來做吧:交給驅(qū)動工程師,他既懂硬件又懂軟件。
保證程序的可移植性:編寫應(yīng)用程序時(shí),大家都使用統(tǒng)一的函數(shù),以后換一個芯片時(shí),應(yīng)用程序不用變;只需要根據(jù)這個接口提供驅(qū)動程序就可以了。
團(tuán)隊(duì)協(xié)作:使用Linux系統(tǒng)的項(xiàng)目一般比較大,術(shù)業(yè)有專攻,一個人不太可能從上到下都全部掌握。比如做人臉識別項(xiàng)目,有擅長做圖像處理的,他可不管你要用多少種攝像頭,有圖像給他就可以。而多種攝像頭的硬件操作方法各有不同,這些交給驅(qū)動程序工程師。
所以,在Linux中應(yīng)用程序和驅(qū)動程序是分開的。
以LED、LCD程序?yàn)槔?,簡化的代碼如下
請點(diǎn)擊輸入圖片描述
也許你已經(jīng)大概猜出來了,應(yīng)用程序怎么調(diào)用驅(qū)動程序?通過標(biāo)準(zhǔn)的接口:
open:打開驅(qū)動程序。
read/write:讀、寫數(shù)據(jù)。
ioctl:傳入各種參數(shù),獲得各種參數(shù)。
mmap:內(nèi)存映射,比如映射之后,應(yīng)用程序可以直接讀寫LCD的顯存。
你看!從這些接口里,我們根本看不到寄存器的操作。底層的程序驅(qū)動會根據(jù)這些調(diào)用,去設(shè)置寄存器、操作硬件。
所以,我高大上的讓運(yùn)廳應(yīng)用工程師,干嘛苦哈哈地去看原理圖、看在片手冊、讀寫寄存器,搞不好還要去調(diào)試硬件BUG。這些臟活、累活就交給驅(qū)動工程師吧??蛻舻男枨笄ё?nèi)f化,我996時(shí)間都不夠用了。
我上懂軟件、下懂硬件的驅(qū)動工程師,肯定不能把這么重要的活交給你去做了,把我的系統(tǒng)搞崩潰了怎么辦。
開玩笑、開玩笑、開玩笑的,有應(yīng)用工程師、驅(qū)動工程師的優(yōu)劣之分,大家都是為了做出產(chǎn)品?,F(xiàn)在有一個趨勢,一個任務(wù)從上到下你都需要懂,這就是所謂的全棧工程師。
還是以LED為例,應(yīng)用程序和驅(qū)動程序的協(xié)作如下圖所示:
在Linux中,“一切皆文件”,要訪問某個硬件,也是要打開文件、讀寫文件。應(yīng)用程序要根據(jù)標(biāo)準(zhǔn)的文件接口:open/read/write/ioctl/mmap等來訪問驅(qū)動程序。
既然如此,怎么寫驅(qū)動程序呢?最簡單的方法就是:APP要調(diào)用open來打開驅(qū)動程序,那驅(qū)動‘程序里就提供一個xxx_open函數(shù)來初始化硬件;APP要調(diào)用write來寫數(shù)據(jù),驅(qū)動程序里就提供一個xxx_write函數(shù)來接收數(shù)據(jù)并操作硬件。
用xxx_open、xxx_write來構(gòu)成一個驅(qū)動程序,這就是驅(qū)動框架。
怎么實(shí)現(xiàn)這些xxx_open、xxx_write函數(shù)?我們要做的事情跟單片機(jī)是類似的,一樣要去看電路圖、看芯片手冊,然后在這些函數(shù)里讀寫寄存器:這稱為硬件操作。
所以,Linux驅(qū)動程序= 驅(qū)動框架 + 硬件操作。
有單片機(jī)基礎(chǔ)的人,對硬件操作比較熟悉了,把重點(diǎn)放在驅(qū)動框架上就可以。
高能預(yù)警:驅(qū)動框架可不簡單,對于LED來說是簡單,但是還有更復(fù)雜的驅(qū)動程序,它要考慮“通用”,這很要命。
第2章 嵌入式Linux快速入門
這幾天在群里跟學(xué)員聊天,有一位學(xué)員的學(xué)習(xí)方法很好:先觀其廣,再究其深。有時(shí)候要“不求甚解”,很多時(shí)候保持疑問先學(xué)下去,這些疑問就自然解決了。
比如課程中涉及匯編知識,如果你要徹底弄清楚,你需要去學(xué)習(xí)《ARM架構(gòu)與編程》;當(dāng)你學(xué)完這本書,你的同學(xué)搞不好已經(jīng)可以上手工作了。
2.1 短期的目標(biāo)是什么
我們先把學(xué)習(xí)目標(biāo)定下來:快速了解嵌入式Linux開發(fā)的流程,知道要學(xué)什么,具備跟從業(yè)者交流的能力。
2.2 一個嵌入式Linux系統(tǒng)的組成
請點(diǎn)擊輸入圖片描述
請點(diǎn)擊輸入圖片描述
下面我們用類比和邏輯推導(dǎo)出嵌入式Linux系統(tǒng)的組成,沒錯,“推導(dǎo)”。
從上圖可以知道:
組成:嵌入式Linux系統(tǒng)= bootloader + linux內(nèi)核 + 根文件系統(tǒng)(里面含有APP)。
bootloader:它的目的是啟動內(nèi)核,去哪等讀內(nèi)核?讀到哪里?去Flash等外設(shè)讀內(nèi)核,存到內(nèi)存里去。所以需要有Flash里外設(shè)的驅(qū)動能力,為了調(diào)試方便還會有網(wǎng)絡(luò)功能。所以,可以認(rèn)為 booloader = 裸機(jī),它就是一個復(fù)雜的單片機(jī)程序。
Linux內(nèi)核:Linux內(nèi)核的最主要目的是去啟動APP,APP保存在哪里?保存在“根文件系統(tǒng)”里。“根文件系統(tǒng)”又保存在哪里?在Flash、SD卡等設(shè)備里,甚至可能在網(wǎng)絡(luò)上。所以Linux內(nèi)核要有這些Flash、SD卡里設(shè)備的驅(qū)動能力。
不僅如此,Linux內(nèi)核還有進(jìn)程調(diào)度能力、內(nèi)存管理等功能。
所以:Linux內(nèi)核 = 驅(qū)動 + 進(jìn)程調(diào)度 + 內(nèi)存管理等。
2.3 要學(xué)習(xí)bootloader嗎
Bootloader有很多種,常用的叫u-boot。
在實(shí)際工作中,對于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復(fù)雜的,比如為了便于調(diào)試,它支持網(wǎng)絡(luò)功能;有些內(nèi)核是保存在FAT32分區(qū)里,于是它要能解析FAT32分區(qū),讀FAT32分區(qū)的文件。
花那么多精力去學(xué)習(xí)u-boot,但是工作中基本用不到,這對初學(xué)者很不友善。
所以,對于初學(xué)者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。
如果你的工作就是修改、完善bootloader,那么再去研究它吧。
2.4 要學(xué)習(xí)Linux內(nèi)核、要學(xué)習(xí)驅(qū)動程序嗎
之前我們說過Linux內(nèi)核 = 驅(qū)動 + 進(jìn)程調(diào)度 + 內(nèi)存管理等,如果要學(xué)習(xí)Linux內(nèi)核,從驅(qū)動程序入手是一個好辦法。
但是人人都要學(xué)習(xí)Linux內(nèi)核、人人都要學(xué)習(xí)Linux驅(qū)動嗎?顯然不是。
作為初學(xué)者,懂幾個簡單的驅(qū)動程序,有利于工作交流;理解中斷、進(jìn)程、線程的概念,無論是對驅(qū)動開發(fā)、應(yīng)用程序開發(fā),都是很有好處的。
所以對于初學(xué)者,建議前期只學(xué)習(xí)這幾個驅(qū)動:LED、按鍵、中斷。
LED驅(qū)動程序:這是最簡單的驅(qū)動程序。
按鍵驅(qū)動程序:它也比較簡單,從它引入“中斷”。
中斷:從“中斷”它可以引入:休眠-喚醒、進(jìn)程/線程、POLL機(jī)制、異步通知等概念。這些概念無論是對驅(qū)動開發(fā),還是對應(yīng)用開發(fā),都很重要。
所以,對于初學(xué)者,我建議必須學(xué)習(xí)這幾個驅(qū)動:LED、按鍵、中斷。
入門之后,如果你想從事內(nèi)核開發(fā)、驅(qū)動開發(fā),那么可以去鉆研幾個驅(qū)動程序(輸入系統(tǒng)、I2C總線、SPI總線等),掌握若干個大型驅(qū)動程序后,你對內(nèi)核的套路就有所了解了,再去研究其他部分(比如進(jìn)程管理、文件系統(tǒng))時(shí)你會發(fā)現(xiàn)套路是如此通用。
攝像頭(VL42)、聲卡ALSA驅(qū)動是Linux中比較復(fù)雜的2類驅(qū)動,它們是很難的,如果工作與此相關(guān)再去研究。
2.5,要學(xué)習(xí)Linux應(yīng)用程序嗎?先學(xué)一些基礎(chǔ)技能
要學(xué),即使以后你只想研究內(nèi)核,一些基本的應(yīng)用開發(fā)編寫能力也是需要的:
基本設(shè)備的訪問,比如LCD、輸入設(shè)備
進(jìn)程、線程、進(jìn)程通信、線程同步與互斥
休眠-喚醒、POLL機(jī)制、信號
網(wǎng)絡(luò)編程
①②③部分的知識,跟驅(qū)動有密切的關(guān)系,它們是相輔相承的。
掌握了基本驅(qū)動開發(fā)能力、基本應(yīng)用開發(fā)能力之后,在工作中你就可以跟別人友好溝通了,不至于一臉懵逼。
2.6,應(yīng)用程序是怎么啟動的?要了解一下根文件系統(tǒng)
你辛辛苦苦寫出了應(yīng)用程序,怎么把它放到板子上,讓它開機(jī)就自動啟動?
你寫的程序,它依賴于哪些庫,這些庫放到板子上哪個目錄?
怎么做一個可升級的系統(tǒng)?即使升級中途斷電了,也要保證程序至少還可以運(yùn)行老的版本?
這些都需要我們了解一下根文件系統(tǒng)。
先了解一下init進(jìn)程:它要讀取配置文件,根據(jù)配置文件啟動各個APP。
了解了init進(jìn)程,你就了解了根文件系統(tǒng)的組成,就可以隨心所欲裁剪系統(tǒng),為你的項(xiàng)目制作出最精簡的系統(tǒng)。
第3章 學(xué)習(xí)方法
3.1 先不要打破砂鍋問到底
嵌入式涉及的東西太多太雜了,如果心里沒有主線,碰到什么都要去研究個透徹,最終反而忘記自己要學(xué)什么了。
嵌入式涉及硬件知識、軟件知識,軟件里涉及匯編、ARM架構(gòu)、C語言、Makefile、Shell;又分為bootloader、內(nèi)核、驅(qū)動、基本的APP、GUI。
比如我們會用到Makefile,了解它的基本規(guī)則,會用我們提供的Makefile就可以。
不需要深入研究那些make函數(shù),因?yàn)樵诠ぷ髦卸加鞋F(xiàn)成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?
比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。
甚至有些學(xué)員先去買本shell的書來學(xué)習(xí)shell命令,何必?我們在視頻中用到什么命令,你不懂時(shí)再去百度一下這些命令就可以了。
不要脫離初學(xué)者的主線:應(yīng)用基礎(chǔ)、驅(qū)動基礎(chǔ)。有了這2個基礎(chǔ)后,你想深入研究某部分時(shí),再去花時(shí)間吧。
3.2 思路要清晰,不怕抄代碼
視頻里的代碼,請你一定要自己去寫一次、寫多次。為什么我現(xiàn)在寫驅(qū)動那么熟?我2023年在華清遠(yuǎn)見上課時(shí),
每次上課我都要給學(xué)生寫一次那些驅(qū)動,十幾次下來閉著眼睛都知道內(nèi)核的套路了。
記不住那些函數(shù)?我也記不住,我都是去參考同類的驅(qū)動程序,這又不是閉卷考試。
但是要理清楚思路,你寫這個程序要完成什么功能、怎么實(shí)現(xiàn)這些功能?這個要弄清楚。
有了思路后再寫代碼,不知道怎么寫?沒關(guān)系,看看視頻,看看示例,然后關(guān)閉視頻看看能否自己寫出來。
3.3 對自己的方向很了解,我只能帶你到這里了
我的專長是操作系統(tǒng),是快速地帶領(lǐng)大家掌握一些項(xiàng)目開發(fā)的基礎(chǔ)知識。
如果你決定深入研究某方面時(shí),我并不能帶你多久。你要去看源碼,去看這方面的專業(yè)書籍。
比如想深入鉆研內(nèi)核的內(nèi)存管理時(shí),它有頁表映射(你需要閱讀ARM架構(gòu)的手冊)、SLAB分配器、vmalloc/malloc實(shí)現(xiàn)、mmap實(shí)現(xiàn)、缺頁中斷、父進(jìn)程子進(jìn)程之間的頁面管理等等,內(nèi)容非常多。有時(shí)候連書籍都沒有,你需要直接啃代碼。
當(dāng)你想從事某個行業(yè)時(shí),就需要深入研究行業(yè)相關(guān)的知識。
比如CAN總線,它可以寫成一本書:CAN協(xié)議、CAN報(bào)文、Socket CAN、車身網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),CAN應(yīng)用報(bào)文,Can 網(wǎng)絡(luò)管理報(bào)文,CAN診斷報(bào)文。
想做物聯(lián)網(wǎng)網(wǎng)關(guān),需要深入研究MQTT,MQTT協(xié)議相對簡單,但是MQTT英文原版協(xié)議有130多頁,中文版有近100頁,是一本小書了。
每個行業(yè)都有自己的業(yè)務(wù)邏輯,在掌握基本的編程能力之一,你需要結(jié)合具體的業(yè)務(wù)去深入學(xué)習(xí)。
嵌入式系統(tǒng)是計(jì)算機(jī)軟件和硬件的綜合體,崗位包括:ESE(嵌入式軟件工程師);ADE(嵌入式應(yīng)用開發(fā)工程師);FWE(嵌入式底層開發(fā)工程師);FEC(嵌入式固件開發(fā)工程師),我有嵌入式視頻課可以發(fā)給你自學(xué)。
課程內(nèi)容主要斗簡包括:
①C,Java核心編程:c語言核心編程,Java核心編程;
②Linux核心操作與算法:Linux系統(tǒng)使用,Linux-c編程核心技術(shù),精品數(shù)據(jù)結(jié)構(gòu),Linux-c編程精髓;
③核心操作與算法:Linux系統(tǒng)編程,Linux網(wǎng)絡(luò)編程核心技術(shù),UI編程,Java核心編程,安卓核心技術(shù);
④ARM+Linux底層開發(fā):數(shù)字電路,ARM編程核心,Linux系統(tǒng)開發(fā),嵌入式Linux驅(qū)動開發(fā);
⑤大型項(xiàng)目實(shí)踐:每期安排各類型真實(shí)的項(xiàng)目,詳細(xì)可以找我要轎清資料。
課堂實(shí)拍
你可以考閉銷前察對比一下南京課工場、北大青鳥、中博軟件學(xué)院等開設(shè)有嵌入式開發(fā)專業(yè)的學(xué)校。記得找我要嵌入式開發(fā)視頻課,祝學(xué)有所成!望采納!
入門嵌入式工程師
此階段主要是前期的入門過程,主要針對入行沒多久的新人。其實(shí)成功沒有捷徑,所以打好基礎(chǔ)才是關(guān)鍵。嵌入式開發(fā)要學(xué)什么主要包含以下4個方面的內(nèi)容:
1.電路知識 首先你要學(xué)習(xí)電路、模電、數(shù)電,認(rèn)識電阻、電容、三極管,基礎(chǔ)器件要知道,放大電路、集成運(yùn)放、時(shí)序電路基本電路能看懂,不然看電路圖一定是云里霧里,也就無法進(jìn)行后續(xù)的工作。硬件產(chǎn)品的設(shè)計(jì)實(shí)現(xiàn),包括器件選型、原理圖和PCB設(shè)計(jì)、電路調(diào)試,都需要過硬的電路基礎(chǔ)。
2.C語言
C語言是嵌入式開發(fā)中最重要的編程語言,要對這門語言有深入的理解,畢竟不僅僅要會寫程序,看懂他人程序也很重要。最基本的數(shù)據(jù)段伍類型、數(shù)組、指針、結(jié)構(gòu)體,鏈表、文件操作等都要會,掌握基本語法和語句,不然你要能區(qū)分指針數(shù)組與數(shù)組指針嗎?
3.單片機(jī) 單片機(jī)入門相對簡單,通過單片機(jī)的學(xué)習(xí)可以熟悉單片機(jī)的硬件結(jié)構(gòu),包括I/O口、AD轉(zhuǎn)換、通信(串口、并口、I2C、CAN、USB、以太網(wǎng)、ZigBee技術(shù)等)、顯示(LED、LCD等)、控制(PWM等控制技術(shù))、數(shù)據(jù)處理(圖形、圖像、語音、視頻等的處理或識別)等,學(xué)好單片機(jī)可以為采用嵌入式系統(tǒng)奠定良好的基礎(chǔ)。
4Linux基礎(chǔ)
Linux的源碼和架構(gòu)都是開放的,在嵌入式系統(tǒng)中應(yīng)用尤為廣泛,學(xué)習(xí)Linux對于系統(tǒng)的開發(fā)會有很大的幫助。詳細(xì)了解Linux下的目錄結(jié)構(gòu)、基本命令、編輯器VI、編譯器GCC、調(diào)試器GDB和 Make 項(xiàng)目管理工具,Shell Makefile腳本編寫等知識,以及嵌入式開發(fā)環(huán)境的搭建。
中級嵌入式工程師
經(jīng)過之一個階段的學(xué)習(xí),你已經(jīng)可以進(jìn)行嵌入式開發(fā)工作了,但是要進(jìn)階依舊還有很多知識要學(xué),而這個階段也將是之一個分水嶺,使得優(yōu)秀的嵌入式工程師得以脫穎而出。此階段雖然只有三項(xiàng),但涉及的知識非常廣,要想學(xué)好需要花費(fèi)大量的精力。
1.Linux編程
系統(tǒng)編程可以直接跟內(nèi)核及核心系統(tǒng)程序庫對話,深入了解Linux內(nèi)核。掌握Linux系統(tǒng)編程主要提升對Linux應(yīng)用開發(fā)的理解和代碼調(diào)試的能力。由于網(wǎng)絡(luò)應(yīng)用開發(fā)越來越廣泛,通過Linux網(wǎng)絡(luò)發(fā)展、TCP/IP協(xié)議、socket編程、TCP網(wǎng)絡(luò)編程、UDP網(wǎng)絡(luò)編程、Web編程開發(fā)等方面入手,可以全面了解Linux網(wǎng)絡(luò)應(yīng)用程序開發(fā)。
2數(shù)據(jù)結(jié)構(gòu)與算法 數(shù)據(jù)結(jié)構(gòu)及算法在嵌入式底層驅(qū)動、通信協(xié)議及各種引擎開發(fā)中得到了廣泛的應(yīng)用,語言編譯要使用棧、散列表以及語法樹;操作系統(tǒng)中用隊(duì)列、存儲管理表及目錄樹等;數(shù)據(jù)庫系統(tǒng)運(yùn)用線型表、多鏈表及索引表進(jìn)行數(shù)據(jù)管理等等,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。
3.QT、DSP、FPGA
Linux沒有自己界面,學(xué)習(xí)QT編程可以創(chuàng)建藝術(shù)級的圖形用戶界面所需的所有功能,從而更好的實(shí)現(xiàn)人機(jī)交互控制。而如今用戶對于圖形圖像的要求也越來越高,這就需要DSP、FPGA技術(shù)來設(shè)計(jì)開發(fā)更好的嵌入式視覺系統(tǒng)。
高級嵌入式工程師
學(xué)習(xí)了前兩個階段的知識,你已經(jīng)可以勝任大部分嵌入式工作了,但是距離大咖仍有一定的差距,其實(shí)已經(jīng)到了第二個分水嶺。這部分更多涉及系統(tǒng)層面,沒有全方位的知識將會很難下手。
1操作系統(tǒng)平臺開發(fā) 除了Linux外,嵌入式操作系統(tǒng)還有ARM、WINCE、uC/OS II、Vxworks、uClinux等,不同的系統(tǒng)有著不同的使用環(huán)境,你需要學(xué)習(xí)掌握系統(tǒng)的各個模塊,為底層平臺搭建做好準(zhǔn)備。熟悉各個操作系統(tǒng)的特點(diǎn)以及系統(tǒng)的內(nèi)核移植,確保操作系統(tǒng)能在某個微處理器或微控制器上運(yùn)行。隨著手機(jī)智能硬件的快速興起,Android操作系統(tǒng)開發(fā)也越來越重要。
2驅(qū)動開發(fā) 驅(qū)動程序設(shè)計(jì)是嵌入式Linux開發(fā)工作中非常重要的一部分。不僅要熟悉Linux的內(nèi)核機(jī)制、驅(qū)動程序與用戶級應(yīng)巖燃纖用程序的接口,掌握系統(tǒng)對設(shè)備的并發(fā)操作。還要具備ARM硬件接口的基礎(chǔ)知識,熟悉ARM Cortex處理器各資源、掌握Linux設(shè)備驅(qū)動原理框架,以及工程中常見Linux高級字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備、USB設(shè)備的驅(qū)動開發(fā)。
以上嵌入式工程師需要學(xué)什么,分為三個階段來講解,其實(shí)還有一條捷徑,就是參加華清遠(yuǎn)見的嵌入式培訓(xùn),華清遠(yuǎn)粗仿見的嵌入式培訓(xùn)是行業(yè)內(nèi)各大公司都認(rèn)可的培訓(xùn)。
當(dāng)你到達(dá)這里的時(shí)候,可以說你已經(jīng)是一個人生贏家了,而真正的學(xué)習(xí)過程如同一場漫長的修行,在這個過程中,必定有各種各樣的困難。當(dāng)然了,嵌入式工作中更多的需要實(shí)踐以及經(jīng)驗(yàn)的積累,相信守得云開見月明,你也可成為一名優(yōu)秀的嵌入式工程師。
linux設(shè)備驅(qū)動程序入門的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux設(shè)備驅(qū)動程序入門,學(xué)習(xí)Linux設(shè)備驅(qū)動程序入門,我準(zhǔn)備考程序員要學(xué)什么?,嵌入式需要學(xué)什么?嵌入式需要學(xué)哪些課程和內(nèi)容?的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
文章標(biāo)題:學(xué)習(xí)Linux設(shè)備驅(qū)動程序入門 (linux設(shè)備驅(qū)動程序入門)
文章位置:http://m.fisionsoft.com.cn/article/ccshioe.html


咨詢
建站咨詢
