linux基礎(chǔ)復(fù)習(xí)(5)建立linux開(kāi)發(fā)環(huán)境
各工具的安裝,就不說(shuō)明了,百度一下就有了,直接看我安裝后的樣子:
PS:我使用的是友善之臂,QQ2440V3 的開(kāi)發(fā)板
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412124954.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
其中:
- arm-linux-gcc-3.3.2 編譯Qtopia 使用
- arm-linux-gcc-3.4.1 編譯內(nèi)核使用
- arm-linux-gcc-2.95.3 編譯vivi 使用
后面兩個(gè)還可以用來(lái)編譯開(kāi)發(fā)板上的應(yīng)用程序,另外,裝完后要對(duì)環(huán)境變量進(jìn)行設(shè)置,這有兩個(gè)版本,一個(gè)是修改 /etc/profile,一個(gè)是/etc/bashrc ,一直搞不明白有什么區(qū)別,今天在網(wǎng)上搜索到答案,高興:
1.export PATH=/usr/local/arm/2.95.3/bin:$PATH
2.PATH=$PATH:/usr/local/arm/2.95.3/bin
3.在出現(xiàn)pathmunge 的語(yǔ)句段后添加pathmunge /usr/local/arm/2.95.3(版本號(hào))/bin;
以上3個(gè)其實(shí)都是一樣的作用,都是通過(guò)改變PATH環(huán)境變量。不同的是:
/etc/profile是在啟動(dòng)一個(gè)交互登陸shell的時(shí)候被調(diào)用(通過(guò)/bin/login登陸,TTY上的開(kāi)機(jī)登錄就是這個(gè))
/etc/bashrc則是在一個(gè)交互的非登陸shell啟動(dòng)的時(shí)候被調(diào)用(通過(guò)命令行運(yùn)行,例如在命令行輸入bash)
所以怎么設(shè)置就要看需要,一般來(lái)說(shuō),像這種設(shè)置工具鏈的環(huán)境變量,設(shè)置在/etc/profile里會(huì)更加好。
export是一個(gè)用于設(shè)置環(huán)境變量的指令,但是BASH支持直接設(shè)置,所以如果你的機(jī)器是BASH作為shell的話(huà)(一般Linux都是的),可以不使用export。
pathmunge也是一個(gè)指令,是一個(gè)直接用于添加路徑到PATH環(huán)境變量的指令。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412125201.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
其中:
/opt/FriendlyARM/QQ2440
|__kernel 開(kāi)發(fā)板所用的內(nèi)核源
|__x86-qtopia Qt/Embedded源代碼(x86版本)
|__arm-qtopia Qt/Embedded源代碼(ARM帶觸摸版本)
|__ipaq-qtopia Qt/Embedded源代碼(ARM帶USB鼠標(biāo)版本)
|___root_default 板子所使用的基本文件系統(tǒng)
|___root_mizi mizi 公司提供的文件,含有中文手寫(xiě)識(shí)別及瀏覽器等
|___root_qtopia_tp 帶Qtopia的文件系統(tǒng)(使用觸摸)
|___root_qtopia_mouse 帶Qtopia的文件系統(tǒng)(使用USB鼠標(biāo)、鍵盤(pán))
|___busybox-1.2.0 busybox源代碼
|___examples 示例代碼
|___Jflash 燒寫(xiě)工具
QT/E 環(huán)境工具
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412130008.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
安裝QT/E 工具比方煩瑣,貼一篇我在網(wǎng)上找的教程:
1. 簡(jiǎn)介
QT是目前在linux上使用較廣的一個(gè)圖形系統(tǒng)。用戶(hù)經(jīng)常配合KDE桌面環(huán)境來(lái)使用。需要注意的是我們看到的并操作的是KDE,而不是QT。QT只是一套庫(kù)函數(shù)(類(lèi)庫(kù)),KDE才是可執(zhí)行程序.同時(shí)KDE為了其他程序方便的對(duì)其操作,也提供一套庫(kù)函數(shù)(類(lèi)庫(kù))。
在PC機(jī)上的QT是基于X11圖形系統(tǒng)的,在嵌入設(shè)備中往往不需要這么累贅,只需使用QTE(QT Embedded)即可包括PC平臺(tái)中X11和QT庫(kù)的功能。
另一方面,嵌入設(shè)備受許多條件的限制,桌面系統(tǒng)也不能直接使用PC機(jī)上已有的系統(tǒng)。QTOPIA就是相當(dāng)于KDE的桌面系統(tǒng).根據(jù)具體嵌入設(shè)備的需要可以配置成phone和pocket pc兩種。
2. 準(zhǔn)備工作
2.1 目標(biāo)
首先要明確將要干的是什么,將怎么做。
我們的目標(biāo)很明確——就是在自己的開(kāi)發(fā)板上使用基于QTE的桌面系統(tǒng)QTOPIA。
我們的工作往往是先在PC完成以后移植到ARM平臺(tái)上;先編譯好QTE的庫(kù),再編譯QTOPIA。因?yàn)檫@個(gè)系統(tǒng)和具體的設(shè)備有關(guān)(例如:觸摸屏、時(shí)鐘、電源管理設(shè)備等),所以最后還需要做設(shè)備接口的移植工作。
2.2 軟件包
系統(tǒng)平臺(tái):RedHat 9(完全安裝)
qt-embedded-2.3.7.tar.gz (qte的庫(kù))
qt-x11-2.3.2.tar.gz (為了生成相應(yīng)的qtdesigner和qvfb)
qtopia-free-1.7.0.tar.gz (qte的桌面環(huán)境程序)
tmake-1.11.tar.gz (編譯時(shí)會(huì)用到)
e2fsprogs-1.35.tar.gz (只使用其中的uuid的庫(kù))
當(dāng)下載完這些包以后我們先建立一個(gè)工作環(huán)境。假設(shè)所有軟件包都下載在用戶(hù)目錄下,通常都是/root。
2.3 環(huán)境的建立
# cd ~
# mkdir x86-qtopia
# tar zxvf qt-x11-2.3.2.tar.gz[!--empirenews.page--]
# mv qt-2.3.2 qt-x11
# cd x86-qtopia
# tar zxvf ../tmake-1.11.tar.gz
# tar zxvf ../qt-embedded-2.3.7.tar.gz
# tar zxvf ../qtopia-free-1.7.0.tar.gz
# tar zxvf ../e2fsprogs-1.35.tar.gz
# mv tmake-1.11 tmake
# mv qt-2.3.7/ qt
# mv qtopia-free-1.7.0 qtopia
# mv e2fsprogs-1.35 e2fsprogs
# cp x86-qtopia arm-qtopia -rf
記住,用戶(hù)目錄下的x86-qtopia目錄是PC機(jī)上編譯的工作環(huán)境,arm-qtopia是arm平臺(tái)的交叉編譯工作環(huán)境,qt-x11是兩者公用的。
接下來(lái)還必須編譯qt-x11,主要是為了編譯生成其中的qtdesigner和qvfb。qvfb程序在系統(tǒng)中并未安裝,需要我們自己編譯。qtdesigner是和qt庫(kù)的版本是相關(guān)的,當(dāng)我們使用PC機(jī)上和QTE版本不符的qtdesigner時(shí),可能在PC機(jī)上的qt-x11能使用的控件在QTE上并未實(shí)現(xiàn),導(dǎo)致應(yīng)用程序編譯不成功。所以,我們使用2.3版本的QTE時(shí),必須使用相同版本的qt-x11編譯生成的qtdesigner和qvfb。
# cd ~/qt-x11
# export QTDIR=$PWD
# echo yes | ./configure -static -no-xft -no-opengl -no-sm
# make -C src/moc
# cp src/moc/moc bin
# make -C src
# make -C tools/designer
# make -C tools/qvfb
# cp tools/qvfb/qvfb bin
# strip bin/uic bin/moc bin/designer bin/qvfb
# cp qt-x11/bin/* qt/bin -f
# cp qt-x11/bin/* qt/bin -f
3. PC平臺(tái)編譯
編譯之前做一下準(zhǔn)備工作:打開(kāi)一個(gè)控制臺(tái)之后設(shè)置環(huán)境變量。
# cd ~/x86-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
3.1 編譯QTE
# cd $QTDIR
# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f
# (echo yes ; echo no) | ./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
# make -C src clean
# make -C src
看一下$QTDIR目錄下是否已經(jīng)有了qt的庫(kù)了?
3.2 編譯QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make
3.3 測(cè)試QTOPIA
激動(dòng)的時(shí)刻來(lái)了,如果這個(gè)步驟成功將意味著可以做應(yīng)用開(kāi)發(fā)了。
# cd ~/x86-qtopia
# mkdir dist
# cd dist
# cp -af ../qt/lib/ .
# cp -af ../qtopia/apps .
# cp -af ../qtopia/bin .
# cp -af ../qtopia/plugins .
# cp -af ../qtopia/i18n .
# cp -af ../qtopia/pics .
因?yàn)镾ecurity.png有點(diǎn)錯(cuò)誤,所以必須進(jìn)行一下操作:
# cd pics
# pngtopnm Security.png>a.pnm
# pnmtopng a.pnm>Security.png
因?yàn)閝pe運(yùn)行的時(shí)候,當(dāng)前目錄必須是$QTDIR/bin,所以不能在$QTDIR目錄下執(zhí)行bin/qpe來(lái)運(yùn)行。
# export QTDIR=~/x86-qtopia/qt
# cd $QTDIR/bin
# ./qvfb &
# ./qpe &
看到qpe在qvfb中的界面了嗎?我看到了~!
4. 目標(biāo)平臺(tái)交叉編譯
與PC機(jī)上的編譯一樣,打開(kāi)一個(gè)控制臺(tái)之后需要設(shè)置環(huán)境變量。
# cd ~/arm-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
4.1 交叉編譯QT
4.2 交叉編譯QTOPIA
5. 移植QT中的相關(guān)設(shè)備接口
5.1 鼠標(biāo)
5.2 觸摸屏
6. 移植QTOPIA中的相關(guān)設(shè)備接口
6.1 電源管理設(shè)備
7. 編寫(xiě)QT程序并移植
8. 編寫(xiě)QTOPIA程序并移植
X. tips
@ 移植的時(shí)候編譯器的版本很重要.qte-2.3.7在redhat9的3.2編譯器下工作很正常,但在Fedora4的gcc-3.4.2編譯器下編譯卻不成功.根據(jù)測(cè)試,PC平臺(tái)上使用gcc- 3.2可以順利編譯,arm平臺(tái)上使用gcc-2.95.2可以順利通過(guò)(gnuarm的編譯器好像不行,用華恒光盤(pán)中的armv4l-unkown-linux-gcc的可以編譯通過(guò))
@ 編譯過(guò)程中會(huì)提示缺少u(mài)uid的頭文件和庫(kù),下載e2fsprogs-libs-1.38.tar.gz,里面有uuid的相關(guān)代碼.
@ 編譯的時(shí)候需要指定編譯器,在qt的configs目錄下有許多文件,修改linux-arm-g++-*這些文件中的相關(guān)定義.例如:默認(rèn)使用arm-linux-gcc編譯器,而我使用的是GNUARM的arm-elf-gcc編譯器,替換文件中所有arm-linux-前綴為arm-elf-即可.
坦白說(shuō),安裝過(guò)程很煩瑣,我買(mǎi)開(kāi)發(fā)板的時(shí)候,光盤(pán)送了一些工具,還有把QT/E 的安裝過(guò)程做成了一個(gè)腳本,類(lèi)似于windows 上的批處理,很方便,呵呵
做完上面那些,基本上開(kāi)發(fā)平臺(tái)就建好了,下面實(shí)踐一下一些簡(jiǎn)單的工具使用:
(以下資料來(lái)自QQ2440 Linux 開(kāi)發(fā)指南華南木棉嵌入式工作室
http://www.arm123.net
)
1.2.1.2.1
Jflash
jflash2440 是Linux 下通過(guò)JTAG 接口燒寫(xiě)B(tài)IOS 到Nand Flash 的工具。
使用JTAG 接口下載程序需要一條JTAG 電纜(已經(jīng)隨開(kāi)發(fā)套件附送),把JTAG 電纜連接板
子和主機(jī)的并口,然后打開(kāi)目標(biāo)板電源開(kāi)關(guān)
#cd /opt/FriendlyARM/QQ2440/Jflash
注意:該目錄下包含了Jflash 的源代碼,你可以運(yùn)行“make clean”刪除已經(jīng)編譯好的的程序,運(yùn)行“make”重新編譯。
執(zhí)行以下命令可以查看Jflash 的使用方法:
#./Jflash-s3c2440 --help
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412130758.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>[!--empirenews.page--]
可見(jiàn),對(duì)應(yīng)不同類(lèi)型的Flash ,Jflash 程序使用不同的選項(xiàng)參數(shù),因?yàn)槲覀兪褂玫氖?4M 三星Nand Flash,因此使用“/t=5”。
執(zhí)行以下命令開(kāi)始燒寫(xiě)vivi,如圖所示。
#./Jflash-s3c2440 vivi /t=5
注意:如果您在當(dāng)前目錄下執(zhí)行該命令,請(qǐng)先copy 一份vivi 二進(jìn)制文件到該目錄。
1.2.2
minicom
minicom 是Linux 上最常用的終端仿真程序,它類(lèi)似于Windows 下的“超級(jí)終端”的程序,一般完全安裝大部分發(fā)行版的Linux 時(shí)都會(huì)包含它,下面介紹它的使用方法。
使用minicom 之前先設(shè)置一下,如下圖所示:
#minicom -s ;加“-s” 選項(xiàng)設(shè)置minicom
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412131120.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
運(yùn)行“minicminicom -s”設(shè)置minicom
選擇菜單中的“Serial port setup”,按回車(chē),進(jìn)入如下圖所示界面。此時(shí)按“A”以設(shè)置“Serial
Device”(如果您使用串口1,則輸入/dev/ttyS0,如果您使用串口2,則輸入/dev/ttyS1)。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412131208.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
設(shè)置“Serial Device”
按“E”鍵進(jìn)入設(shè)置“bps/par/Bits”(波特率)界面,如下圖所示。再按“I”以設(shè)置波特率
為115200。設(shè)置波特率
然后按回車(chē)退回到上一級(jí)菜單,按“F”鍵設(shè)置“Hardware Flow Control”為“NO”,其他
選項(xiàng)使用缺省值,如下圖所示。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080412131325.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
設(shè)置“HardwarHardware Flow Control ”
設(shè)置完畢,按回車(chē)鍵返回到串口設(shè)置主菜單,選擇“Save setup as dfl”,按回車(chē)鍵保存剛才
的設(shè)置.再選擇“Exit”退出設(shè)置模式。剛才的設(shè)置被保存到“/etc/minirc.dfl”。
設(shè)置完畢,如果此時(shí)打開(kāi)板子的電源開(kāi)關(guān),就會(huì)看到vivi 的啟動(dòng)信息,當(dāng)Linux 啟動(dòng)以后,
minicom 就相當(dāng)于虛擬終端,你就能通過(guò)它來(lái)操作目標(biāo)板了。
要退出minicom,同時(shí)按下“Ctrl+A”鍵,松開(kāi)后緊接著再按下“Q”鍵,在跳出的窗口中,
選擇"Yes"退出minicminicom
2 配置和編譯 BIOS(vivi)
首先,進(jìn)入vivi 源代碼目錄:
#cd /opt/FriendlyARM/QQ2440/vivi
再執(zhí)行“make”開(kāi)始編譯:
#make
如果編譯過(guò)程順利,將會(huì)在當(dāng)前目錄下生成vivi 二進(jìn)制映象文件。
說(shuō)明:該編譯過(guò)程為默認(rèn)設(shè)置,如果你想改變vivi 的某些配置,可以執(zhí)行“make menuconfig”
來(lái)定制vivi。
配置和編譯內(nèi)核(kernel)
QQ2440 所用的內(nèi)核源代碼位于/opt/FriendlyARM/QQ2440/linux-2.6.13 目錄。該目錄下有三
個(gè)config_開(kāi)頭的文件:
config_cs8900_n35
config_cs8900_s35
config_cs8900_tft640480
您可以選擇適合自己LCD 型號(hào)的配置文件,復(fù)制一個(gè)名為.config 的文件
#cp
config_cs8900_tft640480
.config
注意:config
之前有個(gè)”
。”
然后執(zhí)行make menuconfig
#make
menuconfig
注意:該步驟一定要執(zhí)行。
如果您對(duì)內(nèi)核的配置不熟悉,先不用作任何修改,保存退出即可。
最后執(zhí)行make zImage 開(kāi)始編譯內(nèi)核。
#make
zImage
編譯完畢,將在arch/arm/boot
目錄下生成zImage 文件,即linux 內(nèi)核文件映象。
制作 YAFFS 文件系統(tǒng)映象
使用mkyaffsimg 程序可以把一個(gè)目錄做成一個(gè)yaffs 映象文件,然后使用USB 下載到板子
中。
4.1
基本文件系統(tǒng)映象
為了制作板子所需要的基本系統(tǒng)映象文件,可以按照這樣的步驟執(zhí)行操作:
#cd /opt/FriendlyARM/QQ2440
#mkyaffsimage
root_default
root_default.img
將在/opt/FriendlyARM/QQ2440 目錄下生成root_default.img,在BIOS 模式下[!--empirenews.page--]
使用”loadyaffs root u ”就可以把它下載到板子里面去了。
4.2
Qtopia
文件系統(tǒng)映象
為了制作板子所需要的基本系統(tǒng)映象文件,可以按照這樣的步驟執(zhí)行操作:
#cd /opt/FriendlyARM/QQ2440
#mkyaffsimage
root_qtopia_tp
root_qtopia_tp.img
將在/opt/FriendlyARM/QQ2440 目錄下生成root_qtopia_tp.img , 在BIOS 模式下使
用”loadyaffs root u ”就可以把它下載到板子里面去了。
用戶(hù)可以參考以上方法把以上方法把root_qtopia_mouse/root_mizi 做成映象文件下載到板子里。