【轉】Android(4.2) Sensors 學習——G-sensor,Gyroscope驅動移植

來源:互聯網
上載者:User

標籤:

原文網址:http://blog.csdn.net/nxh_love/article/details/11804841

本人對驅動可謂是一點不懂,鑒於公司目前高驅動的人手不夠,所以我也只能兩眼一抹黑硬上咯,最原來Android 4.1上的正常使用的驅動完整的移植到Android 4.2上。這篇檔案講記錄自己一步一步移植過程,已備不時之需。在移植前,先來高明白android 支援那些Sensors,即Sensors種類和功能。

Sensors 種類和功能

從Android 官方的API可以找到Android 支援的sensor類型如下:

 

類型 描述
ACCELEROMETER  (加速度感應器)   又名G-sersor,偵測物體的加速度,利用裝置內配置的兩個電容點,並在電容點之間放置一個導電且可晃動物質,通過偵測導電物質的移動改變電容點間的電壓,藉此計算感應器的狀態。
 GRAVITY
(重力感應器)
又名GV-sensor
   GYROSCOPE
  (陀螺儀感應器)
又名Gyro-sensor角速度器,利用內部震動機械結構偵測物體轉動所產生的角速度,進而計算出物體移動的角度。偵測水平改變的狀態,但無法計算移動的激烈程度。
    LIGHT
(光線感應器)
偵測光線的強弱
MAGNETIC_FIELD
(磁力感應器)
又名M-sensor。
PRESSURE
(壓力感應器)
返回當前的壓強。
PROXIMITY
(距離感應器)
偵測物體與感應器之間的距離。
HUMIDITY
(濕度感應器)  
返回當前的濕度                                                                                             
ROTATION
(方向感應器)
又名O-sensor
TEMPERATURE
(溫度感應器)
返回當前的溫度

       以上加速度感應器,重力感應器,陀螺儀感應器,光線感應器 是Android中最長用的Sensor了。下面介紹下G-sensor,Gyroscope驅動的移植。

 

G-sensor驅動code 

       通過諮詢硬體同事,知道我們當前用的G-sensor是LSM303D,Gyroscope是L3GD2。接下來按照這兩個關鍵grep尋找。結果找到如下的驅動相關的檔案:

[html] view plaincopy 
  1. kernal_path/drivers/misc/lsm303d.c  
  2. kernal_path/drivers/misc/l3gd20_gyr.c  
  3. kernal_path/include/linux/i2c/l3gd20.h  
  4. kernal/include/linux/input/lsm303d.h  

限於對公司負責的態度,給出相對的檔案路徑。接下來肯定要修改Makefile:

kernal_path/drivers/misc/Makefile:

[html] view plaincopy 
  1. obj-$(CONFIG_SENSORS_LSM303D)   += lsm303d.o  
  2. obj-$(CONFIG_ST_L3GD20_GYR) += l3gd20_gyr.o  

修改Kconfig:

kernal_path/drivers/misc/Kconfig:

[html] view plaincopy 
  1. config SENSORS_LSM303D  
  2.         tristate "LSM303 sensor driver"  
  3.        depends on I2C=y  
  4.         help  
  5.           Say yes here to support the sensor  
  6. config ST_L3GD20_GYR  
  7.         tristate "L3GD20_GYR gyroscope sensor support"  
  8.         depends on I2C=y  
  9.         help  
  10.           If you say yes here you get support for ST‘s  
  11.           gyroscope sensors L3GD20_GYR.  

關於Makefile中CONFIG_SENSORS_LSM303D,CONFIG_ST_L3GD20_GYR它是編譯產生.config中讀取的。關於Makefile,Kconfig,.config請參見Kconfig,Makefile 和 .config 。找到編譯產生.config的原設定檔defconfig。
修改defconfig:

kernal_path/configs/XXX_defconfig:

[html] view plaincopy 
  1. CONFIG_SENSORS_LSM303D=y  
  2. CONFIG_ST_L3GD20_GYR=y  

