ubuntu下移植QT基本流程

配置tftp
配置tftp服務的步驟:
1、安裝相關軟件包:tftpd(服務端),tftp(客戶端),xinetd
sudo apt-get install tftpd tftp xinetd 2、建立配置文件
在/etc/xinetd.d/下建立一個配置文件tftp
sudo vi tftp
在文件中輸入以下內容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出 3、建立tftp服務文件目錄(上傳文件與下載文件的位置),並且更改其權限
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R 4、重新啓動服務
sudo /etc/init.d/xinetd restart
至此tftp
服務已經安裝完成了,下面可以對其進行一下測試。(假設在當前目錄下有一個測試文件
test.txt)
$tftp 127.0.0.1                     
tftp> put test.txt
Sent 1018 bytes in 0.0 seconds
tftp> get test.txt
Received 1018 bytes in 0.1 seconds
tftp> quit
$
 
通過put命令,可以把當前目錄下的test.txt文件,通過tftp上傳到它的服務文件目錄。這時,在/tftpboot下面會出現test.txt文件。通過get命令,可以從/tftpboot下,下載test.txt文件。這樣就驗證了tftp服務配置的正確性。當文件上傳與下載結束後,可以通過quit命令退出。
 
嚴格按照以上步驟配置tftp服務,一般都可以成功。如果出現無法get或者put的時候,可以查看一下防火牆是否關閉。
  安裝配置nfs服務器  
在ubuntu下安裝、配置nfs服務的步驟如下:
1、安裝nfs
Ubuntu上默認是沒有安裝nfs服務器的,因此我們首先安裝nfs服務器端:
$sudo apt-get install nfs-kernel-server
在一些文檔中,提出還需要使用apt-get來手動安裝nfs的客戶端nfs-common,以及端口映射器portmap,但其實這是沒有必要的,因爲在安裝nfs-kernel-server時,apt會自動爲我們把它們安裝好。
 
2、配置/etc/exports
nfs允許掛載的目錄及權限在文件/etc/exports中進行了定義。例如,我們要將根目錄下的rootfs目錄共享出來,那麼我們需要在/etc/exports文件末尾添加如下一行:/rootfs *(rw,sync,no_root_squash)
其中:/rootfs是要共享的目錄,*代表允許所有的網絡段訪問,rw是可讀寫權限,sync是資料同步寫入內存和硬盤,no_root_squash是nfs客戶端分享目錄使用者的權限,如果客戶端使用的是root用戶,那麼對於該共享目錄而言,該客戶端就具有root權限。
其它nfs常用的參數有:
ro 只讀訪問
rw 讀寫訪問sync 所有數據在請求時寫入共享
async nfs在寫入數據前可以響應請求
secure nfs通過1024以下的安全TCP/IP端口發送
insecure nfs通過1024以上的端口發送
wdelay 如果多個用戶要寫入nfs目錄,則歸組寫入(默認)
no_wdelay 如果多個用戶要寫入nfs目錄,則立即寫入,當使用async時,無需此設置。
hide 在nfs共享目錄中不共享其子目錄
no_hide 共享nfs目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制nfs檢查父目錄的權限(默認)
no_subtree_check 和上面相對,不檢查父目錄權限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squas root用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的GID
 
3、重啓服務
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart
 
4、測試nfs
此時可以運行以下命令來顯示一下共享出來的目錄:
$showmount -e
或者可以使用以下命令把它掛載在本地磁盤上,例如將/rootfs掛載到/mnt下:
$ sudo mount -t nfs localhost:/rootfs /mnt
可以運行df命令查看是否掛載成功。查看後可以使用以下命令卸載:
$ sudo umount /mnt     QT4向s3c2410平臺移植
1.開發平臺:ubuntu 8.10,交叉編譯器版本3.4.5(arm-linux-gcc),qt-embedded-linux-
opensource-src-4.4.3.tar.gz。
2.目標平臺:s3c2410,320*240觸摸屏 ,linux-2.6.26.5,u-boot-1.3.4
3.移植步驟如下:
(1)首先配置linux內核,支持LCD驅動,然後點亮你的屏,並且支持framebuffer,具體的內核配置如下:
      Device Drivers  --->    Graphics support  --->  <*> Support for frame
buffer devices  ---> 
                                                           <*>   S3C2410 LCD
framebuffer support
當然裏面還涉及一些細節。
(2)如果你想支持USB鼠標和USB鍵盤,只需配置內核既可:
      Device Drivers  ---> [*] HID Devices  --->    <*>   USB Human Interface
Device (full HID) support (3)編譯內核進行測試。
(4)接下來在以上工作的基礎上開始移植QT4。首先下載源碼:ftp://ftp.trolltech.no/qt/source/qt-embedded-linux-opensource-src-4.4.3.tar.gz,放在你普通用戶的一個目錄,比如/home/xxx/qt4_port,解壓。 
  
(5)進入解壓好的目錄。 (6)然後就是很關鍵的配置,QT4的移植是通過配置來是否支持某種特性,比如openssl等等。那麼根據你自己的需求呢進行相應的配置就可以了,這裏參考網站的一篇文章進行,具體如下:
./configure \
  -prefix  /home/yoyoili/qt4_port/qt/build \ 
