當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于LPC2210的嵌入式Linux開發(fā)平臺構(gòu)建

     摘要:本文描述了ARM7 與uCLinux 操作系統(tǒng)的特點,詳細(xì)討論了基于ARM7 與uCLinux開發(fā)的平臺構(gòu)建過程。利用構(gòu)建好的開發(fā)平臺,通過示例來說明了基于NFS 方式的嵌入式Linux 的應(yīng)用程序開發(fā)流程,該開發(fā)平臺將進(jìn)一步應(yīng)用于放射性氣體氣溶膠連續(xù)監(jiān)測系統(tǒng)的數(shù)據(jù)采集。

  0 引言

  隨著網(wǎng)絡(luò)、通信、多媒體和信息家電時代的到來,嵌入式系統(tǒng)在經(jīng)歷了近 20 年的發(fā)展歷程之后,進(jìn)入了一個全新的發(fā)展階段。Linux 操作系統(tǒng)以其穩(wěn)定性好、可靠性高、源代碼公開、可裁剪等優(yōu)點已成為嵌入式領(lǐng)域的一股新興力量,具有巨大的市場潛力和商業(yè)價值。而ARM 處理器是目前應(yīng)用的最為廣泛的嵌入式處理器架構(gòu)。因此,將Linux 操作系統(tǒng)移植到ARM 處理器平臺上并應(yīng)用于實際的產(chǎn)品是最為流行的嵌入式產(chǎn)品解決方案。

  放射性氣體氣溶膠監(jiān)測系統(tǒng)的數(shù)據(jù)采集與處理一般是以 8 位單片機(jī)作為控制核心,直接導(dǎo)致硬件電路復(fù)雜、設(shè)計和調(diào)試難度加大、集成度低、穩(wěn)定性差、系統(tǒng)升級難度較大等缺點。因此,本文采用LPC2210+uCLinux 的開發(fā)模式來設(shè)計整個監(jiān)測系統(tǒng)的數(shù)據(jù)采集與處理模塊,能夠很好的提升整個系統(tǒng)的穩(wěn)定性和可操作性。其中LPC2210 是基于32 位ARM7TDMI 內(nèi)核的處理器,uCLinux 操作系統(tǒng)是開放源代碼的嵌入式Linux 的典范之作,主要針對沒有MMU(存儲器管理單元)的處理器,具有良好的可移植性和優(yōu)秀的網(wǎng)絡(luò)功能。

  1 硬件平臺介紹

  硬件平臺采用 LPC2210 為系統(tǒng)硬件核心開發(fā)板,系統(tǒng)框圖如圖1 所示。主要包括:存儲系統(tǒng)、系統(tǒng)接口、用戶接口3 個部分。LPC2000 系列ARM7 處理器I/O 口供電電源為3.3V,內(nèi)核及片內(nèi)外設(shè)供電電源為1.8V,所以,系統(tǒng)設(shè)計為3.3V 應(yīng)用系統(tǒng)。該系列的處理器可以使用外部時鐘源,內(nèi)部PLL 電路可調(diào)整系統(tǒng)時鐘,使系統(tǒng)運(yùn)行速度更快(CPU 最大操作時鐘為60MHz)。

  該硬件平臺擴(kuò)展了2MB NOR Flash 和8MB PSRAM。為了方便程序調(diào)試以及最終代碼的固化應(yīng)用,使用LPC2210 外部存儲器接口的Bank0 和Bank1 地址空間。在使用uCLinux操作系統(tǒng)時,NOR Flash 用來存放bootloader 程序,以便于加載并引導(dǎo)放在NAND Flash 中的uCLinux 內(nèi)核。

  LPC2210 具有外部總線接口,設(shè)計電路為16 位總線方式對網(wǎng)卡芯片RTL8019AS 進(jìn)行訪問,即數(shù)據(jù)總線D0~D15 與網(wǎng)卡芯片的SD0~SD15 連接,由于RTL8019AS 工作電壓是5V,而LPC2210 的I/O 電壓是3.3V,故需在總線上串接470 歐的保護(hù)電阻。網(wǎng)卡芯片的Vih 最小值為2.0V,故與LPC2210 連接時不需要加電平轉(zhuǎn)換芯片。


