1. 程式人生 > >u-boot回顧(二)

u-boot回顧(二)

前面那篇文章回顧並理解了關於u-boot的基本概念,作用,以及它的一個啟動的流程,這篇文章寫一下自己對u-boot移植的理解。

我們的u-boot主要是用來初始化硬體裝置以及引導載入核心的,下載官方的u-boot原始碼包以後,我們先編譯一下,生成一個連結檔案u-boot.ld,當然我們得先找一塊板子試一下嘛,先在頂層目錄執行一個make boardname_config,再make,我這裡以smdk2410為例

make  smdk2410_config
make

然後生成了一個連結檔案

這裡寫圖片描述

開啟這個檔案即可以看見我們的u-boot的編譯過程:

[[email protected]
_216_80_centos u-boot-2010.09]$ cat u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { arch/arm/cpu/arm920t/start.o (.text) *(.text) } . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata
*))) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); .got : { *(.got) } . = .; __u_boot_cmd_start = .; .u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end = .; . = ALIGN(4); __bss_start = .; .bss (NOLOAD) : { *(.bss) . = ALIGN(4); } _end = .; }

在這裡很清楚的看見我們的入口函式的目標函式:start.o,然後因為是彙編程式碼,因此我們的原始檔即為start.S,然後這段程式碼放在0地址處,.text段存放指令,.data段存放固定的資料,.bss段位未初始化的內容,和我們的基本記憶體管理是一樣的,然後u_boot_cmd_start到u_boot_cmd_end這段存的是我們u-boot下的基本命令,當我們的u-boot命令帶引數執行時,程式就在這段中遍歷匹配。

我們的u-boot和硬體息息相關,我們在移植的時候只需要修改硬體裝置就行了,我們的u-boot原始碼關於硬體的目錄有這些:

  1. cpu:包含和CPU架構相關的程式碼,u-boot支援的CPU在該目錄下對應一個子目錄
  2. board:包含和開發板相關的檔案,每一個開發板都以一個目錄出現在該目錄下
  3. driver:各類具體裝置的驅動,基本上通用
  4. Include:u-boot使用的標頭檔案,還有各種硬體平臺支援的彙編檔案,系統配置檔案和檔案系統支援的檔案
  5. Net:與網路協議相關的程式碼,bootp協議、TFTP協議、NFS檔案系統得實現
  6. Tooles:生成U-boot的工具

最重要的當然是cpu、board、driver和include了,其他的檔案基本不用改。

然後按照下面這張圖執行相關的操作:

這裡寫圖片描述

這個流程圖很好的說明了我們u-boot第一階段的執行過程:關看門狗,設定時鐘,記憶體初始化,Nand Flash初始化,這些在移植的時候我們要根據我們的板子設定時鐘頻率,新增Nand Flash支援,而且還有我們的啟動地址等等,具體的彙編程式碼由於本人彙編不太會,因此在這裡就不分析了。

第二階段

這裡寫圖片描述

本階段繼續初始化相關硬體,並且為核心設定啟動地址,以及配置環境變數,檢測我們的地址對映是否成功以及關閉中斷,cache等等,為我們啟動核心配置好相應的環境。接下來就是我們的核心啟動了。

在移植的過程中,我們必須要對板子的硬體有個大致的瞭解,這樣我們才能知道我們應該怎麼去修改它,以適合我們的板。

相關推薦

u-boot回顧

前面那篇文章回顧並理解了關於u-boot的基本概念,作用,以及它的一個啟動的流程,這篇文章寫一下自己對u-boot移植的理解。 我們的u-boot主要是用來初始化硬體裝置以及引導載入核心的,下載官方的u-boot原始碼包以後,我們先編譯一下,生成一個連

嵌入式BootLoader分析:U-Boot簡介

概述 ARM處理器的晶片商很多,所以每種晶片的開發板都有自己相應的BootLoader。其中,U-Boot(Universal BootLoader)稱為通用BootLoader,是目前開發嵌入式系統引導程式碼使用最廣泛的,如今已成為ARM平臺事實上額標準Boo

u-boot移植---準備工作

分享 2.3 option 什麽 bison ctu http bin 執行命令 一、工具鏈的制作 1.1 工具   軟件工具:crosstool-ng   下載地址:git clone https://github.com/crosstool-ng/crosstool-n

u-boot移植---代碼修改---時鐘修改、SDRAM

port write 啟動 tro nor ble 大小 pro 正常   最開始已經建立了新單板以及配置文件,現在就需要做的是代碼的修改,配置成適合目標板使用的u-boot。 一、時鐘修改   在代碼流程分析中,我們知道,系統的啟動是: 設置 CPU 為管理員模式 關閉

u-boot移植---代碼修改---存儲控制器

