序言
由于 windows 太卡,索性把平板换成 manjaro 系统,导致触摸屏无法使用(虽然大概率用不到,但强迫症不舒服)
苦寻许久终于找到解决方案 gsl-firmware
设备信息
- 主板:H8811
- 屏幕:显示分辨率 1280x800,10.1 英寸屏幕
- 内存:DDR3 4GB
- 磁盘:eMMC 64GB
- CPU:Intel Cherry Trail X5-Z8350 1.44GHz
准备驱动
从 github 拉取 gsl-firmware, 并进入工具目录
bash
git clone https://github.com/onitake/gsl-firmware.git
cd gsl-firmware/tools
INFO
可能会生成多个固件文件,格式为 firmware_00.fw, firmware_01.fw… ,须要一一进行测试才能找到适合的正确文件
安卓系统可以在 /system/vendor/modules 目录下找到 gslX680.ko 文件。
bash
./fw_extractor gslX680.ko
windows 系统可以在 C:\Windows\System32\drives 找到 SileadTouch.sys 文件或者官网下载驱动。
bash
# 通过GSL_TS_CFG.h获取
./untscfg GSL_TS_CFG.h firmware.fw
# 通过SileadTouch.fw获取
./unscramble SileadTouch.fw firmware.fw
# 通过SileadTouch.sys获取
./scanwindrv SileadTouch.sys
安装驱动
silead_ts 需要重新编译内核,这里为了方便没有编译
使用命令 dmesg | grep silead_ts 查看 silead_ts 模块加载日记
可以看到 silead_ts 模块尝试加载 (/lib/firmware/) silead/mssl1680.fw 失败, error -2
说明文件不存在
bash
dmesg | grep silead
# Output:
# [ 7.238457] silead_ts i2c-MSSL1680:00: supply vddio not found, using dummy regulator
# [ 7.238596] silead_ts i2c-MSSL1680:00: supply avdd not found, using dummy regulator
# [ 7.239017] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000
# [ 7.384785] silead_ts i2c-MSSL1680:00: Direct firmware load for silead/mssl1680.fw failed with error -2
# [ 7.384802] silead_ts i2c-MSSL1680:00: Firmware request error -2
# [ 7.571823] silead_ts: probe of i2c-MSSL1680:00 failed with error -2
把步骤二得到的 firmware.fw 复制到 /lib/firmware/silead 并重命名为 mssl1680.fw ,如果目录不存在需要创建目录。
bash
mkdir /lib/firmware/silead
cp firmware.fw /lib/firmware/silead/mssl1680.fw
使用 modprobe 命令重新加载 silead_ts 模块
bash
modprobe -r silead
modprobe silead
从 github 拉取 gslx680_ts_acpi 源码编译安装
bash
git clone https://github.com/onitake/gslx680-acpi.git
cd gslx680-acpi
make && make install
# make uninstall 卸载命令
将步骤二获取的 firmware.fw 转换为特殊紧凑格式的固件,并安装该固件
bash
./fwtool -c firmware.fw -m 1680 -w 1280 -h 800 -t 10 silead_ts.fw
cp silead_ts.fw /lib/firmware
# Usage: fwtool {
# -i <new_firmware.fw> |
# -x <new_firmware.fw> <firmware.fw> |
# (-c [<firmware.fw> -1|<GSL_TS_CFG.h> -2|<SileadTouch.fw> -3] | -s ) [-m <controller_model>] [-w <width>] [-h <height>] [-t <num_touches>] [-f <flags>] <new_firmware.fw>
# }
# -i 打印新型固件的信息
# -c 将旧的固件格式转换为新型固件格式
# -s 设置新型固件参数和标志
# -x 新型固件格式转换回旧的固件格式
#
# -1 Plain firmware, as used with the Android driver (默认)
# -2 Windows GSL_TS_CFG.h firmware
# -3 Scrambled Windows SileadTouch.fw firmware
# -m 设置芯片型号(4字节ASCII字符串,例如:1680)
# -w 设置宽度参数(分辨率)
# -h 设置高度参数(分辨率)
# -t 设置支持的触点数量参数
# -f 设置标志,用逗号分隔(可选,支持的标志: xflip, yflip, swap, track)
# xflip 开启水平翻转
# yflip 开启垂直翻转
# swap xy轴交换
# track 启用手指跟踪(用于不支持的芯片)
# (每个标志都可以加上'no'前缀以禁用它(noxflip, noyflip, noswap, notrack))
使用 modprobe 命令重新加载 gslx680_ts_acpi
bash
modprobe -r gslx680_ts_acpi
modprobe gslx680_ts_acpi
遇到的问题
- 不知道什么原因,一旦屏幕旋转校准信息就会丢失
- HOME 键无法使用