Ubuntu 8.04下編譯運(yùn)行Qtopia 4.3.2過(guò)程
Ubuntu 項(xiàng)目完全遵從開(kāi)源軟件開(kāi)發(fā)的原則;并且鼓勵(lì)人們使用、完善并傳播開(kāi)源軟件。也就是Ubuntu目前是并將永遠(yuǎn)是免費(fèi)的。 然而,這并不僅僅意味著零成本,自由軟件的理念是人們應(yīng)該以所有“對(duì)社會(huì)有用”的方式自由地使用軟件,本文用的開(kāi)發(fā)板:YC2440-F-V5.1
1、ubuntu8.04開(kāi)啟root用戶及設(shè)置中文界面
Ubuntu安裝后,root用戶默認(rèn)是被鎖定了的,不允許登錄。對(duì)于桌面用戶來(lái)說(shuō),這樣安全性更高一些,是應(yīng)該的。但做為嵌入式系統(tǒng)開(kāi)發(fā),則不是很合適。有時(shí)在編譯程序時(shí)會(huì)遇到一些莫名其妙的問(wèn)題。因此我們需要開(kāi)啟root用戶。
步驟:
1、系統(tǒng)->系統(tǒng)管理->用戶和組,選擇root用戶然后點(diǎn)擊“屬性”,設(shè)置root用戶的密碼;
2、系統(tǒng)>系統(tǒng)管理>登錄窗口,點(diǎn)“安全”選項(xiàng)頁(yè),選擇“允許本地管理員登錄”。這樣在登錄時(shí)就可以root為用戶名登錄了。登錄后看到的是英文界面,即便你已經(jīng)安裝了中文語(yǔ)言包。這時(shí)還需做以下設(shè)置才能出現(xiàn)中文界面。
- gedit ~/.profile
修改root下隱藏文件.profile,以下是修改過(guò)的。此后就成為中文桌面。# ~/.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、安裝主機(jī)GCC編譯器
編譯qtopia時(shí)需要用到主機(jī)的GCC編譯器,ubuntu默認(rèn)是不帶的,因此需要下載安裝。在新立得軟件包管理器中搜索GCC,然后選擇安裝。我安裝的是GCC4.2版。
3、安裝交叉編譯器
(1)我用的交叉編譯器是arm-linux-gcc 3.4.1版。
進(jìn)入arm-linux-gcc-3.4.1.tar.bz2文件所在的目錄
運(yùn)行命令:
mkdir /usr/local/arm (如果您的pc端linux系統(tǒng)已經(jīng)有這個(gè)文件夾,這步就跳過(guò))
- tar -xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /
- 然后運(yùn)行命令gedit /etc/bash.bashrc
在最后加上一行PATH=$PATH:/usr/local/arm/3.4.1/bin
保存后關(guān)閉。
重新打開(kāi)終端,如果輸入命令arm-linux-gcc --version后能有版本顯示則交叉編譯環(huán)境已經(jīng)建立了。
(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服務(wù)器端
- 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是要共享的目錄;*代表所有的客戶機(jī)都可以掛接此文件系統(tǒng);rw代表客戶機(jī)以讀寫許可來(lái)掛接它們的根文件系統(tǒng);no_root_squash 選項(xiàng)允許客戶機(jī)以主機(jī)上的root身份掛接根文件系統(tǒng)。保存退出。
(3)重啟服務(wù)
- /etc/init.d/portmap restart
- /etc/init.d/nfs-kernel-server restart
每當(dāng)修改了/etc/exports都要重啟服務(wù)以便修改生效。
5、安裝一些庫(kù)
在編譯時(shí)可能會(huì)出現(xiàn)一些錯(cuò)誤,提示缺少某些庫(kù),這時(shí)可以根據(jù)提示來(lái)下載安裝缺少的庫(kù)文件。每個(gè)人的主機(jī)環(huán)境都不太一樣,因此缺少的庫(kù)可能也不一樣。
6、建立工作目錄
創(chuàng)建 /work/qtopia_arm/nfs
并拷貝qtopia-opensource-4.3.2源碼包到/work/qtopia_arm/目錄下。
7、定義兩個(gè)環(huán)境變量方便編譯
- #export QTOPIA_INSTALL=/work/qtopia_arm/nfs
- #export QTOPIA_RUN_ON_TARGET=/mnt
QTOPIA_INSTALL為主機(jī)上qtopia最終的安裝目錄,這里將安裝路徑獨(dú)立出來(lái)是為了方便在目標(biāo)板上進(jìn)行nfs掛載調(diào)試使用。
QTOPIA_RUN_ON_TARGET為qtopia在target板文件系統(tǒng)中的所在路徑。如果采用NFS方式,一定要將qtopia掛載到QTOPIA_RUN_ON_TARGET指定的路徑即/mnt ,因?yàn)閝topia運(yùn)行的絕對(duì)路徑已經(jīng)被編譯進(jìn)可執(zhí)行文件中。
8、修改部分源碼
(1)拷貝編譯目標(biāo)需要的文件
- # 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: 這兩個(gè)文件包含控制液晶屏亮度函數(shù)和一些優(yōu)化qotpia core 的宏定義,用戶可自己設(shè)定
(2)直接支持觸摸屏而不使用外部庫(kù)
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定義
- #define QT_QWS_IPAQ
- #define QT_QWS_IPAQ_RAW
(3)修改時(shí)區(qū)信息讀取路徑
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定義
- #define QTOPIA_ZONEINFO_PATH "/mnt/etc/zoneinfo/"
QTOPIA_ZONEINFO_PATH即時(shí)區(qū)文件所在的路徑,這里對(duì)它進(jìn)行修改是必要的。否則qtopia運(yùn)行時(shí)候會(huì)到默認(rèn)路徑/usr/share/zoneinfo尋找時(shí)區(qū)文件。注意,這里的“/mnt”即qtopia在開(kāi)發(fā)板文件系統(tǒng)中的所在路徑,要和環(huán)境變量$QTOPIA_RUN_ON_TARGET一樣。
9、生成Makefile文件
建立一個(gè)空文件Configure.sh,
并拷貝下列內(nèi)容:
- 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
注意:腳本文件要具有可執(zhí)行屬性才能執(zhí)行,執(zhí)行chmod +x Configure.sh。
注:1) 這里需要提的是qtopia交叉編譯時(shí)默認(rèn)是使用arm-linux-gcc編譯的,從-xplatform 參數(shù)指定的路徑linux-arm-g++下,我們可以找到qmake.conf文件,里面定義了交叉編譯所使用的工具, QMAKE_CC默認(rèn)為arm-linux-gcc。所以,若有人使用了其他名字的交叉編譯工具,需要在qmake.conf文件進(jìn)行修改或?qū)⒕幾g工具連接為arm-linux-*也可以。
10、配置并編譯
生成Makefile
- #cd /work/qtopia_arm
- #./configure.sh
編譯并安裝
- #make
- #make install
安裝路徑為$QTOPIA_INSTALL即/work/qtopia_arm/nfs
11、拷貝zoneinfo
默認(rèn)安裝時(shí)沒(méi)有拷貝時(shí)區(qū)信息,需要手動(dòng)拷貝
- #cp –rvf /work/qtopia_arm/qtopia-opensource-4.3.2/etc/zoneinfo /work/qtopia_arm/nfs/etc
12、運(yùn)行qtopia
(1)啟動(dòng)好開(kāi)發(fā)板后(內(nèi)核+文件系統(tǒng)),掛載qtopia
- #mount -t nfs 192.168.1.101:/work/qtopia_arm/nfs /mnt -o nolock,rsize=1024,wsize=1024,timeo=15
主機(jī)IP地址設(shè)置為192.168.1.101,子網(wǎng)掩碼255.255.255.0,網(wǎng)關(guān)192.168.1.1
開(kāi)發(fā)板IP地址設(shè)置為192.168.1.168,子網(wǎng)掩碼255.255.255.0,網(wǎng)關(guān)192.168.1.1
(2)設(shè)置環(huán)境變量
導(dǎo)入某些環(huán)境變量,使qtopia正常工作
在開(kāi)發(fā)板上執(zhí)行:
- #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”為屏幕的可視面積大小,與具體的設(shè)備尺寸有關(guān)系
- 12.3運(yùn)行qpe
- #qpe&
等target板LCD出現(xiàn)畫面之后,啟動(dòng)觸摸屏校正程序
- #qcop service send Launcher "execute(QString)" "calibrate"
校準(zhǔn)完后會(huì)在/etc目錄下生成Pointercal校準(zhǔn)文件,每次觸摸屏啟動(dòng)都會(huì)讀取該文件內(nèi)容進(jìn)行觸摸屏設(shè)定。還有一種方法是利用TSLIB庫(kù)的校準(zhǔn)程序來(lái)進(jìn)行校準(zhǔn),將TSLIB交叉編譯到目標(biāo)機(jī)上,然后運(yùn)行ts_calibrate程序。
校準(zhǔn)完畢后就可正常使用qpe。
注意:
1、首先假定開(kāi)發(fā)板觸摸屏驅(qū)動(dòng)工作正常??梢酝ㄟ^(guò)如下的辦法簡(jiǎn)單的測(cè)試一下:
- #cat /dev/fb0
- #cat /dev/h3600_tsraw
如果報(bào)錯(cuò)則說(shuō)明設(shè)備未能正確添加。需要先解決觸摸屏驅(qū)動(dòng)問(wèn)題。
2、Qtopia運(yùn)行時(shí)可能需要的一些額外庫(kù),
- 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/
小結(jié):Ubuntu 8.04下編譯運(yùn)行Qtopia 4.3.2過(guò)程的內(nèi)容介紹完了,Ubuntu的推出,又給LINUX添加了新印象。最后希望本文對(duì)你有所幫助吧!