李灝+楊海波
摘 要: 嵌入式系統(tǒng)啟動代碼的分析與移植以及嵌入式操作系統(tǒng)內(nèi)核的移植是整個嵌入式系統(tǒng)開發(fā)中最重要的環(huán)節(jié)之一。在分析嵌入式系統(tǒng)架構(gòu)以及相應(yīng)開發(fā)流程的基礎(chǔ)上,結(jié)合溫濕度控制功能需求,采用ARM S3C2440處理器的嵌入式系統(tǒng)底層啟動代碼與操作系統(tǒng)的設(shè)計方案,實現(xiàn)向應(yīng)用層提供底層服務(wù)功能,編譯出的U?Boot與Linux內(nèi)核。最后進行了系統(tǒng)測試,在ARM平臺上運行良好。
關(guān)鍵詞: 物聯(lián)網(wǎng); 溫濕度數(shù)據(jù)采集; U?Boot移植; Linux內(nèi)核; 根文件系統(tǒng)
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2014)14?0132?03
Design and realization of IOT temperature and humidity data collection points based on ARM
LI Hao, YANG Hai?bo
(Tianjin Ruihe Tianfu Science & Technology Co., Ltd, Tianjin 300384, China; Tianjin Univercity of Science & Technology, Tianjin 300222, China)
Abstract: The analysis and transplantation of embedded system startup code, and the transplantation of embedded operating system kernel are the most important links in the development of a whole embedded system. Based on the analysis of architecture and developing flow of embedded system, the design scheme of boot startup code and operation system of embedded system with ARM S3C2440 processor is adopted according to the requirement of temperature and humidity control functions to provide the underlying service functions for application level, and compile u?boot and Linux kernel. The system ran well on the ARM platform.
Keywords: IOT; temperature and humidity data acquisition; u?boot transplant; Linux kernel; root file system
0 引 言
近年來,隨著國內(nèi)外對食品安全的日益重視和食品連鎖經(jīng)銷體系的興起,冷鏈物流急驟升溫,成為人們關(guān)注的焦點。物聯(lián)網(wǎng)(Internet of Things,IoT)的概念最早是由麻省理工學(xué)院(MIT)于1999年提出的,目前已發(fā)展到通過射頻識別、紅外感應(yīng)器、全球定位系統(tǒng)、激光掃描器等信息傳感設(shè)備,按約定的協(xié)議,將任何物品與互聯(lián)網(wǎng)連接起來,進行信息交換和通信,實現(xiàn)智能化識別、定位、跟蹤、監(jiān)控和管理的一種網(wǎng)絡(luò)。物聯(lián)網(wǎng)在物流、監(jiān)控、智能家居、交通等行業(yè)得到了廣泛的應(yīng)用。
為保持農(nóng)產(chǎn)品冷鏈物流質(zhì)量,必須對生鮮農(nóng)產(chǎn)品在冷鏈環(huán)境下進行全程安全管理。建立一套針對農(nóng)產(chǎn)品冷鏈物流各環(huán)節(jié)的信息實時采集系統(tǒng)是保證食品質(zhì)量安全控制的基礎(chǔ),以實現(xiàn)對冷藏冷凍類農(nóng)產(chǎn)品質(zhì)量安全的動態(tài)追蹤和管理,最大程度地保證產(chǎn)品品質(zhì)和質(zhì)量安全。為此,建立可靠、實時的作業(yè)過程信息采集系統(tǒng)是十分必要的,這也是物聯(lián)網(wǎng)中的感知層。S3C2440是Samsung公司開發(fā)的基于ARM920T的處理器,其主頻為400 MHz,最高可達533 MHz,采用16/32位ARM920TRISC核心,批處理數(shù)據(jù)能力優(yōu)于8位的單片機,并支持以太網(wǎng)卡,輕松實現(xiàn)網(wǎng)絡(luò)功能,開發(fā)技術(shù)成熟、價格低廉、應(yīng)用廣泛。為此,本文選擇S3C2440處理器為核心開發(fā)用于冷鏈的溫濕度監(jiān)測系統(tǒng)。
1 開發(fā)與測試環(huán)境搭建
以S3C2440開發(fā)板作為硬件實驗平臺,使用ubuntu 9.10作為嵌入式Linux操作系統(tǒng),U?Boot 1.1.6作為BootLoader,Linux?2.6.22.6作為內(nèi)核,gcc?3.4.5以及glibc?2.3.6作為交叉編譯工具完成U?Boot的移植。交叉編譯鏈工具是由交叉編譯器(arm?linux?gcc)、供ARM平臺使用的C庫(glibc)以及輔助的二進制工具binutils(包括arm?linux?readelf、arm?linux?objcopy等)組成[1]。鑒于這三者源代碼都是獨立開發(fā)和維護的,單獨構(gòu)造這三個部分比較復(fù)雜,因此直接使用成品的交叉編譯工具鏈。
2 整體方案設(shè)計實現(xiàn)
本文以成熟的S3C2410相關(guān)代碼為參照基線[2],通過剖析Bootloader,Linux內(nèi)核和根文件系統(tǒng),比對S3C2440與S3C2410的不同,制定出軟件系統(tǒng)的實現(xiàn)方案。具體框架如圖1所示。
圖1 軟件系統(tǒng)實現(xiàn)框架圖
2.1 Linux系統(tǒng)結(jié)構(gòu)
Linux是目前自由操作系統(tǒng)內(nèi)核之一,用C語言寫成的,是一個類Unix操作系統(tǒng),主要提供硬件抽象、磁盤及文件系統(tǒng)控制、多任務(wù)等功能[3]。一個基于Linux內(nèi)核的完整操作系統(tǒng)其體系結(jié)構(gòu)如圖2所示[4]。
圖2 Linux系統(tǒng)體系結(jié)構(gòu)圖
常用的嵌入式Linux文件系統(tǒng)有RomFS,CRAMFS,Jffs2,Yaffs等。其中,Jffs2文件系統(tǒng)專門為FLASH芯片創(chuàng)建,具備更好的內(nèi)存管理,提供了比Ext2文件系統(tǒng)更好的掉電保護性能[5]。Yaffs文件系統(tǒng)是專門為NAND FLASH設(shè)計的日志文件系統(tǒng),適合大容量的NAND FLASH,同Jffs2相比,占用的RAM空間更少,但沒有被集成進入內(nèi)核,使用時須打內(nèi)核補丁[6]。
2.2 Linux啟動過程分析
嵌入式系統(tǒng)加電后,首先啟動BootLoader,完成包括硬件設(shè)備CPU、SDRAM、FLASH、串口等在內(nèi)的系統(tǒng)初始化和操作系統(tǒng)的加載,建立內(nèi)存空間的映射圖,為最終調(diào)用操作系統(tǒng)準備好相應(yīng)的環(huán)境[7]。完成BootLoader任務(wù)后,即接收用戶從串口輸入的命令,然后進行相應(yīng)的工作。當用戶輸入啟動Linux的命令時,BootLoader會將Kernel映像(ZImage)從NAND FLASH上讀到RAM空間,并設(shè)置相應(yīng)的內(nèi)核啟動參數(shù)而調(diào)用內(nèi)核代碼。
U?Boot是Universal Boot Loader的簡稱,不僅對PowerPC,MIPS,x86,ARM,NIOS,XScale等類型CPU體系兼容與支持,而且支持OpenBSD,NetBSD,F(xiàn)reeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell, NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS等系統(tǒng)[8],選用U?Boot構(gòu)建ARM S3C2440下的BootLoader具有廣泛的適用性與經(jīng)濟性,其運行過程分為兩個過程,具體如圖3所示。
圖3 u?boot啟動流程圖
2.3 基于S3C2440開發(fā)板的u?boot移植
以現(xiàn)有與S3C2440結(jié)構(gòu)相似的S3C2410 U?Boot程序目錄為藍本[9],依照:在board目錄中添加目錄my244 →復(fù)制smdk2410中的全部內(nèi)容到my2440→修改my2440目錄下的文件名smdk2410.c為my2440.c→將頂層目錄下的makefile文件內(nèi)容“COBJS:= smdk2410.o flash.o”修改為“COBJS:=my2440.o flash.o”→在include/configs目錄下增加頭文件my2440.h→打開頂層makefile文件,模仿smdk2410_config增加新的目標my2440_config→對my2440_config進行再配置等步驟順序在根目錄下生成U?Boot,U?Boot.bin U?Boot.map和U?Boot.srec四個文件,然后再進行以圖4所示的步驟進行定制性修改。最后,使用make編譯U?Boot便得到支持S3C2440的U?Boot.bin,至此完成U?Boot的全部移植工作,見圖5。
圖4 定制性修改步驟
圖5 成功編譯U?Boot
2.4 Linux內(nèi)核剪裁與配置
在以root用戶身份登錄,運行tar xjvf linux?2.6.22.6.tar.bz2 –C /home/mz/linux后得到目錄linux?2.6.22.6后,對目錄中的相關(guān)文件執(zhí)行圖6所示過程。
圖6 執(zhí)行相關(guān)文件
完成以上步驟后,在終端窗口先后執(zhí)行make zImage 和make uImage命令,便得到arch/arm/boot目錄中的內(nèi)核文件zImage和供U?Boot引導(dǎo)的內(nèi)核uImage。
3 Linux文件系統(tǒng)Jffs2的制作
首先通過create_rootfs_bash命令在/work目錄中建立生成未包括bin、sbin、usr/bin以及usr/sbin四個目錄的根文件系統(tǒng)目錄的腳本文件[10],再按順序執(zhí)行下述步驟:用mknod命令創(chuàng)建 console 設(shè)備節(jié)點以及null設(shè)備節(jié)點→建立文件系統(tǒng)的掛載點目錄→更改tmp目錄的使用權(quán)→運行/create_rootfs_bash命令。然后以圖7所示步驟完成Linux文件系統(tǒng)Jffs2的制作。
在建立etc目錄下的配置文件時,增加如下的初始化腳本inittab文件和profile文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:?/bin/sh
::ctrlaltdel:/sbin/reboot
::shuntdown:/bin/unmounts–a–r
rcS腳本內(nèi)容如下:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=N
prelevel=N
umask 022
export PATH runlevel prelevel
mount –a
mdev –s
/bin/hostname –F /etc/sysconfig/HOSTNAME
profile文件內(nèi)容如下:
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit –S –c 0>/dev/null 2>&1
USER=′id ?un′
LOGNAME=$USER
PS1=′[\u@\h=W]′
PATH=$PATH
HOSTNAME=′/bin/hostname′
export USER LOGNAME PS1 PATH
圖7 Linux文件系統(tǒng)Jffs2的制作步驟
最后將系統(tǒng)根目錄下/etc的password、group、shadow文件復(fù)制到文件系統(tǒng)下etc的目錄下,在/work目錄下執(zhí)行命令:mkfs.jffs2–n–s 2048–e 128KiB–d rootfs–o rootfs.jffs2,最終生成根文件系統(tǒng)的映像文件。
4 結(jié) 語
本文從采集終端入手,通過在S3C2440開發(fā)板上成功移植Linux底層代碼,開發(fā)出適宜的溫度監(jiān)控接口,為上層物理系統(tǒng)的搭建提供了經(jīng)濟適用的控制終端,使整個系統(tǒng)架構(gòu)簡潔、配置靈活、功能完善,有較高的性價比,可作為物聯(lián)網(wǎng)技術(shù)在工業(yè)上推廣應(yīng)用的一個典型配置單元。
參考文獻
[1] 劉淼.嵌入式系統(tǒng)接口設(shè)計與 Linux 驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 劉榮軍,張長利,張曉雨.基于 DM9000 的 S3C2410 嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計[J].中國高新技術(shù)企業(yè),2008(24):154?155.
[3] [美]哈利南C.嵌入式Linux開發(fā)[M].北京:人民郵電出版社,2008.
[4] STEVENS W R, FENNER B, RUDOFF A M. UNIX network programming, Volume1: the sockets networking API [M]. 3rd ed. 北京: 人民郵電出版社,2009.
[5] 孫天澤.嵌入式Linux操作系統(tǒng)[M].北京:人民郵電出版社,2009.
[6] [美]洛夫.Linux系統(tǒng)編程(中文版)[M].南京:東南大學(xué)出版社,2009.
[7] LOVE Robert. Linux kernel development [M].3版.北京:機械工業(yè)出版社,2011.
[8] 任哲.嵌入式操作系統(tǒng)基礎(chǔ)μC/OS和Linux[M].2版.北京:北京航空航天大學(xué)出版社,2011.
[9] 杜春雷.ARM體系結(jié)構(gòu)編程[M].北京:清華大學(xué)出版社,2011.
[10] 徐英慧,馬忠梅,王磊,等.ARM9嵌入式系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2010.
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit –S –c 0>/dev/null 2>&1
USER=′id ?un′
LOGNAME=$USER
PS1=′[\u@\h=W]′
PATH=$PATH
HOSTNAME=′/bin/hostname′
export USER LOGNAME PS1 PATH
圖7 Linux文件系統(tǒng)Jffs2的制作步驟
最后將系統(tǒng)根目錄下/etc的password、group、shadow文件復(fù)制到文件系統(tǒng)下etc的目錄下,在/work目錄下執(zhí)行命令:mkfs.jffs2–n–s 2048–e 128KiB–d rootfs–o rootfs.jffs2,最終生成根文件系統(tǒng)的映像文件。
4 結(jié) 語
本文從采集終端入手,通過在S3C2440開發(fā)板上成功移植Linux底層代碼,開發(fā)出適宜的溫度監(jiān)控接口,為上層物理系統(tǒng)的搭建提供了經(jīng)濟適用的控制終端,使整個系統(tǒng)架構(gòu)簡潔、配置靈活、功能完善,有較高的性價比,可作為物聯(lián)網(wǎng)技術(shù)在工業(yè)上推廣應(yīng)用的一個典型配置單元。
參考文獻
[1] 劉淼.嵌入式系統(tǒng)接口設(shè)計與 Linux 驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 劉榮軍,張長利,張曉雨.基于 DM9000 的 S3C2410 嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計[J].中國高新技術(shù)企業(yè),2008(24):154?155.
[3] [美]哈利南C.嵌入式Linux開發(fā)[M].北京:人民郵電出版社,2008.
[4] STEVENS W R, FENNER B, RUDOFF A M. UNIX network programming, Volume1: the sockets networking API [M]. 3rd ed. 北京: 人民郵電出版社,2009.
[5] 孫天澤.嵌入式Linux操作系統(tǒng)[M].北京:人民郵電出版社,2009.
[6] [美]洛夫.Linux系統(tǒng)編程(中文版)[M].南京:東南大學(xué)出版社,2009.
[7] LOVE Robert. Linux kernel development [M].3版.北京:機械工業(yè)出版社,2011.
[8] 任哲.嵌入式操作系統(tǒng)基礎(chǔ)μC/OS和Linux[M].2版.北京:北京航空航天大學(xué)出版社,2011.
[9] 杜春雷.ARM體系結(jié)構(gòu)編程[M].北京:清華大學(xué)出版社,2011.
[10] 徐英慧,馬忠梅,王磊,等.ARM9嵌入式系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2010.
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit –S –c 0>/dev/null 2>&1
USER=′id ?un′
LOGNAME=$USER
PS1=′[\u@\h=W]′
PATH=$PATH
HOSTNAME=′/bin/hostname′
export USER LOGNAME PS1 PATH
圖7 Linux文件系統(tǒng)Jffs2的制作步驟
最后將系統(tǒng)根目錄下/etc的password、group、shadow文件復(fù)制到文件系統(tǒng)下etc的目錄下,在/work目錄下執(zhí)行命令:mkfs.jffs2–n–s 2048–e 128KiB–d rootfs–o rootfs.jffs2,最終生成根文件系統(tǒng)的映像文件。
4 結(jié) 語
本文從采集終端入手,通過在S3C2440開發(fā)板上成功移植Linux底層代碼,開發(fā)出適宜的溫度監(jiān)控接口,為上層物理系統(tǒng)的搭建提供了經(jīng)濟適用的控制終端,使整個系統(tǒng)架構(gòu)簡潔、配置靈活、功能完善,有較高的性價比,可作為物聯(lián)網(wǎng)技術(shù)在工業(yè)上推廣應(yīng)用的一個典型配置單元。
參考文獻
[1] 劉淼.嵌入式系統(tǒng)接口設(shè)計與 Linux 驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 劉榮軍,張長利,張曉雨.基于 DM9000 的 S3C2410 嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計[J].中國高新技術(shù)企業(yè),2008(24):154?155.
[3] [美]哈利南C.嵌入式Linux開發(fā)[M].北京:人民郵電出版社,2008.
[4] STEVENS W R, FENNER B, RUDOFF A M. UNIX network programming, Volume1: the sockets networking API [M]. 3rd ed. 北京: 人民郵電出版社,2009.
[5] 孫天澤.嵌入式Linux操作系統(tǒng)[M].北京:人民郵電出版社,2009.
[6] [美]洛夫.Linux系統(tǒng)編程(中文版)[M].南京:東南大學(xué)出版社,2009.
[7] LOVE Robert. Linux kernel development [M].3版.北京:機械工業(yè)出版社,2011.
[8] 任哲.嵌入式操作系統(tǒng)基礎(chǔ)μC/OS和Linux[M].2版.北京:北京航空航天大學(xué)出版社,2011.
[9] 杜春雷.ARM體系結(jié)構(gòu)編程[M].北京:清華大學(xué)出版社,2011.
[10] 徐英慧,馬忠梅,王磊,等.ARM9嵌入式系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2010.