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

正文內(nèi)容

i2c內(nèi)核數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系-免費閱讀

2025-09-21 14:13 上一頁面

下一頁面
  

【正文】 ltc3445_cleanup()。= ~CKEN14_I2C。 return res。 adap_count。t be detached. , adapname, clientaddr)。 } DRV_UNLOCK()。 for (j = 0。 for (i = 0。 ERROR1: ADAP_LOCK()。amp。 else proc_entryfill_inode = amp。 goto ERROR1。 /* init data types */ init_MUTEX(amp。 if (I2C_ADAP_MAX == i) { printk(KERN_WARNING : register_adapter(%s) enlarge I2C_ADAP_MAX.\n, adapname)。 goto out。 第 3 章 安裝、卸載 pxa255 的 i2c 適配器驅(qū)動程序 15 然后,就是通過 i2c_pxa_reset 函數(shù)初始化 i2c 適配器了, 詳見后文 。宏 CKEN 和 CKEN14_I2C 均定義于 asm/arch/,將相應(yīng)位置 1 即開啟了 i2c 總線時鐘。) 該函數(shù)用于 pxa255 的 i2c 適配器驅(qū)動程序的初始化:開啟適配器時鐘源、注冊中斷處理程序、初始化適配器、向內(nèi)核注冊描述適配器的 i2c_adapter 數(shù)據(jù)結(jié)構(gòu)。 在 pxa255 的 i2c 適配器驅(qū)動程序模塊中定義的 pxa_i2c 類型的變量為 i2c_pxa,注意其 algo 指針指向模塊中定義的 i2c_algorithm 類型的靜態(tài)變量 i2c_pxa_algorithm: static struct pxa_i2c i2c_pxa = { .lock= SPIN_LOCK_UNLOCKED, .wait= __WAIT_QUEUE_HEAD_INITIALIZER(), .adap = { .name = pxa2xxi2c, .id = I2C_ALGO_PXA, .algo = amp。 /* msg length */ char *buf。于是可以通過spin_lock/unlock_irq 函數(shù)同步中斷處理程序,或者通過 spin_lock/unlock_bh 同步下半部分(一定要分析清楚競爭條件的雙方究竟是誰,從而采用適宜的同步機制。 }。 struct i2c_msg *msg。 else proc_bus_i2cfill_inode = amp。函數(shù)的最后再增加 i2cproc_initialized 計數(shù)值。 if (IS_ERR(proc_mnt)) { unregister_filesystem(amp。 return ENOENT。 i2cproc_init()。 在 中定義了內(nèi)核靜態(tài)指針數(shù)組 adapters 和 drivers,用于注冊描述 i2c 適配器及其驅(qū)動程序的i2c_adapter 數(shù)據(jù)結(jié)構(gòu)和描述設(shè)備及其驅(qū)動程序的 i2c_driver 數(shù)據(jù)結(jié)構(gòu)。 memset(adapters,0,sizeof(adapters))。內(nèi)核中靜態(tài)指針數(shù)組 adapters 和drivers 分別記錄所有已經(jīng)注冊的 i2c 總線設(shè)備和 i2c 設(shè)備驅(qū)動。 int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long)。這些函數(shù)在當前 pxa255 的 i2c 補丁中都沒有實現(xiàn)。 在 i2c_adapter 數(shù)據(jù)結(jié)構(gòu)中設(shè)計了 clients 指針數(shù)組,指向該總線上每個設(shè)備的 i2c_client 數(shù)據(jù)結(jié)構(gòu)。 unsigned int flags。 /* == is algoid | id, for registered values see below */ struct i2c_algorithm *algo。設(shè)備驅(qū)動程序開發(fā)者可以設(shè)計合適的私有數(shù)據(jù)結(jié)構(gòu)來描述硬件的特性。以 i2c 設(shè)備 ltc3445 為例,硬件支持的地址為 1001011 或者 0101011,即7 位地址的高 2 位由具體的布線方法決定(可以分別接到 VCC 或者 GND)。 /* How many accesses currently to the client */ }。 第 1 章 i2c 核心數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系 5 2. 一個 i2c 設(shè)備由 i2c_client 數(shù)據(jù)結(jié)構(gòu)進行描述: struct i2c_client { char name[32]。 void (*dec_use)(struct i2c_client *client)。 下面介紹 i2c 各核心數(shù)據(jù)結(jié)構(gòu)的定義和它們之間的連接關(guān)系。 Linux的 i2c 框架中各個部分的關(guān)系如下圖所示: SDA pxa255 I2C LTC3445 other device SCL 第 1 章 i2c 核心數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系 4 內(nèi)核中 i2c 相關(guān)代碼可以分為三個層次: 1. i2c 框架: 和 為 i2c 框架的主體,提供了核心數(shù)據(jù)結(jié)構(gòu)的定義、 i2c 適配器驅(qū)動和設(shè)備驅(qū)動的注冊、 注銷管理, i2c 通信方法上層的、與具體適配器無關(guān)的代碼、檢測設(shè)備地址的上層代碼等; 用于創(chuàng)建 i2c 適配器的 /dev/i2c/%d 設(shè)備節(jié)點,提供 i2c 設(shè)備訪問方法等。 int (*detach_client)(struct i2c_client *)。 inc_use 和 dec_use 所指向的函數(shù)用于改變 i2c 設(shè)備驅(qū)動程序模塊的引用計數(shù)。 /* the adapter we sit on */ struct i2c_driver *driver。數(shù)據(jù)結(jié)構(gòu)之間類似的組織關(guān)系在 Linux內(nèi)核中屢見不鮮,比如父子進程的 PCB之間、父目錄及子目錄和子文件的 dentry 之間,等等。所以在系統(tǒng)中一個 i2c 設(shè)備的“絕對地址”由二元組( i2c 適配器的 ID 和設(shè)備在該總線 上的 7 位地址)表示。而 usage_count 域為設(shè)備的使用引用計數(shù),在i2c_use_client 和 i2c_release_client 函數(shù)中控制 usage_count 域的值(但是當前 pxa255 的 i2c 補丁中并沒有使用這兩個函數(shù), usage_count 的值自初始化后就一直為 0)。 int (*client_unregister)(struct i2c_client *)。 ifdef CONFIG_PROC_FS /* No need to set this when you initialize the adapter */ int inode。當安裝具體 i2c 適配器的驅(qū)動程序時由相應(yīng)驅(qū)動程序?qū)崿F(xiàn)具體的 i2c_algorithm 數(shù)據(jù)結(jié)構(gòu),其中的函數(shù)指針指向操作具體 i2c 適配器的代碼(換用面向?qū)ο蟮恼Z言,就是當創(chuàng)建子類對象時將基第 1 章 i2c 核心數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系 7 類中定義的函數(shù)調(diào)用接口實例化為與具體子類相關(guān)的代碼。 int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, unsigned short flags, char read_write, u8 mand, int size, union i2c_smbus_data * data)。 slave_send/recv函數(shù)用于實現(xiàn)當 i2c適配器扮演 slave角色時的傳輸方法。正是中間的函數(shù)調(diào)用接口使得上層策略與底層機制無關(guān),從而使得上層策略具有良好的可移植性和重用性。adap_lock)。 其中表示適配器和驅(qū)動程序最大數(shù)量的宏在 linux/ 中均被定義為 16。 i2cproc_initialized = 0。 proc_mnt = kern_mount(amp。在確保 proc_bus 不為 NULL 后,接下來通過 create_proc_entry 函數(shù)在 /proc/bus 下創(chuàng)建文件第 2 章 的初始化 11 /proc/bus/i2c,相應(yīng)的讀回調(diào)函數(shù)為 read_bus_i2c。 } proc_bus_i2cread_proc = amp。但在適配器的驅(qū)動程序中可以根據(jù)具體適配器的需要“擴充”該數(shù)據(jù)結(jié)構(gòu)。 int irqlogidx。 i2c總線的同步問題還包括另一個方面:在讀寫 i2c設(shè)備的系統(tǒng)調(diào)用執(zhí)行流中最終將通過 i2c_pxa_do_xfer 函數(shù)初始化指向待傳輸信息的指針( msg, msg_idx, msg_ptr)并發(fā)起 i2c 通信(詳見下文),而此期間可能發(fā)生 i2c 中斷,而在 i2c 中斷處理程序 i2c_pxa_handler 中也會步進指向待傳輸信息的指針。 指針 msg指向用于描述一組 i2c 交互的 i2c_msg數(shù)據(jù)結(jié)構(gòu)的數(shù)組: struct i2c_msg { __u16 addr。 每 完成一次交互, msg 指針和 msg_idx 計數(shù)器都會增加。另外從這個數(shù)據(jù)結(jié)構(gòu)也看到該 pxa255 的 i2c 驅(qū)動程序補丁尚不支持 smbus 協(xié)議,只支持 i2c 協(xié)議。 ret = request_irq(IRQ_I2C, i2c_pxa_handler, SA_INTERRUPT, pxa2xxi2c, i2c)。 dev_id指針一般指向設(shè)備私有數(shù)據(jù)結(jié)構(gòu),可以用在共享 IRQ的中斷處理程序中(當共享的 IRQ上有中斷發(fā)生時,共享該 IRQ 的所有中斷處理程序都會被依次調(diào)用, dev_id 指針被原封不動地傳遞給相應(yīng)的中斷處理程序,那么在中斷處理程序中就可以通過 dev_id 所指向的設(shè)備私有數(shù)據(jù)結(jié)構(gòu),或者直接通過設(shè)備的硬件狀態(tài)寄存器來判斷是否是這個設(shè)備真正引發(fā)了中斷。i2cadap)。 for (i = 0。 ADAP_UNLOCK()。 proc_entry = create_proc_entry(name, /* name */ 0, /* mode */ proc_bus)。 else proc_entryops = amp。 for (j=0。 DEB(printk(: adapter %s registered as adapter %d.\n, adapname, i))。 } i2c_del_adapter 函數(shù) 與 i2c_add_adapter 函數(shù)相對, i2c_del_adapter 函數(shù)用于注銷適配器的數(shù)據(jù)結(jié)構(gòu)、刪除其總線上所有設(shè)備的i2c_client 數(shù)據(jù)結(jié)構(gòu)、并減少其代表總線上所有設(shè)備的相應(yīng)驅(qū)動程序數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)(如果到達 0,則卸載設(shè)備驅(qū)動程序)、刪除 /proc/bus/i2c%d 文件。 goto ERROR0。 I2C_DF_DUMMY)) if ((res = drivers[j]attach_adapter(adap))) { printk(: can39。jI2C_CLIENT_MAX。 sprintf(name,i2c%d, i)。 ERROR0: ADAP_UNLOCK()。i2cadap)。 static int ltc3445_init(void) { int res。 return 0。 第 4 章 安裝、卸載 ltc3445 驅(qū)動程序模塊 20 第 4 章 安裝、卸載 ltc3445 驅(qū)動程序 ltc3445 驅(qū)動程序模塊定義了描述 ltc3445 的數(shù)據(jù)結(jié)構(gòu)及相應(yīng)的初始化方法,提供了地址線索、地址檢測方法和向適配 器注冊、注銷設(shè)備的方法。i2c_pxa。 DEB(printk(: adapter unregistered: %s\n,adapname))。詳見 ltc3445 設(shè)備驅(qū)動程序分析 。 /* detach any active clients. This must be done first, because * it can fail。amp。 if (I2C_ADAP_MAX == i) { printk( : unregister_adapter adap [%s] not found.\n, adapname)。 ERROR0: ADAP_UNLOCK()。 if it fails, too bad */ drivers[j]attach_adapter(adap)。 } endif /* def CONFIG_PROC_FS */ proc 文件的訪問方法由 i2cproc_operations 結(jié)構(gòu)體定義,其中只定義了讀方法為 i2cproc_bus_read,這個函數(shù)通過訪問 i2c_adapter數(shù)據(jù)結(jié)構(gòu)中的 clients 數(shù)組,向用戶進程返回在該 i2c 總線上所有
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1