配置开发环境
0610更新
1、缺少头文件
error: GL/gl.h: No such file or directory
执行
sudo apt-get install mesa-common-dev
2、编译出现如下错误提示:
/usr/bin/ld: cannot find -lGL
执行下面命令解决:
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
搭建NFS服务器
检查内核是否开启NFS
1)进入内核源码目录make menuconfig,进入菜单Networking support->Networking options-> TCP/IP networking。确保nfs的功能已经被打开
IP:BOOTP support
2)进入File systems->Network File Systems 确保nfs加载可以被使用
Root file system on NFS
搭建NFS服务器
1)安装NFS
apt-get install nfs-kernel-server
apt-get install nfs-common
2) 创建共享目录,我在home/lz下创建了一个/nfs/rootfs,将其作为共享目录。并修改权限
chmod 777 -R /home/lz/nfs/rootfs
3) 配置NFS,打开配置文件并在最后一行添加
sudo gedit etc/exports
在最后一行添加
/home/lz/nfs/rootfs *(rw,sync,no_root_squash,no_subtree_check)
其中
/home/lz/nfs/rootfs:与nfs服务客户端共享的目录,这个路径必须和你前面设置的文件的路径一致!
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限。
no_subtree_check:不检查父目录的权限
4)重启NFS服务
执行命令:sudo /etc/init.d/portmap restart
sudo /etc/init.d/portmap restart
重启portmap服务。nfs是一个RPC程序,使用它前,需要映射好端口,通过portmap设定。
注意:Ubuntu 14.04以后,要使用sudo /etc/init.d/rpcbind restart 重启rpcbind 服务。所以执行
sudo /etc/init.d/rpcbind restart
然后执行命令:
sudo /etc/init.d/nfs-kernel-server restart
重启nfs服务。并执行
showmount localhost -e
查询是否成功。
nfs用作嵌入式linux的文件系统
1) 设置u-boot启动参数
在U-Boot中设置启动参数
U-Boot>setenv bootargs root=/dev/nfs nfsroot=192.168.1.2:/home/lz/nfs/rootfs ip=192.168.1.3:192.168.1.2:192.168.1.10:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
其中:
root=/dev/nfs 并非真的设备,而是一个告诉内核要通过网络取得根文件系统。
nfsroot=你的主机IP:根文件系统路径
ip=你的开发板ip地址,注意开发板的ip地址只要和主机ip地址在一个网段内就可。
/home/lz/nfs/rootfs是主机的共享目录(即rootfs),192.168.1.2代表的是主机ip,192.168.1.3代表开发板ip,192.168.1.10是网关,eth0是主机和开发板相接的网卡。注意这是一整行没有换行,改完save一下。
U-Boot>sa
保存后,用boot启动linux
U-Boot>boot
2)挂载nfs文件系统
在linux系统里也可以挂载nfs文件
sudo mount -t nfs 192.168.1.2:/home/lz/nfs/rootfs /nfs/test
安装32位运行库
sudo apt-get install libc6:i386
sudo -i
cd /etc/apt/sources. list . d
echo "deb http://archive.ubuntu.com/ubuntu/ raring main restricted universe multiverse" > ia32-libs -raring . list
apt-get update
apt-get install ia32-libs
rm /ia32-libs -raring . list
apt-get update
exit
sudo apt-get install gcc-multilib
下载资源
tslib触摸屏用
qt5.7源码
安装交叉编译器
$sudo apt install gcc-arm-linux-gnueabi
$sudo apt install gcc-arm-linux-gnueabihf
交叉编译tslib1.4
对触摸屏信号的获取、校正、滤波处理,均采用开源的tslib,本文采用的tslib版本为最新的tslib1.4(可以从本文提供的链接中下载tslib1.4)。
1.将下载好的tslib1.4拷贝到/home/lz/transplant目录下(可以根据自己的系统选择某一目录),然后执行解压缩命令
tar -vxf tslib-1.4.tar.gz
切换到tslib目录:
cd tslib
安装交叉编译tslib必须的一些工具(可以先查看是否已安装,ubuntu16.04自带这些工具,可跳过)
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
2.利用脚本写编译过程
在tslib文件夹下新建文件configTslib14.sh
vi configTslib14.sh
内容如下:
#!/bin/sh
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache
make && make install
然后运行configTslib14.sh
./configTslib14.sh
执行结束后,我们查看一下是否安装成功,执行命令:
ls /opt/tslib1.4
如果出现bin,etc,include,lib这4个目录,如下图所示,说明交叉编译并安装tslib成功。
交叉编译QT库
将下载的qt-everywhere-opensource-src-5.7.0.tar.gz执行如下命令解压:
tar -vxf qt-everywhere-opensource-src-5.7.0.tar.gz
cd qt-everywhere-opensource-src-5.7.0
修改交叉编译架构用到的信息:
gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
修改如下图所示:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabi-gcc
QMAKE_CXX = arm-linux-gnueabi-g++
QMAKE_LINK = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
QMAKE_NM = arm-linux-gnueabi-nm -P
QMAKE_STRIP = arm-linux-gnueabi-strip
load(qt_config)
创建一个脚本文件,用于生成Makefile,执行命令
gedit autoConfigure.sh
输入下面内容并保存:
#!/bin/sh
./configure
-v
-prefix /opt/arm-qt
-qmldir /opt/arm-qt/qml2
-release
-opensource
-confirm-license
-make libs
-xplatform linux-arm-gnueabi-g++
-optimized-qmake
-pch
-qt-sql-sqlite
-qt-libjpeg
-qt-zlib
-tslib
-no-opengl
-no-sse2
-no-openssl
-no-nis
-no-cups
-no-glib
-no-pkg-config
-no-separate-debug-info
-make tools
-tslib
-skip qtvirtualkeyboard
-I/opt/tslib1.4/include
-L/opt/tslib1.4/lib
exit
执行命令:
chmod 777 qt.configure.sh
./autoConfigure.sh
上述命令自动生成Makefile文件。
执行命令启动编译:
make -j5
编译大概四十分钟
编译结束后,执行安装命令:
sudo make install
将/opt/arm-qt 和/opt/tslib1.4 拷贝到开发板的文件系统中对应的目录中。
设置QT的交叉编译环境
安装qtcreator
进入qtcreator开发环境
在菜单中选择Tools——Options,在弹出的对话框中,选择Build & Run,选择标签Compilers,按下图设置,选择C++交叉编译器,如下图所示:
切换到Qt Versions标签,点击“Add”按钮,选择qmake,如图所示:
选择完成,按“OK”按钮,设置如图所示:
切换到Kits标签,点击“Add”按钮,然后设置如下图所示:
在4412开发板上配置tslib并交叉编译一个能够在4412开发板上运行的QT应用程序
把字库Ubuntu_L.ttf 等字库拷贝到 /opt/arm-qt/lib/fonts
在开发板串口命令窗口中输入:
vi /etc/profile
将其修改为以下内容:
export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt-5.7.0
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
保存退出,执行命令(一定要执行,否则可能报错):
source /etc/profile
然后在串口命令窗中输入 vi /opt/tslib1.4/etc/ts.conf 来配置触摸屏
把第二行的注释去掉,把ts设置成输入模式(注意把前面的空格也去掉)
将编译得到的可执行文件拷贝到开发板中文件系统的/bin目录,运行该程序。
注意:不用开发板的触摸屏输入设备不一样,如tiny4412是dev下的1-wire字样的输入设备。需要修改TSLIB_TSDEVICE。