資源描述:
《android系統(tǒng)之sensor學(xué)習(xí)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、android系統(tǒng)之sensor學(xué)習(xí)Sensor作為Android系統(tǒng)的一個輸入設(shè)備,對Android設(shè)備來說是必不可少的。Sensor主要包括G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等。這里主要對G-Sensor模塊進(jìn)行解析。我的平臺是AML8276,android系統(tǒng)是4.0.4,kernel是3.0,所用的gsensor是kionix_accel;整個sensor的工作包括driver,HAL,framework(c/c++,java)和application層;首先我們從驅(qū)動driver開始,然后一
2、層層向上看;一,驅(qū)動層在驅(qū)動層,內(nèi)核需要增加和修改的部分包括:???1,相應(yīng)硬件模塊驅(qū)動代碼,包括兩個文件,這里是kionix_accel.h,?kionix_accel.c,分別將kionix_accel.h放到kernel/common/customer/include/linux/中,將kionix_accel.c放到kernel/customer/drivers/misc/中;???2,編譯目錄(kernel/customer/drivers/misc/)下的Makefie和KConfig,在KConfig中增加:?????configSENSORS_KXTJ2???
3、??????tristate"KXTJ2accelerometersensordriver"?????????dependsonI2C????help?????SayyesheretosupportKionix'sKXTJ2accelerometersensor?????在MakeFile下增加:obj-$(CONFIG_SENSORS_KXTJ2)????+=kionix_accel.o????3,在平臺編譯配置文件中(也就是makemenuconfig生成的),增加:CONFIG_SENSORS_KXTJ2=y------->指定編譯到內(nèi)核中,如果是m則編譯成ko;???
4、4,在平臺模塊代碼文件中(kernel/customer/boards/board-m6g17-t069.c),在相應(yīng)的i2c配置中,增加此模塊:staticstructi2c_board_info__initdataaml_i2c_bus_info_b[]={........#ifdefCONFIG_SENSORS_KXTJ2????{?????????I2C_BOARD_INFO("kionix_accel",?KIONIX_ACCEL_I2C_ADDR),?????????//.irq=INT_GPIO_1,?????????.platform_data=(void*)
5、&kionix_accel_pdata,????????},#endif}?經(jīng)過以上幾步操作以后,就可以將此模塊驅(qū)動編譯到內(nèi)核中。G-sensordriver工作的大致流程:系統(tǒng)開機(jī)后,內(nèi)核會先加載i2c總線驅(qū)動,然后再加載設(shè)備驅(qū)動,在設(shè)備驅(qū)動中的init函數(shù)中通過調(diào)用i2c_add_driver(&kionix_accel_driver)注冊i2c_driver;此函數(shù)將driver注冊到i2c_bus_type的總線上,此總線的匹配規(guī)則是利用i2c_client的名稱和i2c_driver中id_table中的名稱作匹配。其中i2c_client是系統(tǒng)自動創(chuàng)建的,boar
6、d-m6g17-t069.c文件中的結(jié)構(gòu)變量staticstructi2c_board_info__initdataaml_i2c_bus_info_b中需要添加G-sensor的設(shè)備信息。當(dāng)匹配成功時,i2c_driver中的probe()函數(shù)開始執(zhí)行。module_init(kionix_accel_init)---->i2c_add_driver(&kionix_accel_driver)----->staticstructi2c_driverkionix_accel_driver={????.driver={?????????.name????=KIONIX_ACCE
7、L_NAME,?????????.owner????=THIS_MODULE,????},????.probe?????????=kionix_accel_probe,????.remove?????????=__devexit_p(kionix_accel_remove),????.id_table????=kionix_accel_id,};Probe()函數(shù)kionix_accel_probe()主要完成以下功能:1.從i2c_client結(jié)構(gòu)中得到初始化信息2.創(chuàng)建G-sensor的工作隊(duì)列2.