问题背景
在我之前复刻智能家居项目时,发现无法使用触摸屏。当时面临诸多因素,如会不会是我的内核问题、设备树问题还是屏幕驱动问题等,当时我也只是看了一些基础课程刚上手,看着头大,于是选择取巧,用mgftool里的官方zImage和里面的设备树进行后续编程。项目完成后,对linux、设备树、驱动有了一定了解,现在回头解决这个问题。
解决过程
经过思考分三步骤探索
1、先了解触摸屏驱动和设备树如何联系起来(正点原子视频)
视频中提到,NXP 官方的 Linux 内核默认已经开启了 LCD 驱动 。 LCD内有显存(RAM),为了方便操作,提出了Framebuffer,通过操作Framebuffer来访问显存。linux设备树下会存在一个/dev/fbx。一般不会直接操作fb进行写,一般直接通过ui库进行。还提到evk,设备树应该搞eck那个。通过视频了解到之前我在测试时,碰到的lcd显示屏花屏是因为源码中设备树使用的是四寸屏幕,而我使用的是七寸屏幕,屏幕驱动的设备树是不一样的。
2、根据出厂内核,倒推出内核配置,检查是否是内核某些编译选项没有打开。
3、判断当初是设备树问题还是内核问题。
制定好思路,开始进行以下探索
1、先整一个纯净的设备树,然后添加LCD屏幕设备树节点。
我从源码里拷贝了一份imx6ull-alientek-emmc.dts文件,在这个基础上添加lcd设备树节点,但碰到了kernel panic。明显是设备树的问题,我很疑惑,然后在官方的设备树用官方的imx6ul-14×14-evk.dts的基础上添加设备树,lcd屏幕显示就没问题。当时我还觉得正点原子怎么源码的设备树都有问题,后来才发现我是个joker。用imx6ull-alientek-emmc.dts时,我定义的lcdif在上面,下面还有一个lcdif,就覆盖了我的节点。修改后测试成功,lcd成功显示。
也不禁感叹,恐惧来源于未知。原来之前一直困扰我的触摸屏问题,只是我不了解触摸屏驱动相关的知识。
2、触摸屏无法使用
本以为一切正常,但在进行测试项目代码时,发现触摸屏无法使用。我要用如下指令,查看了输入设备。
# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="20cc000.snvs:snvs-powerkey"
P: Phys=snvs-pwrkey/input0
S: Sysfs=/devices/platform/soc/2000000.aips-bus/20cc000.snvs/20cc000.snvs:snvs-powerkey/input/input0
U: Uniq=
H: Handlers=kbd event0 evbug
B: PROP=0
B: EV=

最低0.47元/天 解锁文章
1096

被折叠的 条评论
为什么被折叠?