//指定安裝的目錄,與開發板上運行的目錄一致
  -release -shared \
  -fast \
  -pch \
  -no-qt3support \
  -qt-sql-sqlite \
  -no-libtiff -no-libmng \
  -qt-libjpeg \
  -qt-zlib \
  -qt-libpng \
  -qt-freetype \
  -no-openssl \
  -nomake examples -nomake demos -nomake tools\
  -optimized-qmake \
  -no-phonon \
  -no-nis \
  -no-opengl \
  -no-cups \
  -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm\
  -no-xinerama -no-xshape \
  -no-separate-debug-info \
  -xplatform qws/linux-arm-g++ \
  -embedded arm \
  -depths 16 \
  -no-qvfb \
  -qt-gfx-linuxfb \
  -no-gfx-qvfb  -no-kbd-qvfb  -no-mouse-qvfb\
  -qt-kbd-usb \
  -confirm-license \
  -no-armfpa
這裏沒有去實現觸摸屏的校準,如果支持觸摸屏,再加一個: qt-mouse-tslib。
這個過程如果涉及很多問題,一般都是你的系統缺少了某些庫的問題,我的ubuntu 8.10
相應的庫都安裝的比較齊全,沒有錯誤,如果你是fedroa,只需要完全安裝。(7)然後就是make && make install,編譯和安裝了,如果好的話,就會在你的安裝目錄,也就是 /home/xxx/qt4_port/qt/build 有相應的如下目錄:bin  include  lib  mkspecs  plugins  translations,大家可以看看裏面的內容。這裏我們關心的是一個lib,就是庫文件,以後交叉編譯好的程序在板子上跑起來以後都需要這些庫。把所需要的庫 cp /home/xxx/qt4_port/qt/build/lib/libQt* /home/xxx/w/rootfs/home/qt/build/lib,
當然有的庫你可以不需要拷貝的。注:這裏/home/xxx/w/rootfs是目標機nfs掛載點 (8)然後拷貝顯示中文的文泉驛字體,這裏比如:cp /home/xxx/qt4_port/qt/build/lib/fonts/wenquanyi_160_75.qpf /home/xxx/w/rootfs/home/qt/build/fonts (前面的路徑就是編譯並安裝以後的目錄,這個字體就是這個目錄的lib/fonts下面 ,當然後面就是我們開發板根文件系統的目錄) (9)測試,我們用源碼自帶的程序來進行測試,比如在源碼的example裏有很多,只需qmake && make就可以了,然後把可執行文件拷貝開發板上用的根文件系統。 (10)設置相應的環境變量,這個環境變量是給開發板使用的,不是給你的PC
機!具體如下:
      export QTDIR=/home/qt/build
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  //(否則找不到庫)
      export PATH=$QTDIR/bin:$PATH
      export QT_QWS_FONTDIR=/home/qt/build/fonts   // (否則字體無法顯示)
     當然如果你用觸摸屏還有相關的設置,你也需要在這裏添加! (11)運行我們的程序:
  ./test -qws -fn /home/qt/build/fonts/wenquanyi_160_75.qpf
然後你的屏上就有了顯示。 (12)然後你可以在開發板上插上你的USB鼠標就可以來操作這個小QT程序了。
(13)如果你想玩鍵盤:
設置你的console=tty0既可以操作你的開發板了,你就可以玩命令了,那麼這個console
的參數的指定有兩種方法,一個可以通過u-boot傳遞,這裏比如:setenv bootargs root
=/dev/nfs nfsroot=192.168.1.110:/home/yoyoili/source/rootfs ip=192.168.1.120
init=/linuxrc console=tty0,
另一個就是通過內核,你只需配置內核既可以:具體如下:
  Boot options  --->     (root=/dev/nfs nfsroot=192.168.1.2:/home/yoyoili/
source/rootfs ip=192.168.1.3 init=/linuxrc console=tty0)! (14)這裏說一下可能出現的問題:
  1.在編譯你的QT程序的時候會有一個collect錯誤,應該是連接的qt4的庫不是arm
交叉編譯工具編譯的,兩者連接有衝突。在file.pro中去掉對qt4
庫的連接即可,增加一行CONFIG -= qt,即可去掉。  
 2.如果出現這個問題:/lib/libQtCore.so: undefined reference to `clock_gettim
解決的辦法就是在Makefile裏的LFAGS後添加一個 -lrt就可以。  
 3.有的人用的交叉編譯器是用的arm-softfloat-linux-gnu-gcc,所以在make
編譯的時候老是提示arm-linux-gcc
找不到,解決這個問題的辦法很多,一個方法就是重新制作你的交叉編譯器,修改arm-
softfloat.dat(好像是這個)將裏面的TARGET修改爲arm-linux
就可以了,另一個方法就是修改QT4源碼的mkspecs/qws/linux-arm-g++目錄下修改qmake.
config將arm-linux-gcc修改爲arm-softfloat-linux-gcc,然後再make就行了。  
 4.當然你可以用很多工具來編譯你的程序,比如qtcreator,kdevelop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章