Android Sensor詳解(3)porting drvier

kernel層porting

複製kernel driver file到相關目錄

將cm36xxx.c複製到 drivers/input/misc中
將cm36xxx.h,lightsensor.h,capella_cm3602.h複製到kernel/include/linux中

修改/arch/arm/boot/dts/qcom/下的dtsi問題

查看電路圖,看看driver它掛在什麼地方,然後找到spec看driver的i2c address。

提取信息如下:sensor掛在bus6上,i2c adress爲0x60,interrupt連接到SOC的gpio43上

因而我們可以修改相關的dtsi文件如下:

cm36xxx@60 {
         compatible = "capella,cm36xxx";
          reg = <0x60>;
          capella,slave_address = <0x60>;
          interrupt-parent = <&tlmm>; 
          interrupts = <43 0x2>;
          capella,intrpin-gpios = <&tlmm 43 0x2>;
           vio-supply = <&pm8953_l6>;
    };

這裏要注意:compatible要與kernel driver中的cm36xxx_match_table中的compatible一致

###修改makefile使能夠編譯driver
修改kernel/drivers/input/misc/Makefile

obj-$(CONFIG_SENSORS_CM36656) += cm36656.o

修改kernel/drivers/input/misc/Kconfig

config SENSORS_CM36xxx
tristate “CM36xxx optical sensor”
depends on I2C
default n
help
Say Y here to enable the CM36xxx Optical Sensor.

修改kernel/arch/arm64/configs/xxxx_defconfig

CONFIG_SENSORS_CM36xxx=y

修改相關權限

注意kernel driver中的misc的name

static const struct file_operations rgbsensor_fops = {
	.owner = THIS_MODULE,
	.open = rgbsensor_open,
	.release = rgbsensor_release,
	.unlocked_ioctl = rgbsensor_ioctl,
	.compat_ioctl = rgbsensor_ioctl,
};
static struct miscdevice rgbsensor_misc = {
	.minor = MISC_DYNAMIC_MINOR,
	.name = "asusRgbSensor",
	.fops = &rgbsensor_fops
};

注意:rgb使用32位的lib因而需要compat_ioctl

修改system/core/rootdir/ueventd.rc

/dev/lightsensor 0640 system system
/dev/proximitySensor 0640 compass system
/dev/asusRgbSensor 0640 system system

修改init.rc文件

on post-fs-data
chown system system /dev/proximitySensor
chmod 0660 /dev/proximitySensor
chown system system /dev/lightsensor
chmod 0660 /dev/lightsensor

HAL層porting

這個很簡單,只要在編譯的時候能夠load android.mk即可編譯
注意open的目錄名字與設備名字要相同

編譯改錯

一般廠商給的demo code在編譯時都會出一些錯誤,因而需要我們BSP進行修正。這邊會在後續的博客中解釋。

debug的一些方法

查看電是否porting正常

cd sys/kernel/debug/regulator/
找到用哪個電,然後cat consumers

查看I2C是否掛起

adb shell訪問/sys/class/i2c-adapter/i2c-X(X代表對應的I2C bus)目錄,確認已經建立了X-00yy(yy代表slave address)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章