N32926开发板QT(webkit支持)及触屏移植.md

1、开发环境

  • 硬件环境:快捷N32926开发板
  • 软件环境
    SDK:W55FA92BSP2.6.35_160719_kuaijie_v3.02.tar.gz
    交叉编译工具:arm-linux-4.2.1 & arm-linux-4.3.4
    QT:qt-everywhere-opensource-src-4.8.7

2、驱动移植

  使用menuconfig配置内核,选择触摸屏相关选项,编译后将内核下载到开发板。

Device Drivers ---> 
    Input device support ---> 
        <*> Event interface 
        [*] Miscellaneous devices ---> 
            [*] W55FA92 Input ADC Function 
                ADC Function Select ---> 
                    [*] Touch panel detection 
                    [*] Battery detection 
                    [*] Keypad detection 
                BATTERY detection channel selection (Battery detection from channel 1) ---> 
                Keypad detection channel selection (Keypad detection from channel 2) --->

  默认相关选项已经选择,使用快捷提供的arm-linux-4.2.1进行编译。

3、QT移植

3.1 移植前准备

3.1.1 配置环境变量

  移植QT时使用快捷提供的arm-linux-4.3.4交叉编译工具,并配置QT安装目录。
  
  MY_CC_TOOLCHAIN

export MY_CC_TOOLCHAIN=/usr/local/arm_linux_4.3/usr
export PATH=${MY_CC_TOOLCHAIN}/bin:$PATH

  
  MY_CC_STAGING
  QT在桌面Linux系统上安装的路径。

export MY_CC_STAGING=/home/horo/QT4

  
  MY_CC_QT4_PREFIX
  QT在嵌入式Linux系统上的安装路径,开发板中的路径必须和下面路径相同。

export MY_CC_QT4_PREFIX=/usr/local/Trolltech/QtEmbedded-4.8.7

3.1.2 文件拷贝

  将文件qt4.8.5-n329-port-2015.03.27.tar.gz和qt-everywhere-opensource-src-4.8.7_N3292x.tar.gz文件解压到同一目录下,例如/home/horo/arm-qt,并进入arm-qt目录。
  
  修正工具链依赖编译错误

cp qt4.8.5-n329-port/src/qthread_unix.cpp qt-everywhere-opensource-src-4.8.7/src/corelib/thread

  
  支持JPEG硬件解码

cp qt4.8.5-n329-port/src/qjpeghandler.cpp qt-everywhere-opensource-src-4.8.7/src/corelib/thread

  
  支持OSD渲染

cp qt4.8.5-n329-port/src/qscreenlinuxfb_qws.* qt-everywhere-opensource-src-4.8.7/src/gui/embedded

  
  定义qmake配置

cp -R qt4.8.5-n329-port/mkspecs/qws/linux-n3292x-g++ qt-everywhere-opensource-src-4.8.7/mkspecs/qws

  
  更新工具链的tslib

cp -RPp qt4.8.5-n329-port/tslib/include $MY_CC_TOOLCHAIN/arm-linux-uclibcgnueabi
cp -RPp qt4.8.5-n329-port/tslib/include $MY_CC_TOOLCHAIN
cp -RPp qt4.8.5-n329-port/tslib/lib $MY_CC_TOOLCHAIN/arm-linux-uclibcgnueabi
cp -RPp qt4.8.5-n329-port/tslib/lib $MY_CC_TOOLCHAIN

  
  定义qconfig

cp qt4.8.5-n329-port/qconfig/qconfig-n3292x.h qt-everywhere-opensource-src-4.8.7/src/corelib/global

3.2 QT移植

3.2.1 QT配置

  进入qt-everywhere-opensource-src-4.8.7目录,对QT进行配置。

