999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于U-Boot的嵌入式系統雙啟動設計與實現

2018-11-21 04:39:56鄧正維鄧小武鄧紹偉李森林
物聯網技術 2018年11期
關鍵詞:嵌入式系統

鄧正維,鄧小武,2,鄧紹偉,2,李森林,2

(1.懷化學院 計算機科學與工程學院,湖南 懷化 418008;

2.武陵山片區生態農業智能控制技術湖南省重點實驗室,湖南 懷化 418008)

0 引 言

隨著計算機技術、微電子技術、現代制造工藝和設計能力的不斷進步和發展,硬件的集成度越來越高,使嵌入式系統在生產、生活中被廣泛采用。但隨之而來的是用戶需求也越來越高,為了充分發揮嵌入式設備的性能,需要一個強大的操作系統,而在操作系統運行之前需要一段程序完成基本的初始化操作進而啟動操作系統,Boot Loader就是這段程序。此舉實現了系統從硬件啟動到操作系統啟動的過渡,它固化在硬件中,被認為是嵌入式系統不可缺少的一部分,其作用類似于PC上的BIOS和GRUB。但當前嵌入式設備上實現的Boot Loader大多只支持一個操作系統的引導,大大限制了嵌入式設備的使用。

本文結合在ARM平臺上廣泛使用的U-Boot,詳細討論了嵌入式Boot Loader的整體架構和運行流程。闡述了系統主要硬件的原理和裸機驅動程序設計,包含系統時鐘設置,CPU模式設置,內存初始化,NAND FLASH配置和操作方法,WinCE和嵌入式Linux在ARM平臺下啟動的實現原理和方法。最終實現了在ARM平臺上的雙啟動Boot Loader。

1 系統的硬件平臺

本文使用的開發平臺為友善之臂Mini6410開發板,使用Samsung公司設計生產的S3C6410處理器,使用2片K4X1G163PC構成256 M SDRAM,將K9GAG08U0E作為永久存儲器。

1.1 CPU

S3C6410基于ARM1176JZF-S內核[1-2],包括分立的16 kB指令和16 kB數據Cache,16 kB指令和數據TCM,及1個完全的MMU,用以處理虛擬存儲管理。S3C6410內部有3個PLL,分別是APLL,MPLL和EPLL。APLL用于ARM時鐘操作,MPLL用于主時鐘操作,EPLL用于特殊用途。時鐘操作被分為三組:APLL產生ARM時鐘;MPLL產生主系統時鐘,用于操作AXI,AHB和APB總線;EPLL產生的時鐘主要用于外設IPS,對CPU的設置主要采用CPU模式、中斷和時鐘設置,Boot Loader和操作系統運行在SVC模式,在U-Boot中無需中斷,時鐘的選擇根據應用環境而定。

1.2 內存

本系統選用兩片64 M×16 bit的Mobile DDR芯片,連接到S3C6410 SRAM控制器,工作頻率為133 MHz,在處理器內部時鐘為533 MHz時,能夠接近最高使用效率。內存的初始化主要是對SRAM控制器的初始化,具體的初始化步驟在S3C6410手冊上有詳細說明[3]。具體流程如下:

(1)使SRAM控制器進入配置模式;

(2)填寫內存芯片的時序參數,并開始內存芯片的初始化序列;

(3)配置完成后檢查狀態標志位。

1.3 NAND FLASH

NAND FLASH作為嵌入式系統中廣泛使用的永久性存儲器[4],具有容量大、改寫速度快等優點,適用于大量數據的存儲,但是由于NAND FLASH的設計原理,在操作時有自己獨特的要求:只能以頁為單位讀寫,而且寫時只能將1寫為0。所以在寫入前必須以塊為單位擦除。

S3C6410內部包含一個NAND FLASH控制器,用戶只需配置好NAND FLASH的時序參數,NAND FLASH控制器即可自動產生所需時序[5]。主要配置的時序為CLE/ALE拉高到nWE拉低的等待時間,nWE為低的持續時間,nWE拉高后CLE/ALE繼續保持為高的時間。

