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