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

嵌入式平臺S3C6410的UBoot分析與移植*

2017-11-24 11:54:35
關鍵詞:嵌入式指令設置

(1.西南交通大學 信息科學與技術學院,成都 611756;2.西南交通大學 交通與運輸學院)

ldrpc, _start_armboot

_start_armboot:

.word start_armboot

董君,倪少權2

(1.西南交通大學 信息科學與技術學院,成都 611756;2.西南交通大學 交通與運輸學院)

詳細分析基于S3C6410的嵌入式平臺的U-Boot源代碼和啟動過程。在此基礎上成功移植了U-Boot軟件,實現(xiàn)了S3C6410處理器時鐘初始化、串口通信、內存初始化、MMU初始化、NAND Flash初始化。通過移植NAND Flash驅動,實現(xiàn)讀寫NAND Flash和從NAND Flash啟動的功能,使得整個系統(tǒng)能夠正常運行。

U-Boot;分析;移植;NAND Flash驅動

引 言

U-Boot全稱 Universal BootLoader,是遵循GPL條款的開放源碼項目。U-Boot在嵌入式設備中起著初始化硬件、引導系統(tǒng)、為操作系統(tǒng)做準備的作用,因此分析與移植U-Boot有著重要的意義。

首先找到board/samsung/smdk6410/的u-boot.lds(連接器腳本),連接器腳本的作用主要是配置U-Boot程序的布局,由其中的.text部分可知,第一部分代碼從cpu/s3c64xx/start.S開始執(zhí)行。因此分析start.S是U-Boot分析的第一階段。

(1)建立異常向量表

由于ARM處理器有7種異常,分別是:復位、未定義指令、軟中斷、指令預取終止、數據終止、外部中斷請求、快速中斷請求,所以有7個異常向量。

(2)設置處理器工作模式

設置ARM的運行模式為32位管理模式。

(3)CPU初始化

首先沖洗指令/數據緩存、關閉MMU和cache、設置外設基地址。接著通過bl lowlevel_init指令跳轉到標號 lowlevel_init處執(zhí)行,其位于boardsamsungsmdk6410下。

(4)點亮LED/關閉看門狗/關閉中斷

點亮LED能夠檢驗之前的步驟是否正確,關閉看門狗/中斷能夠讓系統(tǒng)不受外界的影響正常啟動。S3C6410中斷控制器有64個中斷源,其中有VIC0和VIC1兩個中斷矢量控制器。

(5)S3C6410時鐘初始化

S3C6410系統(tǒng)控制器主要包含系統(tǒng)時鐘控制單元和系統(tǒng)電源管理單元,其中時鐘控制單元主要包括APLL、 MPLL、 EPLL三個鎖相環(huán)。

APLL主要供給S3C6410核心ARM1176使用,最大能達到667 MHz,一般為533 MHz。MPLL主要給系統(tǒng)時鐘使用,主要用在AXI、AHB和 APB總線,在AXI/AHB上時鐘最大能達133 MHz,在APB上能達到66 MHz。EPLL主要給外圍的設備提供時鐘。三星提供了可供選擇的時鐘配置參數:APLL=533 MHz,MPLL=266 MHz,HCLKX2=266 MHz,HCLK=133 MHz,PCLK=66 MHz。

S3C6410時鐘配置步驟如下:

① 首先配置APLL_CON/MPLL_CON寄存器,根據三星提供的配置參數,當FIN=12 MHz,輸出為533 MHz時,MDIV=266,PDIV=3, SDIV=1。

② 設置分頻系數,S3C6410主要有三個控制器存器CLK_DIV0、CLK_DIV1、CLK_DIV2。APLL 和MPLL 輸出的頻率由CLK_DIV0中的ARM_RATIO、MPLL_RATIO決定。HCLKX2、HCLK、PCLK頻率分別由CLK_DIV0中的HCLKX2_RATIO、HCLK_RATIO、PCLK_RATIO決定。參考值:ARM_RATIO =0,MPLL_RATIO=1,HCLKX2_RATIO=1,HCLK_RATIO=1,PCLK_RATIO=3。

(6)串口初始化

S3C6410串口控制器主要是UART(通用異步接收發(fā)送器)。S3C6410的UART提供了4路獨立的異步串行I/O端口,每個UART主要包含控制單元、波特率發(fā)生器、發(fā)送器、接收器。波特率需要的時鐘源可以是PCLK, EXT_UCLK0 或者EXT_UCLK1。