1.4 存儲器規劃與分配

將NAND FLASH分為如下區域:Boot Loader,Linux_kernel,Linux_rootfs,WinCE等。通過外部跳線,NAND FLASH啟動后,S3C6410將自動加載前8 k內容到S3C6410的內部SRAM(Steppingstone)并開始從地址0處運行,最終加載并引導操作系統,如圖1(a)所示。

引導操作系統時需要用戶在控制臺中輸入命令選擇啟動的操作系統,系統將加載制定NAND FLASH中的內容到內存指定位置,圖1(b)為物理內存使用規劃,該配置內容將保存在開發板配置文件$(board).h中。

圖1 物理內存和NAND FLASH劃分

2 U-Boot分析

U-Boot(Universal Boot Loader)是遵循 GPL協議的開放源碼項目。具有系統引導、上電自檢、CRC32校驗、設備驅動、支持 NFS掛載、支持多種方式存儲等功能。在嵌入式領域被廣泛使用。

U-Boot屬于兩階段啟動的Boot Loader,在第一階段由匯編語言完成,與處理器直接相關,完成CPU模式切換,禁止看門狗,初始化內存控制器,設置堆棧,重定位U-Boot運行位置等操作,最后跳轉到第二階段代碼運行。第二階段代碼主要由C語言完成,與目標板相關,主要完成所有設備的初始化工作,最后加載并啟動操作系統,具體流程如圖2所示。

圖2 U-Boot流程

U-Boot目標文件通過<$(board)/u-boot.lds>鏈接腳本控制,該文件定義了連接到目標文件中各段的名稱和位置,從該文件可以看出,U-Boot由<$(CPU)/start.o>文件開始,start.o由start.S編譯生成,包含了U-Boot第一階段的主要代碼。第二階段代碼以<$(arch)/board.c>為入口。

U-Boot支持多種平臺,其驅動程序代碼位于drivers文件夾下,各設備的板級配置信息由文件控制,是移植過程中需要修改的主要文件。

為提高軟件的復用性,系統將操作系統的引導函數作為獨立的U-Boot命令添加到U-Boot中,支持多種命令,其命令的實現代碼保存在Common中,以“cmd_”作為文件前綴,添加U_Boot命令時需使用U-Boot提供的U_BOOT_CMD宏聲明。

U_BOOT_CMD各參數的意義:

(1)Name:命令的名稱,用于唯一區別命令,在U-Boot中如果命令的前綴不同,在終端可以直接輸入前綴執行命令。

(2)Maxages:命令可以接收的最多的參數個數。

(3)Cmd:命令的實現函數,命令被執行時,該函數被調用。

(4)Uasege:短的幫助信息,使用help時將打印該信息。

(5)Help:長的幫助信息,使用help Cmd時打印該信息。

在添加完代碼后,還需在文件中添加相應命令的目標文件。

3 U-Boot雙系統驅動啟動的實現

U-Boot要啟動操作系統,必須首先完成必要硬件的初始化,設置好操作系統的運行環境后加載并啟動操作系統。

3.1 硬件初始化代碼修改和配置

Mini6410使用三星公司設計生產的基于 ARM1176JZF-S內核的S3C6410處理器[6]。為提高代碼復用度,減小移植難度,選用三星公司修改的U-Boot1.1.6版本,該版本支持與本開發板類似的SMDK6410,適當修改后可以應用在本開發板上,可實現項目的主要功能。

修改/Makefile:添加mini6410的編譯命令:

-CROSS_COMPILE= /usr/local/arm/4.2.2-eabi/usr/bin/arm

linux-

+ CROSS_COMPILE = arm-linux-

+ mini6410_nand_conf i g : unconf i g

+@$(MKCONFIG)mini6410 arm s3c64xx mini6410 samsung

