1。歷史的車輪總是向前,技術更替。在linus 同學發出那句 wfk 後核心進入了裝置樹時代(站在驅動工程師角度)。
前幾天我已經被mach-imx 中的檔案折磨的夜不能眠。我終於在乙個清晨,喝完一杯咖啡後決定放棄蹩腳的傳統device描述方式。
這裡我先不討論核心實現流程的源**,簡單描述下語法,和我的第乙個test_platform_device
裝置樹檔案 arch\arm\boot\dts 在修改dst檔案後要make dtbs,
這篇文章可以惡補下裝置書的基礎
如圖是乙個完整節點
documentation\devicetree\bindings 資料夾中有很多的樣例可以供開發人員參考
2。 我的測試
我在我的裝置樹中新增如下**(這裡我把乙個ds18b20做成platform裝置,僅僅為了練習)
my-ds18b20 ;
我ds18b20使用的是gpio2_3 管腳。
這裡的gpios = ; 在 imx6qdl.dtsi 檔案中定義
然後執行 # make dtbs
生成的dtbs檔案在dts檔案同一目錄,燒寫 核心 和 dtbs 檔案
編寫ds18b20的driver 端(為了使結構簡單明瞭,我遮蔽了其他**,留下了骨架)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static
int ds18b20_probe(struct platform_device *pdev)
static
int ds18b20_drv_remove(struct platform_device *pdev)
static
const
struct of_device_id ds18b20_of_matches = , //和dts檔案中名字匹配
};module_device_table(of, ds18b20_of_matches);
static
struct platform_driver ds18b20_driver = ,
.probe = ds18b20_probe,
.remove = ds18b20_drv_remove,
};module_platform_driver(ds18b20_driver);
module_license("gpl");
編譯,拷貝,載入模組
/************************以下為完全測試*************************/
成功獲取到溫度,有個小bug就是第一獲取時溫度有問題
以下是完全**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int ds18_gpio = -1;
#define gpio_ds18b20 ds18_gpio
#define ds18b20_io_up gpio_set_value(gpio_ds18b20, 1)
#define ds18b20_io_down gpio_set_value(gpio_ds18b20, 0)
#define ds18b20_out gpio_direction_output(gpio_ds18b20, 1)
#define ds18b20_in gpio_direction_input(gpio_ds18b20)
static
void ds18_write(uint16_t data )
else
}}static uint8_t ds18_read(void) //讀位
else
udelay(45);
return data;
}static uint8_t ds18_reads(void)
static uint8_t ds18_reset(void)
printk("reset fail \n");
return -1;
}static
long ds18b20_ctl(struct file * file,unsigned
int cmd,unsigned
long num)
return
0; error1:
printk("read error \n");
return -1;
}struct file_operations ds18b20_fops = ;
struct miscdevice ds18b20_misc=;
static
int ds18b20_probe(struct platform_device *pdev)
re = ds18_reset(); //檢測是否存在
if (!re)else
return0;}
static
int ds18b20_drv_remove(struct platform_device *pdev)
static
const
struct of_device_id ds18b20_of_matches = ,
};module_device_table(of, ds18b20_of_matches);
static
struct platform_driver ds18b20_driver = ,
.probe = ds18b20_probe,
.remove = ds18b20_drv_remove,
};module_platform_driver(ds18b20_driver);
module_license("gpl");
react 路由巢狀3 x版本
路由巢狀 在乙個路由中載入多個子路由 1 在主入口路由檔案引入子路由 2 將子路由放入對應的父路由內,且子路由名稱是在父路由名字基礎上追加,否則跳轉時會因跳轉路徑問題報錯 3 在父路由對應的元件內,新增link標籤設定跳轉,別忘了引入link 4 在父元件中新增 在 新增,子路由元件內容就顯示在 5...
python2 x和3 x的區別
這個星期開始學習python了,因為看的書都是基於python2.x,而且我安裝的是python3.1,所以書上寫的地方好多都不適用於python3.1,特意在google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查詢方便,也可以分享給想學習python的frie...
HttpClient4 X和3 X傳送資料
首先需要說明,httpclient4.x支援jdk1.5及以上,httpclient3.x支援1.5以下的。4.x和3.x的區別在於4.x的httpclient是乙個介面,3.x的httpclient是乙個類,4.x更多的是基於介面的實現方式。4.x需要jar httpclient 4.5.3.ja...