relative onf 修改 param nan 內存 literal def 定義 一、CPU訪問芯片的條件      CPU通過訪問存儲控制器,來讀取外部設備的數據。   CPU想訪問一個芯片,需要如下條件(配置信息): 地址線 數據線:8位/16位/32位數據

u-boot移植十三---代碼修改---裁剪及環境變量 一

相關 addition 並且 width load command 啟動程序 type 入參 一、內核裁剪   內核的裁剪首先就是修改我們的配置文件,即 include/configs/jz2440.h 文件,裏面定義的很多宏,我們也許用不上的就要去掉。 1 /*

u-boot移植十三---代碼修改---支持文件系統及補丁制作

ota ons set nan 文件的 help and ole com 一、燒寫文件系統 1.1 jffs2燒寫   1.下載文件系統:tftp 30000000 fs_mini_mdev.jffs2      2.擦除文件的塊:nand erase.part rootf

構建之法學習回顧

保持 競爭 增量 版本 工作 集合 tro 以及 完成  學習完構建之法五到八章之後,發現這本書更加貼近於當代,一般的軟工教材為了追求更廣更久的接受度,在內容上會趨於保守,而這本書不同,許多生硬的知識都得到了新的活力。 在第五章的學習中,主要講了典型的軟件團隊模

Spring Boot學習

div 自動 blog release width spring figure 學習 toc 基於Spring Boot創建的maven項目 1、application.properties或者application.yml:全局配置文件 作用:主要用來配置數據庫連接、日

java語言基礎回顧--位運算以及原碼,反碼,補碼

原碼,反碼,補碼簡介 *原碼 二進位制的定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。 例:通過一個位元組表示 +7 原碼:0(符號位) 0000111 -7原碼:1(符號位) 0000111 *反碼 正數的反碼與原碼一樣

Jenkins+Docker自動化部署Spring boot專案 搭建docker私庫Harbor

前言 docker映象的push、pull都需要映象庫。現在不少大廠提供免費的映象庫,如docker hub,163 hub,也可以自己搭建一個私有映象庫。我用了vmware公司開源的harbor作為docker私有庫,相比docker官方提供的私有庫regi

資料結構程式設計回顧約瑟夫生者死者遊戲

題目二:約瑟夫生者死者遊戲 約瑟夫遊戲的大意:30 個遊客同乘一條船,因為嚴重超載, 加上風浪大作,危險萬分。因此船長告訴乘客,只有將全船 一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只 得同意這種辦法,並議定30 個人圍成一圈,由第一個人數 起,依次報數,數到第9 人,便把他投入大海中,

Spring Boot學習:mybatis + druid + 多資料來源自動切換

一、簡介 閒言碎語不多說:專案中要用到多資料來源分別管理資料,主資料來源儲存正式資料,從資料來源儲存預載入的資料並完成預校驗。 二、環境準備 eclipse + maven + Spring Boot + mybatis + oracle 三、程式碼改造 pom

Spring Boot 學習特點

一、SpringApplication banner,就是啟動時輸出的資訊,可以在classpath下新增 banner.txt,或者設定 banner.location 來指向特定的檔案。(預設編碼utf-8,或者通過banner.charset指定) 除了txt,你還可以使用 banner.gif (jp

Java 學習回顧

(1)Java支援在一個類中宣告另一個類,這樣的類稱為內部類,而包含內部類的類稱為內部類的外嵌類。 (2)和某類有關的匿名類就是這類的一個子類,該子類沒有明顯地用類宣告來定義,所以稱為匿名類 (3)和某類有關的匿名類就是實現該介面的一個子類,該子類沒有明顯地用類宣告來定義

Spring-boot參考

依賴管理 繼承starter parent <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo

全志H3 u-boot 編譯

因為工作需要,最近開始折騰全志方案。手上的開發板式FriendlyARM的nanopi-M1-plus,友善之臂的板子做的還是可以滴,板子尺寸非常小,該有的介面都有,以後擴充套件的介面也基本預留出來了。 言歸正傳,這個板子的相關使用說明都需要從Wiki上查詢,Wiki上

Spring Boot 啟動 Environment 加載

mman figure 3.2 params eba set 內容 hash gprof Spring Boot 啟動(二) Environment 加載 Spring 系列目錄(https://www.cnblogs.com/binarylei/p/10198698.ht

Spring Boot 啟動 配置詳解

ner sys 記錄 標準 () 系統屬性 code 不同 .profile Spring Boot 啟動(二) 配置詳解 Spring 系列目錄(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot

spring-boot-route讀取配置檔案的幾種方式

Spring Boot提供了兩種格式的配置檔案,分別是`properties` 和 `yml`。Spring Boot最大的特點就是自動化配置,如果我們想修改自動化配置的預設值,就可以通過配置檔案來指定自己伺服器相關的引數。 配置檔案集約管理了配置資訊,如果把配置引數寫到Java程式碼中,維護起來非常不方便