毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精


曙海教育集團(tuán)論壇Linux專區(qū)Linux驅(qū)動開發(fā) → Linux下PCI設(shè)備驅(qū)動程序開發(fā)基本框架(3)


  共有10498人關(guān)注過本帖樹形打印

主題:Linux下PCI設(shè)備驅(qū)動程序開發(fā)基本框架(3)

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
Linux下PCI設(shè)備驅(qū)動程序開發(fā)基本框架(3)  發(fā)帖心情 Post By:2010-11-24 10:44:10

PCI是一種廣泛采用的總線標(biāo)準(zhǔn),它提供了許多優(yōu)于其它總線標(biāo)準(zhǔn)(如EISA)的新特性,目前已經(jīng)成為計算機(jī)系統(tǒng)中應(yīng)用最為廣泛,并且最為通用的總線標(biāo)準(zhǔn)。Linux的內(nèi)核能較好地支持PCI總線,本文以Intel 386體系結(jié)構(gòu)為主,探討了在Linux下開發(fā)PCI設(shè)備驅(qū)動程序的基本框架。
  
  一、PCI總線系統(tǒng)體系結(jié)構(gòu)
  
  PCI是外圍設(shè)備互連(Peripheral Component Interconnect)的簡稱,作為一種通用的總線接口標(biāo)準(zhǔn),它在目前的計算機(jī)系統(tǒng)中得到了非常廣泛的應(yīng)用。PCI提供了一組完整的總線接口規(guī)范,其目的是描述如何將計算機(jī)系統(tǒng)中的外圍設(shè)備以一種結(jié)構(gòu)化和可控化的方式連接在一起,同時它還刻畫了外圍設(shè)備在連接時的電氣特性和行為規(guī)約,并且詳細(xì)定義了計算機(jī)系統(tǒng)中的各個不同部件之間應(yīng)該如何正確地進(jìn)行交互。
  
  無論是在基于Intel芯片的PC機(jī)中,或是在基于Alpha芯片的工作站上,PCI毫無疑問都是目前使用最廣泛的一種總線接口標(biāo)準(zhǔn)。同舊式的ISA總線不同,PCI將計算機(jī)系統(tǒng)中的總線子系統(tǒng)與子系統(tǒng)完全地分開,CPU通過一塊稱為PCI橋(PCI-Bridge)的設(shè)備來完成同總線子系統(tǒng)的交互,如圖1所示。
  
   圖片點擊可在新窗口打開查看
  
       圖1 PCI子系統(tǒng)的體系結(jié)構(gòu)
  
  由于使用了更高的時鐘頻率,因此PCI總線能夠獲得比ISA總線更好的整體性能。PCI總線的時鐘頻率一般在25MHz到33MHz范圍內(nèi),有些甚至能夠達(dá)到66MHz或者133MHz,而在64位系統(tǒng)中則最高能達(dá)到266MHz。盡管目前PCI設(shè)備大多采用32位數(shù)據(jù)總線,但PCI規(guī)范中已經(jīng)給出了64位的擴(kuò)展實現(xiàn),從而使PCI總線能夠更好地實現(xiàn)平臺無關(guān)性,現(xiàn)在PCI總線已經(jīng)能夠用于IA-32、Alpha、PowerPC、SPARC64和IA-64等體系結(jié)構(gòu)中。
  
  PCI總線具有三個非常顯著的優(yōu)點,使得它能夠完成最終取代ISA總線這一歷史使命:
  
  在計算機(jī)和外設(shè)間傳輸數(shù)據(jù)時具有更好的性能;
  
  能夠盡量獨立于具體的平臺;
  
  可以很方便地實現(xiàn)即插即用。
  
  圖2是一個典型的基于PCI總線的計算機(jī)系統(tǒng)邏輯示意圖,系統(tǒng)的各個部分通過PCI總線和PCI-PCI橋連接在一起。從圖中不難看出,CPU和RAM需要通過PCI橋連接到PCI總線0(即主PCI總線),而具有PCI接口的顯卡則可以直接連接到主PCI總線上。PCI-PCI橋是一個特殊的PCI設(shè)備,它負(fù)責(zé)將PCI總線0和PCI總線1(即從PCI主線)連接在一起,通常PCI總線1稱為PCI-PCI橋的下游(downstream),而PCI總線0則稱為PCI-PCI橋的上游(upstream)。圖中連接到從PCI總線上的是SCSI卡和以太網(wǎng)卡。為了兼容舊的ISA總線標(biāo)準(zhǔn),PCI總線還可以通過PCI-ISA橋來連接ISA總線,從而能夠支持以前的ISA設(shè)備。圖中ISA總線上連接著一個多功能I/O控制器,用于控制鍵盤、鼠標(biāo)和軟驅(qū)。
  圖片點擊可在新窗口打開查看
  
        圖2 PCI系統(tǒng)示意圖
  
  在此我只對PCI總線系統(tǒng)體系結(jié)構(gòu)作了概括性介紹,如果讀者想進(jìn)一步了解,David A Rusling在The Linux Kernel(http://tldp.org/LDP/tlk/dd/pci.html)中對Linux的PCI子系統(tǒng)有比較詳細(xì)的介紹。
  
  二、Linux驅(qū)動程序框架
  
  Linux將所有外部設(shè)備看成是一類特殊文件,稱之為“設(shè)備文件”,如果說系統(tǒng)調(diào)用是Linux內(nèi)核和應(yīng)用程序之間的接口,那么設(shè)備驅(qū)動程序則可以看成是Linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件在實現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備。
  
  1. 字符設(shè)備和塊設(shè)備
  
  Linux抽象了對硬件的處理,所有的硬件設(shè)備都可以像普通文件一樣來看待:它們可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成打開、關(guān)閉、讀寫和I/O控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。Linux系統(tǒng)中的所有硬件設(shè)備都使用一個特殊的設(shè)備文件來表示,例如,系統(tǒng)中的第一個IDE硬盤使用/dev/hda表示。每個設(shè)備文件對應(yīng)有兩個設(shè)備號:一個是主設(shè)備號,標(biāo)識該設(shè)備的種類,也標(biāo)識了該設(shè)備所使用的驅(qū)動程序;另一個是次設(shè)備號,標(biāo)識使用同一設(shè)備驅(qū)動程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登錄該設(shè)備時申請的主設(shè)備號一致,否則用戶進(jìn)程將無法訪問到設(shè)備驅(qū)動程序。

在Linux操作系統(tǒng)下有兩類主要的設(shè)備文件:一類是字符設(shè)備,另一類則是塊設(shè)備。字符設(shè)備是以字節(jié)為單位逐個進(jìn)行I/O操作的設(shè)備,在對字符設(shè)備發(fā)出讀寫請求時,實際的硬件I/O緊接著就發(fā)生了,一般來說字符設(shè)備中的緩存是可有可無的,而且也不支持隨機(jī)訪問。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備進(jìn)行讀寫請求時,驅(qū)動程序先查看緩沖區(qū)中的內(nèi)容,如果緩沖區(qū)中的數(shù)據(jù)能滿足用戶的要求就返回相應(yīng)的數(shù)據(jù),否則就調(diào)用相應(yīng)的請求函數(shù)來進(jìn)行實際的I/O操作。塊設(shè)備主要是針對磁盤等慢速設(shè)備設(shè)計的,其目的是避免耗費過多的CPU時間來等待操作的完成。一般說來,PCI卡通常都屬于字符設(shè)備。
  
  所有已經(jīng)注冊(即已經(jīng)加載了驅(qū)動程序)的硬件設(shè)備的主設(shè)備號可以從/proc/devices文件中得到。使用mknod命令可以創(chuàng)建指定類型的設(shè)備文件,同時為其分配相應(yīng)的主設(shè)備號和次設(shè)備號。例如,下面的命令:
  
  [root@gary root]# mknod /dev/lp0 c 6 0
  
  將建立一個主設(shè)備號為6,次設(shè)備號為0的字符設(shè)備文件/dev/lp0。當(dāng)應(yīng)用程序?qū)δ硞設(shè)備文件進(jìn)行系統(tǒng)調(diào)用時,Linux內(nèi)核會根據(jù)該設(shè)備文件的設(shè)備類型和主設(shè)備號調(diào)用相應(yīng)的驅(qū)動程序,并從用戶態(tài)進(jìn)入到核心態(tài),再由驅(qū)動程序判斷該設(shè)備的次設(shè)備號,最終完成對相應(yīng)硬件的操作。
  
  2. 設(shè)備驅(qū)動程序接口
  
  Linux中的I/O子系統(tǒng)向內(nèi)核中的其他部分提供了一個統(tǒng)一的標(biāo)準(zhǔn)設(shè)備接口,這是通過include//fs.h中的數(shù)據(jù)結(jié)構(gòu)file_operations來完成的:
  
  
  struct file_operations {
    struct module *owner;
    loff_t (*llseek) (struct file *, loff_t, int);
    ssize_t (*read) (struct file *, char *, size_t, loff_t *);
    ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
    int (*readdir) (struct file *, void *, filldir_t);
    unsigned int (*poll) (struct file *, struct poll_table_struct *);
    int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
    int (*mmap) (struct file *, struct vm_area_struct *);
    int (*open) (struct inode *, struct file *);
    int (*flush) (struct file *);
    int (*release) (struct inode *, struct file *);
    int (*fsync) (struct file *, struct dentry *, int datasync);
    int (*fasync) (int, struct file *, int);
    int (*lock) (struct file *, int, struct file_lock *);
    ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
    ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
    ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
    unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
  };
  
  當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open、close、read、write等操作時,Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。例如,當(dāng)應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作時,內(nèi)核將調(diào)用file_operations結(jié)構(gòu)中的read函數(shù)。
  
  2. 設(shè)備驅(qū)動程序模塊
  
  Linux下的設(shè)備驅(qū)動程序可以按照兩種方式進(jìn)行編譯,一種是直接靜態(tài)編譯成內(nèi)核的一部分,另一種則是編譯成可以動態(tài)加載的模塊。如果編譯進(jìn)內(nèi)核的話,會增加內(nèi)核的大小,還要改動內(nèi)核的源文件,而且不能動態(tài)地卸載,不利于調(diào)試,所有推薦使用模塊方式。


