Ubuntu 8.04下編譯運行Qtopia 4.3.2過程
Ubuntu 項目完全遵從開源軟件開發的原則;并且鼓勵人們使用、完善并傳播開源軟件。也就是Ubuntu目前是并將永遠是免費的。 然而,這并不僅僅意味著零成本,自由軟件的理念是人們應該以所有“對社會有用”的方式自由地使用軟件,本文用的開發板:YC2440-F-V5.1
1、ubuntu8.04開啟root用戶及設置中文界面
Ubuntu安裝后,root用戶默認是被鎖定了的,不允許登錄。對于桌面用戶來說,這樣安全性更高一些,是應該的。但做為嵌入式系統開發,則不是很合適。有時在編譯程序時會遇到一些莫名其妙的問題。因此我們需要開啟root用戶。
步驟:
1、系統->系統管理->用戶和組,選擇root用戶然后點擊“屬性”,設置root用戶的密碼;
2、系統>系統管理>登錄窗口,點“安全”選項頁,選擇“允許本地管理員登錄”。這樣在登錄時就可以root為用戶名登錄了。登錄后看到的是英文界面,即便你已經安裝了中文語言包。這時還需做以下設置才能出現中文界面。
- gedit ~/.profile
修改root下隱藏文件.profile,以下是修改過的。此后就成為中文桌面。# ~/.profile: executed by Bourne-compatible login shells. if [ "$BASH" ]; then if [ -f ~/.bashrc ]; then . ~/.bashrc fi fi mesg n # Installed by Debian Installer: # no localization for root because zh_CN.UTF-8 # cannot be properly displayed at the Linux console LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh"
2、安裝主機GCC編譯器
編譯qtopia時需要用到主機的GCC編譯器,ubuntu默認是不帶的,因此需要下載安裝。在新立得軟件包管理器中搜索GCC,然后選擇安裝。我安裝的是GCC4.2版。
3、安裝交叉編譯器
(1)我用的交叉編譯器是arm-linux-gcc 3.4.1版。
進入arm-linux-gcc-3.4.1.tar.bz2文件所在的目錄
運行命令:
mkdir /usr/local/arm (如果您的pc端linux系統已經有這個文件夾,這步就跳過)
- tar -xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /
- 然后運行命令gedit /etc/bash.bashrc
在最后加上一行PATH=$PATH:/usr/local/arm/3.4.1/bin
保存后關閉。
重新打開終端,如果輸入命令arm-linux-gcc --version后能有版本顯示則交叉編譯環境已經建立了。
(2)修改編譯器文件
- gedit /usr/local/arm/3.4.1/arm-linux/include/linux/videodev2.h 在 #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4')
- /* 8 8-bit color */ 之后添加
- #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
按同樣的方法修改arm-linux/sys_include/linux/videodev2.h
4、安裝NFS
(1)安裝nfs服務器端
- apt-get install portmap nfs-kernel-server
(2)配置共享文件
編輯/etc/exports,在其中增加要共享的目錄
- gedit /etc/exports
配置
- /work/qtopia_arm/nfs *(rw,sync, no_root_squash)
/work/qtopia_arm/nfs是要共享的目錄;*代表所有的客戶機都可以掛接此文件系統;rw代表客戶機以讀寫許可來掛接它們的根文件系統;no_root_squash 選項允許客戶機以主機上的root身份掛接根文件系統。保存退出。
(3)重啟服務
- /etc/init.d/portmap restart
- /etc/init.d/nfs-kernel-server restart
每當修改了/etc/exports都要重啟服務以便修改生效。
5、安裝一些庫
在編譯時可能會出現一些錯誤,提示缺少某些庫,這時可以根據提示來下載安裝缺少的庫文件。每個人的主機環境都不太一樣,因此缺少的庫可能也不一樣。
6、建立工作目錄
創建 /work/qtopia_arm/nfs
并拷貝qtopia-opensource-4.3.2源碼包到/work/qtopia_arm/目錄下。
7、定義兩個環境變量方便編譯
- #export QTOPIA_INSTALL=/work/qtopia_arm/nfs
- #export QTOPIA_RUN_ON_TARGET=/mnt
QTOPIA_INSTALL為主機上qtopia最終的安裝目錄,這里將安裝路徑獨立出來是為了方便在目標板上進行nfs掛載調試使用。
QTOPIA_RUN_ON_TARGET為qtopia在target板文件系統中的所在路徑。如果采用NFS方式,一定要將qtopia掛載到QTOPIA_RUN_ON_TARGET指定的路徑即/mnt ,因為qtopia運行的絕對路徑已經被編譯進可執行文件中。
8、修改部分源碼
(1)拷貝編譯目標需要的文件
- # cd /work/qtopia_arm/qtopia-opensource-4.3.2/src/libraries/qtopiabase/
- # cp custom-linux-generic-g++.h custom-linux-arm-g++.h
- # cp custom-linux-generic-g++.cpp custom-linux-arm-g++.cpp
Note: 這兩個文件包含控制液晶屏亮度函數和一些優化qotpia core 的宏定義,用戶可自己設定
(2)直接支持觸摸屏而不使用外部庫
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定義
- #define QT_QWS_IPAQ
- #define QT_QWS_IPAQ_RAW
(3)修改時區信息讀取路徑
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定義
- #define QTOPIA_ZONEINFO_PATH "/mnt/etc/zoneinfo/"
QTOPIA_ZONEINFO_PATH即時區文件所在的路徑,這里對它進行修改是必要的。否則qtopia運行時候會到默認路徑/usr/share/zoneinfo尋找時區文件。注意,這里的“/mnt”即qtopia在開發板文件系統中的所在路徑,要和環境變量$QTOPIA_RUN_ON_TARGET一樣。
9、生成Makefile文件
建立一個空文件Configure.sh,
并拷貝下列內容:
- echo "yes" | /work/qtopia_arm/qtopia-opensource-4.3.2/configure -edition phone -xplatform linux-arm-g++ -arch arm
- -no-qvfb -release -displaysize 480*272 -no-modem -launch-method quicklaunch –image /work/qtopia_arm/nfs
- -prefix /mnt -no-bluetooth -no-drm -no-infrared -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng
- -qt-libjpeg" -extra-qtopiacore-config " -depths 16 -qt-mouse-linuxtp -no-mouse-pc -no-mouse-bus
- -no-mouse-yopy -no-mouse-vr41xx -no-mouse-tslib -no-mouse-qvfb" 2>&1 | tee logfile
注意:腳本文件要具有可執行屬性才能執行,執行chmod +x Configure.sh。
注:1) 這里需要提的是qtopia交叉編譯時默認是使用arm-linux-gcc編譯的,從-xplatform 參數指定的路徑linux-arm-g++下,我們可以找到qmake.conf文件,里面定義了交叉編譯所使用的工具, QMAKE_CC默認為arm-linux-gcc。所以,若有人使用了其他名字的交叉編譯工具,需要在qmake.conf文件進行修改或將編譯工具連接為arm-linux-*也可以。
10、配置并編譯
生成Makefile
- #cd /work/qtopia_arm
- #./configure.sh
編譯并安裝
- #make
- #make install
安裝路徑為$QTOPIA_INSTALL即/work/qtopia_arm/nfs
11、拷貝zoneinfo
默認安裝時沒有拷貝時區信息,需要手動拷貝
- #cp –rvf /work/qtopia_arm/qtopia-opensource-4.3.2/etc/zoneinfo /work/qtopia_arm/nfs/etc
12、運行qtopia
(1)啟動好開發板后(內核+文件系統),掛載qtopia
- #mount -t nfs 192.168.1.101:/work/qtopia_arm/nfs /mnt -o nolock,rsize=1024,wsize=1024,timeo=15
主機IP地址設置為192.168.1.101,子網掩碼255.255.255.0,網關192.168.1.1
開發板IP地址設置為192.168.1.168,子網掩碼255.255.255.0,網關192.168.1.1
(2)設置環境變量
導入某些環境變量,使qtopia正常工作
在開發板上執行:
- #export PATH=/mnt/bin:$PATH
- #export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH
- #export QWS_MOUSE_PROTO=LinuxTP:/dev/h3600_tsraw
- #export QWS_DISPLAY="LinuxFb:mmWidth85:mmHeight48:0"
其中“mmWidthXX:mmHeightXX”為屏幕的可視面積大小,與具體的設備尺寸有關系
- 12.3運行qpe
- #qpe&
等target板LCD出現畫面之后,啟動觸摸屏校正程序
- #qcop service send Launcher "execute(QString)" "calibrate"
校準完后會在/etc目錄下生成Pointercal校準文件,每次觸摸屏啟動都會讀取該文件內容進行觸摸屏設定。還有一種方法是利用TSLIB庫的校準程序來進行校準,將TSLIB交叉編譯到目標機上,然后運行ts_calibrate程序。
校準完畢后就可正常使用qpe。
注意:
1、首先假定開發板觸摸屏驅動工作正常。可以通過如下的辦法簡單的測試一下:
- #cat /dev/fb0
- #cat /dev/h3600_tsraw
如果報錯則說明設備未能正確添加。需要先解決觸摸屏驅動問題。
2、Qtopia運行時可能需要的一些額外庫,
- cp -v libdl*so* $QTOPIA_INSTALL/lib/
- cp -v libpthread*so* $QTOPIA_INSTALL/lib/
- cp -v libstdc++*so* $QTOPIA_INSTALL/lib/
- cp -v libgcc_s*so* $QTOPIA_INSTALL/lib/
小結:Ubuntu 8.04下編譯運行Qtopia 4.3.2過程的內容介紹完了,Ubuntu的推出,又給LINUX添加了新印象。最后希望本文對你有所幫助吧!