freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux下pci設(shè)備驅(qū)動(dòng)程序開發(fā)(編輯修改稿)

2024-08-31 09:47 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 性。 Linux驅(qū)動(dòng)程序通常使用結(jié)構(gòu)(struct)來表示一種設(shè)備,而結(jié)構(gòu)體中的變量則代表某一具體設(shè)備,該變量存放了與該設(shè)備相關(guān)的所有信息。好的驅(qū)動(dòng)程序都應(yīng)該能驅(qū)動(dòng)多個(gè)同種設(shè)備,每個(gè)設(shè)備之間用次設(shè)備號(hào)進(jìn)行區(qū)分,如果采用結(jié)構(gòu)數(shù)據(jù)來代表所有能由該驅(qū)動(dòng)程序驅(qū)動(dòng)的設(shè)備,那么就可以簡(jiǎn)單地使用數(shù)組下標(biāo)來表示次設(shè)備號(hào)。 在PCI驅(qū)動(dòng)程序中,下面幾個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)起著非常核心的作用: pci_driver 這個(gè)數(shù)據(jù)結(jié)構(gòu)在文件include/linux/,其中最主要的是用于識(shí)別設(shè)備的id_table結(jié)構(gòu),以及用于檢測(cè)設(shè)備的函數(shù)probe( )和卸載設(shè)備的函數(shù)remove( ): struct pci_driver { struct list_head node。 char *name。 const struct pci_device_id *id_table。 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id)。 void (*remove) (struct pci_dev *dev)。 int (*save_state) (struct pci_dev *dev, u32 state)。 int (*suspend)(struct pci_dev *dev, u32 state)。 int (*resume) (struct pci_dev *dev)。 int (*enable_wake) (struct pci_dev *dev, u32 state, int enable)。}。 pci_dev 這個(gè)數(shù)據(jù)結(jié)構(gòu)也在文件include/linux/,它詳細(xì)描述了一個(gè)PCI設(shè)備幾乎所有的硬件信息,包括廠商ID、設(shè)備ID、各種資源等: struct pci_dev { struct list_head global_list。 struct list_head bus_list。 struct pci_bus *bus。 struct pci_bus *subordinate。 void *sysdata。 struct proc_dir_entry *procent。 unsigned int devfn。 unsigned short vendor。 unsigned short device。 unsigned short subsystem_vendor。 unsigned short subsystem_device。 unsigned int class。 u8 hdr_type。 u8 rom_base_reg。 struct pci_driver *driver。 void *driver_data。 u64 dma_mask。 u32 current_state。 unsigned short vendor_patible[DEVICE_COUNT_COMPATIBLE]。 unsigned short device_patible[DEVICE_COUNT_COMPATIBLE]。 unsigned int irq。 struct resource resource[DEVICE_COUNT_RESOURCE]。 struct resource dma_resource[DEVICE_COUNT_DMA]。 struct resource irq_resource[DEVICE_COUNT_IRQ]。 char name[80]。 char slot_name[8]。 int active。 int ro。 unsigned short regs。 int (*prepare)(struct pci_dev *dev)。 int (*activate)(struct pci_dev *dev)。 int (*deactivate)(struct pci_dev *dev)。}。2. 基本框架在用模塊方式實(shí)現(xiàn)PCI設(shè)備驅(qū)動(dòng)程序時(shí),通常至少要實(shí)現(xiàn)以下幾個(gè)部分:初始化設(shè)備模塊、設(shè)備打開模塊、數(shù)據(jù)讀寫和控制模塊、中斷處理模塊、設(shè)備釋放模塊、設(shè)備卸載模塊。下面給出一個(gè)典型的PCI設(shè)備驅(qū)動(dòng)程序的基本框架,從中不難體會(huì)到這幾個(gè)關(guān)鍵模塊是如何組織起來的。 /* 指明該驅(qū)動(dòng)程序適用于哪一些PCI設(shè)備 */static struct pci_device_id demo_pci_tbl [] __initdata = { {PCI_VENDOR_ID_DEMO, PCI_DEVICE_ID_DEMO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEMO}, {0,}}。/* 對(duì)特定PCI設(shè)備進(jìn)行描述的數(shù)據(jù)結(jié)構(gòu) */struct demo_card { unsigned int magic。 /* 使用鏈表保存所有同類的PCI設(shè)備 */ struct demo_card *next。 /* ... */}/* 中斷處理模塊 */static void demo_interrupt(int irq, void *dev_id, struct pt_regs *regs){ /* ... */}/* 設(shè)備文件操作接口 */static struct file_operations demo_fops = { owner: THIS_MODULE, /* demo_fops所屬的設(shè)備模塊 */ read: demo_read, /* 讀設(shè)備操作*/ write: demo_write, /* 寫設(shè)備操作*/ ioctl: demo_ioctl, /* 控制設(shè)備操作*/ mmap: demo_mmap, /* 內(nèi)存重映射操作*/ open: demo_open, /* 打開設(shè)備操作*/ release: demo_release /* 釋放設(shè)備操作*/
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1