嵌入式開發丨瞭解系統中的Uboot功能
Uboot全稱 Universal Boot Loader ,一個遵循GPL協議的的開源專案,其作用是引導作業系統,支援引導Linux、VxWorks、Solaris等作業系統;其原始碼組織形式和Linux原始碼很相似,編譯也可參照Linux原始碼編譯,且包含許多Linux原始碼中的驅動原始碼,所以Uboot實際上可以算作一個微型的作業系統,可以做一些簡單工作。
Uboot需要完成的工作有:讀Flash、初始化sdram、啟動核心。 總結起來的話就是:
Uboot還要負責部署整個計算機系統;
注意: 在從Flash讀出核心寫到sdram之前,需要先關閉看門狗,再初始化sdram、初始化系統時鐘。
為了完成這個工作,且便於除錯,還要開發一下其他功能:例如設定Uboot的一些引數,再把設定好的引數寫入到Flash,還需要用到網路卡、usb及串列埠等以便除錯。
大多數的Uboot都包含兩種不同的操作模式:“下載模式”和“啟動模式”。
下載模式 是指Uboot將透過串列埠或網路等通訊手段從主機下載檔案,然後控制啟動流程。
啟動模式 是指Uboot從目標機上的某個固態儲存裝置上將作業系統自動載入到RAM中執行。
在典型的嵌入式Linux系統中
部署: Uboot程式部署在Flash(能作為啟動裝置的Flash)上、OS部署在FLash(嵌入式系統中用Flash代替了硬碟)上、記憶體在掉電時無作用,CPU在掉電時不工作。
啟動:嵌入式系統上電後先執行Uboot、然後Uboot負責初始化DDR、初始化Flash,然後將OS從Flash中讀取到DDR中,然後啟動OS(OS啟動後Uboot就無用了)。
-
Android系統的啟動和Linux系統(典型的嵌入式系統啟動)幾乎一樣。幾乎一樣意思就是前面完全一樣,只是在核心啟動後載入根檔案系統後就不同了。
-
可以認為啟動分為2個階段:第一個階段是Uboot到OS啟動;第二個階段是OS啟動後到rootfs載入到命令列執行;現在我們說的是第一個階段,Android的啟動和Linux的差別在第二階段。
Uboot在使用中的兩個關鍵點:命令和環境變數
命令 就是Uboot的shell中可以識別的各種命令。
Uboot中有幾十個命令,其中有一些常用另一些不常用(我們還可以自己給Uboot新增命令)。
Uboot啟動後大部分時間和工作都是在shell下完成的(譬如Uboot部署系統在shell下輸命令、設定環境變數也得在命令列底下,啟動核心也要在命令列底下敲命令)。
Uboot的每個命令都有事先規定好的各種格式。
-
有些命令是 帶引數(注意格式是固定的);
-
有些命令是 不帶引數的(譬如printenv/print命令);
-
有些命令帶 可選的引數(既可帶也可不帶,帶不帶引數的執行結果是不同的);
-
有些命令帶 必須的引數(譬如setenv/set命令);
-
有些命令有 簡化的別名(譬如printenv命令可以簡化為print,譬如setenv可以簡化為set);
-
有些命令是一個 命令族(譬如movi);
-
採用“ help+命令名”來查詢命令的詳細資訊,只輸入help時,則列印出命令列表。
第一個命令:
print
該命令不用帶引數,作用是列印出系統中所有的環境變數。
注意: 環境變數和全域性變數不同之處在於:
-
全域性變數的生命週期是在程式的一次執行當中,開始執行時誕生程式結束時死亡,下次執行程式時從頭開始;
-
環境變數被儲存在Flash的另一塊專門區域(Flash上有一個環境變數分割槽),一旦我們在程式中儲存了該環境變數,那麼下次開機時該環境變數的值將維持上一次更改儲存後的值。
第二個命令: set、save
-
setenv/set 設定(新增/更改)環境變數,
用法:set name value
-
saveenv/save 儲存環境變數的更改,該命令不帶引數,直接執行
注意:
想要徹底更改一個環境變數的值,需要2步:
1、set命令來更改記憶體中的環境變數;
2、用save命令將其同步到Flash中環境變數的分割槽。
第四個命令: Tftp
透過網路下載檔案
Uboot> setenv ethaddr
Uboot> setenv ipaddr
Uboot> setenv serverip (tftp伺服器的地址)
注意: Tftp方式下載時實際上Uboot扮演的是Tftp客戶端程式角色,主機Windows或虛擬機器Ubuntu中必須有一個Tftp伺服器,然後將要下載的映象檔案放在伺服器的下載目錄中,然後開發板中使用Uboot的Tftp命令去下載即可。
第五個命令: Flinfo
檢視Flash扇區資訊, 用法:uboot>flinfo
第六個命令: SD卡/iNand操作指令movi
開發板如果用SD卡/EMMC/iNand等作為Flash,則在Uboot中操作Flash的指令為movi(或mmc)。
movi的指令都是movi read和movi write一組的,movi read用來讀取iNand到DDR上,movi write用來將DDR中的內容寫入iNand中。
第七個命令: 啟動核心指令bootm、go
bootm啟動核心同時給核心傳參,而Go命令啟動核心不傳參。
U
boot的終極目標就是啟動核心,啟動核心在Uboot中表現為一個指令,Uboot命令列中呼叫這個指令就會啟動核心(不管成功與否)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989353/viewspace-2742399/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DAPP系統開發邏輯丨DAPP系統開發功能丨合約DAPP系統開發技術APP
- 嵌入式系統基礎知識:瞭解嵌入式系統
- islandswap鏈遊系統開發(開發說明)丨islandswap鏈遊遊戲系統開發功能遊戲
- 直播系統開發中關於開發環境你瞭解多少?開發環境
- 純科普:什麼是嵌入式?三分鐘瞬間瞭解嵌入式系統開發
- 汪星球系統技術開發丨任務模式丨汪星球開發功能詳情模式
- DAPP 系統開發操作及功能丨智慧合約專案系統開發方案APP
- 多商戶商城開發(功能)丨多商戶商城系統開發(開發方案)丨多商戶商城成品原始碼系統原始碼
- 數字貨幣量化交易系統開發功能詳解丨量化交易開發原始碼模式原始碼模式
- 量化合約系統開發(功能詳細)丨量化合約系統開發(策略及分析)
- 愛聊社交聊天交友系統功能開發丨愛聊交友聊天功能開發詳情
- 元宇宙遊戲系統開發(功能詳情)丨元宇宙鏈遊系統開發(開發原理)元宇宙遊戲
- 淺談:合約2.0佛薩奇系統模式開發及功能講解丨DAPP丨DeFi模式APP
- 嵌入式系統要如何學習?帶你瞭解嵌入式系統學習方法
- AI量化交易合約策略系統開發功能解析丨APP丨應用丨defiAIAPP
- NFT卡牌鏈遊開發功能丨NFT卡牌鏈遊系統開發詳情丨DAPP丨NFTAPP
- FDF互助遊戲系統開發理念丨FDF合約互助專案系統開發邏輯功能遊戲
- 嵌入式系統除錯Uboot串列埠互動除錯除錯boot串列埠
- 佛薩奇2.0系統丨佛薩奇2.0系統開發(功能版)丨佛薩奇2.0開發原始碼案例部署原始碼
- LP/defi流動性質押挖礦開發功能丨DAPP系統丨defi丨NFT丨LPAPP
- 智慧城市系統技術開發示例丨智慧城市開發功能詳情分析
- Uboot功能boot
- 鏈遊模式系統開發搭建功能丨鏈遊系統開發專案方案(技術成熟)模式
- islandswap鏈遊系統開發技術原理丨islandswap鏈遊系統開發詳解
- BSC丨Solana丨AVAX丨LUNA公鏈遊戲系統開發規則丨鏈遊系統開發(結構模型)遊戲模型
- 量化合約系統開發(詳解開發)丨合約量化系統開發(說明及案例)
- 分投趣借貸系統dapp開發丨分投趣Fintoch瘋狂功能丨系統技術開發分投趣APP
- Linux嵌入式系統開發,嵌入式Linux開發教程Linux
- CRM系統的銷售管理功能,你瞭解多少?
- 量化合約系統開發丨合約量化系統開發原始碼丨合約量化系統開發技術Demo原始碼
- 有錢還原始碼丨有錢花開發功能丨有錢還眾籌系統設計開發原始碼
- 奇樂短影片開發功能丨奇樂短影片直播系統開發技術丨python技術語言Python
- 炒幣機器人系統開發功能丨量化炒幣機器人系統開發案例原始碼機器人原始碼
- 合約跟單系統開發邏輯功能板塊丨跟單策略系統開發技術方案
- 深入瞭解阿凡達泰山眾籌商城系統開發詳情版及原始碼功能原始碼
- Gamefi鏈遊系統開發(DAPP遊戲開發)丨Gamefi鏈遊系統開發(開發案例)丨原始碼GAMAPP遊戲開發原始碼
- Defi借貸質押流動性挖礦系統開發功能丨DAPP丨Defi丨NFT丨IDOAPP
- 合約跟單開發(正式版)丨合約跟單系統開發(方案及策略)丨合約跟單系統原始碼功能原始碼