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加入嵌入式視覺聯盟
主站蜘蛛池模板: 国产精品伦视频观看免费| 久久久久国产精品嫩草影院| 国产成人盗摄精品| 99久久精品国产自免费| 视频二区亚洲精品| 999国产精品永久免费视频精品久久 | 2020国产在线视精品在| 中文字幕在线一区二区在线| 中文字幕亚洲第一| 色综合热无码热国产| 91精品国产丝袜| 欧美成人第一页| 日韩美女福利视频| 尤物视频一区| 99在线国产| www亚洲天堂| 狠狠亚洲五月天| 免费高清毛片| 手机在线国产精品| 亚洲男人天堂2018| 亚洲,国产,日韩,综合一区 | 亚洲日韩国产精品无码专区| 国产一级小视频| 国产v精品成人免费视频71pao | 少妇精品久久久一区二区三区| 欧美成一级| 国产精鲁鲁网在线视频| 九月婷婷亚洲综合在线| 青青青国产在线播放| 色偷偷综合网| 日本欧美视频在线观看| 亚洲婷婷在线视频| 99性视频| 久久精品亚洲热综合一区二区| 亚洲第一成人在线| 国产麻豆精品手机在线观看| 中文字幕1区2区| 毛片基地美国正在播放亚洲| 日本成人一区| 欧美日韩免费在线视频| 免费av一区二区三区在线| 91精品日韩人妻无码久久| 97狠狠操| 国产在线一二三区| 高清码无在线看| 在线国产三级| 亚洲成人高清在线观看| 91精品综合| 国产性精品| 91视频区| 久久精品丝袜高跟鞋| 欧洲高清无码在线| 国产精品真实对白精彩久久| 国产亚洲精品无码专| 国产对白刺激真实精品91| 99视频国产精品| 这里只有精品国产| 欧美午夜久久| 无码一区中文字幕| av在线人妻熟妇| 欧美人与动牲交a欧美精品| 天天做天天爱夜夜爽毛片毛片| 妇女自拍偷自拍亚洲精品| 亚洲av日韩综合一区尤物| 亚洲天堂网站在线| 成·人免费午夜无码视频在线观看| 国产不卡网| 日韩福利在线观看| 凹凸国产分类在线观看| AV无码一区二区三区四区| 中文字幕在线免费看| a级毛片免费播放| 日韩AV无码免费一二三区| 五月天在线网站| 精品国产91爱| 亚洲欧美成人影院| 日韩欧美一区在线观看| 国产精品免费电影| 国产杨幂丝袜av在线播放| 日本成人精品视频| 国产欧美精品一区aⅴ影院| 99久久精品国产自免费|