ChromeBook Pixel刷7.2无法启动,界面卡住的原因分析和解决方案

我在debian下面尝试了一下,然后结合chromiumos的相关文档,基本确定是这样子的:

首先,需要使用的驱动不在linux官方内核里面,在github上,有atmel公司的atmel-maxtouch专用驱动,下载他release的c文件,结合kernel的头文件,可以编译出新的atmel_mxt_ts.ko,这个驱动是可以用的,然后3.x和4.x的内核驱动代码是不同的。在这个公司的两个repo里面分别提供了。

接着,去chromiumos的repo里面找到overlay-link,里面有touch驱动需要的raw文件(就是cfg文件),复制到/lib/firmware里面去。(目前atmel-maxtouch的驱动只提供了一个maxtouch.cfg配置入口,所以驱动的代码是需要改一下比较合适的,另外最好经手一次maxtouch的studio,因为现在4.x内核会报告crc校验失败的,但可以用,应该是校验的算法变了)。当然了不修改驱动代码的话,普通linux里面也是可以跑的,需要提前update-cfg,将两个配置文件上传到驱动的NVRAM里面去就可以了,所以这个刷配置的部分只需要跑1次就可以,但是两个固件都要刷,都要叫maxtouch.cfg(不修改驱动代码的话)。刷完配置了以后,debian里面触摸屏和触摸板的功能就都有了,而且删除了cfg配置文件,重启系统也没有关系。

然后高潮部分是这样子的:7.2的内核版本有一个让人抓狂的部分:每次启动都会硬刷配置,但是7.2里面没有提供任何的配置,就刷全0上去了,于是触摸屏和触摸板的驱动就bug了,整个ui就挂掉了。以前的fydeos的内核版本因为从来不刷这个配置的,所以我们就莫名安全的过来了……

估计是因为内核升级,导致了linux官方驱动ko也升级了(因为我看了一下日志输出完全变掉了,不过还是必须maxtouch.cfg所以无法适配两个设备,而且硬件ID也换掉了规则,从原来的100x,200x,变成了200x和300x)。但是他们没有适配测试过ChromeBook Pixel

所以最后方案应该是这样子的:

  1. 修改驱动代码,根据硬件id决定刷配置的文件名,这样就支持两个配置了
  2. 结合内核代码,编译生成新的驱动ko文件
  3. 在/lib/firmware里面,把这两个配置cfg都放上去,随便他怎么刷配置都不会bug

因为手边没有fydeos的内核头文件,所以我先在debian上尝试了。过会儿我就去编译一个专门给fydeos用的,试试看这个方案,理论上应该没有什么问题。

后续有跟进的,我会post出来