新唐NUC972Linux驅(qū)動(dòng)開(kāi)發(fā)
驅(qū)動(dòng)開(kāi)發(fā)是嵌入式 Linux 產(chǎn)品開(kāi)發(fā)的重要組成部分,驅(qū)動(dòng)是將芯片底層與Linux應(yīng)用連接起來(lái)的橋梁。驅(qū)動(dòng)程序的好壞直接影響和決定著產(chǎn)品的穩(wěn)定性,穩(wěn)定的驅(qū)動(dòng)程序是產(chǎn)品可靠性的基石。
編寫(xiě) Linux 驅(qū)動(dòng),首先要具備相關(guān)的電路基礎(chǔ)知識(shí),具有裸機(jī)開(kāi)發(fā)和單片機(jī)開(kāi)發(fā)能力,只有了解了硬件的基本工作原理才能編寫(xiě)出可靠的驅(qū)動(dòng)程序。同時(shí),必須對(duì) Linux 驅(qū)動(dòng)體系有清晰的認(rèn)識(shí),才能將設(shè)備在 Linux下驅(qū)動(dòng)起來(lái)。
1. 基礎(chǔ)知識(shí)
1.1驅(qū)動(dòng)在 Linux中的地位
驅(qū)動(dòng)是 Linux 系統(tǒng)中設(shè)備和用戶(hù)之間的橋梁,Linux 系統(tǒng)中,訪(fǎng)問(wèn)設(shè)備必須通過(guò)設(shè)備驅(qū)動(dòng)進(jìn)行操作,用戶(hù)程序是不能直接操作設(shè)備的。Linux 系統(tǒng)中硬件、驅(qū)動(dòng)和用戶(hù)程序的關(guān)系如下圖所示:
驅(qū)動(dòng)程序運(yùn)行于內(nèi)核空間,用戶(hù)程序只能通過(guò)內(nèi)核提供的系統(tǒng)調(diào)用,由經(jīng) VFS 以及驅(qū)動(dòng)程序才能訪(fǎng)問(wèn)和操作硬件,硬件設(shè)備傳遞的數(shù)據(jù)也必須經(jīng)過(guò)驅(qū)動(dòng)、VFS 和系統(tǒng)調(diào)用才能被用戶(hù)程序接收。所以說(shuō),設(shè)備驅(qū)動(dòng)是應(yīng)用程序訪(fǎng)問(wèn)系統(tǒng)設(shè)備以及進(jìn)行數(shù)據(jù)傳遞的橋梁和通道。
1.2驅(qū)動(dòng)的基本要素
Linux 設(shè)備驅(qū)動(dòng)是具有入口和出口的一組方法的集合,各方法之間相互獨(dú)立。驅(qū)動(dòng)內(nèi)部邏輯結(jié)構(gòu)如下圖所示:
1.3 Linux內(nèi)核模塊
Linux 內(nèi)核具有很強(qiáng)的可裁剪性,很多功能或者外設(shè)驅(qū)動(dòng)都可以編譯成模塊,在系統(tǒng)運(yùn)行中動(dòng)態(tài)插入或者卸載,在此過(guò)程中無(wú)需重啟系統(tǒng)。模塊化設(shè)計(jì)使得 Linux 系統(tǒng)很靈活,可以將一些很少用到或者暫時(shí)不用的功能編譯為模塊,在需要的時(shí)候再動(dòng)態(tài)加載進(jìn)內(nèi)核,可以減小內(nèi)核的體積,加快啟動(dòng)速度,這對(duì)嵌入式應(yīng)用極為重要。
我們前期開(kāi)發(fā)驅(qū)動(dòng)時(shí),可以將驅(qū)動(dòng)編譯成模塊,在開(kāi)發(fā)板linux系統(tǒng)上動(dòng)態(tài)加載,這樣每次修改調(diào)試驅(qū)動(dòng)時(shí),只需要單獨(dú)編譯驅(qū)動(dòng)模塊就可以,不用編譯整個(gè)內(nèi)核。
編輯:admin 最后修改時(shí)間:2018-10-23