註冊I2C:

上面Kconfig中提到depends on I2C =y,它既然依賴I2C,那肯定需要讓I2C知道的它的存在,現向I2C註冊LSM303D,L3GD2資訊。

[html] view plaincopy 
  1. #ifdef CONFIG_SENSORS_LSM303D  
  2.         {  
  3.                 I2C_BOARD_INFO("lsm303d",  0x1d),  
  4.         },  
  5. #endif  
  6. #ifdef CONFIG_ST_L3GD20_GYR  
  7.         {  
  8.                 I2C_BOARD_INFO("l3gd20_gyr",  0x6a),  
  9.         },  
  10. #endif  

這裡面的0x1d,0x6a是I2C中註冊的節點。關於這點,我們後面在細說(注1-1)。

 

G-sensor HAL

這一部分直接從android4.1 copy到android 4.2,路徑放在hardware/sensors/ST_lsm303d/,查看它的Makefile發現它最後編譯產生一個sensor.so的檔案,存在在system/lib/hw中以供上層條用。要把這個sensor.so包含到img檔案中,需要在

 

[html] view plaincopy 
  1. PRODUCT_PACKAGES += \  
  2.         sensors.amlogic  

 

這裡提出如下兩個檔案:

hardware/sensors/ST_lsm303d/AccSensor.cpp

hardware/sensors/ST_lsm303d/GyroSensor.cpp

開啟後有個宏定義:

[html] view plaincopy 
  1. <pre name="code" class="html">#define INPUT_SYSFS_PATH_ACC "/sys/devices/i2c-1/1-001d/accelerometer/"  
  2. #define INPUT_SYSFS_PATH_GYRO "/sys/devices/i2c-1/1-006a/"</pre>  

這裡有1-001d,1-006a,關於這點,我們後面在細說(注1-2)。
sensor許可權

從上面兩個宏定義可以看出,它要訪問的sys/devices/i2c-1/的檔案,那就需要給它一個許可權啦。在init.rc中改變這兩個檔案的許可權:

[html] view plaincopy 
  1. chmod 0666 /dev/mpu  
  2. chmod 0666 /dev/mpuirq  
  3. chmod 0666 /dev/timerirq  
  4.   
  5. chown system system /sys/devices/i2c-1/1-001d/magnetometer/pollrate_us  
  6. chown system system /sys/devices/i2c-1/1-001d/accelerometer/enable_device  
  7. chown system system /sys/devices/i2c-1/1-001d/accelerometer/pollrate_us  
  8. chown system system /sys/devices/i2c-1/1-001d/magnetometer/enable_device  
  9.   
  10. chown system system /sys/devices/i2c-1/1-006a/pollrate_ms  
  11. chown system system /sys/devices/i2c-1/1-006a/enable_device  
  12. chown system system /sys/devices/i2c-1/1-006a/range  
  13. chown system system /sys/devices/i2c-1/1-006a/enable_polling  

在這裡也提到了1-001d,1-006a,關於這點,後面在細說(注1-3)。

在進行Android CTS測試時,會有sensor的features項目。這時也需要配置些檔案:

[html] view plaincopy 
  1. PRODUCT_COPY_FILES += \  
  2.         frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml  
  3.        frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \  
  4.        frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \  

 

它不僅是Android CTS feature,同時也決定這運行於此平台上APPS有沒有這些相關的許可權。開啟檔案android.hardware.sensor.accelerometer.xml:

[html] view plaincopy 
  1. <!-- Feature for devices with an accelerometer sensor. -->  
  2. <permissions>  
  3.     <feature name="android.hardware.sensor.accelerometer" />  
  4. </permissions>  
注1-1,注1-2,注1-3

       這三個地方的1-001d,1-006a必須一樣。否則sensor沒功能。至於1-001d,1-006a這個值是怎麼來的,暫時還不知道。

【轉】Android(4.2) Sensors 學習——G-sensor,Gyroscope驅動移植

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.