S3C6410寄存器主要包括:ULCONn(線控制寄存器),控制數據傳輸格式,主要包含一個起始位、5~8個數據位、1個奇偶校驗位和1~2個停止位;UCONn(UART控制寄存器),選擇產生UART波特率的時鐘,控制數據傳輸/接收方式(中斷/輪詢)等;UFCONn(UART FIFO控制器寄存器),選擇是否啟用FIFO(主要是用來存儲發(fā)送/接收的數據);UTRSTATn(UART 發(fā)送/接收寄存器),第0位和第1位分別表示接收和發(fā)送數據的緩沖的狀態(tài);UTXHn/URXHn,8位發(fā)送/接收數據寄存器;UBRDIVn,波特率配置器存器。

波特率計算公式:

DIV_VAL=(PCLK /(bps×16 ))-1

DIV_VAL=(EXT_UCLKn/(bps×16))-1(n=0/1)

UBRDIVn=DIV_VAL的整數部分

UDIVSLOTn= DIV_VAL的小數部分×16

(7)NANDFlash初始化

NAND Flash時序初始化,主要配置寄存器NFCONF中的TACLS=7、TWRPH0=7、WRPH1=7。使能NAND Flash,主要寄存器NFCONT中的MODE=1、Reg_nCE0=0。

(8)內存初始化

內存初始化主要是配置其中的寄存器,主要包括P1REFRESH、P1CASLAT、P1T_DQSS、P1T_MRD、P1T_RAS、P1T_RC、P1T_RCD等一系列寄存器,對應的U-Boot源碼在cpu_init.S文件中。

(9)U-Boot將代碼從NANDFlash拷貝到內存中

本次移植使用的開發(fā)板CPU是S3C6410, 其steppingstone(0xc00 0000~0xc00 1fff)。

ldr r0, =0xff00 0fff

bic r1, pc, r0

ldr r2, _TEXT_BASE

bic r2, r2, r0

cmp r1, r2

mov r0, #0x1000

bl copy_from_nand

當前的PC值是在0xc00 0000~0xc00 1fff之間,執(zhí)行bic r1, pc, r0 將PC高8位和低12位清零,得到0x0~0x1000(這是在steppingstone中運行r1的值)。_TEXT_BASE = 0xc7e0 0000 ,執(zhí)行bic r2, r2, r0后 r2的范圍為0xe0 0000~0xef f000),因為開啟了MMU。經過比較后執(zhí)行bl copy_from_nand 指令(主要是拷貝4 KB大小的數據到內存中0x57e0 0000)。

(10)開啟MMU

首先建立映射表(從虛擬地址到物理地址的映射,主要是段映射)。由lowlevel_init.S(mmu_table)可知:第一段主要是用來調試,可讀(0~0xa000 0000)(2560 MB);第二段保留(0xa000 0000~0xc000 0000)-->(512 MB);第三段是主要用來映射的(128 MB)-->將虛擬基地址0xc000 0000 映射到物理基地址0x5000 0000;第三段沒法訪問(896 MB)。

然后設置TTB寄存器,將建立的映射表的基地址寫入到TTB寄存器中:mcrp15, 0, r1, c2, c0, 0。

接著使能MMU:mcrp15, 0, r0, c1, c0, 0。

(11)設置棧

因為開啟了MMU,所以棧的大小為:ldrsp=(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0xc),其中CFG_UBOOT_BASE=0xc7e0 0000、CFG_UBOOT_SIZE=2 MB。

(12)清除BSS段

主要是為后面的數據使用。

(13)跳轉到start_armboot

ldrpc, _start_armboot

_start_armboot:

.word start_armboot

當執(zhí)行了上面的指令后,PC執(zhí)行絕對跳轉到內存中,PC的值應該是0xc7e0 0000 之后的某個值(開啟了MMU)。

關于bl指令和ldr指令:bl指令是相對跳轉指令,只是相對當前PC的值跳轉,跳轉大小編譯器編譯時就已確定。ldr指令是絕對跳轉指令,PC的值會變成賦給的值。這也是這里用ldr的原因。

(1)設置結構體gd_t和bd_t

