如有错误,欢迎批评指正!!!
一、本教程基于周立功EasyARM-i.MX287开发套件
详询周立功网站,www.zlgmcu.com
二、系统恢复及相关设置
根据周立功产品使用说明恢复系统,设置系统IP地址为192.168.0.160,挂载到192.168.0.190主机/home/wps/nfs目录下。
#---------------------------------------
#/etc/rc.d/rcS 开机启动
ifconfig eth0 192.168.0.160 netmask 255.255.255.0
route add default gw 192.168.0.253
mount -t nfs 192.168.0.190:/home/wps/nfs /mnt -o nolock
三、环境搭建
本文使用周立功提供的交叉编译工具链,使用Qt进行开发。
在PC端安装交叉编译工具链并配置交叉编译工具链路径:
$gedit .bashrc
#EasyARM-287
PATH=$PATH:/home/wps/programs/toolchains/EasyARM-iMX287/arm-fsl-linux-gnueabi/bin
$source .bashrc
作者使用的开发板上内置周立功公司提供的Qt4.8.4库,由于作者多数工作在Qt5.4.2下开发,故打算移植QT5.4.2到开发板上。
一开始,开发板上带有tslib库,该库可以满足Qt4.8.4的图形界面下的触摸屏控制,作者想偷懒使用,没想到出现一些问题。
故重新编译tslib1.4,并编译QT5.4.2。
编译Tslib
可参见http://blog.csdn.net/romeolikejuliet/article/details/53234146,
编译tslib-1.4出现错误,参见http://qkxue.net/info/78682/tslib-open-missing-mode-1-4
编译tslib-1.4,进入源码目录,创建configTslib14.sh,代码如下,并执行,安装目录/usr/local/tslib-1.4_imx287
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/home/wps/programs/toolchains/EasyARM-iMX287/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/usr/local/tslib-1.4_imx287 --cache-file=arm-linux.cache
sudo make && sudo make install
注意该编译器下会出现错误:
gcc 新版本编译器对语法检查严格,在源文件 ./tests/ts_calibrate.c 中
// 源文件
// if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
// cal_fd = open (calfile, O_CREAT | O_RDWR);
// } else {
// cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR);
// }
// 需要更改成如下形式
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}
在PC端添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/tslib-1.4_imx287/lib
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/tslib-1.4_imx287/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/tslib-1.4_imx287/include
编译Qt
参见:http://www.th7.cn/Program/cp/201607/902141.shtml
首先在qt-everywhere-opensource-src-5.4.2/qtbase/mkspecs/目录中,复制linux-arm-gnueabi-g++,重命名为linux-arm-fsl-gnueabi-g++,修改qmake.conf文件,使用周立功公司提供的arm-fsl-linux-gnueabi编译器
#
# qmake configuration for building with arm-fsl-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
QMAKE_INCDIR += /usr/local/tslib-1.4_imx287/include
QMAKE_LIDBIR += /usr/local/tslib-1.4_imx287/lib
# modifications to g++.conf
QMAKE_CC = arm-fsl-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-fsl-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-fsl-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-fsl-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-fsl-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-fsl-linux-gnueabi-objcopy
QMAKE_NM = arm-fsl-linux-gnueabi-nm -P
QMAKE_STRIP = arm-fsl-linux-gnueabi-strip
load(qt_config)
在qt-everywhere-opensource-src-5.4.2目录下,创建imx287config文件,内容如下:
./configure -v -opensource -confirm-license -release -shared -xplatform linux-arm-fsl-gnueabi-g++ -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -tslib -no-opengl -no-sse2 -no-openssl -no-nis -no-cups -no-glib -no-dbus -no-xcb -no-eglfs -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -no-iconv -make libs -make examples -nomake tools -nomake tests -I/usr/local/tslib-1.3_im287/include -L/usr/local/tslib-1.3_im287/lib -prefix /home/wps/programs/qt/Qt5.4.2/qt-5.4.2_imx287
配置结果为:
Configure summary
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: linux-arm-fsl-gnueabi-g++ (arm, CPU features: none detected)
Platform notes:
- Also available for Linux: linux-kcc linux-icc linux-cxx
Build options:
Configuration .......... accessibility audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile evdev eventfd freetype full-config getaddrinfo getifaddrs harfbuzz inotify ipv6ifname large-config largefile linuxfb medium-config minimal-config mremap no-pkg-config pcre png posix_fallocate precompile_header qpa qpa reduce_exports release rpath shared small-config tslib zlib
Build parts ............ libs examples
Mode ................... release
Using C++11 ............ yes
Using gold linker....... no
Using PCH .............. yes
Target compiler supports:
Neon ................. no
Qt modules and options:
Qt D-Bus ............... no
Qt Concurrent .......... yes
Qt GUI ................. yes
Qt Widgets ............. yes
Large File ............. yes
QML debugging .......... yes
Use system proxies ..... no
Support enabled for:
Accessibility .......... yes
ALSA ................... no
CUPS ................... no
Evdev .................. yes
FontConfig ............. no
FreeType ............... qt
Glib ................... no
GTK theme .............. no
HarfBuzz ............... yes (bundled copy)
Iconv .................. no
ICU .................... no
Image formats:
GIF .................. yes (plugin, using bundled copy)
JPEG ................. yes (plugin, using bundled copy)
PNG .................. yes (in QtGui, using bundled copy)
journald ............... no
mtdev .................. no
Networking:
getaddrinfo .......... yes
getifaddrs ........... yes
IPv6 ifname .......... yes
OpenSSL .............. no
NIS .................... no
OpenGL / OpenVG:
EGL .................. no
OpenGL ............... no
OpenVG ............... no
PCRE ................... yes (bundled copy)
pkg-config ............. no
PulseAudio ............. no
QPA backends:
DirectFB ............. no
EGLFS ................ no
KMS .................. no
LinuxFB .............. yes
XCB .................. no
Session management ..... yes
SQL drivers:
DB2 .................. no
InterBase ............ no
MySQL ................ no
OCI .................. no
ODBC ................. no
PostgreSQL ........... no
SQLite 2 ............. no
SQLite ............... qt-qt
TDS .................. no
udev ................... no
xkbcommon .............. no
zlib ................... yes (bundled copy)
NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1.
Configure with '-qreal float' to create a build that is binary compatible with 5.1.
Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /home/wps/programs/qt/Qt5.4.2/qt-5.4.2_imx287
Prior to reconfiguration, make sure you remove any leftovers from
the previous build.
因为开发板容量限制,用户可以选择性复制相关文件,本文复制数据进/usr/local/qt-5.4.2_imx287中,首先修改/etc/rc.d/init.d/start_userapp,关闭启动界面,
#!/bin/sh
ifconfig eth0 hw ether 02:00:92:B3:C4:A8
#ifconfig eth0 down
#you can add your app start_command three
# start ssh
/bin/dropbear
#start qt command,you can delete it
export TSLIB_PLUGINDIR=/usr/lib/ts/
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE=/dev/input/ts0
export TSLIB_CALIBFILE=/etc/pointercal
export QT_QWS_FONTDIR=/usr/lib/fonts
export QWS_MOUSE_PROTO=Tslib:/dev/input/ts0
/usr/test/up_test_function
#/usr/share/zylauncher/start_zylauncher &
修改/etc/profile文件
#qt4.8.4
#export TSLIB_PLUGINDIR=/usr/lib/ts/
#export TSLIB_CONFFILE=/etc/ts.conf
#export TSLIB_TSDEVICE=/dev/input/ts0
#export TSLIB_FBDEVICE=/dev/fb0
#export TSLIB_CALIBFILE=/etc/pointercal
#export QT_QWS_FONTDIR=/usr/lib/fonts
#export QWS_MOUSE_PROTO=tslib:/dev/input/ts0
#qt5.4.2
export TSLIBDIR=/usr/local/tslib-1.4_imx287
export TSLIB_TSDEVICE=/dev/input/ts0
export TSLIB_CONFFILE=$TSLIBDIR/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIBDIR/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_LIBRARY_PATH=/lib:/usr/lib:$TSLIBDIR/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:usr/sbin:$TSLIBDIR/bin
export QTDIR=/usr/local/qt-5.4.2_imx287
export LD_LIBRARY_PATH=/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
#export QT_QPA_FB_TSLIB=1
export QT_QPA_GENERIC_PLUGINS=Tslib:/dev/input/event0
修改之后重启即可
三、查看系统及软硬件设备详情
u-boot启动信息:
查看系统内核版本号及系统名称:
CPU信息:
内存信息,-m没用,内存为124716KB:
Flash信息,内核可用20MB,用户可用108MB: