freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

bootloader的移植(編輯修改稿)

2025-02-03 18:03 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 列條件要滿足: ? CPU 寄存器的設(shè)置: R0= 0; R1=機(jī)器類型 ID; R2=啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中起始基地址。 ? CPU 模式: 必須禁止中斷( IRQs和 FIQs); CPU 必須處于 SVC 模式。 ? Cache 和 MMU 的設(shè)置: MMU 必須關(guān)閉;指令 Cache 可以打開也可以關(guān)閉;數(shù)據(jù) Cache 必須關(guān)閉。 PART II VIVI vivi概述 ? vivi是韓國(guó) Mizi公司開發(fā)的 Bootloader,適用于ARM9處理器。 vivi也有上一節(jié)提到的兩種工作模式。啟動(dòng)加載模式可以在一定時(shí)間后(時(shí)間長(zhǎng)短可以修改)自行啟動(dòng) Linux內(nèi)核,這是 vivi的默認(rèn)模式。而在下載模式下, vivi為用戶提供了一個(gè)命令行接口,通過該接口可以使用vivi的一些主要命令: load, part, param, boot, flash. vivi的配置和編譯 ? 下載 vivi壓縮包后,使用如下命令解壓縮: $ tar jxvf 進(jìn)入 vivi目錄 ? 我們使用如下命令配置 vivi: 演示: $ make menuconfig ? 我們可以自行配置,也可以使用默認(rèn)的配置文件進(jìn)行自動(dòng)配置。這些默認(rèn)的配置文件放在vivi/arch/defconfigs目錄下。 ? A)選擇“ Load on Alternate Configuration File‖菜單,在其中填上“ arch/defconfigs/smdk2410‖ or ―arch/defconfigs/s3c2410tk‖來選擇對(duì)應(yīng)的單板配置文件 ? B)在配置完 vivi之后,則可以使用下面的命令進(jìn)行編譯: $ make ? C)編譯成功之后,就可以在 vivi目錄下看到 vivi生成的二進(jìn)制文件。 ? D)編譯成功后,會(huì)在 vivi目錄下產(chǎn)生 。 ? 解釋: ? 做完 A)以后,會(huì)在根目錄下生成 .config文件(演示: ls –a), 這個(gè)文件是很多的宏,比如(演示):CONFIG_MTD_NAND=y, 這樣就決定了哪些代碼(功能)將會(huì)被編譯。 ? 做完 B)以后,將根據(jù) Makefile的第一個(gè)目標(biāo) (doitall)來生成 vivi目標(biāo)。 ? 做完 C)以后,系統(tǒng)將會(huì)調(diào)用 $(OBJCOPY) O binary S vivielf vivi $(OBJCOPYFLAGS)這句話生成二進(jìn)制的 vivi文件。 ? 做完 D)后,系統(tǒng)會(huì)調(diào)用 $(NM) v l vivielf ,生成 map文件(演示),供調(diào)試使用。 ? vivi的 link文件: 1) link文件是 ld工具要調(diào)用的輸入。它在鏈接時(shí)其作用。它在運(yùn)行時(shí)才起到效果。注意它和鏈接不是一個(gè)過程,它只是鏈接的一個(gè)過程,叫做‘運(yùn)行導(dǎo)入過程’。 2)vivi的 link文件如下: SECTIONS { . = 0x33f00000。 .text : { *(.text) } .data ALIGN(4) : { *(.data) } .bss ALIGN(4) : { *(.bss) *(COMMON) } } 3)以上內(nèi)容的含義是: a)它內(nèi)存的視圖。 b)它告訴 ld, 在裝載時(shí), vivi在內(nèi)存的基地址是0x33f00000, 以后依次存放 .text,.data和 .bss。 c).data和 .bss都是 4位對(duì)齊 (word對(duì)齊 )。 d)我們可以看到這個(gè)配置文件沒有指定 .rodata的load情況,也就是說它將由 elf文件自身決定。 4) LINKFLAGS = Tarch/ –Bstatic表明: 使用的導(dǎo)入內(nèi)存的配置文件是 , 使用的是靜態(tài)的鏈接。 vivi代碼導(dǎo)讀 階段 1: arch/s3c2410/ ? 沿著代碼執(zhí)行的順序, 幾件事情: 關(guān) WATCH DOG:上電后, WATCH DOG默認(rèn)是開著的。 (P435, 手冊(cè) ) 禁止所有中斷: vivi中沒用到中斷 (不過這段代碼實(shí)在多余,上電后中斷默認(rèn)是關(guān)閉的 ) 。 (P358) vivi代碼導(dǎo)讀 初始化系統(tǒng)時(shí)鐘:?jiǎn)?dòng) MPLL(machine PLL),F(xiàn)CLK=200MHz(ARM920T), HCLK=100MHz(AHB bus), PCLK=50MHz(APB bus),“ CPU bus mode‖改為“ Asynchronous bus mode‖(使得 FCLK和 HCLK不一樣,也就是說 CPU工作在 200Mhz, AHB總線工作在 100Mhz)。 (P226, 總線仲裁器和 CPU的工作頻率說明見 ARM內(nèi)核技術(shù)手冊(cè) P108)。 注意 :這里沒有提到 UPLL(也就是 USB的 PLL), 在以后要使用 USB設(shè)備時(shí)會(huì)提到。 初始化內(nèi)存控制寄存器。 (注意: ENTRY(memsetup)表示這個(gè)是一個(gè)內(nèi)部符號(hào),在本文件可以找到,和GLOBLE相對(duì) ) mem_cfg_val是一張表,表示內(nèi)存訪問的控制,主要包括 bank的屬性和時(shí)序 vivi代碼導(dǎo)讀 檢查是否從掉電模式喚醒,若是,則調(diào)用WakeupStart函數(shù)進(jìn)行處理 ——這是一段沒用上的代碼, vivi不可能進(jìn)入掉電模式。 點(diǎn)亮所有 LED。 初始化 UART0: ? a.設(shè)置 GPIO,選擇 UART0使用的引腳; ? b.初始化 UART0,設(shè)置工作方式(不使用FIFO) (P313,UART工作模式 )、波特率115200(P309,波特律 ) 8N1(P312, UART的線控 )、無流控等。 將 vivi所有代碼(包括階段 1和階段 2)從 nand flash復(fù)制到 SDRAM中: ? a.設(shè)置 nand flash控制寄存器; ? b.設(shè)置堆棧指針 ——調(diào)用 C函數(shù)時(shí)必須先設(shè)置堆棧; ? c.設(shè)置即將調(diào)用的函數(shù) nand_read_ll的參數(shù): r0=目的地址( SDRAM的地址), r1=源地址( nand flash的地址), r2=復(fù)制的長(zhǎng)度(以字節(jié)為單位);注意 ,這里我們要看一下 S3C2410A user’s manual的 P215, 我們采用 Nand flash booting 方式, nand flash的范圍是00x4000000 vivi代碼導(dǎo)讀 ? d. 調(diào)用 nand_read_ll進(jìn)行復(fù)制; ? e.進(jìn)行一些檢查工作:上電后 nand flash最開始的 4K代碼被自動(dòng)復(fù)制到一個(gè)稱為“ Steppingstone‖的內(nèi)部RAM中(地址為 0x000000000x00001000);在執(zhí)行nand_read_ll之后,這 4K代碼同樣被復(fù)制到 SDRAM中(地址為 0x33f000000x33f01000)。比較這兩處的4K代碼,如果不同則表示出錯(cuò)。 跳到 bootloader的階段 2運(yùn)行 ——就是調(diào)用 init/main函數(shù) ? a.重新設(shè)置堆棧; ? b.設(shè)置 main函數(shù)的參數(shù); ? c.調(diào)用 main函數(shù)。 vivi代碼導(dǎo)讀 當(dāng)執(zhí)行完 ,內(nèi)存的使用情況如下: vivi代碼導(dǎo)讀 2: init/ 本階段從 init/ main函數(shù)開始執(zhí)行,它可以分為 8個(gè)步驟。下面先把 main函數(shù)的代碼羅列如下,然后逐個(gè)分析: Step 1: reset_handler() reset_handler用于將內(nèi)存清零,代碼在lib/。 vivi代碼導(dǎo)讀 Step 2: board_init() ? board_init調(diào)用 2個(gè)函數(shù)用于初始化定時(shí)器和設(shè)置各 GPIO引腳功能,代碼在arch/s3c2410/: ? init_time()只是簡(jiǎn)單的令寄存器 TCFG0 = 0xf00,vivi未使用定時(shí)器,這個(gè)函數(shù)可以忽略。 ? set_gpios()用于選擇 GPAGPH端口各引腳的功能及是否使用各引腳的內(nèi)部上拉電阻,并設(shè)置外部中斷源寄存器 EXTINT02( vivi中未使用外部中斷)。 vivi代碼導(dǎo)讀 Step 3:建立頁表和啟動(dòng) MMU ? mem_map_init函數(shù)用于建立頁表, vivi使用段式頁表,只需要一級(jí)頁表。它調(diào)用 3個(gè)函數(shù),代碼在 arch/s3c2410/: ? 第 10行的兩個(gè)函數(shù)可以不用管它,他們做的事情在下面的mmu_init函數(shù)里又重復(fù)了一遍。對(duì)于本例,在 .config中定義了CONFIG_S3C2410_NAND_BOOT。 mem_map_nand_boot()函數(shù)調(diào)用 mem_mapping_linear()函數(shù)來最終完成建立頁表的工作。頁表存放在 SDRAM物理地址 0x33dfc000開始處,共 16K:一個(gè)頁表項(xiàng) 4字節(jié),共有 4096個(gè)頁表項(xiàng);每個(gè)頁表項(xiàng)對(duì)應(yīng) 1M地址空
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1