国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Linux的驅(qū)動開發(fā)分析

2014-07-02 23:20:09姜遠(yuǎn)志
無線互聯(lián)科技 2014年1期
關(guān)鍵詞:系統(tǒng)開發(fā)嵌入式驅(qū)動

姜遠(yuǎn)志

摘 要:本文分析了linux下的驅(qū)動開發(fā),對原理進行了分析,詳細(xì)描述了IO結(jié)構(gòu),并對填充實例進行了詳細(xì)分析。

關(guān)鍵詞:嵌入式;系統(tǒng)開發(fā);驅(qū)動

Linux由于具有內(nèi)核強大且穩(wěn)定,易于擴展和裁減,效率高,豐富的硬件支持等許多優(yōu)點,在嵌人式系統(tǒng)中得到了廣泛的應(yīng)用。本文基于嵌人式操作系統(tǒng)下設(shè)備驅(qū)動程序的開發(fā)需要,闡述相關(guān)技術(shù)原理及設(shè)計要點,探求嵌人式Linux系統(tǒng)中設(shè)備驅(qū)動程序的構(gòu)建方法。

1 嵌入式Linux系統(tǒng)驅(qū)動

嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動程序和Linux中的大多數(shù)驅(qū)動程序一樣,也是采用層次型的體系結(jié)構(gòu)。編寫設(shè)備驅(qū)動程序,其主要工作就是編寫子函數(shù),并填充file_operations的各個域。Linux的設(shè)備驅(qū)動程序模塊按照方式編譯可以分為兩類。

一類是靜態(tài)鏈接的設(shè)備驅(qū)動程序模塊,這類模塊在編制完成后要與內(nèi)核一起編譯,其與內(nèi)核是不可分割的整體,在系統(tǒng)引導(dǎo)時與內(nèi)核一起加載并駐留內(nèi)存。

另一類設(shè)備驅(qū)動程序采用可動態(tài)加載的模塊。其驅(qū)動程序代碼在使用之前動態(tài)地加載到內(nèi)存中,在設(shè)備使用完畢后即從內(nèi)存中移去其代碼。

嵌入式Linux系統(tǒng)往往應(yīng)用環(huán)境相對固定,系統(tǒng)都經(jīng)過優(yōu)化,盡可能地精簡。嵌入式Linux系統(tǒng)不能夠像桌面Linux那樣靈活地使用insmod/rmmod加載卸載設(shè)備驅(qū)動程序。從嵌入式系統(tǒng)的整體性能考慮,采用靜態(tài)鏈接模塊能夠使得整個系統(tǒng)的性能得到提高。許多廣泛應(yīng)用的嵌入式Linux系統(tǒng)都采用靜態(tài)鏈接的設(shè)備驅(qū)動程序模塊。

2 驅(qū)動程序原理

編寫設(shè)備驅(qū)動程序的原理即基于I/O設(shè)備管理采用的分層模型,l/O設(shè)備管理軟件位于內(nèi)核中的最底層,設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機器硬件之間的接El,設(shè)備驅(qū)動程序為應(yīng)用程序屏蔽了硬件的細(xì)節(jié)。硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進行操作。

⑴工作原理。作為內(nèi)核的一部分,設(shè)備驅(qū)動程序完成對設(shè)備初始化和釋放、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)、讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù)和檢測處理設(shè)備出現(xiàn)的錯誤的功能。Linux設(shè)備主要分兩類:字符設(shè)備和塊設(shè)備,其主要區(qū)別是:在對字符設(shè)備發(fā)出讀/寫請求時,實際的硬件1/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作為高速緩存,當(dāng)用戶進程對設(shè)備請求能滿足用戶的要求,就返回請求的數(shù)據(jù),如果不能,就調(diào)用請求函數(shù)來進行實際的l/O操作。

