.根文件系统制作
我是使用buildroot制作的根文件系统,针对imx6ull的buildroot文件系统制作资料较多,不再赘述,只写下我遇到的问题:
我是使用nfs挂载文件系统的,结果挂在以后无法进入控制台,提示
can't open /dev/ttymxc0: Permission denied
显示没有权限,最终在https://www.cnblogs.com/Rainingday/p/12483773.html下找到了答案(谢谢不明白就去明白);
使用sudo chown root * -R更改当前目录下所有的文件的owner(就是所有者)为root,-R意思是循环遍历,如果当前目录下有子目录,同时更改那些子目录。重新上电即可。
可能跟nfs挂载也有关系,如果使用SD卡加载应该就没问题了。
-
tslib编译
- 触摸源码下载:Tags · Martin Kepplinger / tslib · GitLabhttps://gitlab.com/tslib/tslib/-/tags
- 下载源码后,复制到ubuntu中,解压文件:tar -xvf tslib-1.22.tar.gz
- 编译过程:
./autogen.sh
./configure --prefix=/opt/tslib1.22 --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes
make
make install
注意事项:在root权限下进行编译,主要在于--prefix路径一般放在/opt路径下,需要root权限,否则无法创建文件夹;
编译完成后,在/opt下有talib1.22文件夹,文件夹下面如下:
如果提示缺少库,可根据同时apt get install xx;也可提前安装:
apt-get install autoconf automake libtool pkg-config m4
-
QT源码编译
- QT源码下载:我是从清华大学开源软件镜像站下载的:
也可从官网下载
- 下载源码后,复制到ubuntu中,解压文件:tar -xvf qt-everywhere-opensource-src-5.9.9.tar.xz
- 在 qt-everywhere-opensource-src-5.9.9 目录下,打开 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件,根据自己的交叉编译工具修改,我使用的是arm-linux-gnueabihf-gcc,修改后文件如下:
- 编译流程:生成makefile->make->make install
使用./configure 生成makefile,由于./configure 参数较多,一般使用脚本文件进行配置,新建“autoconfigure.sh”脚本:
网上例程中的-qt-sql-sqlite \ -no-nis \编译过程会报错,可能是版本问题,删除后编译成功;
然后,make; make install便会在/opt/qt5.9.9目录下生成源文件:
-
部署QT文件系统
打开之前使用buildroot编译的文件系统(nfs挂载):
里面已经存在/opt文件夹;
.我们把编译好的触摸和 QT 拷贝到/opt目录下:
配置触摸以及QT路径:
加载到开发板上运行,进入开发板的文件系统:
进入到tslib1.22/bin目录下,执行./ts_calibrate,进行屏幕校准,
发现报错:./ts_calibrate: line 1: syntax error: unexpected "(",百度后发现应该是交叉编译的问题,使用file ts_calibrate发现确实不是arm可执行程序,而是x86架构下的,因此从解压文件开始又从头来了一遍以后,发现OK,没找到问题,可能是交叉编译工具链配置错误,没有起作用。
./ts_test进行触摸测试,发现OK;
-
运行QT例程
到最后一步了,仍然在清华镜像开源网站上下载qt-opensource-linux-x64-5.9.9.run,复制到ubuntu中,直接运行./qt-opensource-linux-x64-5.9.9.run,安装Qt Creator
随意找一个例程,如下:
找到该文件路径,执行./opt/qt5.9.9/bin/qmake,生成Makefile,直接make便可编译出在arm上运行的qt程序calendarwidget,将其放在开发板/opt目录下;执行./calendarwidget
发现报错:
/lib/libstdc++.so.6: version `CXXABI_1.3.9' not found
执行命令
strings /lib/libstdc++.so.6|grep CXXABI
发现确实没有CXXABI_1.3.9,应该是因为我编译器版本(4.9.4)太低了,导致库文件版本与qt版本不匹配,因此我升级了一下(5.4.0),在升级后的lib里找到了更高版本的libstdc++.so.6和libstdc++.so.6.0.24,其中libstdc++.so.6是libstdc++.so.6.0.24的符号链接;将这两个文件拷贝到开发板目录/lib下,再确认下:
发现已经有CXXABI_1.3.9;
重新执行qt程序,界面显示正常:
但是触摸不准,随后重新使用./ts_calibrate重新校准也没用,经查阅相关资料,发现内核中触摸芯片ft5x06驱动文件 drivers/input/touchscreen/edt-ft5x06.c中
ABS_X/ABS_Y分别为800和1280,导致上报的触摸数据存在偏差,成比例拉伸,将其修改成1024x600后,为保证修改彻底,把设备树里面的屏幕参数也作了修改。重新编译内核后,再次执行,触摸也OK了!。