./configure -verbose -prefix ${MY_CC_QT4_PREFIX} -release -opensource -confirm-license -shared -qconfig dist -qt3support \
-no-xmlpatterns -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-multimedia -webkit -javascript-jit -qt-zlib \
-qt-libtiff -qt-libpng -qt-libjpeg -make tools -make demos -nomake examples -nomake docs -nomake translations -embedded \
arm -platform qws/linux-x86-g++ -xplatform qws/linux-n3292x-g++ -qt-gfx-linuxfb -qt-mouse-tslib -qt-kbd-linuxinput 

  其中和开发板电阻触摸屏相关的选项为-qt-mouse-tslib,是对触摸屏的校准。由于实际项目中使用webkit浏览网页,添加选项-webkit

3.2.2 QT编译

  进入qt-everywhere-opensource-src-4.8.7目录,执行make命令。
  
  编译过程中报错,解决方法如下:
  1.undefined reference to ‘__sync_sub_and_fetch_4’

  • 使用其他版本的gcc编译器,例如4.4.3。进入到gcc/config/arm/目录下,找到一个linux-atomic.c;
  • 使用libtool制作链接库,这一步会在当前目录生成.libs目录。输入命令:
 libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
 libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
  • 将生成的库拷贝到一个比较短的目录,比如/opt:
cp .libs/liblinux-atomic.a /opt
  • 在script和webkit的Makefile中在LIBS = 的结尾添加 -L/opt/arm -llinux-atomic。

  
  2.undefined reference to ‘QThreadData::clearCurrentThreadData()’
  在qthread_unix.cpp文件中定义:

void QThreadData::clearCurrentThreadData()
{
        clear_thread_data();
}

3.2.3 QT安装

  进入qt-everywhere-opensource-src-4.8.7目录,执行命令:

make INSTALL_ROOT=${MY_CC_STAGING} install
mkdir -p $MY_CC_QT4_PREFIX
rmdir $MY_CC_QT4_PREFIX
ln -s $MY_CC_STAGING/$MY_CC_QT4_PREFIX $MY_CC_QT4_PREFIX

  
  至此,QT已经编译安装完成,需要将安装后生成的lib目录下的文件拷贝到开发板,由于开发板nand1-1空间较小,将lib目录拷贝到nand1-2下,再在nand1-1的相应目录下创建软连接。
  进入/usr/local/Trolltech/QtEmbedded-4.8.7目录,将lib目录下的动态库拷贝到开发板的/nand1-2/Qtlib下。由于软连接无法拷贝到开发板,我采用了将所有动态库的名字都改成*.so.4格式。
  在开发板上创建目录/usr/local/Trolltech/QtEmbedded-4.8.7,并创建软连接文件:

ln -s /mnt/nand1-2/Qtlib/lib /usr/local/Trolltech/QtEmbedded-4.8.7/lib

  
  QT移植完成。

4、测试

  实际项目中使用webkit浏览网页,相关程序可以在qt-everywhere-opensource-src-4.8.7程序样例中的fancybrower中找到,编译程序的qmake文件在安装路径的bin目录下,在程序目录下编译程序:

qmake -r;
make

  编写测试网页,代码如下:

<!DOCTYPE html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title></title> 
<script type="text/javascript"> 
function myFunction() 
{ 
document.getElementById("demo").innerHTML="My First JavaScript Function"; 
} 
</script> 
<script type="text/javascript">
function myFun()
{
document.getElementById("demo").innerHTML="A Paragraph.";
}
</script>
</head> 

<body>
 <h1>My Web Page</h1> 
 <p id="demo">A Paragraph.</p> 

<input type=button value="hello" onclick="myFunction()" style="height:50px;width:100px;"> 
<input type=button value="back" onclick="myFun()" style="height:50px;width:100px;">
</body> 
</html>

  实际显示效果如下,通过点击不同的按钮,显示不同的文本内容。
这里写图片描述
  
  在运行前需要配置环境变量:

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

  如果是第一次运行触摸屏的相关程序,首先需要进行屏幕的校准,执行命令ts_calibrate,按照屏幕上的显示对屏幕进行校准。
  
  接下来运行fancybrower程序,检查是否运行正常。

/mnt/nand1-2/APP/fancybrower /mnt/nand1-2/html/test.html -qws

猜你喜欢

转载自blog.csdn.net/horotororensu/article/details/80720790