圖8 Linux系統(tǒng)軟件組織示意圖
2.1 S5PC100存儲(chǔ)系統(tǒng)設(shè)計(jì)
設(shè)計(jì)的目標(biāo)平臺(tái)中需要擴(kuò)展三種類型的存儲(chǔ)介質(zhì),分 別為DDR2 SDRAM、NAND FLASH以及SD卡電路。下面按 照三種存儲(chǔ)介質(zhì)在系統(tǒng)中的功能分別進(jìn)行闡述。
(1)DDR2 SDRAM電路
S5PC100 SDRAM控制器通過向外部16位或32位SDRAM
提供接口來擴(kuò)展芯片存儲(chǔ)能力。本平臺(tái)采用2片K4T1G164
16位寬度DD2 SDRAM組成32位內(nèi)存,容量256MB,如圖3。
(2)NANDFLASH電路與SD卡存儲(chǔ)電路 由于系統(tǒng)需要運(yùn)行Linux系統(tǒng),系統(tǒng)代碼較為復(fù)雜,需要一定容量的存儲(chǔ)器存放Linux操作系統(tǒng)源代碼以及應(yīng)用程 序,由于S5PC100內(nèi)置了NAND FL ASH控制器,因此平臺(tái) 采用K9F2G08 256MB NAND FLASH直接與S5PC100 NAND FLASH控制器接口連接。SD卡可通過S5PC100內(nèi)置SDIO1總 線直接連接。其NAND FLASH電路原理圖如圖4所示、SD卡 的原理圖如圖5所示。
2.2 溫度傳感器接口
平臺(tái)設(shè)計(jì)了采用DS18B20一線制溫度傳感器接口。采用 S5PC100處理器GPIO引腳接口控制溫度傳感器DS18B20的溫 度測(cè)量,LCD屏輸出測(cè)量溫度,原理圖如圖6所示。
2.3 溫度報(bào)警電路
本 設(shè) 計(jì) 采 用 軟 件 處 理 報(bào) 警 , 利 用 無 源 蜂 鳴 器 進(jìn) 行 報(bào) 警,當(dāng)所測(cè)溫度超限后輸出PWM信號(hào),驅(qū)動(dòng)蜂鳴器報(bào)警, 其電路原理圖如圖7所示。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 Linux操作系統(tǒng)移植
完整的嵌入式linux系統(tǒng)由bootloader、kernel、rootfs等
3個(gè)基本部分組成。其中bootloader用于引導(dǎo)和裝載操作系統(tǒng)、kernel為linux內(nèi)核程序、rootfs為文件系統(tǒng),如圖8。
3.1.1 交叉編譯環(huán)境
嵌入式開發(fā)系統(tǒng)受到自身硬件以及軟件資源的限制, 無法完成代碼的本地編譯,其開發(fā)需要在宿主機(jī)上建立交叉 開發(fā)環(huán)境。
交叉開發(fā)環(huán)境是包含了編輯器、編譯器、連接器、調(diào) 試器和libc庫(kù)等的程序環(huán)境。在開發(fā)嵌入式Linux相關(guān)軟件 時(shí),常用的交叉開發(fā)工具是GNU工具鏈。系統(tǒng)中宿主機(jī)使 用的開發(fā)環(huán)境為ubuntu12.04操作系統(tǒng),目標(biāo)板內(nèi)核版本號(hào)為 標(biāo)準(zhǔn)linux-2.6.35,使用到的交叉編譯器是arm-linux-gcc-4.5.1。
3.1.2 Bootloader程序設(shè)計(jì)
Bootloader是在操作系統(tǒng)運(yùn)行前運(yùn)行的一段專用程序, 可以完成平臺(tái)硬件設(shè)備的初始化,并能完成引導(dǎo)和調(diào)試操作 系統(tǒng)。 Bootloader依賴CPU體系結(jié)構(gòu),一般將Bootloader按功 能劃分為兩個(gè)階段,其中第1階段實(shí)現(xiàn)基本硬件電路的初始 化,為操作系統(tǒng)的運(yùn)行準(zhǔn)備環(huán)境。在平臺(tái)中,由于使用的是 ARM微控制器,因此第一階段需要實(shí)現(xiàn)設(shè)置處理器進(jìn)入管 理模式、關(guān)閉處理器中斷與快中斷、設(shè)置處理器主頻、高速 總線主頻與告訴外設(shè)主頻、CPU關(guān)閉MMU與數(shù)據(jù)Cache,初 始化內(nèi)存控制器,代碼由存儲(chǔ)器自搬運(yùn)至內(nèi)存,設(shè)置運(yùn)行程 序需要的臨時(shí)堆棧、BSS段清零等工作。第2階段主要實(shí)現(xiàn) 進(jìn)入交互模式或者自引導(dǎo)模式,實(shí)現(xiàn)操作系統(tǒng)的加載,一般 要根據(jù)操作系統(tǒng)與硬件平臺(tái)的需要實(shí)現(xiàn)相關(guān)硬件的初始化工 作, 如初始化GPIO、串口、網(wǎng)口等外部設(shè)備,完成向內(nèi)核 傳遞啟動(dòng)參數(shù)等功能。
3.1.3 Linux內(nèi)核的定制
Linux目前已經(jīng)支持了x86、ARM、MIPS等多種處理器 架構(gòu),支持的平臺(tái)類型多達(dá)3000多種。各種ARM處理器的 設(shè)計(jì)廠商為了更好地推廣處理器的使用,都會(huì)Linux中添加補(bǔ)丁, 使得該處理器能夠在L i nu x 行正常運(yùn)行。 平臺(tái)選用Linux-2.6.35版本,面對(duì)大規(guī)模的Linux源代碼,我們需要對(duì)Linux進(jìn)行剪裁移植。
Linux源代碼采用模塊化的組織方式,可以通過條件編 譯的方式對(duì)Linux源碼的功能進(jìn)行剪裁,但是條件編譯法裁 剪的是功能模塊,對(duì)于具體的硬件驅(qū)動(dòng)和優(yōu)化就需要對(duì)源代 碼進(jìn)行細(xì)微的修改了。