亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 7083 | 回復(fù): 15
打印 上一主題 下一主題

請(qǐng)問(wèn)Linux下I2C設(shè)備驅(qū)動(dòng)該如何寫? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-08-05 15:36 |只看該作者 |倒序?yàn)g覽
我想寫一個(gè)Linux下的I2C設(shè)備驅(qū)動(dòng),基于系統(tǒng)中現(xiàn)有的I2C子系統(tǒng),采用probe的方式來(lái)實(shí)現(xiàn),請(qǐng)問(wèn)此類代碼是采用什么樣的一種固定框架?我看了內(nèi)核中一些設(shè)備的代碼,覺(jué)得很復(fù)雜,而我只是想實(shí)現(xiàn)很簡(jiǎn)單的功能;網(wǎng)上也查了一些資料,但并沒(méi)有找到詳細(xì)敘述。
目前我的代碼如下:
  1. static const struct i2c_device_id dm2016_ids[] =
  2. {
  3.     {"dm2016", 0},
  4.     {/* END OF LIST */}
  5. };
  6. MODULE_DEVICE_TABLE(i2c, dm2016_ids);


  7. struct dm2016_data {
  8.     struct i2c_client *client;
  9. };

  10. static int __devinit dm2016_probe(struct i2c_client *client, const struct i2c_device_id *id)
  11. {
  12.     struct dm2016_data *pstDM2016Data = NULL;
  13.     struct device *pstDev = &client->dev;
  14.     int s32Ret = 0;

  15.     pstDM2016Data = kzalloc(sizeof(*pstDev), GFP_KERNEL);
  16.     if (NULL == pstDM2016Data)
  17.     {
  18.         dev_err(pstDev, "alloc dm2016 data memory fail!\n");
  19.         return -ENOMEM;
  20.     }

  21.     pstDM2016Data->client = client;
  22.     i2c_set_clientdata(client, pstDM2016Data);


  23.     dev_info(pstDev, "create dm2016 client OK!\n");
  24.     return 0;
  25. }

  26. static int __devexit dm2016_remove(struct i2c_client *client)
  27. {
  28.     struct dm2016_data *pstDM2016Data = i2c_get_clientdata(client);

  29.     kfree(pstDM2016Data);

  30.     return 0;
  31. }


  32. static struct i2c_driver dm2016_driver = {
  33.     .driver = {
  34.         .name = "dm2016",
  35.         .owner = THIS_MODULE,
  36.     },
  37.     .probe = dm2016_probe,
  38.     .remove = __devexit_p(dm2016_remove),
  39.     .id_table = dm2016_ids,
  40. };

  41. static int __init dm2016_init(void)
  42. {
  43.     return i2c_add_driver(&dm2016_driver);
  44. }

  45. static void __exit dm2016_exit(void)
  46. {
  47.     i2c_del_driver(&dm2016_driver);
  48. }
復(fù)制代碼
我想為設(shè)備定義自己的讀寫函數(shù)以及類似ioctl這樣的操作,請(qǐng)問(wèn)我在dm2016_probe函數(shù)中要做哪些操作?還有結(jié)構(gòu)體dm2016_data需要哪些成員?
謝謝!

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2013-08-06 17:20 |只看該作者
要簡(jiǎn)單的就不用i2c框架,用misc或一般的udev就可以了
qq: 2379374402
群:163617970

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-08-06 22:56 |只看該作者
wwxxxxll 發(fā)表于 2013-08-06 17:20
要簡(jiǎn)單的就不用i2c框架,用misc或一般的udev就可以了
qq: 2379374402
群:163617970

我本來(lái)也是想用misc的,可是發(fā)現(xiàn)內(nèi)核中現(xiàn)有的i2c讀寫接口函數(shù)參數(shù)都是struct i2c_client *client,這如果不用i2c子系統(tǒng)就不好搞吧。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-08-07 10:39 |只看該作者
本帖最后由 wwxxxxll 于 2013-08-07 10:41 編輯