圖 1 系統(tǒng)結(jié)構(gòu)框圖

  2 嵌入式Linux 開發(fā)平臺的構(gòu)建

  本研究采用在宿主機(jī)上編寫程序,然后通過交叉編譯生成目標(biāo)平臺上可以運(yùn)行的可執(zhí)行文件,最后下載到目標(biāo)板的特定位置運(yùn)行的方法構(gòu)建平臺,即通常稱為的“宿主機(jī)+目標(biāo)板”的開發(fā)模式,如圖2 所示。目標(biāo)板分別通過RS-232 串口和RJ-45 以太網(wǎng)接口與宿主機(jī)連接。

  宿主機(jī)上需要運(yùn)行 2 個窗口,即宿主機(jī)本機(jī)操作窗口和串口終端窗口。宿主機(jī)操作窗口可以是本機(jī)的操作終端,也可以是通過遠(yuǎn)程登錄登錄到Linux 服務(wù)器的操作界面。串口終端窗口可以是Linux 下的minicom,也可以是windows 下的超級終端。目標(biāo)板可以看成一臺計算機(jī),串口終端就相當(dāng)于這臺計算機(jī)的顯示器,作為人機(jī)交互界面。在宿主機(jī)編譯、鏈接后得到的可執(zhí)行文件下載到目標(biāo)板上運(yùn)行。

 

圖2 嵌入式Linux 交叉開發(fā)環(huán)境[!--empirenews.page--]

  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)核之前,首先要對編譯選項進(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)行下載程序,可以將bootloader 下載到NOR Flash 中。

  建立 uCLinux 超級終端,設(shè)置波特率為115200、8 位數(shù)據(jù)位、1 位停止位、無奇偶校驗位、無流控制。命名為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ī)以讀寫的權(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 等選項的設(shè)置,以及/etc/hosts.deny,/etc/hosts.allow 等文件。

  到此,宿主機(jī)端 NFS 服務(wù)器配置完成。

  最后在宿主機(jī)上進(jìn)行 NFS 服務(wù)器的回環(huá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ī)輸出共享目錄的掛載點

  /> 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í)行此文件。[!--empirenews.page--]

  3 嵌入式Linux 應(yīng)用程序的開發(fā)

  完成上述工作之后,嵌入式Linux 開發(fā)平臺搭建成功。在這個平臺上即可以進(jìn)行相關(guān)應(yīng)用程序的開發(fā)。本文采用NFS 方式進(jìn)行應(yīng)用程序的開發(fā)。

  基于 NFS 方式的應(yīng)用程序開發(fā),首先在宿主機(jī)上通過vi 編輯器進(jìn)行源代碼的編輯,然后通過交叉編譯,最后生成可執(zhí)行文件,在嵌入式目標(biāo)板端通過NFS 方式掛載宿主機(jī)的共享分區(qū),讓應(yīng)用程序直接運(yùn)行在嵌入式目標(biāo)系統(tǒng),并進(jìn)行調(diào)試。基于 NFS 方式的開發(fā)流程如圖4 所示。



圖 4 基于NFS 方式的開發(fā)流程圖

  當(dāng)開發(fā)人員完成了應(yīng)用程序的調(diào)試之后,可以將調(diào)試好的應(yīng)用程序下載到目標(biāo)系統(tǒng)的Flash 中或者直接編譯到嵌入式Linux 內(nèi)核中,從而最終形成一個獨立的嵌入式應(yīng)用系統(tǒng)。下面介紹一個示例來說明基于嵌入式 Linux的應(yīng)用程序開發(fā)流程。該示例使用MiniGUI的靜態(tài)框、按鈕和編輯框空間,實現(xiàn)一個Login 系統(tǒng)登錄的對話框。對話框中要求輸入用戶名和密碼,如果輸入正確的用戶名和密碼(例如用戶名為51,密碼為888888)則進(jìn)入系統(tǒng)(顯示一個主窗口),否則彈出錯誤對話框,并要求用戶再次輸入用戶名和密碼。實現(xiàn)本示例之前,必須確保已經(jīng)搭建好MiniGUI 編譯和開發(fā)板上的運(yùn)行環(huán)境。

  實驗步驟如下:

  第一步:編輯源程序

  在宿主機(jī)的工作目錄/home/work 下使用vi 編輯器編輯源程序,源程序名為login.c。

  部分程序源代碼如下:

  // 定義對話框

  static DLGTEMPLATE MyDlg =

  { WS_BORDER | WS_CAPTION,

  WS_EX_NONE,

  2, 50, 235, 190,

  "登錄",

  0,

  0,

  6,

  NULL,

  0

  };

  // 定義對話框中的控件

  static CTRLDATA CtrlInitData[] =

  {

  { "static",

  WS_VISIBLE | SS_SIMPLE,

  25,10, 200, 16,

  IDC_SLOGIN,

  "請輸入用戶名和密碼.",

  0,

  WS_EX_NONE

  },

  { "static",

  WS_VISIBLE | SS_SIMPLE,

  10,40, 60, 16,

  IDC_SUSER,

  "用戶名:",

  0,

  WS_EX_NONE

  },

  { "static",

  WS_VISIBLE | SS_SIMPLE,

  10,80, 60, 16,

  IDC_SPASS,

  "密碼:",

  0,

  WS_EX_NONE

  },

  { "edit",

  WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,

  70,40, 140,25,

  IDC_EUSER,

  "",

  0,

  WS_EX_NONE

  },

  { "edit",

  WS_CHILD | WS_VISIBLE | WS_BORDER | ES_PASSWORD | WS_TABSTOP,[!--empirenews.page--]

  70,80, 140,25,

  IDC_EPASS,

  "",

  0,

  WS_EX_NONE

  },

  { "button",

  WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON,

  80,120, 80,25,

  IDOK,

  "確定",

  0,

  WS_EX_NONE

  }

  };

  //設(shè)置用戶名和密碼

  #define USER_NO 3

  static char *g_user[USER_NO] = {"root",

  "51",

  "WXM"

  };

  static char *g_pass[USER_NO] = {"******",

  "888888",

  "2046"

  };

  第二步:修改對應(yīng)的 Makefile.am 文件,設(shè)置編譯login.c 文件

  在命令行下輸入 # make

  當(dāng)命令執(zhí)行完畢之后,會在當(dāng)前目錄下生成名為login 的可執(zhí)行文件。

  第三步:在目標(biāo)板掛載共享目錄,并運(yùn)行程序。

  /> cd usr

  />usr> portmap&

  [26]

  /usr> mount –t nfs 192.168.0.10:/home/work /usr/pro –o nolock //掛載共享目錄

  />cd /usr/pro

  /usr/pro ./login //運(yùn)行程序,顯示登入對話框

  第四步:使用目標(biāo)板上的功能鍵 0~9 輸入用戶名和密碼,使用TAB 鍵轉(zhuǎn)移到下一個焦點,使用BACK 鍵刪除已輸入的字符,使用ENTER 確定輸入。當(dāng)用戶名和密碼輸入正確時,登錄成功,登入界面被關(guān)閉,并顯示一個MiniGUI 主窗口。如圖5 示:

圖5 “登入”對話框和歡迎界面

  4 結(jié)束語

  作為實時放射性氣體氣溶膠監(jiān)測系統(tǒng)的數(shù)據(jù)采集系統(tǒng)開發(fā)的重要組成部分,本文通過分析ARM7 和uCLinux 特點,將二者有機(jī)結(jié)合,構(gòu)建了ARM7+uCLinux 的嵌入式通用開發(fā)平臺,并展示了應(yīng)用該開發(fā)平臺開發(fā)應(yīng)用程序的詳細(xì)過程。該平臺的應(yīng)用克服了大多數(shù)實時監(jiān)測系統(tǒng)因采用8 位單片機(jī)為控制核心實現(xiàn)數(shù)據(jù)采集而帶來的硬件電路復(fù)雜、穩(wěn)定性差、升級困難等問題。故本文作者創(chuàng)新點:通過采用ARM7+uCLinux 的嵌入式通用開發(fā)平臺克服了大多數(shù)實時監(jiān)測系統(tǒng)硬件電路復(fù)雜、穩(wěn)定性差、升級困難等缺點;同時采用該開發(fā)平臺在開發(fā)過程中使用NFS 方式下載開發(fā)的應(yīng)用程序,為嵌入式應(yīng)用軟件的開發(fā)節(jié)省了大量的時間,大大提高了開發(fā)效率。


 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