日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux i2c子系统入口,I2C子系统1 - ARM_Linuxx的个人空间 - OSCHINA - 中文开源技术交流社区...

發(fā)布時間:2025/3/21 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux i2c子系统入口,I2C子系统1 - ARM_Linuxx的个人空间 - OSCHINA - 中文开源技术交流社区... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

I2C子系統(tǒng)

核心 i2c_driver 結(jié)構(gòu)體

分配、設置、注冊一個i2c_driver結(jié)構(gòu)體

static struct i2c_driver i2c_example_driver = {

.driver = {

.name = "example",

.of_match_table = of_match_ids_example,

},

.probe = i2c_example_driver_probe,

.remove = i2c_example_driver_remove,

.id_table = example_ids,

};

出入口函數(shù)

/*入口函數(shù) 注冊一個i2c_drvier */

static int __init i2c_driver_init(void)

{

return i2c_add_driver(&i2c_example_driver);

}

module_init(i2c_driver_init);

/**出口函數(shù) del一個i2c_drvier */

static void __exit i2c_driver_exit(void)

{

i2c_del_driver(&i2c_example_driver);

}

i2c_driver表明能支持哪些設備

i2c_driver表明能支持哪些設備:

使用of_match_table來判斷

設備樹中,某個I2C控制器節(jié)點下可以創(chuàng)建I2C設備的節(jié)點

如果I2C設備節(jié)點的compatible屬性跟of_match_table的某項兼容,則匹配成功

i2c_client.name跟某個of_match_table[i].compatible值相同,則匹配成功 static const struct of_device_id of_match_ids_example[] = {

{ .compatible = "com_name,chip_name", .data = NULL},

{ /* END OF LIST */ } /*最后空一項為必須,空閑為end 判斷條件*/

};

// of_ 開頭一般與設備樹關聯(lián)

使用id_table來判斷

i2c_client.name跟某個id_table[i].name值相同,則匹配成功 static const struct i2c_device_id example_ids[] = {

{ "chip_name", (kernel_ulong_t)NULL },

{ /* END OF LIST */ }

};

i2c_driver跟i2c_client匹配成功后,就調(diào)用i2c_driver.probe函數(shù)。

i2c_client

參考資料 Linux內(nèi)核文檔: 5.0版本內(nèi)核

Documentation\i2c\instantiating-devices.rst

Documentation\i2c\writing-clients.rst

i2c_client表示一個I2C設備,創(chuàng)建i2c_client的方法有4種:

方法1

通過I2C bus number來創(chuàng)建 int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len);

通過設備樹結(jié)點 /* 在某個I2C控制器的節(jié)點下,添加如下代碼: */

ap3216c@1e {

compatible = "lite-on,ap3216c";

reg = <0x1e>;

};

方法2

有時候無法知道該設備掛載哪個I2C bus下,無法知道它對應的I2C bus number。 但是可以通過其他方法知道對應的i2c_adapter結(jié)構(gòu)體。 可以使用下面兩個函數(shù)來創(chuàng)建i2c_client:

i2c_new_device static struct i2c_client *ap3216c_client;

static int __init i2c_client_ap3216c_init(void)

{

struct i2c_adapter *adapter;

struct i2c_board_info board_info = {

I2C_BOARD_INFO("ap3216c", 0x1e),

};

printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

/* register I2C device */

adapter = i2c_get_adapter(0);

ap3216c_client = i2c_new_device(adapter, &board_info);

i2c_put_adapter(adapter);

return 0;

}

i2c_new_probed_device static struct i2c_client *ap3216c_client;

/* 羅列出所有可能的地址,這里只有一個*/

static const unsigned short normal_i2c[] = { 0x1e, I2C_CLIENT_END };

static int __init i2c_client_ap3216c_init(void)

{

struct i2c_adapter *adapter;

struct i2c_board_info i2c_info;

/* 將名字信息寫入i2c_info,先清0 */

memset(&i2c_info, 0, sizeof(struct i2c_board_info));

strscpy(i2c_info.type, "ap3216c", sizeof(i2c_info.type));

adapter = i2c_get_adapter(0); /* 第0根i2c總線 */

ap3216c_client = i2c_new_probed_device(adapter, &i2c_info,

normal_i2c, NULL);

i2c_put_adapter(adapter);

return 0;

}

差別

i2c_new_device:

