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

        ?

        U-Boot在S3C2440上的分析和移植

        2016-01-12 23:11:40夏禮勇符秀輝
        沈陽化工大學(xué)學(xué)報 2016年2期
        關(guān)鍵詞:源碼開發(fā)板網(wǎng)卡

        夏禮勇, 符秀輝

        (沈陽化工大學(xué) 信息工程學(xué)院, 遼寧 沈陽 110142)

        移植Bootloader的目的是在系統(tǒng)上電后,使用Bootloader初始化系統(tǒng)硬件,構(gòu)建系統(tǒng)軟件環(huán)境,最后引導(dǎo)系統(tǒng)跳轉(zhuǎn)到Linux內(nèi)核繼續(xù)運行.在不同的嵌入式平臺上,需要對于針對特定的硬件配置制作對應(yīng)的Bootloader.Bootloader種類很多,每種Bootloader都具有平臺針對性,其中U-Boot對于ARM架構(gòu)的芯片支持更加完善.

        目前研究U-Boot移植的文獻(xiàn)大多數(shù)介紹的是在NAND Flash上的移植操作,在文獻(xiàn)中沒有介紹U-Boot如何引導(dǎo)系統(tǒng)跳轉(zhuǎn)到Linux內(nèi)核的實現(xiàn)細(xì)節(jié),只有移植步驟和實現(xiàn)現(xiàn)象,不能明顯體現(xiàn)移植目的.本文通過虛擬機搭建編譯環(huán)境,分析U-Boot啟動流程,并在啟動流程第二階段中具體介紹U-Boot引導(dǎo)系統(tǒng)跳轉(zhuǎn)到Linux內(nèi)核的實現(xiàn)細(xì)節(jié),詳細(xì)分析U-Boot的移植步驟,最后在NOR Flash上移植U-Boot.文中移植U-Boot的操作是后續(xù)嵌入式Linux系統(tǒng)開發(fā)的基礎(chǔ),同時文中介紹的U-Boot啟動流程和移植步驟也能給類似平臺移植Bootloader提供參考.

        1 U-Boot簡介

        U-Boot是一種業(yè)界廣泛使用的Bootloader,其程序開源,兼容性好,源代碼可在互聯(lián)網(wǎng)上直接下載.U-Boot支持很多架構(gòu)的CPU,如X86、ARM、MIPS等架構(gòu)的CPU,能夠引導(dǎo)Linux和Wince等嵌入式操作系統(tǒng).本文基于1.1.6版本的U-Boot進(jìn)行移植,根據(jù)U-Boot源碼文件夾下各個目錄的特性進(jìn)行分類,可分為5類,如表1所示.

        表1 目錄分類

        2 U-Boot的移植環(huán)境

        2.1 硬件環(huán)境

        移植平臺是以S3C2440A為核心的ARM9開發(fā)板,S3C2440A芯片內(nèi)部的CPU型號為ARM920T.S3C2440A內(nèi)部集成SRAM,具有5級流水線,支持NOR Flash和NAND Flash[1].開發(fā)板主要資源如表2所示.

        表2 板載主要元器件

        Table 2 Plate main components

        2.2 軟件環(huán)境

        通過在VMware Workstation虛擬機上運行Ubuntu14.10系統(tǒng)搭建移植軟件編譯環(huán)境,arm-linux-gcc-4.3.2作為編譯器,使用JTAG作為下載和調(diào)試工具.

        3 U-Boot的啟動流程分析

        U-Boot可以設(shè)置從NOR Flash啟動,也可以設(shè)置從NAND Flash啟動,因為NAND Flash容易產(chǎn)生壞塊,所以選擇從NOR Flash啟動,在本文后續(xù)的移植過程中將編譯生成的uboot.bin文件燒錄到NOR Flash中,實現(xiàn)從NOR Flash啟動系統(tǒng)程序.

        3.1 U-Boot啟動流程第一階段

        U-Boot是具有兩階段啟動過程的Bootloader,通常用匯編語言實現(xiàn)第一階段程序,用C語言實現(xiàn)第二階段程序.在啟動第一階段系統(tǒng)執(zhí)行start.S和lowlevel_init.S匯編文件,這兩個文件分別位于cpu/$(CPU)和board/$(BOARDDIR)目錄中,主要完成以下工作:(1)初始化開發(fā)板相關(guān)的硬件;(2)初始化板載內(nèi)存芯片;(3)將U-Boot代碼拷貝到初始化好的SDRAM中;(4)設(shè)置棧;(5)跳到第二階段C代碼中繼續(xù)執(zhí)行[2].$(CPU)和$(BOARDDIR)分別代表SoC內(nèi)部的CPU型號、進(jìn)行移植的開發(fā)板名稱,兩個變量的值分別為arm920t和my2440.

        3.2 U-Boot啟動流程第二階段

        U-Boot啟動流程第二階段如圖1所示.

        圖1 U-Boot啟動流程第二階段

        在第一階段第5步中,U-Boot通過ldr指令將第二階段C語言程序start_armboot函數(shù)入口地址賦值給PC寄存器,使系統(tǒng)跳轉(zhuǎn)到第二階段執(zhí)行C語言代碼.

        在第二階段啟動過程中,程序初始化系統(tǒng)時鐘、初始化定時器、初始化串口模塊,檢測Flash上環(huán)境參數(shù)是否設(shè)置.完成上述步驟后,start_armboot函數(shù)繼續(xù)初始化NOR Flash,將存儲在NOR Flash上的環(huán)境參數(shù)讀入SDRAM,初始化網(wǎng)卡模塊,調(diào)用main_loop()函數(shù).

        在main_loop()函數(shù)中,系統(tǒng)會檢測U-Boot環(huán)境參數(shù)bootdelay和bootcmd的值是否定義,如果沒有定義系統(tǒng)會不斷檢測串口輸入,并解析執(zhí)行串口輸入的命令;如果已經(jīng)定義bootdelay和bootcmd,系統(tǒng)則會倒數(shù)bootdelay秒;若在bootdelay秒內(nèi)串口有輸入,系統(tǒng)會進(jìn)入讀取串口輸入命令、執(zhí)行命令的循環(huán)中;若沒有輸入,系統(tǒng)會執(zhí)行環(huán)境參數(shù)bootcmd中定義的命令,環(huán)境參數(shù)bootcmd中定義了系統(tǒng)內(nèi)核的讀取指令和啟動內(nèi)核指令[3],執(zhí)行bootcmd命令后便成功跳轉(zhuǎn)到Linux內(nèi)核中繼續(xù)運行.

        4 U-Boot在S3C2440上的移植步驟

        4.1 下載U-Boot-1.1.6源碼包解壓縮

        本文的移植平臺是S3C2440開發(fā)板,要在此硬件平臺上移植U-Boot,需要根據(jù)板載硬件修改U-Boot源碼.首先從互聯(lián)網(wǎng)下載1.1.6版本的U-Boot源碼壓縮包,把源碼壓縮包放入到Ubantu14.10主機的/work/system目錄下,在Linux主機上進(jìn)入/work/system目錄下,在終端命令行中執(zhí)行“tar xjf U-Boot-1.1.6.tar.bz2”命令,待命令執(zhí)行完畢后,可以得到已經(jīng)解包解壓縮的U-Boot-1.1.6文件夾.

        4.2 創(chuàng)建工程相應(yīng)目錄和文件

        目前1.1.6版本的U-Boot源碼已經(jīng)能夠支持大部分的2410開發(fā)板,本文基于smdk2410的U-Boot程序?qū)3C2440開發(fā)板移植U-Boot.在解壓好的u-boot-1.1.6文件夾中的board目錄下存在smdk2410文件夾,首先進(jìn)行以下6步操作:

        (1) 在U-Boot源碼根目錄board文件夾下新建my2440文件夾;

        (2) 將smdk2410目錄下的所有文件拷貝到my2440文件夾中;

        (3) 在include/configs目錄下新建my2440.h文件;

        (4) 復(fù)制相同目錄下smdk2410.h中的全部內(nèi)容到my2440.h中;

        (5) 在U-Boot源碼根目錄下的Makefile中添加如下配置命令[4]:

        my2440_config:unconfig

        @$(MKCONFIG) $(@:_config=) arm arm920t my2440 NULL s3c24x0

        (6) 修改board目錄下my2440目錄中的Makefile,將Makefile文件中的“COBJS:=”項后smdk2410.o修改為my2440.o.

        4.3 修改系統(tǒng)時鐘設(shè)置

        查閱芯片數(shù)據(jù)手冊可知S3C2410A主頻為200 MHz,S3C2440A主頻為400 MHz.從S3C2440A數(shù)據(jù)手冊中得知系統(tǒng)頻率MPLL和USB控制器頻率UPLL計算公式如下[5]:

        MPLL=(2×m×fin)/(p×2s)

        (1)

        UPLL=(m×fin)/(p×2s)

        (2)

        在公式(1)和(2)中,m=MDIV+8,p=PDIV+2,s=SDIV,fin為外接晶振頻率.本文的移植平臺上外接晶振為12 MHz,所以fin的值是12 MHz.在系統(tǒng)晶振輸入為12 MHz的情況下,要改變系統(tǒng)時鐘頻率和USB控制器頻率,需要在系統(tǒng)時鐘的宏定義中給PLLCON寄存器賦值.根據(jù)S3C2440A數(shù)據(jù)手冊可知PLLCON寄存器分為MDIV,PDIV,SDIV三個部分,要使系統(tǒng)頻率倍頻到400 MHz,需要將MDIV,PDIV,SDIV分別賦值為0x5c,0x01,0x01;要使USB控制器頻率變成48 MHz,需要將MDIV,PDIV,SDIV分別賦值0x38,0x02,0x02.

        綜合上述分析,在board_init函數(shù)中添加如下宏定義:

        #define S3C2440_MPLL_TO_400 MHz

        ((0x5c?12)|(0x01?4)|(0x01))

        #defineS3C2440_UPLL_TO_48 MHz

        ((0x38?12)|(0x02?4)|(0x02))

        其中,board_init函數(shù)定義于my2440目錄下的my2440.c文件中.完成上述設(shè)置后,還需要設(shè)置時鐘分頻比,根據(jù)S3C2440A數(shù)據(jù)手冊給CLKDIVN寄存器賦值0x05,實現(xiàn)FCLK、HCLK、PCLK的分頻比為1∶4∶8.具體步驟為在my2440.c文件中繼續(xù)添加如下宏定義:

        #define S3C2440_CLKDIVN 0x05

        4.4 設(shè)置支持DM9000網(wǎng)卡

        在嵌入式Linux系統(tǒng)中,網(wǎng)絡(luò)功能很重要.U-Boot-1.1.6已經(jīng)支持smdk2410開發(fā)板板載的CS8900網(wǎng)卡,S3C2440開發(fā)板板載的是DM9000網(wǎng)卡,要實現(xiàn)網(wǎng)絡(luò)支持,首先需要在include/configs文件夾下的my2440.h文件中刪除如下所示的支持CS8900網(wǎng)卡的宏定義[6]:

        #define CONFIG_DRIVER_CS8900 1

        #define CS8900_BASE 0x19000300

        #define CS8900_BUS16 1

        S3C2440開發(fā)板中DM9000網(wǎng)卡連接在存儲控制器的BANK4,從數(shù)據(jù)手冊得知DM9000網(wǎng)卡的地址為0x20000000,設(shè)置支持DM9000網(wǎng)卡需要在my2440.h文件中添加如下宏定義:

        #define CONFIG_DRIVER_DM9000 1

        #define CONFIG_DM9000_IO_BASE 0x20000000

        #define DM9000_DATA

        (CONFIG_DM9000_IO_BASE+4)

        4.5 編譯U-Boot在my2440平臺上燒錄

        在完成上面一系列步驟后,U-Boot編譯前的修改源碼工作已經(jīng)完成.此時在虛擬機上運行Ubuntu系統(tǒng),進(jìn)入U-Boot根目錄下,在終端命令行中輸入“make my2440_config”配置命令,對U-Boot源碼進(jìn)行針對移植平臺的配置操作,待配置操作完成后,在終端命令行中輸入make命令編譯U-Boot.

        在編譯結(jié)束后,系統(tǒng)會生成uboot.bin二進(jìn)制文件,使用JTAG工具將uboot.bin文件燒錄到移植平臺上,在燒錄過程中既可以燒錄到NAND Flash中,也可以燒錄到NOR Flash中,因為NAND Flash易產(chǎn)生壞塊,為保證U-Boot的穩(wěn)定性,本文將uboot.bin文件燒錄到NOR Flash中.當(dāng)成功燒錄后,為開發(fā)板重新上電啟動系統(tǒng),通過Secure CRT工具可以查看到開發(fā)板串口上輸出的U-Boot和開發(fā)板相關(guān)的信息,如圖2所示.至此成功實現(xiàn)U-Boot在S3C2440開發(fā)板NOR Flash上的移植.

        圖2 串口輸出信息

        5 結(jié)束語

        選用U-Boot作為移植對象,從互聯(lián)網(wǎng)下載U-Boot源碼,通過虛擬機搭建開發(fā)環(huán)境,對源碼壓縮包進(jìn)行解包解壓縮,基于smdk2410的U-Boot 源碼針對S3C2440開發(fā)板硬件資源修改源碼,得到適合在S3C2440上移植的U-Boot代碼,通過編譯環(huán)境和編譯器對U-Boot代碼進(jìn)行編譯,最后將編譯得到的uboot.bin文件燒錄到S3C2440開發(fā)板板載的NOR Flash中,成功完成S3C2440開發(fā)板的移植工作.在特定嵌入式硬件平臺上移植U-Boot是進(jìn)行嵌入式Linux開發(fā)工作的基礎(chǔ),通過本文的移植工作,為后續(xù)工作做好鋪墊,也能為類似嵌入式平臺移植Bootloader提供一定的參考作用.

        [1] 杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003:8-9.

        [2] 張進(jìn),姜威.u-boot的啟動流程分析及移植步驟[J].電力自動化設(shè)備,2005,25(7):68-71.

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

        [4] 申爽.基于S3C2440的Uboot分析與移植[J].計算機系統(tǒng)應(yīng)用,2012,21(5):222-225.

        [5] Samsung Electronics.S3C2440A 32-Bit Risc Micro controller User′s Manual Revision 0.12[EB/OL].(2004-03-15)[2013-07-19].http://www.docin.com/p-679498723.html.

        [6] 馮林琳,耿恒山.基于S3C6410的Uboot分析與移植[J].計算機與現(xiàn)代化,2013(1):119-121.

        猜你喜歡
        源碼開發(fā)板網(wǎng)卡
        在DDS 中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法
        基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
        基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
        計算機時代(2023年6期)2023-06-15 17:49:09
        企業(yè)如何保護(hù)源碼
        Server 2016網(wǎng)卡組合模式
        Microchip最新推出兩款PIC32 Curiosity開發(fā)板
        淺析單片機開發(fā)板的設(shè)計與制作
        電子制作(2017年22期)2017-02-02 07:10:14
        基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實驗課程改革
        計算機教育(2016年4期)2016-05-20 02:36:05
        挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
        Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
        亚洲视频专区一区二区三区| 亚洲国产精品久久久久秋霞1| 国产成人无码A区在线观| 人妻爽综合网| 亚洲精品456在线播放狼人| 丰满人妻一区二区三区蜜桃| 国产精品久久久久aaaa| 一道久在线无码加勒比| 亚洲无码毛片免费视频在线观看| 日韩亚洲精选一区二区三区| 亚洲精一区二区三av| 一二三四日本中文在线| 亚洲成a人片在线观看天堂无码 | 国产伦久视频免费观看视频| 在线观看网址你懂的| 国产成人夜色在线视频观看| 日韩人妻久久中文字幕| 亚洲国产精品无码久久久| 亚洲欧洲偷自拍图片区| 日韩在线不卡一区在线观看| 日本免费三片在线视频| 大尺度免费观看av网站| 护士人妻hd中文字幕| 无码av免费永久免费永久专区| 国产一区亚洲一区二区| 国产一区二区三区激情视频| 日产学生妹在线观看| 国产精品厕所| 亚洲中文字幕熟女五十| 在线精品首页中文字幕亚洲| 欧美色欧美亚洲另类二区| 国产欧美日韩视频一区二区三区| 一区二区三区免费观看在线视频 | 国产盗摄XXXX视频XXXX| 日本女优久久精品观看| 女人张开腿让男人桶爽| 欧产日产国产精品精品| 91精品国产高清久久久久| 国产老熟女伦老熟妇露脸| 大ji巴好深好爽又大又粗视频| 亚洲av无码精品色午夜果冻不卡|