close
Linux I2C Driver - 使用str8131(3)上面提到使用 ioctl(i2c_fd, I2C_RDWR, (uint32_t)&queue) 把訊息傳給driver,這裡我們要先看i2c-dev.c裡面,然後我們找到 ioctl的函式:static int i2cdev_ioctl(struct inode *inode, struct file 婚禮顧問*file,        unsigned int cmd, unsigned long arg){   ...   res = i2c_transfer(client->adapter,      rdwr_pa,      房地產rdwr_arg.nmsgs);   ...}這裡傳送的參數實際上就是 i2c_adapter、i2c_msg、i2c_msg的數目。這裡的i2c_adapter,就是我們實做bus driver時要用的。例如宣告:#define I2C_HW_STR8131    0x1b0000static struct i2c_algorithm 資產管理公司str8131_algorithm = {    master_xfer: str8131_xfer,    algo_control: str8131_ioctl,    functionality: str8131_func,};static struct i2c_adapter str8131_i2c_adapter = {    貸款name:              "Str8131 i2c",    id:                西裝外套I2C_HW_STR8131,    algo:              &str8131_algorithm,};主要就是 str8131_i2c_adapter這個 adapter裡的algo(str8131_algorithm),在這algo指的就是通信方法,燒烤意即實際上的硬體傳輸,我們在這裡指定str8131_xfer 函式,它原形為:static int str8131_xfer(struct i2c_adapter *adapter, struct i2c_msg msgs[], int num)在 bus driver實做的檔案裡的 i2c_init裡呼叫 i2c_add_adapter,加入我們宣告的adapter,在 找房子i2c_exit裡,呼叫 i2c_del_adapter ,釋放這個 adapter。這裡做的目的是讓我們的 bus driver 的 str8131_xfer 函式被呼叫,因為每個硬體的初化始和動作不一樣, kernel不可能每個硬體都幫你寫好,我們只要依照kernel為i2c規劃的架構,通過 i2c_adapter,和 租屋網kernel 做連結,來操作自已的硬體。總結一下:1. 宣告自已的 i2c_adapter 結構,主要是 algo成員裡面的 master_xfer(函式指標),指定自已的傳輸函式。2. 在自已的 module 的 init裡,呼叫 i2c_add_adapter,加入自已的 i2c_adapter。3. 在user-space時呼叫永慶房屋ioctl,指定I2C_RDWR,會呼叫 i2c-core.c 的 i2c_transfer。4. kernel 會在這裡呼叫已加入的 adapter的 algo的 master_xfer 來做實際的硬體傳輸。5. 在 module 的 exit裡,呼叫 i2c_del_adapter,刪除 adapter。


.msgcontent .wsharing ul li { 代償text-indent: 0; }



分享

Facebook
Plurk
YAHOO!

arrow
arrow
    全站熱搜

    sk74skpitg 發表在 痞客邦 留言(0) 人氣()