會創(chuàng)建i2c_client,即使該設備并不存在

i2c_new_probed_device:

它成功的話,會創(chuàng)建i2c_client,并且表示這個設備肯定存在

I2C設備的地址可能發(fā)生變化,比如AT24C02的引腳A2A1A0電平不一樣時,設備地址就不一樣

可以羅列出可能的地址

i2c_new_probed_device使用這些地址判斷設備是否存在

方法3 (不推薦):由i2c_driver.detect函數(shù)來判斷是否有對應的I2C設備并生成i2c_client

方法4 : 通過用戶空間(user-space)生成

調(diào)試時、或者不方便通過代碼明確地生成i2c_client時,可以通過用戶空間來生成。 // 創(chuàng)建一個i2c_client, .name = "eeprom", .addr=0x50, .adapter是i2c-3

# echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device

// 刪除一個i2c_client

# echo 0x50 > /sys/bus/i2c/devices/i2c-3/delete_device

總結(jié)

以上是生活随笔為你收集整理的linux i2c子系统入口,I2C子系统1 - ARM_Linuxx的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美三级午夜理伦三级 | 风流还珠之乱淫h文 | 国产999精品 | 超碰超碰超碰超碰超碰 | 日本伦理一区二区三区 | 日韩av在线影院 | 欧美一区二区三区激情视频 | 在线免费观看av网站 | 国产精品久久伊人 | 欧美视频在线观看一区二区 | 欧美一区二区三区免 | 国产精品久久久久一区二区三区 | 欧美日韩在线视频免费 | 黄色一级片在线 | 看黄色一级片 | 精品人妻一区二区乱码 | 久久美女免费视频 | 免费av一区二区 | 亚洲精品久久久久久 | 波多野结衣视频网站 | 中文字幕第一页在线播放 | 欧美色悠悠| 欧美激情xxx | 蜜桃久久久久久 | 性xxxx欧美老肥妇牲乱 | 日本泡妞视频 | 久久精品国产清自在天天线 | 丰满人妻在公车被猛烈进入电影 | 成年免费视频黄网站在线观看 | 久久五月综合 | 国产午夜精品一区二区三区四区 | 久久久久三级 | 国产在线麻豆精品观看 | 亚洲综合日韩在线 | 久久久久久亚洲精品 | 欧美日韩网址 | 九九视频这里只有精品 | 日韩丰满少妇无码内射 | av网站亚洲| 亚洲电影中文字幕 | 国产91色| 美女综合网 | 亚洲中文字幕无码一区二区三区 | 国产一区二区视频在线免费观看 | 黄色在线视频观看 | 国产一区二区精品在线 | √天堂8资源中文在线 | 久综合| 成人免费视频网址 | 欧美日本另类 | 性a视频| 精品人妻一区二区三区浪潮在线 | 成人亚洲综合 | 一级做a爱片久久 | 在线观看一二区 | 欧美性猛交xxxx乱大交 | 天天干天天添 | 在线www| 亚洲色图第一页 | 国产乱人乱精一区二视频国产精品 | 91精品国产一区二区在线观看 | 欧美日韩免费一区 | 国语播放老妇呻吟对白 | 国产高潮在线观看 | 小sao货水好多真紧h无码视频 | 无码人妻精品一区二区三区不卡 | av国产网站| 色热热| av中文字幕一区二区三区 | 午夜吃瓜| 亚洲一卡二卡在线 | 91极品在线 | 久久精品免费 | 日韩二区三区四区 | 日韩一区二区三区不卡视频 | www.夜夜骑| 婷婷色在线 | 天天躁狠狠躁狠狠躁夜夜躁68 | 用力挺进新婚白嫩少妇 | 天天干夜夜爽 | 奇米影视第四色777 波多野结衣一区二区三区免费视频 | 色丁香综合 | 久久男人的天堂 | 长河落日电视连续剧免费观看01 | 九色视频偷拍少妇的秘密 | 精品人妻伦九区久久aaa片 | 欧美系列一区二区 | 午夜影院免费视频 | 日韩在线www | 双性人做受视频 | 日韩av电影在线播放 | 国产极品美女高潮无套在线观看 | 久久免费看片 | 亚洲视屏一区 | 亚洲天堂av在线播放 | 国产亚洲精品成人 | 三级全黄做爰龚玥菲在线 | 日韩中文字幕第一页 | 久久一本综合 |