⑵I/O接口。邏輯l/O層通過內(nèi)核定義的兩個數(shù)據(jù)結(jié)構(gòu)塊設(shè)備轉(zhuǎn)換表(blkdevs)和字符設(shè)備轉(zhuǎn)換表(chrdevs)來實現(xiàn)與設(shè)備驅(qū)動程序的接口。每個設(shè)備驅(qū)動程序在設(shè)備轉(zhuǎn)換表中占據(jù)一個表項。每個Linux設(shè)備文件都有兩個設(shè)備號,第一個是主設(shè)備號,標(biāo)識驅(qū)動程序,第二個是從設(shè)備號,標(biāo)識使用同一個設(shè)備驅(qū)動程序的不同的硬件設(shè)備。用戶進程利用系統(tǒng)調(diào)用在對設(shè)備文件進行read/write等各種操作時,系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號找到相應(yīng)的設(shè)備驅(qū)動程序,然后讀取數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給函數(shù)。

3 實例分析

編寫設(shè)備驅(qū)動程序的主要工作就是編寫子函數(shù),并填充file_operations的各個域,以下為驅(qū)動程序test.c的主要內(nèi)容。函數(shù)read_test()是為read調(diào)用準(zhǔn)備的。當(dāng)調(diào)用read時,read_test()被調(diào)用,它把用戶的緩沖區(qū)全部寫1。函數(shù)中的bur是read調(diào)用的一個參數(shù),是用戶進程空間的一個地址。但是在read_test()被調(diào)用時,系統(tǒng)進入核心態(tài),所以不能使用bur這個地址,必須用put_user(),這是kernel提供的一個函數(shù),用于向用戶傳送數(shù)據(jù)。

unsigned int test_major = 0;

static int read_test(struct inode* node, struct file *file, char *bur, int count)

{ int left;

if(verify_area(VERIFY_WRITE, bur, count) = = -EFAULT )

return –EFAULT;

for(1eft = count; left > 0; left--)

{ __put_user(1, bur, 1);

bur ;}

return count;}

以下是驅(qū)動程序下半部分的其他幾個函數(shù)。

static int write_tibet(struct inode inode, struct file *file, const char *bur, int count)

{return count;}

static int open_tibet(struct inode *inode, struct file *file)

{MOD-INC-USE-COUNT;

return 0;}

static void release_tibet(struct inode *inode, struct file *file)

{MOD-DEC-USE-COUNT;}

4 總結(jié)

論文對linux的驅(qū)動開發(fā)進行了分析,指出了其開發(fā)原理以及加載方式的分類,并且以實例進行了說明。

[參考文獻]

[1]周明德.UNIX/Linux內(nèi)核[M].北京:清華大學(xué)出版社,2004.

[2]倪繼利.Linux內(nèi)核分析及編程[M].北京:電子工業(yè)出版社,2005.1.

猜你喜歡
系統(tǒng)開發(fā)嵌入式驅(qū)動
基于模糊PI控制的驅(qū)動防滑仿真系統(tǒng)分析
屈宏斌:未來五年,雙輪驅(qū)動,砥礪前行
軌旁ATC系統(tǒng)門控柜接收/驅(qū)動板改造
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
基于網(wǎng)絡(luò)數(shù)據(jù)分析的計算機網(wǎng)絡(luò)系統(tǒng)開發(fā)
變電站監(jiān)控信息接入驗收系統(tǒng)的研發(fā)與應(yīng)用
發(fā)射機房運行監(jiān)控系統(tǒng)關(guān)鍵技術(shù)的解決方案
基于開源系統(tǒng)的綜合業(yè)務(wù)數(shù)據(jù)采集系統(tǒng)的開發(fā)研究
基于S3C6410的Wi-Fi驅(qū)動移植實現(xiàn)
平南县| 湟源县| 会宁县| 崇义县| 长治市| 分宜县| 文登市| 宝坻区| 胶州市| 宝山区| 岑溪市| 故城县| 灵山县| 和田县| 舒城县| 彭泽县| 东莞市| 延庆县| 伊春市| 安达市| 全南县| 将乐县| 抚顺县| 铁岭县| 宁陕县| 贺州市| 延寿县| 沙雅县| 济宁市| 福州市| 喀什市| 宜城市| 和政县| 平阳县| 湄潭县| 鄂州市| 股票| 伊春市| 通渭县| 米泉市| 邢台市|