? ? ? ?最近拿到一塊imx6ull板子,上面有一顆溫濕度傳感器sht30,需要讀取其數(shù)值。本人能力有限,自己寫驅(qū)動還有一點困難,好在?linux內(nèi)核里自帶了很多器件的驅(qū)動,只需要找到相關(guān)的驅(qū)動文件根據(jù)要求修改一下設(shè)備樹、添加進(jìn)內(nèi)核里編譯就可以。
? ? ? ? 目前新版本的linux都支持設(shè)備樹,剛開始我認(rèn)為只要找到內(nèi)核里的相關(guān)驅(qū)動文件,根據(jù)匹配表里的屬性添加好設(shè)備樹就可以了。萬萬沒想到,linux內(nèi)核自帶的sht3x驅(qū)動竟然不支持設(shè)備樹,支持直接name比對,那就只能根據(jù)要求添加i2c_board_info信息了。
? ? ? ? 內(nèi)核自帶的驅(qū)動文件是kernel/drivers/hwmon/sht3x.c,打開文件找到如下位置:
? ? ? ? 該驅(qū)動支持兩款溫濕度傳感器,我的板子上的是sht30,連接在i2c1接口,設(shè)備地址為0x44,所以添加i2c_board_info信息如下:
static struct i2c_board_info sht3x_i2c_board_info __initdata = {
I2C_BOARD_INFO("sht3x", 0x44),
};
? ? ? ? 光添加了i2c_board_info信息還不夠,還需要實例化i2c設(shè)備,根據(jù)sht3x驅(qū)動文檔kernel/Documentation/hwmon/sht3x.rst介紹,
????????實例化方法需要參考kernel/Documentation/i2c/instantiating-devices.rst文檔介紹,這個文檔里介紹了多種實例化i2c接口的方法,經(jīng)過測試有的方法不適用,我用了Method 2: Instantiate the devices explicitly。
????????需要在init函數(shù)中實例化,代碼如下:
static int __init sht3x_init(void)
{
int ret = 0;
struct i2c_adapter *adapter;
adapter = i2c_get_adapter(0);
i2c_new_client_device(adapter,&sht3x_i2c_board_info);
ret = i2c_add_driver(&sht3x_i2c_driver);
return ret;
}
? ? ? ? 支持設(shè)備驅(qū)動文件部分就修改好了,接下來就是如何讓這個驅(qū)動編譯到內(nèi)核了。打開驅(qū)動目錄下的Makefile文件,如下:
? ? ? ? 通過文件可以知道要想編譯sht3x驅(qū)動到內(nèi)核里就需要讓CONFIG_SENSORS_SHT3x編程y。所以有兩種方法:
????????1.修改makefile文件,直接將CONFIG_SENSORS_SHT3x改成y,然后make一下,用新生成的zImage文件啟動就可以了;
? ? ? ? 2.改配置文件,可以通過menuconfig修改
????????
????????選中SHT3x這個選項,保存后重新make,用新生成的zImage文件啟動就可以了。
????????或者打開.config文件進(jìn)行修改,修改如下:
? ? ? ? 保存退出后重新make,用新生成的zImage文件啟動就可以了。
好了,到此,SHT30驅(qū)動就添加成功了,可以直接通過hwmon進(jìn)行讀取數(shù)據(jù)了,文件在/sys/class/hwmon/,進(jìn)去后會發(fā)現(xiàn)里面會有hwmon0??hwmon1?hwmon2等文件
????????可以通過ls -l命令查看詳情,根據(jù)器件地址找到相應(yīng)的器件驅(qū)動對應(yīng)的文件,如下:
? ? ? ? 由上圖可以知道sht3x的驅(qū)動對應(yīng)的文件是hwmon1,進(jìn)入hwmon1文件里可以看到很多屬性文件,如下:
? ? ? ? 具體每一個屬性對應(yīng)的啥意思可以參考kernel/Documentation/hwmon/sht3x.rst具體介紹
? ? ? ? 可以通過cat指令一個一個參看相關(guān)屬性的數(shù)值。
? ? ? ? 溫度為29.362度。文章來源:http://www.zghlxwxcb.cn/news/detail-684264.html
? ? ? ? 其他的屬性自己去探索吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-684264.html
到了這里,關(guān)于linux添加sht3x溫濕度傳感器驅(qū)動記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!