基于LPC2210的嵌入式Linux開(kāi)發(fā)平臺(tái)構(gòu)建
2.1 uCLinux 操作系統(tǒng)的移植
在開(kāi)始移植操作系統(tǒng)之前,先準(zhǔn)備好移植所需要的軟件包,主要包括:交叉編譯所需的編譯工具包、uCLinux 源碼包、完整的bootloader 程序及根文件系統(tǒng)。上述二種工具包都有眾多版本,本文分別選擇的是uCLinux-dist-20040408.tar.gz、arm-elf-tools-20040427.sh。整個(gè)移植工作分為三步:建立交叉編譯環(huán)境;編譯配置內(nèi)核;bootloader 及根文件系統(tǒng)的移植。
2.1.1 建立交叉編譯環(huán)境
將工具包 arm-elf-tools-20040427.sh 拷貝到目錄/usr/src 下,為其增加可執(zhí)行權(quán)限(#chmod755 arm-elf-tools-20040427.sh);然后安裝arm-elf-gcc(# ./ arm-elf-tools-20040427.sh),安裝完畢后查看/usr/local/bin 目錄下是否存在arm-elf-gcc 等文件,如存在,表明交叉編譯器安裝成功;最后是添加交叉編譯的路徑,這一步在安裝過(guò)程會(huì)自動(dòng)執(zhí)行和保存,并在下次啟動(dòng)之后仍然有效(#export PATH=$PATH:/usr/local/arm-elf/bin)。至此,交叉編譯環(huán)境已經(jīng)建立完畢。
2.1.2 交叉編譯uCLinux 內(nèi)核
在交叉編譯內(nèi)核之前,首先要對(duì)編譯選項(xiàng)進(jìn)行配置。為了配置過(guò)程的直觀性,一般選擇“make menuconfig”命令,進(jìn)入uCLinux v3.1.0 Configuration 界面,主要是設(shè)置嵌入式處理器的型號(hào)以及操作系統(tǒng)的版本,然后選擇Default all settings 后進(jìn)行編譯即可。交叉編譯工作一次由以下命令完成:
#cd /usr/src/uCLinux-dist // uCLinux-dist 為uCLinux 源代碼所在目錄
#make distclean // 清除上一次編譯所產(chǎn)生的輔助文件和目標(biāo)文件
#make menuconfig // 通過(guò)文本菜單方式配置uCLinux
#make dep // 建立源代碼文件的依賴(lài)關(guān)系
#make //編譯內(nèi)核
編譯結(jié)束之后會(huì)在 uCLinux 安裝目錄下建立romfs 和images 兩個(gè)目錄。其中romfs 為romfs 文件系統(tǒng)的臨時(shí)存放目錄;images 為生成的目標(biāo)代碼目錄,其中romfs.img 為romfs文件系統(tǒng)的映像文件,image.bin 為文件系統(tǒng)和內(nèi)核代碼的目標(biāo)文件。
2.1.3 bootloader 及根文件系統(tǒng)的移植
通過(guò) RS-232 串口將完整的bootloader 程序下載到目標(biāo)板的NOR Flash 中。主要工作是在WinXP 下設(shè)置超級(jí)終端,波特率38400、8 位數(shù)據(jù)位、1 位停止位、無(wú)奇偶校驗(yàn)位、無(wú)流控制。通過(guò)運(yùn)行下載程序,可以將bootloader 下載到NOR Flash 中。
建立 uCLinux 超級(jí)終端,設(shè)置波特率為115200、8 位數(shù)據(jù)位、1 位停止位、無(wú)奇偶校驗(yàn)位、無(wú)流控制。命名為uCLinux。然后啟動(dòng)開(kāi)發(fā)板,在超級(jí)終端中也即嵌入式開(kāi)發(fā)板的“顯示器”中,可以看到bootloader 的啟動(dòng)界面,通過(guò)FlashFXP 軟件可以將目錄bin、boot、etc下的文件下載到開(kāi)發(fā)板。
2.1.4 uCLinux 的啟動(dòng)
通過(guò) bootloader 轉(zhuǎn)載和引導(dǎo)剛剛生成的內(nèi)核和文件系統(tǒng)。bootloader 引導(dǎo)內(nèi)核的方式是:將內(nèi)核影像文件和根文件系統(tǒng)下載至PSRAM 中直接啟動(dòng),而不是從NAND Flash 中讀入PSRAM,這種方法不需要燒寫(xiě)Flash。如圖3 是uCLinux 操作系統(tǒng)啟動(dòng)后的界面。
圖3 uCLinux 操作系統(tǒng)的啟動(dòng)界面
2.2 NFS 輔助開(kāi)發(fā)環(huán)境的建立
網(wǎng)絡(luò)文件系統(tǒng)(NFS,Network File System)是一種將遠(yuǎn)程主機(jī)上的分區(qū)(目錄)經(jīng)網(wǎng)絡(luò)掛載到本地系統(tǒng)的一種機(jī)制,通過(guò)對(duì)網(wǎng)絡(luò)文件系統(tǒng)的支持,用戶(hù)可以在本地系統(tǒng)上像操作本地分區(qū)一樣來(lái)對(duì)遠(yuǎn)程主機(jī)的共享分區(qū)(目錄)進(jìn)行操作。因此,通過(guò)建立NFS,把Linux 宿主機(jī)上的特定分區(qū)共享到待調(diào)試的目標(biāo)板上,就可以直接在目標(biāo)板上操作Linux 宿主機(jī)的特定分區(qū),同時(shí)可以在線對(duì)程序進(jìn)行調(diào)試和修改,大大方便了軟件的開(kāi)發(fā)。故NFS 是嵌入式Linux 開(kāi)發(fā)的一個(gè)重要組成部分,下面詳細(xì)說(shuō)明如何建立NFS 輔助開(kāi)發(fā)環(huán)境。
2.2.1 宿主機(jī)端NFS 服務(wù)器的配置
以 root 身份登錄Linux 服務(wù)器,編輯/etc 目錄下的共享目錄配置文件exports,指定共享目錄及權(quán)限等。
執(zhí)行如下命令編輯文件 /etc/exports:
#vi /etc/exports
在該文件中添加如下內(nèi)容:
/home/work 192.168.0.* (rw, sync, no_root_squash)
然后保存退出。
添加的內(nèi)容表示允許 IP 地址范圍在192.168.0.*的計(jì)算機(jī)以讀寫(xiě)的權(quán)限來(lái)訪問(wèn)/home/work 目錄。
其中,/home/work 也稱(chēng)為服務(wù)器輸出共享目錄;rw 讀寫(xiě)權(quán)限;sync 數(shù)據(jù)同步寫(xiě)入內(nèi)存和硬盤(pán);no_root_squash 為NFS 服務(wù)器共享目錄用戶(hù)的屬性,如果用戶(hù)是root,那么對(duì)于這個(gè)共享目錄來(lái)說(shuō)就具有root 權(quán)限。
接著執(zhí)行如下命令,以啟動(dòng)端口映射:
#/etc/rc.d/init.d/portmap start
最后執(zhí)行如下命令啟動(dòng) NFS 服務(wù),此時(shí)NFS 就會(huì)激活守護(hù)進(jìn)程,然后開(kāi)始*client 端的請(qǐng)求:
#/etc/rc.d/init.d/nfs start
在 NFS 服務(wù)器啟動(dòng)后,還需檢查L(zhǎng)inux 服務(wù)器的防火墻等設(shè)置(一般需要關(guān)閉防火墻服務(wù)),確保沒(méi)有屏蔽掉NFS 使用的端口和允許通信的主機(jī),主要是檢查L(zhǎng)inux 服務(wù)器iptables,ipchains 等選項(xiàng)的設(shè)置,以及/etc/hosts.deny,/etc/hosts.allow 等文件。
到此,宿主機(jī)端 NFS 服務(wù)器配置完成。
最后在宿主機(jī)上進(jìn)行 NFS 服務(wù)器的回環(huán)測(cè)試,驗(yàn)證共享目錄是否能夠被訪問(wèn)。在宿主機(jī)上運(yùn)行如下命令:
# mount –t nfs –o nolock 192.168.0.10:/home/work /mnt
# ls /mnt
命令將宿主機(jī)的 NFS 輸出共享目錄掛載到/mnt 目錄下,因此如果NFS 配置正確的話,應(yīng)該可以在/mnt 目錄下看到/home/work 共享目錄的內(nèi)容。
2.2.2 目標(biāo)板端NFS 客戶(hù)端的配置
在宿主機(jī)端的設(shè)置成功之后,還需要對(duì)客戶(hù)端進(jìn)行相關(guān)的設(shè)置。在目標(biāo)板系統(tǒng)的命令行下,執(zhí)行如下命令來(lái)進(jìn)行NFS 共享目錄的掛載:
/> mkdir /mnt/nfs //建立宿主機(jī)輸出共享目錄的掛載點(diǎn)
/> mount –t nfs –o nolock 192.168.0.10:/home/work /mnt/nfs
/> cd /mnt/nfs
/> ls
此時(shí),目標(biāo)板終端所顯示的內(nèi)容即為宿主機(jī)的輸出目錄的內(nèi)容,即宿主機(jī)的輸出目錄/home/work 通過(guò)NFS 映射到了嵌入式目標(biāo)板的/mnt/nfs 目錄。由于Linux 默認(rèn)下不啟動(dòng)NFS,每次宿主機(jī)進(jìn)入Linux 之后都要重新完成NFS 的啟動(dòng)和掛載,比較麻煩。可以將以上的命令寫(xiě)入宿主機(jī)的腳本文件/etc/rc.d/rc.local 中,宿主機(jī)啟動(dòng)時(shí)會(huì)執(zhí)行此文件。
評(píng)論