999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux的驅動開發分析

2014-07-02 23:20:09姜遠志
無線互聯科技 2014年1期
關鍵詞:嵌入式

姜遠志

摘 要:本文分析了linux下的驅動開發,對原理進行了分析,詳細描述了IO結構,并對填充實例進行了詳細分析。

關鍵詞:嵌入式;系統開發;驅動

Linux由于具有內核強大且穩定,易于擴展和裁減,效率高,豐富的硬件支持等許多優點,在嵌人式系統中得到了廣泛的應用。本文基于嵌人式操作系統下設備驅動程序的開發需要,闡述相關技術原理及設計要點,探求嵌人式Linux系統中設備驅動程序的構建方法。

1 嵌入式Linux系統驅動

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

一類是靜態鏈接的設備驅動程序模塊,這類模塊在編制完成后要與內核一起編譯,其與內核是不可分割的整體,在系統引導時與內核一起加載并駐留內存。

另一類設備驅動程序采用可動態加載的模塊。其驅動程序代碼在使用之前動態地加載到內存中,在設備使用完畢后即從內存中移去其代碼。

嵌入式Linux系統往往應用環境相對固定,系統都經過優化,盡可能地精簡。嵌入式Linux系統不能夠像桌面Linux那樣靈活地使用insmod/rmmod加載卸載設備驅動程序。從嵌入式系統的整體性能考慮,采用靜態鏈接模塊能夠使得整個系統的性能得到提高。許多廣泛應用的嵌入式Linux系統都采用靜態鏈接的設備驅動程序模塊。

2 驅動程序原理

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

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

⑵I/O接口。邏輯l/O層通過內核定義的兩個數據結構塊設備轉換表(blkdevs)和字符設備轉換表(chrdevs)來實現與設備驅動程序的接口。每個設備驅動程序在設備轉換表中占據一個表項。每個Linux設備文件都有兩個設備號,第一個是主設備號,標識驅動程序,第二個是從設備號,標識使用同一個設備驅動程序的不同的硬件設備。用戶進程利用系統調用在對設備文件進行read/write等各種操作時,系統調用通過設備文件的主設備號找到相應的設備驅動程序,然后讀取數據結構相應的函數指針,接著把控制權交給函數。

3 實例分析

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

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;}

以下是驅動程序下半部分的其他幾個函數。

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 總結

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

[參考文獻]

[1]周明德.UNIX/Linux內核[M].北京:清華大學出版社,2004.

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

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 国产精品久久久久久久伊一| 亚洲人成色77777在线观看| 亚洲精品片911| 亚洲av色吊丝无码| 欧美高清国产| 亚洲日本中文字幕乱码中文 | 亚洲色欲色欲www网| 成人无码一区二区三区视频在线观看 | 中文国产成人精品久久| 91福利片| 亚洲欧美日韩视频一区| 国产丰满大乳无码免费播放| 国产精品19p| 在线观看国产精品第一区免费 | 伊人国产无码高清视频| 婷婷综合色| 992tv国产人成在线观看| 欧美国产日产一区二区| 国产在线视频欧美亚综合| 538精品在线观看| 亚洲天堂精品视频| 茄子视频毛片免费观看| 亚洲欧美日韩精品专区| 色成人综合| 超清无码一区二区三区| 亚洲av成人无码网站在线观看| 日韩av在线直播| 三级视频中文字幕| 呦女亚洲一区精品| 视频在线观看一区二区| 色吊丝av中文字幕| 高清久久精品亚洲日韩Av| 欧美h在线观看| 国产91在线|中文| 久久久久久国产精品mv| 久久公开视频| 中文成人在线| 亚洲高清无码久久久| 精品日韩亚洲欧美高清a| 国产男女免费视频| 91香蕉国产亚洲一二三区| 国产网站一区二区三区| 欧美v在线| 国产内射在线观看| 国产二级毛片| 成人午夜精品一级毛片 | 欧美a网站| 91精品日韩人妻无码久久| 国产精品视频观看裸模| 米奇精品一区二区三区| 欧美国产综合视频| 1769国产精品视频免费观看| 99热这里只有免费国产精品| 凹凸精品免费精品视频| 青草精品视频| 久久精品只有这里有| 亚洲精品手机在线| 一级毛片在线播放免费| jizz在线观看| 少妇精品在线| 国产精品无码影视久久久久久久| 久久亚洲国产一区二区| 国产美女视频黄a视频全免费网站| 欧美日韩一区二区在线免费观看| 国内精品久久久久久久久久影视 | 日韩高清无码免费| 欧美日韩91| 制服丝袜国产精品| 丁香六月激情婷婷| 国产成人超碰无码| 国产性生大片免费观看性欧美| 久久这里只精品国产99热8| 色有码无码视频| 本亚洲精品网站| 精品欧美一区二区三区久久久| 免费播放毛片| 91丝袜乱伦| 国产乱人视频免费观看| 国产福利在线观看精品| 亚洲开心婷婷中文字幕| 色婷婷综合在线| 国内99精品激情视频精品|