嵌入式系統UBOOT

一個完整的嵌入式linux系統包含4部分內容:Bootloader、Parameters、Kernel、Root File System。3、4、5、6部分詳細介紹了這4部分的內容,這是Linux底層軟件開發人員應該掌握的。通過學習這些章節,您可以詳細了解到如何在一個裸板上裁減、移植Linux,如何構造自己的根文件系統,如何編寫適合客戶需求的驅動程序——驅動程序這章將結合幾個經典的驅動程序進行講解。您還可以了解到在用在nand flash上的非常流行的yaffs文件系統是如何工作的,本書將結合yaffs代碼詳細介紹yaffs文件系統。

BIOS、BootLoader、uboot對比

bios

BIOS是英文"Basic Input Output System"的縮略語,直譯過來后中文名稱就是"基本輸入輸出系統"。其實,它是一組固化到計算機內主板上一個ROM芯片上的程序,它保存著計算機最重要的基本輸入輸出的程序、系統設置信息、開機后自檢程序和系統自啟動程序。 其主要功能是為計算機提供最底層的、最直接的硬件設置和控制。

?

?

BootLoader

BootLoader是一段小程序,可以把它想象成PC機linux上的GRUB/LILO引導程序,只不過在嵌入式linux中,沒有BIOS,而是直接從flash中運行,來裝載內核。它可以初始化硬件設備,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統做好準備。

?

一個嵌入式系統從軟件角度來看分為三個層次:
1.引導加載程序
包括固化在固化中的boot程序(可選),和BootLoader兩大部分
2.linux內核
特定于嵌入式平臺的定制內核
3.文件系統
包括了系統命令和應用程序
--------------------------------------------------------------------------------
?BootLoader-->Boot Parameters-->Kernel-->Root Filesystem?
--------------------------------------------------------------------------------
為什么需要進行bootloader移植?
答:1.因為每種不同的CPU體系結構都有不同的BootLoader
2.BootLoader依賴于具體的嵌入式板級設備的配置
--------------------------------------------------------------------------------
BootLoader啟動過程可分為單階段和多階段(stage1、stage2),其中stage1完成初始化硬件,如CPU寄存器、內存控制器,為stage2準備內存空間。一般stage1是可以直接在nor flash中運行的,并將stage2復制到內存RAM中,設置堆棧,然后跳轉到stage2(從這也可以看出stage2是在RAM中運行的,與stage1不同)

BootLoader的stage1通常包括以下步驟:
1.硬件設備初始化? 如CPU寄存器、內存控制器
2.為加載BootLoader的stage2準備RAM空間
3.拷貝BootLoader的stage2到RAM空間中
4.設置好堆棧??? 為什么?為了跳轉到stage2的入口,因為stage2大多數是用C語言寫的
5.跳轉到stage2的C入口點

BootLoader的stage2通常包括以下步驟:
1.初始化本階段要使用到的硬件設備??? 各種設備,如網卡
2.將內核映像和根文件系統映像從flash上讀到RAM中去
3.調用內核
--------------------------------------------------------------------------------


uboot??

?

Uboot用于多種嵌入式CPU的BootLoader程序
支持多種嵌入式操作系統的引導
UBOOT目錄結構
1.Borad??? ??? 與開發板有關的文件。第一個開發板都以一個子目錄出現在當前目錄中
2.Common??? 實現Uboot支持的命令
3.Cpu??? ??? 與特定CPU架構相關的代碼,支持的CPU對應一個子目錄(注意CPU與開發板的區別)
3.Disk??? ??? 對磁盤的支持
4.Doc??? ??? 文檔目錄
5.Drivers??? Uboot支持的設備驅動程序? 如各種網卡、串品、USB、支持CFI的Flash
6.Fs ??? ??? 文件系統的支持
7.Iclude??? Uboot使用的頭文件。該目錄下configs目錄有與開發板相關的配置頭文件??? ??? 該目錄下的asm目錄有與CPU體系結構相關的頭文件
8.Net??? ??? 與網絡協議相關的代碼??? 各路協議的實現
9.Tools??? ??? 生成Uboot的工具,如:mkimage,crc等等

Uboot編譯分為兩步
1.執行每種board相關的配置??? 如:make amdk_2420
2.編譯生成uboot.bin文件??? ??? 如:make CROSS_COMPILE=arm-linux-(指定正確路徑)
--------------------------------------------------------------------------------