s3c6410 NAND ram256

復制參考板代碼:

board/samsung/smdk6410-> board/samsung/mini6410

include/conf i gs/smdk6410.h-> include/conf i g/mini6410.h

修改平臺相關代碼:

(1)Include/conf i gs/Mini6410.h

Mini6410.h包含了所有Mini6410開發板的配置選項,如SDRAM的大小、位置,NAND FLASH的大小,串口的配置,網卡的型號,MAC地址,IP地址等信息,以及默認的內核啟動參數等。

(2)CPU/s3c64xx/Start.s

Start.s是整個U-Boot的入口,包含了最基本的設置CPU模式的代碼,可調用內存初始化函數、系統時鐘初始化函數、第二階段入口函數。本文件主要修改的內容是去掉SMDK6410中包含的ONENAND初始化代碼。

(3)Board/Samsung/Mini6410/Mini6410.c

Mini6410.c包含了一些板級初始化代碼,包含網卡初始化函數的調用、LCD初始化函數調用代碼等,以及虛擬內存地址到物理內存地址的轉換函數。本文件主要修改的內容是去掉SMDK6410中包含的CS8900網卡的初始化函數,添加了DM9000的初始化函數和USB下載功能的支持函數。

(4)Common/Main.c

Main.c包含了U-Boot接收并執行命令的主循環函數man_loop(),本文件的代碼與體系無關,不用做其他修改。但為了提高U-Boot的可用性添加了菜單函數。

3.2 引導WinCE系統

Boot Loader引導WinCE需要完成以下操作:

(1)設置CPU為SVC模式。

(2)完成CPU,內存控制器,系統時鐘,串口,Caches,TLBs的初始化。

(3)解壓WinCE內核鏡像文件頭,檢查校驗和,加載內核到指定位置。

(4)跳轉之前禁用中斷和MMU。

解壓文件頭需要分析WinCE文件頭格式[7],WinCE鏡像存在兩種格式,分別為nb0和bin。nb0是原始的二進制鏡像,可以直接燒到FLASH/ROM中,它不包括頭,可以直接跳轉到其入口執行,一般情況下采用nb0將內核下載到設備的RAM中運行。bin是一種二進制鏡像格式,以片斷為單位組織數據,每個片斷都包括一個頭,頭中指定有起始地址、長度、校驗值。Platform Builder將WinCE內核所有文件以bin格式合并成一個文件,默認文件名為nk.bin。Boot Loader需要將nk.bin分解成多個文件放到RAM中。

啟動WinCE操作系統只需要完成必要的硬件初始化,設置好WinCE系統的運行環境,然后讀取并校驗WinCE鏡像文件,由鏡像文件頭部獲取WinCE的加載地址,并將WinCE保存到指定的位置后,跳轉到其開始地址,就可以成功引導WinCE操作系統,如圖3所示。

3.3 引導Linux系統

Boot Loader引導Linux內核需要完成以下操作:(1)設置CPU為SVC模式。

(2)完成CPU,內存控制器,系統時鐘,串口,Caches,TLBs的初始化。

(3)加載Linux內核鏡像文件到內存指定位置。

(4)設置Linux內核啟動參數并跳轉到內核。

圖3 啟動WinCE

通過Boot Loader啟動內核要傳遞三個參數:將第一個參數放在寄存器0中,一般r0=0;第二個參數放在寄存器1中,是機器類型ID;第三個參數放在寄存器2中,是啟動參數標記列表(TaggedList)在RAM中的起始基地址。

