大家好,我是情报小哥~
在编译Linux系统的过程中,总容易遇到各种大大小小的问题,要么是某个编译选项设置不正确,编译器与编译源码不匹配,又或者是系统中没有安装相应的软件或者库等等。
然而这些问题运气不错网络上搜索一下即可搞定,然而遇到生僻一点的问题,那估计得把你折腾得半死,问题是还不一定弄得好。
好在这些成熟的组件或者系统源码在编译或者使用异常以后,或多或少都会输出一些信息,供程序员进行问题排查。
那么小哥下面就简单介绍一下最近遇到的tslib问题排查过程。
01
一个问题
在部署完tslib环境以后,其安装目录中会生成一些测试程序供用户使用,然而当我们运行相应的测试应用程序,却得到如下结果 :
表示环境变量中指定的设备,tslib库识别不出该设备为触摸设备。而这样的错误字符串的输出,一般都来源于源码,直接在tslib源码路径中进行搜索得到如下结果。(当然如果要进行详细的分析也可以使用VSCode等工具分析)
这里采用grep命令行对路径中的文件进行字符串的查找,grep主要是用于搜索匹配模板的行,默认情况下就是打印出来匹配的行。
-n选项表示:以行号作为前缀;
-R选项表示递归读取每级目录下的所有文件。
更加详细的使用说明就交给man grep了。
上面的输出结果,其字符串来源于input-raw.c文件的61行,看一下该文件输出该字符串的条件,并根据条件来进行判断和调试。
可以直接修改此部分的判断语句,进行调试,输出到底是那个条件导致无法满足。
通过调试可以了解到version==EV_VERSION条件不满足,一个是内核传入的,一个是编译器指定的。
通过同样的方式可以查到内核中的EV_VERSION的定义如下:
同样查找编译器中的EV_VERSION的定义如下:
两者确实是不同,所以导致运行tslib库报错,这里我们优先把内核中的EV_VERSION改成与编译器的一致,看是否能够解决该问题。
然后重新编译内核并进行烧录。
完成以后直接运行bin文件下的ts_print测试触摸屏驱动看是否正常,运行程序以后没有再输出之前的异常字符串,然后点击触摸屏,即可看到终端输出相应的坐标数据:
这样看来tslib初步测试和部署完成。
好了,这里小哥就介绍了一下tslib触摸库部署过程一个排查问题的基本过程,很多类似的问题也可以尝试这样排查,希望本文能够对你有帮助,本系列文件还会持续更新。
全部0条评论
快来发表一下你的评论吧 !