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

        ?

        基于S3C2440平臺(tái)的Linux內(nèi)核引導(dǎo)的過(guò)程實(shí)現(xiàn)

        2016-08-11 00:40:52趙興海衡友躍

        趙興海,衡友躍

        (淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系,安徽 淮北 235000)

        ?

        基于S3C2440平臺(tái)的Linux內(nèi)核引導(dǎo)的過(guò)程實(shí)現(xiàn)

        趙興海,衡友躍

        (淮北職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)科學(xué)技術(shù)系,安徽 淮北235000)

        摘要:u-boot是一種通用型的引導(dǎo)程序,u-boot引導(dǎo)Linux內(nèi)核是一個(gè)復(fù)雜過(guò)程。在此主要介紹了Bootloader的作用和種類,并詳細(xì)分析u-boot引導(dǎo)Linux內(nèi)核的功能實(shí)現(xiàn)過(guò)程。

        關(guān)鍵詞:Bootloader; u-boot;Linux內(nèi)核

        1Bootloader簡(jiǎn)介

        Bootloader是操作系統(tǒng)引導(dǎo)程序的總稱,它里面包含有很多種操作系統(tǒng)引導(dǎo)程序。由于設(shè)備的硬件架構(gòu)不同,有些是適合于某一種硬件架構(gòu)的針對(duì)型的引導(dǎo)程序,有些是適合于多種硬件架構(gòu)通用型的引導(dǎo)程序。Bootloader負(fù)責(zé)完成硬件設(shè)備的初始化,為軟件環(huán)境做準(zhǔn)備,最后把操作系統(tǒng)內(nèi)核調(diào)入到指定位置。[1]這些是它最基本的功能,可以根據(jù)開(kāi)發(fā)的需要或使用的需要對(duì)它的功能進(jìn)行添加擴(kuò)展,讓它使用更加的方便高效,Bootloader對(duì)于Linux操作系統(tǒng)常見(jiàn)有LILO、GRUB、U-boot、Vivi等。LILO和GRUB常用于X86平臺(tái)的臺(tái)式機(jī),Vivi是針對(duì)于SAMSUNG的arm架構(gòu)的嵌入式設(shè)備,U-boot是一種通用的Linux內(nèi)核,它可以用于包括X86架構(gòu)、ARM架構(gòu)在內(nèi)的多種硬件架構(gòu)。U-boot和Vivi比較而言,U-boot能夠提供更多的下載方式和大量的命令,使用更加的廣泛。Bootloader的作用主要是實(shí)現(xiàn)內(nèi)核的引導(dǎo)、保存和傳遞Boot parameters(啟動(dòng)參數(shù))給操作系統(tǒng)內(nèi)核,如下圖所示;

        圖1 Bootloader的作用和位置

        2U-boot簡(jiǎn)介及啟動(dòng)過(guò)程

        2.1U-boot簡(jiǎn)介

        U-boot是一種通用型的引導(dǎo)程序,通用型不止表現(xiàn)在它適用于絕大多數(shù)的CPU架構(gòu),還體現(xiàn)在它能夠支持多種操作系統(tǒng)的引導(dǎo)。U-boot的最主要功能就是把Linux內(nèi)核進(jìn)行加載和運(yùn)行,由于U-boot和Linux內(nèi)核無(wú)法同時(shí)運(yùn)行,那么就需要通過(guò)U-boot來(lái)引導(dǎo)Linux內(nèi)核以及把U-boot初始化得到的硬件信息傳遞給內(nèi)核,讓內(nèi)核能夠更快的加載硬件驅(qū)動(dòng)運(yùn)行起來(lái)。一個(gè)操作系統(tǒng)除了內(nèi)核以外,還包括大量的驅(qū)動(dòng)程序、編譯語(yǔ)言、數(shù)據(jù)庫(kù)和其它工具。[2]Linux內(nèi)核由5個(gè)模塊組成:網(wǎng)絡(luò)接口模塊、進(jìn)程間通信模塊、文件系統(tǒng)模塊、內(nèi)存管理模塊和進(jìn)程調(diào)度模塊。[3]U-boot最核心的部分就是實(shí)現(xiàn)引導(dǎo)內(nèi)核的命令。U-boot的目錄里面含有二十多個(gè)子目錄,主要分為四類,分類如下;

        第一類為開(kāi)發(fā)板相關(guān)的目錄board子目錄,里面包括各種支持類型的電路板類似于電腦的主板。

        第二類為平臺(tái)相關(guān)的目錄。CPU目錄里面包括了支持的不同CPU架構(gòu)子目錄。

        Lib-i386(CPU架構(gòu)類型)的目錄里面包含了每一種架構(gòu)下通用的庫(kù)文件。

        第三類為通用的函數(shù)類型目錄。inlcude目錄里面包括頭文件和常用的配置文件。common目錄里面是通用的函數(shù),多是對(duì)下一層驅(qū)動(dòng)程序的封裝。

        第四類為通用的設(shè)備驅(qū)動(dòng)程序目錄。disk目錄里面主要是硬盤接口相關(guān)的程序。Drivers目錄里面包含了各種設(shè)備的驅(qū)動(dòng)程序。Dtt目錄里面是數(shù)字穩(wěn)定測(cè)量器或傳感器的驅(qū)動(dòng)。Fs目錄是文件系統(tǒng)相關(guān)的實(shí)現(xiàn)目錄。Nand-spl目錄保存的是支持U-boot從NAND Flash啟動(dòng)的代碼文件。Net目錄保存的是各種網(wǎng)絡(luò)協(xié)議代碼文件。Post目錄保存的是機(jī)器上電自檢程序文件。Rtc目錄保存的是實(shí)時(shí)時(shí)鐘的驅(qū)動(dòng)文件目錄。

        2.2U-boot的啟動(dòng)過(guò)程

        U-boot的啟動(dòng)過(guò)程可分為單階段和多階段兩種方式,多階段是為了讓U-boot能夠提供更多的功能。這里針對(duì)S3C2440開(kāi)發(fā)板使用的是多階段的方式,使用了兩階段的方式實(shí)現(xiàn)啟動(dòng)過(guò)程。

        第一個(gè)階段使用的是start.s匯編代碼實(shí)現(xiàn),內(nèi)容如下:

        a.實(shí)現(xiàn)了開(kāi)發(fā)板CPU體系包括看門狗、Interrupt 設(shè)置、處理器時(shí)鐘頻率、加載操作系統(tǒng)使用的RAM空間等)

        b.為加載第二階段的U-boot代碼準(zhǔn)備RAM空間

        c.復(fù)制第二階段的U-boot代碼到RAM空間

        d.為第二階段代碼(C語(yǔ)言為主)的運(yùn)行設(shè)置好棧

        e.跳轉(zhuǎn)到第二階段代碼的入口點(diǎn)。

        第二階段的代碼主要實(shí)現(xiàn)的功能包括:

        a.初始化本階段要使用的硬件設(shè)備

        b.檢測(cè)系統(tǒng)內(nèi)存映射

        c.將根文件系統(tǒng)和內(nèi)核鏡像從FLASH設(shè)備復(fù)制到RAM空間

        d.為內(nèi)核配置啟動(dòng)選項(xiàng)

        e.調(diào)用內(nèi)核使內(nèi)核運(yùn)行起來(lái)。

        3U-boot的主要功能實(shí)現(xiàn)

        U-boot引導(dǎo)Linux內(nèi)核功能主要有兩個(gè)部分,一個(gè)是引導(dǎo)內(nèi)核的命令,一個(gè)是傳遞內(nèi)核啟動(dòng)參數(shù)。

        3.1U-boot引導(dǎo)內(nèi)核的命令功能實(shí)現(xiàn)

        U-Boot的命令包括很多,包括下載文件的命令,幫助命令help、內(nèi)存操作、命令、NOR Flash操作命令、NAND Flash操作命令、環(huán)境變量命令、啟動(dòng)命令等。以啟動(dòng)命令為例闡述實(shí)現(xiàn)步驟。

        首先在include/command.h文件中找到宏U-BOOT-CMD的定義。定義如下;

        #define U-BOOT-k_CMD(k_name,k_maxargs,k_rep,k_cmd,k_usage,k_help)

        Cmd_tbl_t __u_boot_k_cmd_##k_name Struct_Section = {#k_name,k_maxargs,k_rep,k_cmd,k_usage,k_help}

        Struct_Section定義如下;

        #define Struct_Section _attribute_(unused,section(“.u_boot_cmd”))

        而在連接腳本U-BOOT.lds中有”.u_boot_cmd”的描述,如下;

        __u_boot_cmd_start = .;

        .u_boot_cmd : {*(.u_boot_cmd)}

        __u_boot_cmd_end = .;

        這里k_name為命令的字符串,k_maxargs為最大的參數(shù)個(gè)數(shù),k_rep標(biāo)識(shí)命令是否可重復(fù),cmd為實(shí)現(xiàn)命令功能的函數(shù)指針,k_usage為簡(jiǎn)短的使用說(shuō)明,k_help為詳細(xì)的使用說(shuō)明,_attribute_為函數(shù)具有的特殊屬性,.u_boot_cmd表示連接腳本中設(shè)計(jì)的專用于保存命令的特殊段。

        對(duì)于命令bootm,定義如下;

        U_BOOT_CMD{

        Bootm,CFG_MAXARGS,1,do_bootm,

        “String1”,

        “String2”,

        }

        宏U_BOOT_CMD的定義擴(kuò)展開(kāi)得到;

        Cmd_tbl_t __u_boot_cmd_bootm _attribute__((unused,section(“.u_boot_cmd”)))

        最后要為內(nèi)核設(shè)置啟動(dòng)參數(shù),在配置文件include/configs/smdk2440.h中增加如下兩個(gè)配置項(xiàng);

        #define CONFIG_SETUP_MEMORY_TAGS

        #define CONFIG_CMDLINE_TAG

        通過(guò)lib_arm/armLinux.c中的do_bootm_Linux函數(shù)來(lái)啟動(dòng)內(nèi)核。這個(gè)函數(shù)先設(shè)置標(biāo)記列表,最后調(diào)用theKernel(0,bd→bi_arch_number,bd→bi_boot_params)函數(shù)來(lái)調(diào)用內(nèi)核。

        3.2U-boot為內(nèi)核傳遞啟動(dòng)參數(shù)的實(shí)現(xiàn)

        U-boot和內(nèi)核不能同時(shí)運(yùn)行,所以它們的傳遞方式是兩者約定好保存啟動(dòng)參數(shù)的地方,U-boot通過(guò)把參數(shù)放到事先約定好的位置,接著內(nèi)核啟動(dòng),到指定的地方把參數(shù)讀入內(nèi)核。啟動(dòng)參數(shù)包括三個(gè),分別是內(nèi)核存放的地址、board_init函數(shù)設(shè)置的機(jī)器類型ID和標(biāo)記列表的開(kāi)始地址。

        3.2.1內(nèi)核存放的地址

        2.1.5 方法 照薄層色譜法(《中國(guó)藥典》2015年版四部通則0502)試驗(yàn)。吸取供試品溶液與對(duì)照藥材溶液各6μL、對(duì)照品溶液2μL、陰性對(duì)照溶液2μL,分別點(diǎn)于同一高效硅膠G薄層板上,以石油醚(60℃~90℃)-丙酮(9∶2)作展開(kāi)劑,展開(kāi),取出,晾干,噴以10%硫酸乙醇溶液,加熱至斑點(diǎn)顯色清晰。在供試品色譜中,在與對(duì)照藥材色譜和對(duì)照品色譜相應(yīng)的位置上以上各溶液分別顯相同顏色的斑點(diǎn)。見(jiàn)圖1。

        內(nèi)核存放的地址通過(guò)在連接腳步中定義。

        3.2.2機(jī)器類型ID的參數(shù)bd→bi_arch_number

        在 uboot/board/s3c2440/s3c2440.c的board_init函數(shù)中指定機(jī)器碼為:

        gd->bd->bi_arch_number = MACH_TYPE_S3C2440

        而MACH_TYPE_S3C2440定義在include/asm-arm/mach-types.h

        3.2.3標(biāo)記列表的開(kāi)始地址bd→bi_boot_params

        a.在U_boot的保存形式

        在U_boot中保存內(nèi)核采用參數(shù)使用的是一種叫標(biāo)記列表(tagged list)的格式進(jìn)行保存,里面使用標(biāo)記列表以ATAG_CORE開(kāi)始,以標(biāo)記ATAG_NONE結(jié)束,具體的定義在文件include/asm/setup.h頭文件中。

        Struct tag_header{

        U32size;

        U32 tag;

        };

        Structtag{

        Struct tag_header hdr;

        Union{

        Struct tag_core core;

        Structtag_mem32 mem;

        ……

        }u;

        b.內(nèi)核使用的方式為bd→bi_boot_params,理解傳遞為內(nèi)核函數(shù)參數(shù)形式需要理解兩個(gè)結(jié)構(gòu)體gd和bd,具體的定義如下:

        gd結(jié)構(gòu)體的定義在include/asm-arm/global_data.h文件中。

        c.保存的方式和傳遞的方式如何關(guān)聯(lián)

        保存的時(shí)候使用的是指針paramas進(jìn)行存放,而傳遞的時(shí)候使用的bg類型的結(jié)構(gòu)體。那么就需要把它們關(guān)聯(lián)起來(lái)。

        它們都在lib_arm/armLinux.c文件中定義,如下

        static void setup_start_tag (bd_t *bd)

        {

        params = (struct tag *) bd->bi_boot_params; /* 內(nèi)核的參數(shù)的開(kāi)始地址 */

        ……

        }

        4結(jié)論

        u-boot引導(dǎo)Linux內(nèi)核是一個(gè)復(fù)雜的過(guò)程,要使用到啟動(dòng)命令和啟動(dòng)參數(shù)的傳遞功能。通過(guò)詳細(xì)分析u-boot引導(dǎo)Linux內(nèi)核的功能實(shí)現(xiàn)過(guò)程讓讀者能夠?qū)-boot與Linux內(nèi)核的關(guān)系更加的清晰,也對(duì)u-boot的階段啟動(dòng)有所了解。

        參考文獻(xiàn):

        [1]韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.

        [2]宋寶華,等.精通Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)[M].北京:人民郵電出版社,2010.

        [3]趙炯.Linux內(nèi)核完全注釋[M].北京:機(jī)械工業(yè)出版社,2004.

        責(zé)任編輯:凈草

        收稿日期:2016-06-30

        基金項(xiàng)目:本文系安徽省高等學(xué)校省級(jí)質(zhì)量工程項(xiàng)目“計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)綜合改革試點(diǎn)”(編號(hào):2013zy110)階段性研究成果。

        作者簡(jiǎn)介:趙興海(1982-),男,安徽鳳陽(yáng)人,助教,研究放心為嵌入式系統(tǒng)工程。

        中圖分類號(hào):TP368.1

        文獻(xiàn)標(biāo)識(shí)碼:A

        文章編號(hào):1671-8275(2016)04-0134-03

        国内专区一区二区三区| 色爱区综合五月激情| 日韩精品电影在线观看| 日本一区二区三区在线观看免费 | 亚洲性啪啪无码AV天堂| 亚洲成人色黄网站久久| 亚洲国产美女高潮久久久| 性色做爰片在线观看ww| 国产av熟女一区二区三区| 亚洲一本到无码av中文字幕| 偷亚洲偷国产欧美高清| 色综合久久人妻精品日韩| 精品中文字幕在线不卡| 日韩精品视频久久一区二区| 国产亚洲精品a片久久久| 无码久久精品国产亚洲av影片| 97精品国产高清自在线看超| 日韩成精品视频在线观看| 丝袜美腿亚洲第一免费| 久久综合狠狠色综合伊人| 成人国产精品一区二区网站| 免费国产自拍视频在线观看| 国产激情在线观看免费视频| 四虎影视成人永久免费观看视频| 日韩亚洲中字无码一区二区三区| 男男互吃大丁视频网站| 日韩女优av一区二区| 特级做a爰片毛片免费看108| 亚洲成av人在线观看无堂无码| 国产av一区二区三区天美| 欧洲熟妇色| 美女黄18以下禁止观看| 亚洲av精品一区二区三| 亚洲女同免费在线观看| 日韩av无码精品一二三区| 亚洲手机国产精品| 青青草免费激情自拍视频| 久久久精品网站免费观看| 亚洲一区二区三区四区精品在线| 熟妇丰满多毛的大隂户| 国产目拍亚洲精品一区二区|