UBOOT基于單板機提供了豐富的命令集操作
UBOOT命令
printenv查看環境變量(相當全局變量?)
setenv 添加、修改、刪除環境變量
1.setenv name value
set environment variable 'name' to 'value...'
2.setenv name
delete environment variable 'name'
saveenv保存環境變量
將當前定義的所有變量及其值存入flash中
--------------------------------------------------------------------------------
---------------------文件下載------------------------------------
tftp 通過網絡下載文件???? 使用前,配置好網絡
配置網絡:1.setenv ethaddr 12:34:56:78:8A:BC
2.setenv ipaddr 192.168.1.1
3.setenv serverip 192.168.1.254? (tftp服務器的地址)
連接下載:tftp 32000000 uImage
把server(IP=環境變量中設置的serverip)服務目錄下的uImage通過tftp讀入到0x32000000處

md 顯示內存區的內容
md[.b,.w,.l]address??? 如:md.w 1000000

mm[.b,.w,.l]address??? 如:mm.w 100000
mm 修改內存,地址自動遞增??? 提供了一種互動修改存儲器內容的方法,如果沒有輸入任何值,按回車內容保持不變,輸入空格然后按下回車,結束輸入

flinfo??? 查看Flash扇區信息
--------------------------------------------------------------------------------
protect Flash寫保護? 打開或關閉扇區寫保護
用法:
protect off all??? ??? 關閉所有扇區的寫保護
protect on all ??? ??? 打開所有扇區的寫保護
protect off start end ??? 關閉從start到end扇區的寫保護-----》protect off 0 1ffff(前一扇區減去1?)
protect on start end ??? 打開從start到end扇區的寫保護

--------------------------------------------------------------------------------

erase 擦除flash扇區
用法: erase start end??? 如: erase 30000 1efff
在使用cp命令向Nor型Flash寫入數據之前必須先使用erase命令擦除flash

cp 數據拷貝
cp [.b,.w,.l]saddress daddress len
cp提供了一種內存與內存,內存與Flash之間數據拷貝的方法
如:cp.b 31000000 50000 d0000 即是將內存地址0x31000000處的數據(長度為0xd0000)拷貝到地址0x50000處(Flash中)

--------------------------------------------------------------------------------
執行程序
go 執行內存中的二進制代碼,一個簡單的跳轉到指定地址
go addr[arg...]
start application at address 'addr',
passing 'arg' as arguments

bootm 執行內存中的二進制代碼
bootm [addr[arg...]]? ??? ?要求二進制代碼有固定格式的文件頭
boot application image stored in memory passing arguments 'arg...';
when booting a Linux kernel,'arg' can be the address of an initrd image
bdinfo??? 顯示開發板信息? (可用于啟動linux內核)
bdinfo命令將在終端顯示諸如內存地址和大小、時鐘頻率、MAC地址等信息
這些信息在傳遞給LIUNX內核一些參數時可能會用到

設置自動啟動
setenv bootcmd tftp 31000000 uImage \;bootm 31000000
saveenv

?

轉載于:https://www.cnblogs.com/zhugeanran/p/8426718.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250972.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

驅動芯片

一 LED驅動芯片: 1.1 TM1640:16位數碼管驅動芯片,2線制控制(CLK/DIN),SCLK低電平時DIN輸入,而SCLK高電平時保持DIN保持不變;開始傳輸:SCLKH時DIN由高變低,停止傳輸SCLKH時DIN由由低變…

jquery --- 控制元素的隱藏/顯示

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body> <div id"panel"><h5 class"head">什么是jquery?</h5><div class"content" style"display:non…

confusion_matrix(混淆矩陣)

作者&#xff1a;十歲的小男孩 凡心所向&#xff0c;素履可往 目錄 監督學習—混淆矩陣 是什么&#xff1f;有什么用&#xff1f;怎么用&#xff1f; 非監督學習—匹配矩陣 混淆矩陣 矩陣每一列代表預測值&#xff0c;每一行代表的是實際的類別。這個名字來源于它可以非常容…

Python 21 Django 實用小案例1

實用案例 驗證碼與驗證 KindEditor 組合搜索的實現 單例模式 beautifulsoup4 驗證碼與驗證 需要安裝Pillow模塊 pip stall pillow1、首先需要借助pillow模塊用來畫一個驗證碼圖形&#xff0c;這里單獨封裝了一個py文件&#xff0c;調用一個方法就好了 1 #!/user/bin/env python…

jquery --- 事件處理函數的event對象的幾個屬性(方法)說明

