移植Qt5.6

交叉编译工具:arm-linux-gcc-4.4.3
内核:linux-4.12.0
使用移植linux-4.12到JZ2440里的linux-4.12,按照2.4 制作补丁内容获取内核,补丁下载地址:https://pan.baidu.com/s/1_uyLxOIgwVGCJPip5RcFNQ
制作好的网络文件系统目录:/work/tools/fs_mini/(使用制作文件系统里制作的文件系统)
开发板:JZ2440

本人写的基于qt的电子书效果:https://pan.baidu.com/s/1TlCOq57UjrYt2uGEaFcF8g

目录

      1. 将网卡驱动、lcd显示设备驱动与触摸屏设备驱动编译进linux-4.12内核
          1.1 将网卡驱动编译进linux-4.12内核
          1.2 将lcd显示设备驱动编译进linux-4.12内核
          1.3 将触摸屏设备驱动编译进linux-4.12内核
     2. 安装tslib
     3. 下载、配置与安装Qt5.6.1-1
         3.1 下载Qt5.6.1-1
         3.2 配置与安装Qt5.6.1-1
     4. 将安装好的Qt拷贝到文件系统
     5. 设置Qt环境变量
     6. 测试Qt程序
         6.1 获取qt测试程序
         6.2 编译
         6.3 解决报错
         6.4 显示中文


1. 将网卡驱动、lcd显示设备驱动与触摸屏设备驱动编译进linux-4.12内核

    为了方便,这里将移植之前所有驱动(基于linux-2.6.22.6)到linux-4.12内核里修改好的lcd显示设备驱动lcd.c(下载地址:https://pan.baidu.com/s/15CpK4BXGt5vDb5Q0THUwbQ)与触摸屏设备驱动s3c_ts.c(下载地址:https://pan.baidu.com/s/1d4OQAwaAkY-zP2jNMQW5JA)编译进linux-4.12内核。

1.1 将网卡驱动编译进linux-4.12内核

    按照移植之前所有驱动(基于linux-2.6.22.6)到linux-4.12内核1. 移植网卡驱动的内容给内核添加网卡驱动。

1.2 将lcd显示设备驱动编译进linux-4.12内核

    1. 将移植好的lcd.c驱动文件重命名为jz2440fb.c,拷贝到linux-4.12/drivers/video/fbdev目录下。
    2. 修改该目录下的Makefile,添加如下部分:

obj-$(CONFIG_FB_JZ2440)	  	  += jz2440fb.o

    3. 修改linux-4.12/drivers/video/fbdev/Kconfig,添加如下部分:

config FB_JZ2440
    tristate "JZ2440 LCD framebuffer support"
    depends on FB && ARCH_S3C24XX
    select FB_CFB_FILLRECT
    select FB_CFB_COPYAREA
    select FB_CFB_IMAGEBLIT
    ---help---
    Currently the suport is only for the JZ2440

    4. 重新配置内核,在linux-4.12内核目录下执行:
      make menuconfig
    配置步骤如下:
      Device Drivers  --->
          Graphics support  --->
              Frame buffer Devices  --->
                 
<*> JZ2440 LCD framebuffer support
                  [*] Bootup logo  --->
    选中新添加的JZ2440 lcd设备(Bootup logo是启动logo,选上就有企鹅图标显示出来,当然也可以不选),这样重新编译内核时就会将jz2440fb.c驱动编译进内核(并且Kconfig里添加了select选项,内核会自动将cfbcopyarea.ko、cfbfillrect.ko、cfbimgblt.ko这三个驱动编译进内核)

1.3 将触摸屏设备驱动编译进linux-4.12内核

    1. 将移植好的s3c_ts.c驱动文件重命名为jz2440_ts.c,拷贝到linux-4.12/drivers/input/touchscreen目录下。
    2. 修改该目录下的Makefile,添加如下部分:

obj-$(CONFIG_TOUCHSCREEN_JZ2440)	+= jz2440_ts.o

    3. 修改linux-4.12/drivers/input/touchscreen/Kconfig,添加如下部分:

config TOUCHSCREEN_JZ2440
	tristate "Samsung JZ2440 touchscreen input driver"
	depends on ARCH_S3C24XX || SAMSUNG_DEV_TS
	depends on S3C_ADC
	help
	  Currently the suport is only for the JZ2440

    4. 重新配置内核,在linux-4.12内核目录下执行:
      make menuconfig
    配置步骤如下:
      Device Drivers  --->
          Input device support  --->
              [*]   Touchscreens  --->
                 
<*>   Samsung JZ2440 touchscreen input driver
    选中新添加的JZ2440触摸屏设备,这样重新编译内核时就会将jz2440_ts.c驱动编译进内核。修改完成的内核uImage文件下载地址:https://pan.baidu.com/s/134-nCCpauuQoUiOK4iXHzA

2. 安装tslib

    1. 修改编译器的EV_VERSION变量
      vi /work/tools/usr/local/arm/4.4.3/arm-none-linux-gnueabi/sys-root/usr/include/linux/input.h +32
     
修改为:

#define EV_VERSION              0x010001

    2. 安装tslib
   
tslib-1.4.tar.gz放到服务器上,在ubuntu执行以下命令:
      tar xzf tslib-1.4.tar.gz  (解压文件)
      cd tslib
      ./autogen.sh
      mkdir tmp
      echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
      ./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
      make 
(编译)
      make install  (安装到tmp)
      cp tmp /work/tools/fs_mini/ts_dir -rfd  (将tmp目录复制到网络文件系统目录)

    3. 网络文件系统启动开发板,进入刚才的ts_dir目录,执行:
      cd /ts_dir
      cp * / -rfd
  (再将该目录里所有内容拷贝到网络文件系统目录)

    4. 修改 /etc/ts.conf文件,开发板上执行命令如下:
      vi /etc/ts.conf
     

    改为(去掉第二行的#号和第一个空格):
     

    5. 设置触摸屏的环境变量
    执行vi /work/tools/fs_mini/etc/profile (重启开发板生效,或者开发板挂载fs_mini网络文件系统时执行. /etc/profile手动执行该文件里的环境变量设置修改profile文件添加如下内容:

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0 

    /dev/input/event0是我板子的触摸屏设备,/dev/fb0lcd设备。不同板子选择对应的设备。

    6. 校验。开发板上执行如下:
      ts_calibrate  (开发板上此时会出现校验触摸点)
     

    7. 测试 。开发板上执行如下:
      ts_test  (此时可以在lcd上绘画了!)
   

3. 下载、配置与安装Qt5.6.1-1

3.1 下载Qt5.6.1-1

    从官网下载Qt5.6.1-1源码qt-everywhere-opensource-src-5.6.1-1.tar.gz,下载地址:http://download.qt.io/archive/qt/5.6/5.6.1-1/single/

3.2 配置与安装Qt5.6.1-1

    1. 将源码包放到服务器上,本人放到/work/tools目录,进入该目录解压源码:
      tar zxvf qt-everywhere-opensource-src-5.6.1-1.tar.gz

    2. 修改编译配置文件qmake.conf
      vi /work/tools/qt-everywhere-opensource-src-5.6.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
    修改qmake.conf文件如下:

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t
QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX               = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK              = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_NM                = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-none-linux-gnueabi-strip
load(qt_config)

    注意其中的“arm-none-linux-gnueabi-”是根据自己所使用的编译器来决定的。

    3. 创建编译脚本文件auto_config.sh
      sudo mkdir -p /work/tools/Qt5.6.1-1    (创建qt安装目录)
      vi /work/tools/qt-everywhere-opensource-src-5.6.1/auto_config.sh    (创建auto_config.sh脚本文件内容如下)

./configure -prefix /work/tools/Qt5.6.1-1 \
-opensource \
-release \
-confirm-license \
-xplatform linux-arm-gnueabi-g++ \
-shared \
-qt-zlib \
-no-gif \
-qt-libjpeg \
-no-nis \
-no-opengl \
-no-cups \
-no-glib \
-no-dbus \
-no-rpath \
-no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
-no-avx \
-no-openssl \
-nomake tools \
-qreal float \
-qt-libpng \
-tslib \
-nomake examples \
-I /work/tools/fs_mini/ts_dir/include \
-L /work/tools/fs_mini/ts_dir/lib

    /work/tools/Qt5.6.1-1是安装目录,/work/tools/fs_mini/ts_dir是之前移植好的tslib相关文件存放目录。

    4. 编译安装
    执行如下命令:
    cd /work/tools/qt-everywhere-opensource-src-5.6.1
    ./auto_config.sh

(服务器可能需要安装部分库,参考qt-everywhere-opensource-src-5.6.1/qtbase/src/plugins/platforms/xcb/README文件:apt-get install libncurses5-dev libreadline-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev
    make -j4
    sudo make install

4. 将安装好的Qt拷贝到文件系统

    执行如下命令将上面安装好的qt部分库文件拷贝到开发板使用的文件系统上:
      mkdir -p /work/tools/fs_mini/Qt5.6.1-1/plugins
      cp /work/tools/Qt5.6.1-1/plugins/. /work/tools/fs_mini/Qt5.6.1-1/plugins -rfd
      mkdir -p /work/tools/fs_mini/Qt5.6.1-1/lib
      cp /work/tools/Qt5.6.1-1/lib/. /work/tools/fs_mini/Qt5.6.1-1/lib -rfd
  
  在开发板上运行Qt程序只需要pluginslib这两个文件夹内容即可。

5. 设置Qt环境变量

    修改/work/tools/fs_mini/etc/profile(文件系统目录下的/etc/profile),添加如下内容(重启开发板生效,或者开发板挂载fs_mini网络文件系统时执行. /etc/profile手动执行该文件里的环境变量设置):

export QTEDIR=/Qt5.6.1-1
export LD_LIBRARY_PATH=/Qt5.6.1-1/lib:$LD_LIBRARY_PATH
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_FONTDIR=$QTEDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=480x272:mmSize=480x272:offset=0x0:tty=/dev/tty1
export QT_QPA_FB_TSLIB=1

    其中export QTEDIR=/Qt5.6.1-1表示指定qt所在目录;480*272表示LCD显示屏尺寸,输出设备为/dev/tty1,根据实际情况修改。

6. 测试Qt程序

6.1 获取qt测试程序

    下载Qt测试程序到文件系统,下载地址:https://pan.baidu.com/s/1X4PCRtPnnqVDjJb5ujtteA
    如下:
   

6.2 编译

    在服务器上进入程序所在目录,执行如下命令:
      /work/tools/Qt5.6.1-1/bin/qmake    (生成Makefile)
      make   
   

    可以看到生成可执行文件helloworld了,接着在开发板上运行该程序,LCD上能看到效果,但不显示中文且提示错误:

QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

6.3 解决报错

    下载libiconv源码,下载地址:http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
    拷贝文件到服务器上执行如下命令:
      tar xzf libiconv-1.14.tar.gz
      cd /work/tools/libiconv-1.14
      mkdir /work/tools/libiconv
      ./configure --host=
arm-none-linux-gnueabi --prefix=/work/tools/libiconv     
      make
      make install     
      cp ./lib/preloadable_libiconv.so /work/tools/fs_mini/lib/

    执行vi /work/tools/fs_mini/etc/profile (重启开发板生效,或者开发板挂载fs_mini网络文件系统时执行. /etc/profile手动执行该文件里的环境变量设置修改profile文件添加如下内容:

export LD_PRELOAD=/lib/preloadable_libiconv.so

    此时重新在开发板上执行应用程序串口就没有任何错误提示了,但是还是不能显示中文。

6.4 显示中文

    下载字库DroidSansFallback.ttf,下载地址:https://pan.baidu.com/s/1e8lyxnPVF0Uw1_4woHMVTw
   
将该文件拷贝到/work/tools/fs_mini/Qt5.6.1-1/lib/fonts
   
重新运行Qt程序,开发板上就能显示出中文了!
   

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值