支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

Linux下PCI設(shè)備驅(qū)動程序開發(fā)基本框架(3)








簽名
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
首页综合国产亚洲丝袜| 亚洲国产精品成人综合| 日韩欧美在线综合网| 中文字幕一区二区三区精华液 | 日本高清成人免费播放| 日韩一区二区免费在线电影| 亚洲成av人片在线观看无码| 不卡视频一二三四| 免费观看在线色综合| 日本一区二区三区免费乱视频| 不卡电影一区二区三区| 亚洲精品高清在线观看| 一本色道a无线码一区v| 国产欧美日韩在线看| 精品一区二区三区免费| 一本一本大道香蕉久在线精品| 亚洲免费av高清| 国产精品免费久久| 91麻豆免费在线观看| 久久精品视频免费| www.亚洲免费av| 亚洲色欲色欲www| 欧美中文一区二区三区| 不卡av电影在线播放| 免费av成人在线| 国产欧美日韩一区二区三区在线观看| 亚洲小少妇裸体bbw| 精品久久99ma| 欧美日韩另类一区| 91国在线观看| 国产精品白丝在线| 国产精品一区二区久久精品爱涩| 国产精品羞羞答答xxdd| 91在线观看污| 日本精品一区二区三区四区的功能| 91国偷自产一区二区开放时间| 国产精华液一区二区三区| 岛国精品在线观看| 国产真实乱偷精品视频免| 亚洲狠狠丁香婷婷综合久久久| 色婷婷综合久久久中文字幕| 丁香婷婷综合五月| 成人一道本在线| 在线播放中文一区| 最好看的中文字幕久久| 精品一区二区三区在线播放 | 欧美高清在线视频| 久久网站热最新地址| 91精品国产一区二区三区蜜臀| 中文字幕一区二区三区在线观看 | 色哟哟精品一区| 亚洲国产精品成人久久综合一区| 国内精品嫩模私拍在线| 日韩视频一区二区| 亚洲免费观看高清| www.欧美日韩| 中文字幕一区二| 国产一区二区三区最好精华液| 91麻豆精品在线观看| 亚洲私人黄色宅男| 丰满放荡岳乱妇91ww| 在线观看国产91| 欧美日韩一级视频| 久久久99精品久久| 欧美午夜在线一二页| 午夜不卡av免费| 日韩欧美久久一区| 国产不卡视频在线观看| 中文av一区特黄| 福利电影一区二区三区| 国产精品久久久久久久久免费相片| 日本视频在线一区| 欧美日韩精品一区二区三区| 国产精品高潮呻吟| 国产一区欧美一区| 欧美日韩在线综合| 综合久久综合久久| 91黄色激情网站| 粉嫩绯色av一区二区在线观看| 另类小说综合欧美亚洲| 天天综合天天综合色| 国产精品初高中害羞小美女文| 在线观看欧美黄色| 国产一区二区0| 亚洲图片欧美色图| 在线播放日韩导航| 久久99在线观看| 欧美—级在线免费片| 99精品黄色片免费大全| 五月天精品一区二区三区| 亚洲三级久久久| 久久精品这里都是精品| 欧美日本在线视频| 成人h动漫精品| 日韩av一区二区三区| 国产亚洲污的网站| 91精品婷婷国产综合久久| 国产精品一色哟哟哟| 蜜臀av一区二区| 不卡av在线免费观看| 在线观看国产91| 91精品福利在线一区二区三区| 欧美午夜一区二区三区免费大片| 欧美日韩一级片在线观看| 色哟哟在线观看一区二区三区| 国产一区在线不卡| 日韩精品电影在线| 日韩vs国产vs欧美| 国产成人亚洲精品青草天美| 欧美三级三级三级爽爽爽| 日韩精品一区国产麻豆| 国产精品伦一区| 亚洲成人av一区| 丝袜a∨在线一区二区三区不卡| 亚洲午夜免费电影| 亚洲另类春色校园小说| 国产精品区一区二区三区| 精品福利视频一区二区三区| 日韩中文字幕麻豆| 91日韩在线专区| 正在播放亚洲一区| 日韩毛片在线免费观看| 丝袜诱惑亚洲看片| 亚洲午夜精品在线| 麻豆专区一区二区三区四区五区| 韩国成人福利片在线播放| 国产成人午夜精品5599| 欧美精品一区二| 国产99久久精品| 欧美r级在线观看| 日本中文字幕一区二区视频 | 91精品婷婷国产综合久久| 日韩一二三四区| 国产传媒久久文化传媒| 久久网这里都是精品| 日韩av网站免费在线| 高清国产一区二区| 制服丝袜av成人在线看| 国产精品美女久久久久久久| 午夜a成v人精品| 成人app在线观看| 日产精品久久久久久久性色| 日韩欧美国产一二三区| 五月天网站亚洲| 久久久久久一二三区| 久久国产精品一区二区| 日韩精品一区二区三区在线| 婷婷成人综合网| 色素色在线综合| 国产精品久久久久久久久久久免费看 | 日日摸夜夜添夜夜添国产精品| 欧美日韩一区二区欧美激情| 亚洲成av人片www| 国产欧美日韩在线看| 日本aⅴ亚洲精品中文乱码| 成人免费毛片高清视频| √…a在线天堂一区| 精品成人在线观看| 欧美午夜电影在线播放| 国产成人在线观看免费网站| 一二三区精品视频| 国产女人aaa级久久久级 | 欧美三级在线看| 福利一区二区在线观看| 欧美bbbbb| 亚洲综合视频在线| 国产精品久久久久一区| 久久久亚洲综合| 国产精品视频九色porn| 在线观看一区不卡| 日韩精品一区二区三区swag| 综合av第一页| 国产精一品亚洲二区在线视频| 欧美伊人久久久久久久久影院 | 不卡的av电影在线观看| 亚洲一区二区欧美激情| 精品免费国产二区三区| 国产福利一区二区三区视频在线| 国产日韩精品一区二区三区| 国产成人99久久亚洲综合精品| 一区二区三区日韩精品视频| 依依成人综合视频| 日韩成人一级片| 成人国产在线观看| 欧美天堂亚洲电影院在线播放| 日韩精品一区二区三区蜜臀| 欧美高清一级片在线观看| 亚洲黄色小视频| 国产一区二区三区蝌蚪| 欧美三级午夜理伦三级中视频| 国产精品白丝jk白祙喷水网站 | 国产精品1024久久| 成人午夜短视频| 国产精品久久久一本精品| 色8久久人人97超碰香蕉987| 国产成人免费视频网站 | av一区二区三区黑人| 狠狠狠色丁香婷婷综合激情 | 日韩和欧美一区二区| 麻豆国产一区二区|