一,前提条件
- 全志使用的马达配置为上电震动,下电停止,需测试硬件是否正常。
- 马达供电最好为独立供电,避免干扰。
二,适配步骤
1. dts中增加马达配置
motor_para {compatible = "allwinner,sunxi-vibrator"; // 对应驱动中的 .compatiblemotor_used = <1>; // 标示使用motormotor_shake = <0>;status = "okay"; // 标示使能motormotor-supply = <®_ldoio1>; // 标示motor使用哪路电源motor_ldo_voltage = <3300>; // 标示motor的供电电压,单位mV};
2. 使能CONFIG_AW_VIBRATOR
在menuconfig中,使能CONFIG_AW_VIBRATOR
为m,然后执行./build.sh savecofig,保存配置。
3. 编译longon
编译完成后,在out目录可以可以找到相对应的马达驱动。
4. 增加驱动加载
Android方案支持,增加驱动加载,在对应方案中的init.input.rc中增加马达驱动的加载,并给予节点权限。
on bootinsmod /vendor/lib/modules/sunxi-vibrator.kochown system system /sys/class/vibrator/onchmod 0660 /sys/class/vibrator/on
5. 增加vibratorhal编译
在方案对应的mk文件中,增加如下语句:
# vibrator hal
PRODUCT_PACKAGES += \android.aw.hardware.vibrator-service
6. 添加selinux权限
- 配置hal服务的权限,在
device/softwinner/common/sepolicy/vendor/file_contexts
配置,默认已配置;
#vibrator
/vendor/bin/hw/android\.aw\.hardware\.vibrator-service u:object_r:hal_vibrator_default_exec:s0
- 配置节点权限类型,在 device/softwinner/common/sepolicy/vendor/genfs_contexts 配置,默认已配置;
#vibrator
genfscon sysfs /class/vibrator/on u:object_r:sysfs_vibrator:s0
三,调试
适配后,无法震动,请参考下列步骤进行调试。
1. 打开震动
在设置–>声音,中选择触摸时震动,打开;
2. 确定是否存在调试节点:
/sys/class/vibrator/on1.adb或者串口,通过手动写值的方式,进行调试,单位为ms,最小值为100,最大值为15000,看是否会震动;
2.如果不震动,检查写入值时,对应的电源配置引脚是否上电,如未上电,请检查配置是否正确,如震动,则说明linux相关是正常的
3. 触摸按钮,正常震动时,可看到logcat中的相关打印:
vibra_on: 200 //如有上述打印,则震动应正常。
//如果是类似下面的报错,则说明为节点权限问题
open /sys/class/vibrator/on failed, errno=%d(%s)\n
4. 解决办法:
- 通过ls -lZ查看节点权限是否配置为sysfs_vibrator。
console:/sys/class/vibrator # ls -lZ
total 0
-rw-r--r-- 1 root root u:object_r:sysfs_vibrator:s0 4096 2023-10-31 09:52 on
console:/sys/class/vibrator #
- selinux权限正常,则可通过ls -l查看系统权限是否正常,节点权限是否为system类型,660权限;
console:/sys/class/vibrator # ls -l
total 0
-rw-rw-r-- 1 system system 4096 2023-10-31 09:52 on
console:/sys/class/vibrator #
- 检查适配步骤中的init.input.rc是否正常修改权限,通过也可通过下列命令修改可访问权限后,再看是否OK。
chown system:system /sys/class/vibrator/on
chmod 660 /sys/class/vibrator/on
一般排查到这里是可以正常使用的。