日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux下IIC驅(qū)動開發(fā)實(shí)戰(zhàn)(linux的iic驅(qū)動)

隨著物聯(lián)網(wǎng)的飛速發(fā)展,IIC接口變得便捷而實(shí)用,在開發(fā)中他被用于地址和數(shù)據(jù)傳輸,使用IIC接口節(jié)省了線束,使系統(tǒng)更為緊湊、整潔,也更加容易維護(hù)。本文著重講述linux下IIC接口的驅(qū)動開發(fā)實(shí)戰(zhàn)。

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計、永州網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

1.準(zhǔn)備環(huán)境

在Linux下編寫內(nèi)核模塊,需要安裝Linux內(nèi)核源碼。筆者用的是Ubuntu 16.04作為操作系統(tǒng),內(nèi)核版本是4.13.0-45-generic,下載地址為:[https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.0/linux-headers-4.13.0-45_4.13.0-45.50~16.04.1_all.deb][1] 。

2.IIC驅(qū)動程序開發(fā)

由于本文是帶有實(shí)戰(zhàn)性質(zhì)的,接下來主要以實(shí)例驅(qū)動程序代碼將IIC功能實(shí)現(xiàn)。具體流程主要有以下幾步:

(1)需要在linux/I2C.h文件中定義好I2C_BOARD_INFO及其sub-struct結(jié)構(gòu)。

(2)在module初始化函數(shù)的開頭處調(diào)用I2C_BOARD_INFO來對系統(tǒng)進(jìn)行注冊。

(3)在函數(shù)中編寫I2C通訊相關(guān)的代碼,比如發(fā)送讀取寫入等操作。

內(nèi)部函數(shù)i2c_add_Driver及內(nèi)核函數(shù)register_chrdev定義在i2c.h文件,

以i2c_add_driver為例,其主要完成把I2C驅(qū)動注冊到Linux內(nèi)核中,此函數(shù)參數(shù)有:

(1)self_module:指向struct module的指針;

(2)i2c_driver:指向struct i2c_driver的指針,定義了驅(qū)動的功能。

(3)vi2c_client_register:注冊客戶端函數(shù),把驅(qū)動加入I2C_BOARD_INFO鏈表。

(4)最后通過register_chrdev函數(shù)注冊給系統(tǒng)。

可以把以上代碼合并成一段完整的驅(qū)動程序:

#include

#include

struct i2c_client *client;

//定義I2C_BOARD_INFO struct

static struct i2c_board_info MY_board_info = {

I2C_BOARD_INFO(“my_i2c_client”, 0x31),

};

static int __init i2c_dev_init(void)

{

//定義驅(qū)動struct

static struct i2c_driver my_driver = {

.driver = {

.name = “my_i2c_client”,

},

.probe = my_i2c_probe, // 驅(qū)動probe函數(shù)

.remove = my_i2c_remove, // 驅(qū)動remove函數(shù)

};

i2c_add_driver(&my_driver); // 注冊驅(qū)動

client = i2c_new_device(client->adapter, &my_board_info);

register_chrdev(0, DEVICE_NAME, &my_fops); // 注冊字符設(shè)備

return 0;

}

static void __exit i2c_dev_exit(void)

{

i2c_unregister_device(client); //卸載I2C_BOARD_INFO,并釋放內(nèi)存

i2c_del_driver(&my_driver); // 釋放驅(qū)動

unregister_chrdev(0, DEVICE_NAME); // 釋放字符設(shè)備

printk(“exit!\n”);

}

module_init(i2c_dev_init);

module_exit(i2c_dev_exit);

3.驅(qū)動開發(fā)測試

驅(qū)動開發(fā)完成后,需要檢測系統(tǒng)加載的模塊是否可用,以及客戶端的使用情況,具體可以輸入’lsmod’檢測模塊狀態(tài);輸入’i2cdetect’檢測客戶端狀態(tài);輸入’i2cget’測試客戶端的設(shè)備地址和數(shù)據(jù)的讀取狀態(tài);輸入’i2cset’測試數(shù)據(jù)的寫入狀態(tài)。

也可以通過通訊包捕獲分析工具查看I2C之間的信號來驗(yàn)證設(shè)備的正確性。此外,如果非要檢查函數(shù)層面,可以使用GDB在內(nèi)核環(huán)境調(diào)試,以驗(yàn)證各個函數(shù)、變量等的定義及傳參情況是否正確。

以上就是本文著重講解的Linux下IIC接口驅(qū)動開發(fā)實(shí)戰(zhàn)流程。通過以上實(shí)例帶入,可以更加方便快捷地完成IIC功能的驅(qū)

成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。


分享名稱:Linux下IIC驅(qū)動開發(fā)實(shí)戰(zhàn)(linux的iic驅(qū)動)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dhgicio.html