a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux系統設備驅動程序的開發

嵌入式Linux系統設備驅動程序的開發

作者: 時間:2012-05-08 來源:網絡 收藏

引言

本文引用地址:http://www.j9360.com/article/171494.htm

是一個遵循POSIX標準的免費操作。具有BSD和SYSV的擴展特性。與其他操作相比,以其可應用于多種硬件平臺、內核高效穩定、源碼開放、軟件豐富、網絡通信和文件管理機制完善等優良特性而正被作為研究熱點,越來越多的研究人員采用平臺來自己的產品。Linux在Linux內核源代碼中占有很大比例,從2.0、2.2到 2.4版本的內核,源代碼的長度日益增加,其實主要是在增加。

的編寫

設備驅動程序是linux內核的一部分,是操作系統內核和機器硬件之間的接口,它由一組函數和一些私有數據組成,是連接應用程序與具體硬件的橋梁。Linux的一個基本特點是它對硬件設備的管理抽象化,系統中的每一個設備都用一個特殊的文件來表示。所有的硬件設備都像普通的文件一樣看待,使用與操作系統相同的標準系統來進行打開、讀寫和關閉。

在Linux 操作系統下有3類主要的設備文件類型:塊設備、字符設備、網絡設備。字符設備是指存取時沒有緩存的設備。可像文件一樣訪問字符設備,字符設備驅動程序負責實現這些行為。系統的控制臺和并口就是字符設備的例子,它們可以很好地用“流”來描述。塊設備是文件系統的宿主,如磁盤。 Linux允許像字符設備那樣讀取塊設備——允許一次傳輸任意數目的字節。結果是,字符設備和塊設備讀取數方式一致。而網絡設備不同于字符設備和塊設備, 它面向的上一層不是文件系統而是網絡協議層,是通過BSD套接口訪問數據。與設備相對應的是三類設備驅動程序,字符設備驅動程序、塊設備驅動程序、網絡設備驅動程序。

字符設備驅動程序、塊設備驅動程序與網絡設備驅動程序的結構體是不同的。

在linux 源代碼linux/ include / linux/ fs. h中定義了字符設備和塊設備驅動程序中必須使用的file_operations結構,每個設備驅動都實現這個接口所定義的部分或全部函數。隨著內核的不斷升級, file_operations結構也越來越大,不同的版本的內核會稍有不同。file_operations定義如下:

struct file_operations{

int( * lseek) ( struct inode * , struct file * , off_t , int) ; int( *release) ( struct inode * , struct file * ) ;

int( * read) ( struct inode * , struct file * , char * , int) ; int( * fsync) ( struct inode *, struct file * ) ;

int( *write) ( struct inode * , struct file * , const char *, int) ; int( * fasync) ( struct inode * , struct file *, int) ;

int( * readdir) ( struct inode , struct file , void * , dilldir) ; int( *check_media_change) ( kdev_t dev) ;

int(*select) ( struct inode *, struct file * , int, select_table * ) ; int( * revalidate) ( kdev_t dev) ; };

int ( * ioctl) ( struct inode * , struct file *, unsigned int, unsigned long) ;

int( *mmap) ( struct inode * , struct file * , struct vm_area_struct * ) ;

int( * open) ( struct inode *, struct file *) ;

應用程序只有通過對設備文件的open、release、read、write、ioctl等才能訪問字符設備和塊設備。用戶自己定義好 file_operations結構后,編寫出設備實際所需要的各操作函數,對于不需要的操作函數用NULL初始化,這些操作函數將被注冊到內核,當應用程序對設備相應的設備文件進行文件操作時,內核會找到相應的操作函數,并進行調用。如果操作函數使用NULL,操作函數就進行默認處理。

對于字符設備而言,llseek( ),read( ),write(),ioctl( ),open( ),release( )這些函數是不可缺的;對于塊設備,open( ),release( ),ioctl(),check_media_change( ),revalidate( )是不可缺少的。

網絡設備結構體 net_device 定義在 includelinuxnetdevice.h 里,如下所示:

struct net_device

{

char name ; int (*init)(struct

net_device *dev);

unsigned short flags ; int (*open)

(struct net_device *dev);

unsigned long base_addr; int

(*stop)(struct net_device *dev)

unsigned int irq ; int

(*hard_start_xmit)(struct sk_buff *skb,

unsigned char dev_addr; struct

net_device *dev);

unsigned char addr_len; int

(*set_mac_address)( struct net_device

unsigned long trans_start; *dev,void* addr);

……

}

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