黎愛瓊
【摘要】 數(shù)據(jù)保護(hù)容器(Protective Data Capsule)簡(jiǎn)稱PDC,是船載航行數(shù)據(jù)記錄儀最終記錄存放的介質(zhì),本設(shè)計(jì)主要介紹的是PDC系統(tǒng)引導(dǎo)程序的啟動(dòng)過程,以及實(shí)現(xiàn)引導(dǎo)程序移植的環(huán)境配置及燒寫過程,以便實(shí)現(xiàn)PDC系統(tǒng)的正常啟動(dòng)。
【關(guān)鍵詞】 數(shù)據(jù)保護(hù)容器 PDC 嵌入式系統(tǒng) Bootloader
一、嵌入式系統(tǒng)中Bootloder的基本工作原理
Bootloader是嵌入式軟件開發(fā)的第一個(gè)環(huán)節(jié),它把嵌入式系統(tǒng)的軟件和硬件緊密銜接在一起。是系統(tǒng)加電啟動(dòng)運(yùn)行的第一段軟件代碼,類似于PC機(jī)的BIOS系統(tǒng)。
二、Bootloader啟動(dòng)過程分析
在嵌入式系統(tǒng)中,Bootloader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的。而在嵌入式系統(tǒng)中很難建立一個(gè)通用的Bootloader。但是,Bootloader的實(shí)現(xiàn)還是可以總結(jié)出一般規(guī)律。通過分析比較,引導(dǎo)程序則選用了韓國(guó)Mizi公司開發(fā)的Bootloader,即vivi。
vivi是利用串口通信為用戶提供接口的,只需要將PC宿主機(jī)通過一根串口電纜線與目標(biāo)板相連即可。
vivi的運(yùn)行分為 stage1 和 stage2兩個(gè)階段。
第一階段:
1.關(guān)閉WATCH DOG:上電后,WATCH DOG默認(rèn)是開著的。
2.禁止所有中斷:vivi中沒用到中斷。
3.初始化系統(tǒng)時(shí)鐘:?jiǎn)?dòng)MPLL,F(xiàn)CLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改為“Asynchronous bus mode”。
4.初始化內(nèi)存控制寄存器。
5.檢查是否從掉電模式喚醒,若是,則調(diào)用WakeupStart函數(shù)進(jìn)行處理——這是一段沒用上的代碼,vivi不可能進(jìn)入掉電模式。
6.點(diǎn)亮所有LED 。
7.初始化UART0。
8.將vivi所有代碼從NAND Flash復(fù)制到SDRAM中。
第2階段:
1.執(zhí)行reset_handler(),用于將內(nèi)存清零。
2.執(zhí)行board_init(),調(diào)用init_time()和set_gpios()來初始化定時(shí)器和設(shè)置GPIO引腳功能。
3.執(zhí)行mem_map_init()和mmu_init(),建立頁表,并啟動(dòng)MMU。
4.執(zhí)行heap_init(),該函數(shù)在SDRAM中指定了一塊1M大小的內(nèi)存作為堆heap。
5.執(zhí)行mtd_dev_init(),初始化MTD設(shè)備,執(zhí)行本函數(shù)后,得到一個(gè)mtd_info結(jié)構(gòu)的全局變量,以后直接通過mymtd提供的接口對(duì)NAND Flash進(jìn)行操作。
6.執(zhí)行init_priv_data(),此函數(shù)將啟動(dòng)內(nèi)核的命令參數(shù)取出,并存放在特定的位置中。
7.執(zhí)行misc()和init_builtin_cmds(),這兩個(gè)函數(shù)都是通過調(diào)用add_command函數(shù),給一些命令增加相應(yīng)的處理函數(shù)。
8.執(zhí)行boot_or_vivi(),該函數(shù)根據(jù)實(shí)際情況判斷,是啟動(dòng)vivi_shell進(jìn)入與用戶交互的界面中,還是直接啟動(dòng)Linux內(nèi)核。
三、vivi移植
vivi直接提供了對(duì)S3C2410X處理器的板級(jí)支持。其相關(guān)配置文件存放入s3c2410目錄中。在宿主機(jī)的終端中,進(jìn)入vivi的根目錄下,輸入如下命令進(jìn)入vivi的配置界面:
當(dāng)配置完vivi后,保存配置并退出配置菜單界面,回到終端中輸入命令編譯vivi:
[root@kision vivi]#make
如果編譯成功,將在當(dāng)前目錄下生成vivi二進(jìn)制鏡像文件,編譯生成vivi二進(jìn)制鏡像文件后,有兩種途徑將vivi燒寫到目標(biāo)板中:JTAG下載方式和串口下載方式。首先要配置好串口。
在PC宿主機(jī)的Linux操作系統(tǒng)開發(fā)環(huán)境下,在終端中輸入命令minicom:
[root@kision root]#minicom -s
此時(shí)界面會(huì)進(jìn)入串口終端配置界面中,選擇正確的PC串口通道號(hào),并配置串口參數(shù)為115200,8N1,且無軟、硬流控制。最后,應(yīng)該將該項(xiàng)設(shè)置保存為缺省值,以免每次打開minicom都需要重新配置。然后輸入minicom,按住鍵盤的空格鍵的同時(shí)啟動(dòng)目標(biāo)板,這時(shí)會(huì)進(jìn)入vivi的加載啟動(dòng)模式,輸入如下命令下載vivi:vivi>load flash vivi x 選擇xmodem協(xié)議傳輸vivi鏡像文件。輸入命令:vivi>load flash vivi x即完成了移植任務(wù)。
四、結(jié)論
經(jīng)過測(cè)試,在各指定的工作環(huán)境下,PDC系統(tǒng)基本都能正常工作。
參 考 文 獻(xiàn)
[1] 李少春.基于嵌入式Linux的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn). 西南交通大學(xué)碩士論文 .2007/05
[2] 陳艷.引導(dǎo)加載程序vivi的分析和移植研究.電子設(shè)計(jì)應(yīng)用.2006.11.15