日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

uboot学习之三-----uboot启动第一阶段--start.S之一

發(fā)布時(shí)間:2025/3/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uboot学习之三-----uboot启动第一阶段--start.S之一 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

uboot分為兩個(gè)階段:start.S是uboot的第一階段。

  一:引入start.S

    u-boot.s找到start.S的入口

      ①首先在C語(yǔ)言中整個(gè)項(xiàng)目的入口就是main函數(shù)(這是C語(yǔ)言規(guī)定的),所以如果要去了解C語(yǔ)言的項(xiàng)目,從main函數(shù)開(kāi)始,這樣才能分析,如果隨便拿一個(gè)文件就開(kāi)始看,最后看得一頭霧水,對(duì)自己沒(méi)有信心。怎么來(lái)找呢?可以使用souceinsight的搜索功能來(lái)查找。

      ②在uboot中因?yàn)橛袇R編階段參與,因此不能直接找main.c。整個(gè)程序的入口取決于連接腳本中ENTRY聲明的地方。ENTRY(_start)因此 _start符號(hào)是整個(gè)程序的入口,_start所在的代碼就是整個(gè)程序的起始代碼。

?

  二:分析start.S

    1、頭文件包含

      ①#include <config.h> config.h是在include文件下,這個(gè)文件不是源碼中的文件,是配置時(shí)自動(dòng)生成的文件。詳見(jiàn)mkconfig腳本,在mkcofig腳本最后 發(fā)現(xiàn)?

      

      包含了一個(gè)#include <configs/x210_sd.h>

      最后分析發(fā)現(xiàn),最終包含的是/include/configs/x210_sd.h,這個(gè)文件是整個(gè)uboot移植時(shí)的配置文件,里面有很多宏。這樣就將兩個(gè)文件關(guān)聯(lián)了起來(lái)。所以分析start.S時(shí),要考慮configs/x210_sd.h。

       ②#include <version.h>

        /include/version.h中包含了#include "version_autogenerated.h"這個(gè)頭文件是編譯時(shí)自動(dòng)生成的,這里面定義的宏define U_BOOT_VERSION "U-Boot1.3.4Joran"來(lái)自于makefile的配置值。這個(gè)宏在我們的程序中會(huì)被調(diào)用,在我們uboot啟動(dòng)過(guò)程中串口打印出uboot的版本號(hào),那個(gè)版本號(hào)信息就來(lái)自于這          里。
       ③#if defined(CONFIG_ENABLE_MMU)
        #include <asm/proc/domain.h>
        #endif

        asm目錄不是uboot中的原生目錄,uboot中本來(lái)是沒(méi)有這個(gè)目錄的。asm目錄是配置時(shí)創(chuàng)建的一個(gè)符號(hào)鏈接,實(shí)際指向的是就是asm-arm(詳解上一章節(jié)分析mkconfig腳本時(shí)).經(jīng)過(guò)分析后發(fā)現(xiàn),實(shí)際文件是:include/asm-arm/proc-armv/domain.h從這里可以看出之前配置時(shí)創(chuàng)建的符號(hào)鏈接的作用,如果沒(méi)有這些符號(hào)鏈接則編譯時(shí)根本通不過(guò),因?yàn)檎也坏筋^文件。(所以u(píng)boot不能在windows的共享文件夾下配置編譯,因?yàn)閣indows中沒(méi)有符號(hào)鏈接)
        

        思考為什么start.S不直接包含asm-arm/proc-armv/domain.h,而要用asm/proc/domain.h?這樣的設(shè)計(jì)主要是為了可移植性。因?yàn)槿绻苯影?#xff0c;則start.S文件和CPU架構(gòu)(和硬件)有關(guān)了,可移植性就差了。譬如我要把uboot移植到mips架構(gòu)下,則start.S源代碼中所有的頭文件包含全部要修改。我們用了符號(hào)鏈接之后,則start.S中源代碼不用改,只需要在具體的硬件移植時(shí)配置不同,創(chuàng)建的符號(hào)鏈接指向的不同,則可以具有可移植性。

        ④啟動(dòng)代碼的16字節(jié)頭部

        

從代碼讀出:如果定義了CONFIG_EVT1并且沒(méi)有定義CONFIG_FUSED,那么就定義4個(gè)4字節(jié)的空間。從sourceinsight部分可以看出紅色是已經(jīng)定義的,黑色是未定義的,所以條件滿足,定義出16字節(jié)的空間,并且填充起來(lái)。

裸機(jī)中講過(guò),從SD卡和nand啟動(dòng)是需要16字節(jié)校驗(yàn)頭(mkv210image.c就是為了計(jì)算這個(gè)校驗(yàn)頭),以前做裸機(jī)實(shí)驗(yàn)時(shí),dnw下載方式不需要校驗(yàn)頭,做SD卡啟動(dòng),mkv210image.c會(huì)給原鏡像210.bin加上16字節(jié)的校驗(yàn)頭。

uboot中,這里的start.S中在開(kāi)頭位置放了16字節(jié)的填充占位,這個(gè)占位的16字節(jié)只是保證正式的image的頭部確實(shí)有16字節(jié),但是這個(gè)16字節(jié)內(nèi)容是不對(duì)的,還需要后面去計(jì)算校驗(yàn)和然后重新去填充的,uboot下有一個(gè)sd_fusing文件夾下C110-EVT1-mkbl1.c這個(gè)文件幾乎就是我們之前的mkv210image.c。

