2018年9月12日22点28分
harmful-chan
前前后后弄了一个星期了,很是辛苦
arm-linux-readelf -a xxx | grep lib //查应用程序依赖库
前期准备
软件:
服务器:虚拟机Ubuntu14.04
远程登陆:putty
串口调试:putty
开发板:JZ2440(韦东山家的)
TFTP传输:tftpd32.exe
FTP传输:filezilla.exe
uboot:E:\学习资料\JZ2440\CD\资料\bin\uboot\u-boot.bin
linux内核:E:\学习资料\JZ2440\CD\资料\bin\linux\uImage_4.3
文件系统:E:\学习资料\JZ2440\CD\资料\bin\文件系统\fs_qtopia.yaffs2
QT源码包: qt-embedded-linux-opensource-src-4.5.3.tar.gz
//http://download.qt.io/archive/qt/4.5/qt-embedded-linux-opensource-src-4.5.3.tar.gz.mirrorlist
tslib源码包:tslib-1.4.tar.gz
交叉编译器:arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 //开发板资料自带的
服务器准备安装包:
sudo apt-get install g++-multilib libx11-dev libxext-dev libxtst-dev zlib1g-dev lib32ncurses5 lib32z1 libpng-dev autoconf automake libtool
服务器文件目录架构:
用户目录 /home/linux/
~/Qt/bin //最后打包好文件目录
~/Qt/src //安装包及源码编译目录
~/Qt/output //生成库目录
~/Qt/demo-1.0 //PC机写好的QT程序目录
/usr/local/arm-linux-gcc/ //交叉编译器目录
第一步、开发板恢复出厂
烧uboot、内核、挂在文件系统开东哥的教程吧
第二步、服务器 开发板 PC机相互ping通
看东哥教程把
第三步、PC机写好QT程序
我用QT creator 写的
http://www.360doc.com/content/18/0115/17/48260833_722161472.shtml
第四步、服务器 安装交叉编译器
cd ~/Qt/src/
解压 tar xvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
mkdir /usr/local/arm-linux-gcc/
sudo mv arm-linux-gcc-3.4.5-glibc-2.3.6 /usr/local/arm-linux-gcc/ //转移位置
sudo vi /etc/profile //打开环境变量配置文件,文件最后添加一下代码,保存退出
export PATH=/usr/local/arm-linux-gcc/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
source /etc/profile //更新环境变量,这个是所有用户共用的
echo $PATH //看一下有没有添加到上面的路径
arm-linux-gcc -v //会弹出一大堆英文才安装成功
第五部、服务器 编译tslib
cd ~/Qt/src/
tar xvf tslib-1.4.tar.gz
cd tslib/
//首先设置好所需编译器的环境变量,不设置好编译时会找不到
export CC=/usr/local/arm-linux-gcc/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc
export CXX=/usr/local/arm-linux-gcc/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-g++
sudo ./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache //不设置的话好像会编译时弹出个溢出错误
./configure --host=arm-linux \ //交叉编译器的前缀 如:arm-none-linux-gnueabi-gcc 则arm-none-linux-gnueabi
--prefix=/home/linux/Qt/output/tslib \ //生成文件路径,会自己创建文件夹
--cache-file=arm-linux.cache //注意:不能加sudo 应为CC,CXX等环境变量只在当前用户生效
第六步、服务器 编译QT源码包
cd ~/Qt/src/
tar xvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
cd qt-embedded-linux-opensource-src-4.5.3
./configure -embedded arm \ //生成文件架构
-xplatform qws/linux-arm-g++ \ //配置qmake使用平台。使用./mkspecs/qws/linux-arm-g++/qmake.conf文件
//-platform qws/linux-arm-g++ \ //编译源码的平台,在服务器/PC编译不用添加,默认使用./mkspecs/qws/linux-x86-g++/qmake.conf文件
-no-qt3support -no-qvfb \ //其他配置可以./configure --help查看
-qt-mouse-tslib \ //支持触摸屏
-qt-sql-sqlite \ //支持数据库
-prefix /home/linux/Qt/output/qt-arm/ \ //生成库文件位置,会自动创建
-I/home/linux/Qt/output/tslib/include \ //触摸屏头文件
-L/home/linux/Qt/output/tslib/lib \ //库文件
-no-rpath -no-largefile \
注意:有时会弹出“-m64” 或 “m64”不支持错误,在前面加个sudo,会优先调用系统的g++
make //留意一下编译信息,如果一直只调用g++ ... 很可能使环境变量设置不对,找不到arm-linux-g++,
sudo make install //安装到先前指定的目录
~/Qt/output/qt-arm/bin/qmake -v //查看是否安装成功,这个qmake专门生成arm上面的QT程序的,喜欢可以改下名字
第七步、编译QT程序
用ftp把PC机写好QT程序的.cpp,.h,和.pro文件。拉到服务器的~/Qt/demo-1.0/里面去
参考另一篇文章https://blog.youkuaiyun.com/harmful_chan/article/details/82559029
cd ~/Qt/demo-1.0/
qmake
make //与无意外是没啥问题的
第八步、文件打包移植JZ2440
cd ~/Qt/bin/
cp -r ~/Qt/output/tslib/ ./
cp -r ~/Qt/output/qt-arm/lib/ ./
cp -r ~/Qt/output/qt-arm/mkspecs/ ./
cp -r ~/Qt/output/qt-arm/plugins/ ./
cp -r ~/Qt/demo-1.0/ ./
tar cvf QT-1.0.bin */ //打包好了,貌似jz2440不支持.tar什么的
用FTP把QT-1.0.bin拉到PC机tftpd32d.exe的文件目录下
设置好tftpd32.exe https://blog.youkuaiyun.com/harmful_chan/article/details/82623963
以下为JZ2440开发板串口调试操作
cd opt/
mkdir QT-1.0
cd QT-1.0
ping 192.168.137.1 //ping PC机虽然IP有点奇葩,但着只是个普通IP,
ifconfig eth0 192.168.137.11 //修改开发板IP,同一网段应该能通
tftp -g -r QT-1.0.bin 192.168.137.1 //下载文件,可能有点慢
tar xvf QT-1.0.bin //解压好了
第九步、设置环境变量
命令行输入一下信息,喜欢可以弄个脚本
export TSLIB_ROOT=/opt/QT-1.0/tslib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/opt/QT-1.0/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/opt/QT-1.0/tslib/etc/ts.conf
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_SIZE=480x272
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export QTDIR=/opt/QT-1.0
export QPEDIR=/opt/QT-1.0
export PATH=$QTDIR/bin:$PATH
export QWS_DISPLAY=LinuxFb:/dev/fb0
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fontsecho $LD_LIBRARY_PATH //看设置了没
注意:要修改为自己的路径,不能瞎复制
第十步、运行测试
./XXX -qws //屏幕有反应就没问题啦
先进入tslib的bin目录,执行./ts_calibrate校准触屏,然后执行一个Qt程序,./textedit -qws就可以看到打开了一个文本编辑器,./mainwindow -qws就可以打开一个窗口界面,
这些程序在demos目录下需要拷贝到开发板上执行,执行成功则说明移植成功,接下来,编写一个脚本文件,将上述环境变量的设置写入脚本文件,开机执行,并且在/etc/init.d/rcS中写入开机启动Qt程序的命令,则开机即可看到优美的GUI界面了,OK。至此,移植完成。