回復(fù) 3# 蟲蟲2003


我就是用misc寫的i2c和spi和加速度傳感器通訊,也用misc寫過(guò)1-wire與ds18b20通訊
沒(méi)有什么不好搞的
寫usb或網(wǎng)卡的話就必須用系統(tǒng)提供的模型了
有興趣加入我們的群。歡迎每一位linux驅(qū)動(dòng)同好加入!

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-08-07 14:19 |只看該作者
wwxxxxll 發(fā)表于 2013-08-07 10:39
回復(fù) 3# 蟲蟲2003


能否給一個(gè)簡(jiǎn)單的示例代碼或框架?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-08-08 10:01 |只看該作者
這是用i2c和spi與重力加速度模塊通信,i2c和spi是用gpio模擬的,在hi3515平臺(tái)上
我把i2c和spi寫成模塊不是設(shè)備驅(qū)動(dòng),
然后用cdev寫個(gè)重力加速度模塊的設(shè)備驅(qū)動(dòng)模塊,然后用一個(gè)宏選擇調(diào)用i2c或spi。
若想深入交流,請(qǐng)加我!

i2c_spi.rar

6.45 KB, 下載次數(shù): 127

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2013-08-09 22:12 |只看該作者
wwxxxxll 發(fā)表于 2013-08-08 10:01
這是用i2c和spi與重力加速度模塊通信,i2c和spi是用gpio模擬的,在hi3515平臺(tái)上
我把i2c和spi寫成模塊不是 ...


謝謝你提供的代碼,海思的平臺(tái)我也搞過(guò)幾個(gè),包括3515,上面的i2c設(shè)備驅(qū)動(dòng)我也做過(guò),它的i2c驅(qū)動(dòng)接口還是比較簡(jiǎn)單的,像
  1. i2c_write(unsigned char devaddress, unsigned char address, unsigned char data)
復(fù)制代碼
這樣,直接提供設(shè)備地址、寄存器地址、數(shù)據(jù)就行了,最終就是利用讀寫接口函數(shù)完成結(jié)構(gòu)體file_operations中的一系列函數(shù)。但是我現(xiàn)在做的這個(gè)是Linux標(biāo)準(zhǔn)內(nèi)核下的i2c設(shè)備驅(qū)動(dòng),而內(nèi)核i2c提供的讀寫接口都是這樣的
  1. s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command, u8 length, const u8 *values)
復(fù)制代碼
我要想調(diào)用這些函數(shù)就得先得到*client,而這就必須使用probe方式,也就是我問(wèn)題中那種代碼框架?墒俏椰F(xiàn)在既不知道probe函數(shù)里面要做什么事情,也不知道在哪里實(shí)現(xiàn)像file_operations中read、write、ioctl這類設(shè)備讀寫函數(shù)。不知你是否明白我的意思。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2013-08-10 22:53 |只看該作者
可以在probe里注冊(cè)一個(gè)字符設(shè)備,然后實(shí)現(xiàn)read,write 等操作

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-08-11 02:26 |只看該作者
heyangya 發(fā)表于 2013-08-10 22:53
可以在probe里注冊(cè)一個(gè)字符設(shè)備,然后實(shí)現(xiàn)read,write 等操作


我想要實(shí)現(xiàn)復(fù)雜點(diǎn)的操作,就是類似ioctl,通過(guò)應(yīng)用層傳遞的參數(shù)來(lái)實(shí)現(xiàn)一個(gè)基于讀寫的復(fù)雜操作,不知有沒(méi)有。否則如果只有最簡(jiǎn)單的讀寫操作,那不是得把ioctl的工作放到應(yīng)用層去做?

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2013-08-11 09:25 |只看該作者
字符設(shè)備的操作函數(shù)集包括open,close,read,write,ioctl......你想干什么都可以
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP