【添加前的准备工作】
0.开发平台
  CPU是rk3568,android12系统
1.进入开发包目录
  cd xxx
2.配置编译环境
  source javaenv.sh
  source build/envsetup.sh
  lunch rk3568_s-userdebug
3.全编译 ./build.sh -AUCKu
  android编译至少需要16GB以上的物理内存,第1次编译完成,需要很长时间(耗时7,8个小时);后面再编译需要的时间会短很多(耗时1,2个小时)。有时编译不通过,仅仅是因为编译过程中多线程编译引起的问题,与工程本身无关,多编译几次试试。
4.确保工程编译通过后,才进行下面的工作

【涉及到的文件】
1.\kernel-4.19\arch\arm64\boot\dts\rockchip\rk3568-evb2-lp4x-v10.dtsi
2.\device\rockchip\common\BoardConfig.mk
3.\kernel-4.19\drivers\input\sensors\sensor-dev.c
4.\kernel-4.19\include\linux\sensor-dev.h
5.\kernel-4.19\drivers\input\sensors\accel\Kconfig
6.\kernel-4.19\drivers\input\sensors\Kconfig
7.\kernel-4.19\drivers\input\sensors\accel\Makefile
8.\kernel-4.19\arch\arm64\configs\rockchip_defconfig
9.在\kernel-4.19\drivers\input\sensors\accel文件夹下增加da380b驱动文件夹

【修改步骤】
1.DTS
在文件\kernel-4.19\arch\arm64\boot\dts\rockchip\rk3568-evb2-lp4x-v10.dtsi中,增加g-sensor对应的I2C5,注意这个I2C5不止接加速度,还接了其它,是共享I2C总线
&i2c5 {
        status = "okay";

        gsensor: gsensor@27 {
                status = "okay";
                compatible = "gsensor_da380b";
                reg = <0x27>;
                irq-gpio = <&gpio3 RK_PC1 IRQ_TYPE_EDGE_FALLING>;
                irq_enable = <0>;
                poll_delay_ms = <30>;
                type = <SENSOR_TYPE_ACCEL>;
                layout = <1>;
        };
};
注意:
(1)在rk3568-evb2-lp4x-v10.dtsi文件中需要搜索一下i2c5,看其它地方有没有配置,如果有需要去掉。
(2)rk3568-evb2-lp4x-v10.dtsi文件中还包含了rk3568.dtsi,rk3568-evb.dtsi,这两个文件也要搜一下i2c5,看有没有被配置,如果有需要去掉。

 
2.在文件\device\rockchip\common\BoardConfig.mk中,使能RK sensor的架构
BOARD_SENSOR_ST ?= true
BOARD_GRAVITY_SENSOR_SUPPORT ?= true

3.在文件\kernel-4.19\drivers\input\sensors\sensor-dev.c中,修改miscdev.name,使其与DTS中的一致
#sensor->miscdev.name = "mma8452_daemon";
sensor->miscdev.name = "gsensor_da380b";
4.在\kernel-4.19\drivers\input\sensors\accel文件夹下增加da380b的驱动程序,
~/worknewdisk/HST-Q-BT30/RKAndroid12/kernel-4.19/drivers/input/sensors/accel/
增加文件\da380b\da380b.c,涉及到名字的地方使用gsensor_da380b
增加文件\da380b\da380b_core.c
增加文件\da380b\da380b_core.h
增加文件\da380b\Makefile
5.在\kernel-4.19\include\linux\sensor-dev.h中,加入如下定义
    ACCEL_ID_DA228E,
    
        ACCEL_ID_DA380B,
6.在\kernel-4.19\drivers\input\sensors\Kconfig
~/worknewdisk/HST-Q-BT30/RKAndroid12/kernel-4.19/drivers/input/sensors
    menuconfig SENSOR_DEVICE
    
        tristate "handle angle,accel,compass,gyroscope,lsensor psensor etc"
    
        default y
7.在\kernel-4.19\drivers\input\sensors\accel\Kconfig

(1) menuconfig GSENSOR_DEVICE
        tristate "g_sensor device support"
    
        default y

(2) config GS_DA380B
    
        tristate "gsensor da380b"
    
        default y
    
        help
      
          To have support for your specific gsesnor you will have to
      
          select the proper drivers which depend on this option.

8.在\kernel-4.19\drivers\input\sensors\accel\Makefile
~/worknewdisk/HST-Q-BT30/RKAndroid12/kernel-4.19/drivers/input/sensors/accel
    obj-$(CONFIG_GS_DA380B)        += da380b/
9.在\kernel-4.19\arch\arm64\configs\rockchip_defconfig
    CONFIG_GS_SC7A30=y
    CONFIG_GS_DA380B=y

10.如果需要上电启动自动输出加速度传感器数据,需要在函数sensor_probe()中开启gsensor,即调用sensor_enable(sensor, SENSOR_ON);通常这个是由应用程序开启


【参考文件】

文件1:
https://codeleading.com/article/36472776320/
文件2:
https://www.cnblogs.com/crushgirl/p/14528245.html
文件3:
https://blog.csdn.net/qq_30624591/article/details/104517480?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167348632116782425177605%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167348632116782425177605&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-104517480-null-null.142^v70^control,201^v4^add_ask&utm_term=gsensor%20getevent%20-p%E6%B2%A1%E6%9C%89%E6%95%B0%E6%8D%AE&spm=1018.2226.3001.4187
文件4:
https://blog.csdn.net/zzb2760715357/article/details/125732405?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167348710516800180691255%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167348710516800180691255&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-125732405-null-null.142^v70^control,201^v4^add_ask&utm_term=gsensor_report_value%E6%B2%A1%E6%9C%89%E8%A2%AB%E8%B0%83%E7%94%A8&spm=1018.2226.3001.4187

【调试】
getevent -p  查看数据,可看到类似下面这样的数据输出

add device 2: /dev/input/event2
  name:     "gsensor"
  events:
    ABS (0003): 0000  : value 72, min -65536, max 65536, fuzz 0, flat 0, resolution 0
                0001  : value 3312, min -65536, max 65536, fuzz 0, flat 0, resolution 0
                0002  : value 15496, min -65536, max 65536, fuzz 0, flat 0, resolution 0
  input props:
    <none>
【gsensor驱动执行路径】
-->sensor_init()
-->sensor_class_init()
-->gsensor_da380b_probe()
-->sensor_register_device()
-->sensor_probe()
-->sensor_chip_init()
-->sensor_get_id()
-->sensor_initial()
-->sensor_init()
-->sensor_active()
-->sensor_irq_init()
-->sensor_misc_device_register()
-->sensor_enable()
-->sensor_active()


 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