C110-EVT1-mkbl1.c中:

這里和star.S是相互聯(lián)系的。

      ⑤異常向量表構(gòu)建

這個(gè)異常表順序是CPU設(shè)計(jì)時(shí)決定的,是硬件決定的。這些異常應(yīng)該被處理,如果不處理這些這些異常,程序會(huì)跑飛。   

? 復(fù)位異常處理:復(fù)位異常的代碼是 b reset ,因此在CPU復(fù)位后真正去執(zhí)行的有效代碼是reset處的代碼,因此reset符號(hào)處,才是真正有意義代碼的開(kāi)始處。

    ⑥有意思的deadbeef

??? .balignl 16,0xdeadbeef? .balignl 16 是以16字節(jié)對(duì)齊,如果沒(méi)有對(duì)齊,用0xdeadbeef這個(gè)數(shù)字來(lái)填充,這個(gè)填充沒(méi)有什么特別的意義,只是剛好組成一個(gè)有意思的英語(yǔ)單詞----壞牛肉

?

?

為什么要對(duì)齊呢?有時(shí)候是為了提高訪問(wèn)效率,有時(shí)候是硬件的要求。

?

    ⑦TEXT_BASE等

?

第100行的TEXT_BASE在整個(gè)代碼里都是被引用,它是在makefile里配置階段時(shí)的TEXT_BASE,其實(shí)就是我們鏈接時(shí),指定的程序的鏈接地址,它的值就是c3e00000,我們?cè)谠创a中和配置的makefile中很多變量是互相關(guān)聯(lián)的,有些符號(hào)的值可以從makefile中傳遞到源代碼中.

  ⑧CFG_PHY_UBOOT_BASE? 33e00000? uboot在DDR中的物理地址。虛擬地址就是之前的ce3e00000。

?

.globl _armboot_start
_armboot_start:
?? ?.word _start

/*
?* These are defined in the board-specific linker script.
?*/
.globl _bss_start
_bss_start:
?? ?.word __bss_start

.globl _bss_end
_bss_end:
?? ?.word _end

?armboot_start是后面重定位時(shí)用到的,bss_start這些是后面清bss段時(shí)會(huì)使用到的。

轉(zhuǎn)載于:https://www.cnblogs.com/yr-linux/p/5401178.html

總結(jié)

以上是生活随笔為你收集整理的uboot学习之三-----uboot启动第一阶段--start.S之一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久亚洲AV | 色妹av | 日本三级中文字幕在线观看 | 亚洲激情午夜 | 国产精品高潮呻吟久久av野狼 | 成人精品在线看 | 成人精品一区二区三区四区 | 暖暖成人免费视频 | 超碰公开免费 | 黄色片视频免费观看 | 国产在线播放一区二区三区 | 日韩精品久久久久久久电影99爱 | 91高潮大合集爽到抽搐 | 一区二区三区黄色 | 亚洲国产中文字幕 | 天堂在线日本 | 日韩欧美精品一区二区 | 极品尤物魔鬼身材啪啪仙踪林 | 女人久久| 美日韩三级| 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 亚洲字幕 | 一级免费视频 | a天堂视频在线观看 | 丝袜美女av | 国产精品污污 | 伊人情人综合 | 欧美成人综合色 | 国产成人高清视频 | 欧美福利视频一区 | 日韩欧美一卡 | 日韩午夜在线播放 | 97影院| 中文字幕有码无码人妻av蜜桃 | 国产精品电影一区二区三区 | 精品视频999 | 少妇人妻偷人精品无码视频新浪 | 成人福利在线播放 | 精品国产一区二区三区日日嗨 | 中文字幕在线视频免费 | 免费香蕉视频 | av在线大全| 成人黄色激情网 | 99久久99久久 | 黄色小说在线观看视频 | 啪啪自拍视频 | 国产欧美日韩免费 | 国产视频a | 一区二区三区视频在线播放 | 欧美日韩免费在线视频 | 亚洲人成人网 | 麻豆自拍视频 | 日本三级黄在线观看 | 精品福利电影 | 狠狠综合久久av一区二区 | www夜夜操 | 91香蕉在线视频 | 日韩中文字幕在线看 | 亚洲一区二区三区免费视频 | 久久亚洲一区二区三区四区 | av桃色| 69一区二区 | 成人午夜激情影院 | 亚洲欧美经典 | 免费成人在线观看 | 黄色大片aa | 国产婷婷色综合av蜜臀av | 91福利网址 | 亚洲小说专区 | jizz欧美大全 | 真性中出 | 免费三片在线视频 | 破处视频在线观看 | 亚洲综合网在线观看 | 久久国产精品久久久久 | 欧美性视频一区二区 | 日韩福利片 | 久久视频精品 | 国产精品久久久一区二区三区 | 亚洲日本三级 | 欧美风情第一页 | 在线免费看av | 丝袜诱惑一区二区 | 婷婷激情图片 | 国产一级二级三级在线观看 | 性欧美丰满熟妇xxxx性仙踪林 | 国产午夜一区二区 | 好吊视频一区二区 | 激情综合色 | 亚洲国产成人精品女人久久久 | 日本熟妇成熟毛茸茸 | 亚洲欧洲久久 | 操丰满女人 | 日韩激情毛片 | 中文字幕www | 久久精品欧美 | 亚洲一区二区在线观看视频 | 丰满大爆乳波霸奶 | 色屁屁草草影院ccyycom |