1. 程式人生 > >linux基礎之uboot load address、entry point、 bootm address以及kernel執行地址的意義及聯絡

linux基礎之uboot load address、entry point、 bootm address以及kernel執行地址的意義及聯絡

  1. load address:
  2. entry point: 這兩個地址是mkimage時指定的
  3. bootm address:bootm為uboot的一個命令,以此從address啟動kernel
  4. kernel執行地址:在具體mach目錄中的Makefile.boot中指定,為kernel啟動後實際執行的實體地址
mkimage -n 'linux-3.2.1' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage

理論上因為mkimage要為zImage加上0x40位元組的header,所以entry point = load address + 0x40

但由於uboot 的bootm對uImage處理不是簡單的go操作,其對前三個地址都有比較判斷,所以在實際的操作中,就分為兩種不同的情況:

1. bootm地址和load address一樣

  此種情況下,bootm不會對uImage header後的zImage進行memory move的動作,而會直接go到entry point開始執行。因此此時的entry point必須設定為load address + 0x40。如果kernel boot過程沒有到uncompressing the kernel,就可能是這裡設定不對。

boom address == load address == entry point - 0x40

具體細節可參看uboot程式碼common/cmd_bootm.c中bootm_load_os函式的實現:

        switch (comp) {
case IH_COMP_NONE:
if (load == blob_start || load == image_start) {
printf(" XIP %s ... ", type_name);
no_overlap = 1;
} else {
printf(" Loading %s ...
", type_name);
memmove_wd((void *)load, (void *)image_start,
image_len, CHUNKSZ);
}
*load_end = load + image_len;
puts("OK\n");
break;

2. bootm地址和load address不一樣(但需要避免出現memory move時出現覆蓋導致zImage被破壞的情況)

  此種情況下,bootm會把uImage header後的zImage move到load address(見上方程式碼),然後go到entry point開始執行。 由此知道此時的load address必須等於entry point。

boom address != load address == entry point

因此,在mkimage以及設定uboot boot command的時候需要注意到以上兩種情況。

至於kernel的執行地址,其與前3個地址沒有關係,除了要避免記憶體覆蓋導致解壓後kernel不完整的情況。

zImage的頭部有地址無關的自解壓程式,因此剛開始執行的時候,zImage所在的記憶體地址(entry point)不需要同編譯kernel的地址相同。自解壓程式會把kernel解壓到編譯時指定的實體地址,然後開始地址相關程式碼的執行。在開啟MMU之前,kernel都是直接使用實體地址(可參看System.map)。

相關推薦

linux基礎uboot load addressentry point bootm address以及kernel執行地址意義聯絡

load address: entry point: 這兩個地址是mkimage時指定的 bootm address:bootm為uboot的一個命令,以此從address啟動kernel kernel執行地址:在具體mach目錄中的Makefile.boot中指定,為kernel啟動後實際執行的實體地址

Linux基礎Ubuntu基礎命令-datecalbc(待更新)

基礎操作命令: 顯示日期與時間的命令: date 顯示日曆的命令: cal 簡單好用的計算器: bc 1. 顯示日期的命令: date 如果在文字介面中想要知道目前Linux系統的時間,那麼就直接在命令列模式輸入date即可顯示: [[email&#

Linux基礎網路管理配置虛擬機器和配置yum源

一、linux網路基礎 1、改變ip nm-connection-editor 修改ip 2、查詢ip ifconfig eth0                      檢視虛擬機器ip ip addr show br0          

三.linux開發uboot移植(三)——.基礎shell和Makefile回顧

一.補基礎之shell 1.shell程式執行的執行有多種方法,這裡介紹三種方法: 第一種:./xx.sh,和執行二進位制可執行程式方法一樣。這樣執行shell要求shell程式必須具有可執行許可權。chmod a+x xx.sh來新增可執行許可權。 第二

linux基礎加密解密PKISSL創建私有CA

crt ast mas pki 數據加密 code spa 生成 port 加密解密基礎   1. 對稱加密: 加密和解密使用同一個密鑰     常見的加密算法有:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5     特性:

python基礎面向對象編程介紹類和對象

屬於 func 每次 基礎 lang 屬性字典 位置 需求 內部 面向對象變成介紹 面向過程編程 核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。主要應用在一旦完成很少修改的地方,如linux內核、g

python基礎多態與多態性綁定方法和非綁定方法

info lib img 感知 animal user save python基礎 assm 多態與多態性 多態 多態並不是一個新的知識 多態是指一類事物有多種形態,在類裏就是指一個抽象類有多個子類,因而多態的概念依賴於繼承 舉個栗子:動物有多種形態,人、狗、貓、豬等,py

linux基礎教程---設置文件的主人組別

post 基礎 -s dsm track pos data- chmod pre 我們在操作linux的是要告訴文件是屬於哪個主人的,哪個組別的。這樣我們就須要知道該怎樣設置“: 設置文件的主人、組別 chown: change owner >cho

Linux基礎常見命令用法(一)

linux基礎命令入門(一)一、Linux文件目錄結構 在講述之前,先簡短的說說Windows文件結構,打開‘計算機’,看到的一個個的驅動器(盤符,例C盤、D盤等),點開其中任意盤符,看到的是一個個文件或文件夾,繼續打開...,每個盤都有自己的根目錄。若是把其打開過程畫下來,便可得到如下多棵倒樹並列的圖

Linux基礎linux的歷史(針對韓立剛老師的linux教學視頻編寫的筆記)

linux# Linux操作系統歷史1969年美國貝爾實驗實研發Unix操作系統,Unix系統特點:多用戶;多任務;支持多種處理器架構;Shell大部分使用C語言開發。1973年美國國防部研發出TCP/IP協議,這個協議讓各個Unix系統之間達到互聯,這是最初的intelnet的模型。迄今為止互聯網使用的還

linux基礎ssh

查看系統 去掉 log max 自動退出 技術分享 服務 例子 pen 一、ssh安裝 查看系統是否安裝試試:rpm -qa | grep openssh,下圖所示則為已安裝。 若系統為安裝ssh,則配置好yum開始安裝ssh。 安裝命令:yum install -y o

Linux基礎命令練習Day3-文件管理:cat,tar,gzip,vim,ln

兩個 .com 行數 什麽 塊大小 targe 強制 cat zip解壓 一. 文件合並 cat命令的用途是連接文件或標準輸入並打印。這個命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。 1.命令格式: cat [

Linux基礎命令練習Day2-useradd(mod,del),groupadd(mod,del),chmod,chown,

http ack 方式 技術 配置文件 練習 文件file html useradd 作業一: 1) 新建用戶natasha,uid為1000,gid為555,備註信息為“master” 2) 修改natasha用戶的家目錄為/Natasha 3) 查看用戶信息配置文件的最

Linux基礎-Bash命令優先級

unix 優先 易用 pat erro 後來 arc hive $path 一. Bash簡介 命令解釋器,也就是 Bourne Again Shell,起源於shell。shell俗稱殼,它是指UNIX系統下的一個命令解析器;主要用於用戶和系統的交互。UNIX系統上有很多

Linux基礎命令練習Day1-init,who,date,cal,man,clear,passwd,su,whoami,mkdir,touch,rm,cp,mv,head,tail,more,less,echo

.py cal 目錄結構 使用 star tree mage ear echo 開啟Linux操作系統,要求以root用戶登錄GNOME圖形界面,語言支持選擇為漢語 使用快捷鍵切換到虛擬終端2,使用普通用戶身份登錄,查看系統提示符 使用命令退出虛擬終端2上登錄的用

Linux基礎命令練習Day7-nginx,nfs

調度 個數 等於 集群配置 大小設置 selinux VC In 及其 一. Nginx Nginx("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Ramb

linux基礎Vim

分享圖片 linux 分享 技術分享 img inux inf info com linux基礎之Vim

linux基礎centos7

docke ima 本地 fcc 解決 日誌系統 dock conda emd Linux系統簡介及安裝 一、RHEL7/

Linux基礎基礎命令1

amp 日歷 版本 時間 右箭頭 ESS 結構體 art initrd 基本命令一、Linux的基本原則:1、 由目的單一的小程序組成; 組合小程序完成復雜任務;2、 一切皆文件;3、 盡量避免捕獲用戶接口; (盡量不和用戶進行交互, 就是一個程序一但開始運行, 就不需要用

Python學習路——Linux基礎Vim編輯器

Vim編輯器 1. 常用的刪除與複製的常用按鍵 1) dd : 刪除游標所在的一行,剪下游標所在的一行 2) ndd(如 3dd):刪除游標所在的向下的n行。3dd則刪除3行 3) yy : 複製游標所在的一行