1.event.type: 事件的類型 $(a).click(function(event) {alert(event.type);return false; // 阻止鏈接跳轉 }); // click2.event.preventDefault(): 阻止默認事件 $("#sub").bind("click", function(event) {var username $("#username").va…

數據恢復軟件

鏈接&#xff1a;https://pan.baidu.com/s/1n6x5vhW-3SY8MAvvnqVtog 密碼&#xff1a;thh0轉載于:https://www.cnblogs.com/huanu/p/9452039.html

VMware

1.VMware軟件安裝&#xff1a; https://jingyan.baidu.com/article/9f7e7ec09da5906f281554d6.html 2&#xff0c;鏡像文件下載地址&#xff1a;http://www.cnbeta.com/articles/tech/566773.htm 有圖形界面。 或是在官網&#xff1a;https://wiki.centos.org/Download 2.cento…

jquery --- 全選、全不選、反選、提交

注意:jquery 提供的$(’#id’).attr(‘checked’,true)方法,在某些情況下會失效… 因此,使用js原生的 .checked true方法 控制 // html <form>你愛好的運動是? <br/><input type"checkbox" name"items" value"足球" /> 足球…

【重要】ES6-23 JavaScript模塊化

前端js模塊化的演變發展 模塊化解決的問題 傳統模塊化、插件化 CommonJS AMD/CMD ES6模塊化 ES6以前 沒有js引擎 一開始js寫在html的script標簽里js內容增多&#xff0c;抽取出index.js文件&#xff0c;外部引入js再增加&#xff0c;index.html對應index.js index2.html對應ind…

Quartz.Net定時任務EF+MVC版的web服務

之前項目采用JAVA 的 Quartz 進行定時服調度務處理程序&#xff0c;目前在.NET下面使用依然可以完成相同的工作任務&#xff0c;其實什么語言不重要&#xff0c;關鍵是我們要學會利用語言實現價值。它是一個簡單的執行任務計劃的組件&#xff0c;基本包括這三部分&#xff1a;J…

jquery --- 多選下拉框的移動(穿梭框)

效果如下: 幾個注意地方: 1.多選下拉框需要添加 multiple 2.獲取選中的元素KaTeX parse error: Expected EOF, got # at position 3: (#?id option:selec…(#id option:not(:selected)) 下面是代碼的各個部分實現, 方便引用,最后是總體代碼,方便理解 添加選中到右邊: // …

ES6-24 生成器與迭代器的應用

手寫生成器 先done再false&#xff0c;不然index就提前了一步1 var arr [1,2] function generator(arr){var i 0;return{next(){var done i > arr.length ? true : false,value done ? undefined : arr[i];return {value : value,done : done} }} } var gen gener…

1013 B. And

鏈接 [http://codeforces.com/contest/1013/problem/B] 題意 給你一個n和x,再給n個數&#xff0c;有一種操作用x&a[i]取代&#xff0c;a[i],問使其中至少兩個數相同&#xff0c;要多少次操作&#xff0c;如果不能輸出-1. 思路 x&a[i],無論&多少次&#xff0c;a[i]都…

jquery --- 收縮兄弟元素

點擊高亮的收縮兄弟元素. 思路: 1.點擊的其實是tr.(類為parent) 2.toggleClass可以切換樣式 3.slblings(’.class’).toggle 可以根據其類來進行隱藏顯示 代碼如下: <!DOCTYPE html> <html> <head> <meta charset"utf-8"><style>.pa…

Webpack基礎

path.resolve // 只要以/開頭&#xff0c;就變為絕對路徑 // ./和直接寫效果相同 var path require("path") //引入node的path模塊path.resolve(/foo/bar, ./baz) // returns /foo/bar/baz path.resolve(/foo/bar, baz) // returns /foo/bar/baz path.res…

(php)實現萬年歷

1 <?php2 //修改頁面編碼3 header("content-type:text/html;charsetutf-8");4 5 //獲取當前年6 $year$_GET[y]?$_GET[y]:date(Y);7 8 //獲取當年月9 $month$_GET[m]?$_GET[m]:date(m); 10 11 //獲取當前月多少天 12 $daysdate(t,strtotime("{$year}-{$m…

LeetCode:二叉樹相關應用

LeetCode&#xff1a;二叉樹相關應用 基礎知識 617.歸并兩個二叉樹 題目 Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new …

ubuntu16.04 python3.5 opencv的安裝與卸載(轉載)

轉載https://blog.csdn.net/qq_37541097/article/details/79045595 Ubuntu16.04 自帶python2.7和python3.5兩個版本&#xff0c;默認為python2.7&#xff0c;我使用的是3.5&#xff0c;所以首先將默認的python版本改為3.5. 在終端輸入下列指令&#xff1a; sudo update-alterna…

Webpack進階(一) tree shaking與不同mode

Tree Shaking 生產環境去除沒有使用到的內容&#xff08;開發環境沒有刪除&#xff0c;會影響調試&#xff09;只支持ESM規范&#xff08;靜態引入&#xff0c;編譯時引入&#xff09;&#xff0c;不支持CJS&#xff08;動態引入&#xff0c;執行時引入&#xff09; // webpa…

jquery --- 網頁選項卡

點擊,不同的tab_menu,顯示不同的tab_box 注意點: 1.獲取ul下,當前li的編號. $(‘div ul li’).index(this) 2.顯示ul下編號為$index的li -> $(‘ul li’).eq($index) <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <style&g…