其中機器ID定義在文件,內核用機器ID檢查是否支持當前平臺;TaggedList是Boot Loader傳遞給內核的主要參數,包含系統的根設備標志,頁面大小,內存的起始地址和大小,RAMDISK的起始地址和大小,壓縮的RAMDISK根文件系統的起始地址和大小,內核命令參數等。內核參數鏈表的格式和說明可以從內核源代碼目錄樹的中找到,參數鏈表必須以ATAG_CORE開始,以ATAG_NONE結束。這里的ATAG_CORE,ATAG_NONE是各參數的標記,是一個32位值,例如:ATAG_CORE=0x54410001。其他參數標記還包 括ATAG_MEM32,ATAG_INITRD,ATAG_RAMDISK,ATAG_COMDLINE等。每個參數標記就代表一個參數結構體,由各參數結構體構成參數列表。內核在啟動時將解析該參數表,用于內核啟動的配置。

Linux內核的引導只需要完成必要的硬件初始化操作,設置運行環境后,讀取Linux內核到預先規劃好的位置;設置好TaggedList后,將TaggedList,MachID,內存參數,文件系統位置等信息傳遞給Linux內核后就能完成Linux內核的引導,如圖4所示。

4 結 語

本文以三星S3C6410為處理器的Mini6410開發板為硬件平臺,以U-Boot為基礎,實現了在一個嵌入式設備上使用一個Boot Loader 引導多個操作系統的目的。本文將系統啟動的代碼實現為一個獨立的函數,有利于降低項目代碼的耦合性,方便后續嵌入式系統的開發。

猜你喜歡
嵌入式系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
主站蜘蛛池模板: 精品91视频| 午夜国产不卡在线观看视频| 国产视频a| 国产高清在线丝袜精品一区 | 亚洲综合激情另类专区| 中文字幕免费视频| 中文字幕在线观| 99er这里只有精品| 99精品在线看| 日韩不卡免费视频| 亚洲国产天堂久久九九九| 91小视频在线播放| 欧美亚洲欧美区| 久久视精品| 中文字幕在线欧美| 国产乱人免费视频| 久久久久亚洲精品成人网 | 欧美日韩中文国产va另类| 四虎在线观看视频高清无码| 国产欧美精品专区一区二区| 久久香蕉欧美精品| 亚洲天堂2014| 国产不卡在线看| 亚洲欧洲国产成人综合不卡| 成人国产精品视频频| 午夜啪啪网| 国产在线拍偷自揄拍精品| 国产福利在线免费| 日韩高清中文字幕| 看你懂的巨臀中文字幕一区二区| 欧美激情综合| 极品国产在线| 国产特级毛片aaaaaa| 18禁黄无遮挡免费动漫网站| 日本福利视频网站| 亚洲国产高清精品线久久| 四虎成人精品| 狠狠色成人综合首页| 欧美成人手机在线视频| 午夜福利网址| 丁香亚洲综合五月天婷婷| 美女内射视频WWW网站午夜 | 国产网友愉拍精品视频| 日韩精品亚洲人旧成在线| 美美女高清毛片视频免费观看| 在线免费不卡视频| 亚洲日韩精品伊甸| 色婷婷亚洲十月十月色天| 日本亚洲成高清一区二区三区| 欧美国产日本高清不卡| 免费a级毛片视频| 99热这里都是国产精品| 国产一级无码不卡视频| 成人夜夜嗨| 国产一国产一有一级毛片视频| 无码内射中文字幕岛国片 | 国产日韩精品欧美一区喷| 国产天天射| 日本福利视频网站| 欧美成人午夜视频免看| 永久免费AⅤ无码网站在线观看| 日本伊人色综合网| 99精品伊人久久久大香线蕉 | 国产精品刺激对白在线| 久久99国产视频| 国产激爽大片高清在线观看| av大片在线无码免费| 91亚瑟视频| 谁有在线观看日韩亚洲最新视频| 久久青草免费91线频观看不卡| 强乱中文字幕在线播放不卡| 午夜三级在线| 天天摸天天操免费播放小视频| 亚洲福利片无码最新在线播放| 全部无卡免费的毛片在线看| 视频二区中文无码| 97免费在线观看视频| 欧类av怡春院| 国产色网站| 中国国产A一级毛片| 欧美a在线| 国产在线视频欧美亚综合|