亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于U-Boot的嵌入式系統(tǒng)雙啟動設計與實現(xiàn)

        2018-11-21 04:39:56鄧正維鄧小武鄧紹偉李森林
        物聯(lián)網(wǎng)技術(shù) 2018年11期
        關鍵詞:內(nèi)核內(nèi)存時鐘

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

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

        2.武陵山片區(qū)生態(tài)農(nóng)業(yè)智能控制技術(shù)湖南省重點實驗室,湖南 懷化 418008)

        0 引 言

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

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

        1 系統(tǒng)的硬件平臺

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

        1.1 CPU

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

        1.2 內(nèi)存

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

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

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

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

        1.3 NAND FLASH

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

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

        1.4 存儲器規(guī)劃與分配

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

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

        圖1 物理內(nèi)存和NAND FLASH劃分

        2 U-Boot分析

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

        U-Boot屬于兩階段啟動的Boot Loader,在第一階段由匯編語言完成,與處理器直接相關,完成CPU模式切換,禁止看門狗,初始化內(nèi)存控制器,設置堆棧,重定位U-Boot運行位置等操作,最后跳轉(zhuǎn)到第二階段代碼運行。第二階段代碼主要由C語言完成,與目標板相關,主要完成所有設備的初始化工作,最后加載并啟動操作系統(tǒng),具體流程如圖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支持多種平臺,其驅(qū)動程序代碼位于drivers文件夾下,各設備的板級配置信息由文件控制,是移植過程中需要修改的主要文件。

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

        U_BOOT_CMD各參數(shù)的意義:

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

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

        (3)Cmd:命令的實現(xiàn)函數(shù),命令被執(zhí)行時,該函數(shù)被調(diào)用。

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

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

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

        3 U-Boot雙系統(tǒng)驅(qū)動啟動的實現(xiàn)

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

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

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

        修改/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開發(fā)板的配置選項,如SDRAM的大小、位置,NAND FLASH的大小,串口的配置,網(wǎng)卡的型號,MAC地址,IP地址等信息,以及默認的內(nèi)核啟動參數(shù)等。

        (2)CPU/s3c64xx/Start.s

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

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

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

        (4)Common/Main.c

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

        3.2 引導WinCE系統(tǒng)

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

        (1)設置CPU為SVC模式。

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

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

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

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

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

        3.3 引導Linux系統(tǒng)

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

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

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

        (4)設置Linux內(nèi)核啟動參數(shù)并跳轉(zhuǎn)到內(nèi)核。

        圖3 啟動WinCE

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

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

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

        4 結(jié) 語

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

        猜你喜歡
        內(nèi)核內(nèi)存時鐘
        萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
        別樣的“時鐘”
        強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        古代的時鐘
        “春夏秋冬”的內(nèi)存
        當代陜西(2019年13期)2019-08-20 03:54:22
        基于嵌入式Linux內(nèi)核的自恢復設計
        Linux內(nèi)核mmap保護機制研究
        有趣的時鐘
        時鐘會開“花”
        基于內(nèi)存的地理信息訪問技術(shù)
        亚洲精品中文字幕乱码二区 | 日韩欧美一区二区三区免费观看| 国产伦精品一区二区三区| 爆操丝袜美女在线观看| 亚洲色爱免费观看视频| 国产精品美女一区二区三区 | 少妇久久一区二区三区| 亚洲综合图色40p| 人人妻人人狠人人爽天天综合网| 一本一道久久综合狠狠老| 欧美亚洲国产人妖系列视| 久久精品日韩免费视频| 尹人香蕉久久99天天拍| 成人无码免费一区二区三区| 亚洲中文字幕每日更新| 久久久久一| 深夜日韩在线观看视频| 高级会所技师自拍视频在线| 2020无码专区人妻系列日韩| 好男人视频在线视频| 女同av在线观看网站| 有码中文字幕一区二区 | 国产精品日本一区二区在线播放| 国产山东熟女48嗷嗷叫| аⅴ天堂国产最新版在线中文 | 一区二区三区乱码在线 | 欧洲| 午夜精品久久久| 亚洲一区二区三区一区| 自拍成人免费在线视频| 亚洲综合欧美色五月俺也去| 欧美第一黄网免费网站| 亚洲国产日韩欧美高清片a| 日韩女优图播一区二区| 亚洲成av人片天堂网无码| 国产精品ⅴ无码大片在线看| 精品国产国产AV一区二区| 青青草免费激情自拍视频| 中文字幕有码人妻在线| 中文字幕网伦射乱中文| 亚洲色图+国产精品| 少妇高潮太爽了免费网站|