gd_t主要用來存儲全局數據區(qū)的數據。bd_t主要用來存放板級相關的全局數據。U-Boot啟動內核時要給內核傳遞參數,需要用gd_t和bd_t中的數據來設置標記列表。

(2)執(zhí)行init_sequence數組中的函數

通過調用在init_sequence指針數組中的函數指針,從而執(zhí)行相應的函數,接下來分析主要的函數。

? board_init( )

主要配置開發(fā)板的信息,初始化網卡,設置GPIO寄存器,設置U-Boot機器碼和內核啟動參數地址。

? interrupt_init( )

該函數主要是配置定時器,為系統(tǒng)運行提供相應的時間。

? env_init( )

初始化gd_t中環(huán)境變量,這里是系統(tǒng)默認的環(huán)境變量default_environment[0]。

? init_baudrate( )

初始化波特率,即gd->baudrate = 115200。

? dram_init( )

填充gd_t的內存信息,start = 0x5000 0000; size = 256M

? flash_init( )

初始化Flash的起始地址、bank數目,主要是放在flash_info[ ]中。

? nand_init( )

取得Nandflash的信息,放在nand_chip和nand_dev_desc結構體中。

? env_relocate()

將環(huán)境變量地址重新定位,將新的地址賦值給gd->env_addr(主要涉及到數據的搬移Nandflash->Dram)。

? 填充gd_t中bd的IP地址/MAC地址

gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr");

gd->bd->bi_enetaddr[reg] = s ? simple_strtoul (s, &e, 16) : 0。

? devices_init()

初始化設備列表,作者這里為空。

○k jumptable_init()

初始化跳轉表,填充gd_t中的jt指針數組里面的元素(函數),后面可以快速執(zhí)行里面的函數。

○l console_init_r( )

初始化控制臺,初始化標準輸入、輸出、和錯誤設備。

使能中斷。

填充硬件MAC地址。

進入main_loop循環(huán),執(zhí)行第三階段的代碼(實際上是兩階段),在mian_loop循環(huán)中主要執(zhí)行的主要代碼是:

s = GETenv ("bootcmd");

if (bootdelay >= 0 && s && !abortboot (bootdelay)) {

run_command (s, 0); }

首先獲取bootcmd環(huán)境變量,然后調用run_command( )函數來執(zhí)行相應的命令。bootm命令執(zhí)行的路線:bootm->do_bootm()->do_bootm_Linux()->theKernel( )。最后通過調用theKernel函數從而執(zhí)行Linux內核代碼,U-Boot引導功能完成,將控制權交給內核。

3 移植NAND Flash驅動

NAND Flash是嵌入式設備中最常用的存儲設備。通常將移植好的U-Boot燒寫到NAND Flash中,直接從NAND Flash里面啟動U-Boot。

首先要配置NAND Flash的控制時序位和使能位(之前),通過CONFIG_NAND來控制。然后在Nand_ids.c文件中找到結構體nand_flash_ids,添加相應的NAND Flash設備信息——{“NAND 1GiB 3,3V 8-bit”,0xD3, 0, 1024, 0, LP_OPTIONS},其已經在U-Boot中存在。最后重新編譯U-Boot,然后燒寫到NAND Flash中,從NAND Flash啟動開發(fā)板,U-Boot順利啟動,啟動頁面如圖1所示。

圖1 U-Boot順利啟動后顯示情況

結 語

[1] 田澤.嵌入式系統(tǒng)開發(fā)與應用[M].北京:北京航空航天大學出版社,2005.

[2] 鄭靈翔.嵌入式Linux系統(tǒng)設計[M].北京:北京航空航天大學出版社,2008.

[3] 范展源,劉韜.深度實踐嵌入式Linux系統(tǒng)移植[M].北京:機械工業(yè)出版社,2015.

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

[5] 何景波,孫運強,姚愛琴.U-Boot在嵌入式系統(tǒng)上的移植分析與實現(xiàn)[J].機械工程與自動化,2009(4).

[6] 黃薦渠,秦東興,趙曦,等.U-Boot的啟動及移植分析[J].微計算機信息,2008(11).

[7] 楊帆,顧亞平,彭翔,等.一種小型嵌入式Linux Boot Loader的設計與實現(xiàn)[J].計算機應用與軟件,2008(1):225-226.

[8] Sumsuang Electronics.S3C6410x User’s Manual,2008.

