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

正文內(nèi)容

i2c內(nèi)核數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系(存儲版)

2025-10-01 14:13上一頁面

下一頁面
  

【正文】 已注冊的設(shè)備的信息(可以參見內(nèi)核 文檔 Documentation/i2c/procinterface)。 if (LINUX_VERSION_CODE = KERNEL_VERSION(2,3,48)) proc_entryproc_fops = amp。 struct proc_dir_entry *proc_entry。 } adapters[i] = adap。 i2c_add_adapter 函數(shù) 該函數(shù)用于向內(nèi)核注冊描述適配器及其驅(qū)動程序的 i2c_adapter 數(shù)據(jù)結(jié)構(gòu): int i2c_add_adapter(struct i2c_adapter *adap) { int i,j,res。 i2c_pxa 數(shù)據(jù)結(jié)構(gòu)的主體是 i2c_adapter 數(shù)據(jù)結(jié)構(gòu),將其中的 algo_data 指針指向整個 i2c_pxa 數(shù)據(jù)結(jié)構(gòu)的起始,這樣通過 就可以找到 i2c_pxa 數(shù)據(jù)結(jié)構(gòu)了。 該中斷源的名字是“ pxa2xxi2c”。 int ret。 i2c_pxa_algorithm 描述了 pxa255 的 i2c 適配器上的總線通信方法,其 ID 為 I2C_ALGO_PXA,定義于linux/。 flags 中的標(biāo)志位描述該 i2c 操作的屬性,比如是讀還是寫。由于在 i2c 操作的開始必須由 master 將 slave 設(shè)備的地址“上傳”到 i2c 總線上,所以一次讀操作就至少包兩個交互:第一次為寫操作,由 master 在發(fā)送 START 分節(jié)后發(fā)出 slave 的地址及 WR 位段,等待 slave 回送 ACK 分節(jié),然后 master 寫入的第 2 個字節(jié)可以為待讀出的寄存器編號;第二次為讀操作, master 接收到 slave 回送的 ACK 分節(jié)后重新發(fā)送 START 分節(jié),以告知 slave 設(shè)備可以開始發(fā)送數(shù)據(jù) 了。所以在 pxa_i2c數(shù)據(jù)結(jié)構(gòu)中設(shè)計了等待隊列首部 wait 域。 unsigned int msg_ptr。 return 0。 i2cproc_cleanup()。 } …… proc_bus = proc_mkdir(bus, 0)。proc_fs_type)。 i2cproc_init 函數(shù) 該函數(shù)用于創(chuàng)建描述系統(tǒng)中所有 i2c 總線的 /proc/bus/i2c 文件。 struct semaphore adap_lock。 driver_count=0。在閱讀下文時請經(jīng)常參照下圖。 master_xfer/smbus_xfer 指針指向 i2c 適配器驅(qū)動程序模塊實現(xiàn)的 i2c 通信協(xié)議或者 smbus 通信協(xié)議。 /* textual description */ unsigned int id。 一個 i2c 適配器上的 i2c 總線通信方法由其驅(qū)動程序提供的 i2c_algorithm 數(shù)據(jù)結(jié)構(gòu)描述,由 algo 指針指向。 int timeout。 void (*dec_use)(struct i2c_adapter *)。 有關(guān)設(shè)計私有數(shù)據(jù)的的討論可參見本文末尾的 討論部分 。 需要說明的是, i2c 設(shè)備的 7 位地址是就當(dāng)前 i2c 總線而言的,是“相對地址”。這樣將來就可以使用 i2c_driver 中的注銷設(shè)備和控制引用計數(shù)的方法了。 /* div., see below */ unsigned int addr。 attach_adapter 回調(diào)函數(shù)在安裝 i2c 設(shè)備驅(qū)動程序模塊時、或者在安裝 i2c 適配器驅(qū)動程序模塊時被調(diào)用,用于檢測、認(rèn)領(lǐng)設(shè)備并為設(shè)備分配 i2c_client 數(shù)據(jù)結(jié)構(gòu)。 unsigned int flags。目錄 1 聲明 你可以自由地隨意修改本文檔的任何文字內(nèi)容及圖表,但是如果你在自己的文檔中以任何形式直接引用了本文檔的任何原有文字或圖表并希望發(fā)布你的文檔,那么你也得保證讓所有得到你的文檔的人同時享有你曾經(jīng)享有過的權(quán)利。 int id。 其中 name 為最大長度為 32 字節(jié)的字符串, id 可選 0xf000 到 0xffff 中的任一數(shù)值, flags 域可以直接設(shè)置為 I2C_DF_NOTIFY。 unsigned int flags。如果檢測成功則調(diào)用設(shè)備驅(qū)動程序提供的回調(diào)函數(shù)創(chuàng)建描述設(shè)備的 i2c_client 數(shù)據(jù)結(jié)構(gòu),并將其中的 driver指針指向設(shè)備驅(qū)動程序的 i2c_driver 數(shù)據(jù)結(jié)構(gòu)。否則可以指定地址檢測范圍為這兩個地址,而在加載驅(qū)動程序模塊時由軟件進(jìn)行地址檢測。 super_block 和 inode 數(shù)據(jù)結(jié)構(gòu)本身集中描述了各種文件系統(tǒng)的共性,而具體文件系統(tǒng)的個性則放到 union 中進(jìn)行描述,在掛載具體的文件系統(tǒng)時實例化為具體的 union 對象,比如ext2_inode_union 或者 jffs2_inode_info。 void (*inc_use)(struct i2c_adapter *)。 int client_count。 lock 信號量用于實現(xiàn)對 i2c 總線的互斥訪問:在訪問 i2c 總線上的任一設(shè)備期間當(dāng)前進(jìn)程必須首先獲得該信號量,并且在阻塞等待 i2c 操作完成期間不釋放。 4. 具體 i2c 適配器的通信方法由 i2c_algorithm 數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述: struct i2c_algorithm { char name[32]。 }。 5. 假設(shè)一條 i2c 總線上有兩個使用相同驅(qū) 動程序的 i2c 設(shè)備,在打開該 i2c 總線的設(shè)備結(jié)點后相關(guān)數(shù)據(jù)結(jié)構(gòu)之間的邏輯組織關(guān)系如下圖所示。 adap_count=0。 static struct i2c_driver *drivers[I2C_DRIVER_MAX]。 } 第 2 章 的初始化 10 然后通過 i2cproc_init 函數(shù)創(chuàng)建相應(yīng)的 /proc/bus/i2c 文件,使得用戶進(jìn)程可以通過該文件得到當(dāng)前系統(tǒng)上所有已注冊的 i2c 總線信息。內(nèi)核全局變量 proc_bus 定義于 fs/proc/,聲明于 include/linux/,在 fs/proc/ 的 proc_root_init 函數(shù)中初始化: struct proc_dir_entry *proc_, *proc_bus, …… void __init proc_root_init(void) { int err = register_filesystem(amp。 return。 /* parent */ if (!proc_bus_i2c) { printk(: Could not create /proc/bus/i2c)。 endif /* (LINUX_VERSION_CODE = KERNEL_VERSION(2,3,27)) */ i2cproc_initialized += 2。 unsigned int msg_idx。由于 i2c 操作為串行的,所以可以采用“阻塞-中斷”的驅(qū)動模型,即讀寫 i2c 設(shè)備的用戶進(jìn)程在 i2c 操作期間進(jìn)入阻塞狀態(tài),待 i2c 操作完成后總線適配器將引發(fā)中斷,在相應(yīng)的中斷處理程序中喚醒受阻的用戶進(jìn)程。 第 3 章 安裝、卸載 pxa255 的 i2c 適配器驅(qū)動程序 13 一次 i2c 操作可以包含若干次交互,一個交互的傳輸方向是確定的,由一個 i2c_msg 數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述。 其中 addr為設(shè)備的總線地址, buf指向與 i2c 設(shè)備交互的數(shù)據(jù)緩沖區(qū),其長度為 len。 第 3 章 安裝、卸載 pxa255 的 i2c 適配器驅(qū)動程序 14 static struct i2c_algorithm i2c_pxa_algorithm = { .name = PXAI2CAlgorithm, .id = I2C_ALGO_PXA, .master_xfer = i2c_pxa_xfer, .smbus_xfer = NULL, /* Added by shrek2 */ .functionality = i2c_pxa_functionality, /* Added by shrek2 */ }。i2c_pxa。與中斷管理有關(guān)的位掩碼為 SA_INTERRUPT,表示該 IRQ 號被獨占使用而不能被共享,而且是一個“快速”中斷處理程序,即在執(zhí)行中斷處理期間 CPU 是關(guān)閉中斷的。 i2c = i2c。 } 最后就是利用 i2c 框架中的 i2c_add_adapter 函數(shù)注冊 i2c_pxa 中所包含的 i2c_adapter 數(shù)據(jù)結(jié)構(gòu)了。 goto ERROR0。 ifdef CONFIG_PROC_FS if (i2cproc_initialized) { char name[8]。然后就可以通過 create_proc_entry 函數(shù)進(jìn)一步在 /proc/bus 目錄下創(chuàng)建文件 i2c%d(該文件用于描述一條具體 i2c 總線上的設(shè)備連接情況),其中 %d的數(shù)值正為剛剛注冊的i2c_adapter 數(shù)據(jù)結(jié)構(gòu)的指針在內(nèi)核靜態(tài)數(shù)組 adapters 中的 偏移。 endif adapinode = proc_entrylow_ino。(I2C_DF_NOTIFY|I2C_DF_DUMMY))) /* We ignore the return code。 adap_count。 i++) if (adap == adapters[i]) break。 j++) if (drivers[j] amp。但是在我們的應(yīng)用中目前只有 ltc3445 一個設(shè)備,而且其驅(qū)動程序類型為 I2C_DF_NOTIFY,所以暫時跳過這段代碼。 } } 然后依次調(diào)用該 i2c 總線上所有設(shè)備的驅(qū)動程序的 detach_client 函數(shù),該函數(shù)通過 i2c_detach_client 函數(shù)完成適配器端的注銷工作,即從適配器的 clients[]數(shù)組中注銷設(shè)備數(shù)據(jù)結(jié)構(gòu);并通過 kfree釋放設(shè)備的 i2c_client及相應(yīng)的私有數(shù)據(jù)結(jié)構(gòu),從而完成設(shè)備端的注銷工作。 ADAP_UNLOCK()。 void i2c_adap_pxa_exit(void) { struct pxa_i2c *i2c = amp。 } 既然在模塊的初始化函數(shù) i2c_adap_pxa_init 中使能了 i2c 適配器的時鐘、注冊了中斷處理程序、注冊了適配器驅(qū)動程序,那么在模塊的清理函數(shù)中就反向地撤銷這些操作。 } ltc3445_initialized++。 if ((res = i2c_add_driver(amp。 free_irq(IRQ_I2C, i2c)。 return res。 第 3 章 安裝、卸載 pxa255 的 i2c 適配器驅(qū)動程序 19 remove_proc_entry(name,proc_bus)。j++) { struct i2c_client *client = adapclients[j]。t detach adapter %s while detaching driver %s: driver not detached!,adapname,drivers[j]name)。 } 首先在獲得全局信號量 adap_lock 的情況下在內(nèi)核靜態(tài)數(shù)組 adapters[]中找到待注銷的適配器驅(qū)動程序。 int i2c_del_adapter(struct i2c_adapter *adap) { int i,j,res。 return 0。jI2C_DRIVER_MAX。i2cproc_inode_operations。 /* parent */ if (! proc_entry) { printk(: Could not create /proc/bus/%s\n, name)。 首先在內(nèi)核靜態(tài)數(shù)組 adapters 中找到一個未用項,將其指向這個 i2c_adapter 數(shù)據(jù)結(jié)構(gòu)即完成注冊,并增加第 3 章 安裝、卸載 pxa255 的 i2c 適配器驅(qū)動程序 16 計數(shù)器。 i I2C_ADAP_MAX。 if (ret 0) { pr_info(I2C: Failed to add bus\n)??梢詤⒁姟?Linux設(shè)備驅(qū)動程序》第 9章)。 if (ret) goto out。 i2c_adap_pxa_init 函數(shù) (注:從 上下載的有關(guān) PXA I2C 的補丁 23602 是針對 的,其模塊的初始化函數(shù)利用了在 內(nèi)核中才支持的 driver_register 函數(shù)及 device_driver 數(shù)據(jù)結(jié)構(gòu)來進(jìn)行注冊。而 msg_ptr 總是指向當(dāng)前交互中要傳送、接收的下一個字節(jié)在 中的偏移。 /* slave address */ unsigned short flags。所以應(yīng)該把i2c_pxa_do
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1