色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux平臺下pci總線驅(qū)動

Linux平臺下pci總線驅(qū)動 時間:2018-08-16      來源:未知

Pci總線介紹

PCI總線是一種高性能局部總線,是為了滿足外設(shè)間以及外設(shè)與主機(jī)間高速數(shù)據(jù)傳輸而提出來的。

PCI總線系統(tǒng)要求有一個PCI控制卡,它必須安裝在一個PCI插槽內(nèi)。根據(jù)實(shí)現(xiàn)方式不同,PCI控制器可以與CPU一次交換32位或64位數(shù)據(jù),它允許智能PCI輔助適配器利用一種總線主控技術(shù)與CPU并行地執(zhí)行任務(wù)。PCI允許多路復(fù)用技術(shù),即允許一個以上的電子信號同時存在于總線之上。

每個PCI設(shè)備有許多地址配置的寄存器,初始化時要通過這些寄存器來配置該設(shè)備的總線地址,一旦完成配置以后,CPU就可以訪問該設(shè)備的各項(xiàng)資源了。PCI標(biāo)準(zhǔn)規(guī)定每個設(shè)備的配置寄存器組多可以有256個連續(xù)的字節(jié)空間,開頭64個字節(jié)叫頭部,分為0型(PCI設(shè)備)和1型(PCI橋)頭部,頭部開頭16個字節(jié)是設(shè)備的類型、型號和廠商等。

PCI總線架構(gòu)

所有的根總線都鏈接在pci_root_buses鏈表中。Pci_bus ->device鏈表鏈接著該總線下的所有設(shè)備。而pci_bus->children鏈表鏈接著它的下層總線,對于pci_dev來說,pci_dev->bus指向它所屬的pci_bus. Pci_dev->bus_list鏈接在它所屬bus的device鏈表上。此外,所有pci設(shè)備都鏈接在pci_device鏈表中。

Linux下PCI驅(qū)動的代碼模型

一個通過PCI總線與系統(tǒng)連接的設(shè)備的驅(qū)動主要包括兩部分:第一PCI總線驅(qū)動,第二,設(shè)備本身的驅(qū)動,包括字符設(shè)備,網(wǎng)絡(luò)設(shè)備,tty設(shè)備,音頻設(shè)備等。PCI驅(qū)動的核心是pci_driver,在探測函數(shù)中完成資源的申請,并注冊相應(yīng)的字符設(shè)備,網(wǎng)絡(luò)設(shè)備,tty設(shè)備,音頻設(shè)備等。以下代碼以三星平臺s3c24XX為例,

static struct pci_device_id buttons_pci_tbl[] __initdata={

{PCI_ANY_ID,PCI_ANY_ID,PCI_ANY_ID,PCI_ANY_ID,0,0,0},

{0,}

}; //PCI設(shè)備支持項(xiàng)

static irqreturn_t buttons_interrupt(int irq, void *dev_id)

{

//中斷處理程序

}

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

{

}

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

{

}

static int s3c24xx_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)

{

}

static struct file_operations dev_fops = {

.owner = THIS_MODULE,

.open = s3c24xx_buttons_open,

.release = s3c24xx_buttons_close,

.read = s3c24xx_buttons_read,

};

static struct miscdevice misc = {

.minor = MISC_DYNAMIC_MINOR,

.name = DEVICE_NAME,

.fops = &dev_fops,

};

static int pci_key__probe (struct pci_dev *pdev, const struct pci_device_id *ent)

{

int ret;

pci_enable_device(pdev); //使能PCI設(shè)備

pci_set_master(pdev);

ret = misc_register(&misc); //注冊雜項(xiàng)設(shè)備

printk (DEVICE_NAME"\tinitialized\n");

return ret;

}

static int pci_key__remove (struct pci_dev *pdev, const struct pci_device_id *ent)

{

pci_disable_device(pdev);

misc_deregister(&misc);

return 0;

}

static struct pci_driver pci_key_driver = {

.name = "pci_key",

.id_table =buttons_pci_tbl,

.probe = pci_key__probe,

.remove = pci_key__remove,

};

static int __init dev_init(void)

{

return pci_register_driver(&pci_key_driver);

}

static void __exit dev_exit(void)

{

pci_unregister_driver(&pci_key_driver);

}

module_init(dev_init);

module_exit(dev_exit);

PCI I/O和PCI內(nèi)存地址

這兩個地址空間用來實(shí)現(xiàn)PCI設(shè)備和Linux核心中設(shè)備驅(qū)動程序之間的通訊。例如DEC21141快速以太網(wǎng)設(shè)備的內(nèi)部寄存器被映射到PIC I/O空間上時,其對應(yīng)的Linux設(shè)備驅(qū)動可以通過對這些寄存器的讀寫來控制此設(shè)備。PCI視頻卡通常使用大量的PCI內(nèi)存空間來存儲視頻信息。

在PCI系統(tǒng)建立并通過用PCI配置頭中的命令域來打開這些地址空間前,系統(tǒng)決不允許對它們進(jìn)行存取。值得注意的是只有PCI配置代碼讀取和寫入PCI配置空間,Linux設(shè)備驅(qū)動只讀寫PCI I/O和PCI內(nèi)存地址。 那是因?yàn)楫?dāng)系統(tǒng)初始化階段完成后,每個PCI設(shè)備的地址空間都已經(jīng)應(yīng)設(shè)在PCI總線上了,驅(qū)動程序直接通過總線地址就可以訪問PCI設(shè)備,當(dāng)然也可以去讀寫配置空間,但這沒有必要。

以上只是PCI部分的簡介,可以參考《linux內(nèi)核情景分析》PCI驅(qū)動一章,講得非常詳細(xì)。

上一篇:exynos4412內(nèi)存分析

下一篇:二叉樹基本概念講解及創(chuàng)建

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 免费人妻无码不卡中文字幕系列 | 羞羞麻豆国产精品1区2区3区 | 亚洲精品乱码8久久久久久日本 | 亚洲一区二区三区四区在线字幕 | 少妇人妻偷人激情视频 | 蜜桃视频免费网站 | 美女黄网站18禁免费看胸罩 | 色诱视频网站免费观看 | 特级毛片A片全部免费97 | 少妇久久久久久被弄到高潮 | 中国熟妇人妻xxxxx | 国产一区二区三区在线免费看 | 精品亚洲国产成人A片在线鸭王 | 免费看奶头视频的网站 | 成人禁片又硬又粗太爽了 | 未满十八岁勿入网站WWW | 曰批一级视频播放 | 在线麻豆精东9制片厂AV影现网 | 日本000xxx免费视频 | 最新中文字幕一区二区三区 | 欧美人妖aa1片 | 蜜桃视频在线免费播放 | 午夜精品久久久久久久99热额 | 日本黄色大片在线观看 | 欧美二区乱c黑人 | 国产亚洲AV综合人人澡精品 | 91精品国产综合久久久欧美 | 亚洲日韩精品欧美一区二区一 | 久久99日韩国产精品久久99 | 日本在线视频www | 狠狠色综合久久丁香婷婷 | 免费A级毛片在线播放不收费 | 亚州免费A片无码区A片 | 免费无码黄十八禁网站在线观看 | 女人被添全过程A片久久AV | 午夜老司机你懂的视频 | 人人玩人人添人人澡 | 亚洲6080yy久久无码国产 | 亚洲欧美国产双大乳头 | 久久精品国产亚洲av品善 | 太深太粗太爽太猛了视频免费观看 |