[9] Sumsuang Electronics.K9F2G08UXA Datasheet,2007.

董君(碩士研究生),主要研究方向為交通運輸信息技術;倪少權(博士),主要研究方向為計算機編制列車運行圖、交通運輸信息技術、鐵路行車組織、物流信息技術。

AnalysisandPortingofU-BootinEmbeddedPlatformS3C6410

DongJun1,NiShaoquan2

(1.School of Information Science and Technology,Southwest Jiaotong University,Chengdu 611756,China;2.School of Transportation and Logistics,Southwest Jiaotong University)

In the paper,the U-Boot source code and start process based on S3C6410 embedded platform are analyzed.On the basis, the U-Boot software is successfully ported and S3C6410 processor clock initialization,serial communication,memory initialization,MMU initialization and NAND Flash initialization are realized.Through the porting of NAND Flash driver,the read and write NAND Flash and start from NAND Flash are realized. So that the whole system can operate normally.

U-Boot;analysis;porting;NAND Flash driver

國家自然基金項目(61403317,61273242,60776826);中國鐵路總公司科技研究計劃項目(2016X006-D);四川省科技計劃項目(2017ZR0149,2017RZ0007);中央高校基本科研業(yè)務費專項資金資助(2682017ZDPY04,2682017CX022)。

TP368.1

A

2017-08-15)

猜你喜歡
嵌入式指令設置
聽我指令:大催眠術
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產流程控制系統(tǒng)中的應用
本刊欄目設置說明
中俄臨床醫(yī)學專業(yè)課程設置的比較與思考
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
自動化博覽(2014年4期)2014-02-28 22:31:15
主站蜘蛛池模板: 久久美女精品国产精品亚洲| 一区二区三区精品视频在线观看| 国产黄在线观看| 这里只有精品免费视频| 国产在线拍偷自揄拍精品| 亚洲国产日韩欧美在线| 欧美日韩中文字幕在线| 亚洲毛片一级带毛片基地| 亚洲视频免费在线看| 国产麻豆91网在线看| 免费欧美一级| 无码网站免费观看| 国产精品久久久久婷婷五月| 在线观看无码a∨| 亚洲天堂免费在线视频| 日韩精品一区二区三区大桥未久| 久久毛片网| 亚洲高清中文字幕| 亚洲欧美国产视频| 久久精品中文字幕免费| 亚欧成人无码AV在线播放| 亚洲欧美成人影院| 国产91蝌蚪窝| 无码福利日韩神码福利片| 四虎国产永久在线观看| 欧美综合在线观看| 国产香蕉一区二区在线网站| 无码精品国产VA在线观看DVD| 国产高清在线丝袜精品一区| 国产成人免费| 青青草国产在线视频| JIZZ亚洲国产| 国产性爱网站| 欧美色综合网站| 人妻精品久久久无码区色视| 亚洲AV无码不卡无码| 亚洲精品国产乱码不卡| 亚洲天堂啪啪| 高清国产在线| 亚卅精品无码久久毛片乌克兰| 91偷拍一区| 五月天久久综合| 99在线视频网站| 综合色在线| 日韩精品久久久久久久电影蜜臀| 色成人亚洲| 国产精品成人啪精品视频| 欧美综合中文字幕久久| 玖玖精品视频在线观看| 国产成人精品视频一区二区电影| 911亚洲精品| 国产一级毛片在线| 成人无码区免费视频网站蜜臀| 毛片在线播放网址| 中文国产成人精品久久一| 久久香蕉国产线看观| 欧美成人在线免费| 青青草a国产免费观看| 精品午夜国产福利观看| 动漫精品啪啪一区二区三区| 亚洲熟女偷拍| 欧美精品亚洲精品日韩专区va| 国产精品久线在线观看| 国产日本欧美亚洲精品视| 2020亚洲精品无码| 国产毛片高清一级国语| 有专无码视频| 久久超级碰| 国产精品综合久久久| 毛片在线播放a| 亚洲无码在线午夜电影| 日韩精品一区二区三区swag| 91精选国产大片| 亚洲精品男人天堂| 超清无码熟妇人妻AV在线绿巨人| 92午夜福利影院一区二区三区| 91国内外精品自在线播放| 视频一区亚洲| 亚洲精品波多野结衣| 影音先锋亚洲无码| 伊人五月丁香综合AⅤ| 天堂网国产|