一,前提條件
- 全志使用的馬達配置為上電震動,下電停止,需測試硬件是否正常。
- 馬達供電最好為獨立供電,避免干擾。
二,適配步驟
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
一般排查到這里是可以正常使用的。