九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【博文連載】cortex-a8 uboot系列: 第一章 uboot引入

一、            Uboot的入口和出口

入口:開機(jī)自動啟動

出口:啟動內(nèi)核

二、            Uboot的工作方式

  • Uboot的本質(zhì)就是一個(gè)裸機(jī)程序,和在裸機(jī)下開發(fā)出來得到的xxx.bin并沒有本質(zhì)區(qū)別。唯一的區(qū)別就是uboot比較大,一般在180k-400k之間。并且功能比較復(fù)雜。

  • Uboot本身是一個(gè)開源項(xiàng)目,由若干個(gè).c文件和.h文件組成,配置編譯之后會生產(chǎn)一個(gè)uboot.bin,這就是uboot這個(gè)裸機(jī)程序的鏡像文件。然后這個(gè)鏡像文件被合理的燒錄到啟動介質(zhì)中去拿給soc啟動。也就是說uboot在沒有運(yùn)行時(shí)表現(xiàn)為uboot.bin,一般放在啟動介質(zhì)中。

  • Uboot運(yùn)行時(shí)會被加載到內(nèi)存中然后一條一條指令的拿給CPU執(zhí)行。

  •             Ubootshell命令界面

  • Uboot啟動后,會提供一個(gè)shell界面,可以進(jìn)行人機(jī)交互

  • shell和操作系統(tǒng)下的shell是很像的,只是命令集不一樣

  •             掌握uboot使用的2個(gè)關(guān)鍵點(diǎn):命令和環(huán)境變量

  • Uboot啟動后大部分時(shí)間和工作都是在shell下完成的(例如uboot要部署系統(tǒng)要在shell下輸命令、要設(shè)置環(huán)境變量也得在命令行下,要啟動內(nèi)核也是在命令行下)

  • 命令就是ubootshell中可以識別的各種命令。Uboot中有幾十個(gè)命令,其中有一些是常用另一些不常用(還可以自己給uboot添加命令)

  • Uboot的環(huán)境變量和操作系統(tǒng)的環(huán)境變量工作原理和方式幾乎完全相同。Uboot在設(shè)計(jì)時(shí)借用了操作系統(tǒng)的環(huán)境變量。

  • 環(huán)境變量就是運(yùn)行時(shí)的配置屬性。系統(tǒng)的全部環(huán)境變量是系統(tǒng)內(nèi)置的。系統(tǒng)可以通過讀取環(huán)境來指導(dǎo)程序的運(yùn)行,這樣的設(shè)計(jì)的好處是靈活,使程序更改運(yùn)行方式,可以不用去修改程序代碼進(jìn)行編譯運(yùn)行,只要修改相應(yīng)的環(huán)境變量就可以了。

  •             Uboot命令

  • 有些命令可以簡化,如printprintenv,setsetenv

  • 有些命令要帶參數(shù),如setenv后面要帶參數(shù)

  • 命令中的雙引號,uboot的有些命令非常長,為了告訴uboot這個(gè)較長的而且中間是有空格的字符串是命令的一個(gè)參數(shù)

 set name “weiqi 7777  lujun”,設(shè)置一個(gè)變量name,變量值是weiqi 7777  lujun

  • 有一些命令是一個(gè)命令族(譬如movi

命令族就是好多個(gè)命令的開頭都是同一個(gè)命令關(guān)鍵字的,但是后面的參數(shù)不一樣,這個(gè)命令的功能和作用也不同。

同一個(gè)命令族中的所有的命令都有極大的關(guān)聯(lián),譬如movi開頭的命令族都和moviNandEMMC,iNand)操作有關(guān)。

1.    Uboot常見命令

1)     printenv/print

  • Print命令不帶參數(shù),作用是打出系統(tǒng)中所有的環(huán)境變量

  •      setenv/set

  • 設(shè)置(添加/更改)環(huán)境變量

  • 后面帶一個(gè)參數(shù),表示刪除這個(gè)環(huán)境變量

  • 后面帶兩個(gè)參數(shù),表示添加/修改這個(gè)環(huán)境變量的值為第二個(gè)參數(shù)

  •      saveenv/save

  • 保存環(huán)境變量,將內(nèi)存中的環(huán)境變量的值同步保存到FLASH中環(huán)境變量的分區(qū)。

  • 環(huán)境變量的保存是整體的覆蓋保存,也就是說內(nèi)存中所有的環(huán)境變量都會整體的將FLASH中環(huán)境變量分區(qū)中原來的內(nèi)容整體覆蓋。

  •      ping

  • 開發(fā)板網(wǎng)絡(luò)測試命令,和PC機(jī)的命令使用一樣

  • 注意,開發(fā)板和電腦對插上網(wǎng)線,先ping通主機(jī)windows,不過windowsip地址是本地連接的ip地址,可以將該地址更改為192.168.1.10。確定開發(fā)板中uboot的環(huán)境變量,ethaddr(隨便設(shè)置),netmask255.255.255.0),ipaddr(表示當(dāng)前開發(fā)板的ip地址,要設(shè)置為同PC一個(gè)網(wǎng)段,可以設(shè)置為192.168.1.77

  • 如果是使用路由器,開發(fā)板和PC都連上路由器,只需要將開發(fā)板的ipaddr設(shè)置和PC同一個(gè)網(wǎng)段即可

  •      tftp

  • 下載指令,從網(wǎng)絡(luò)下載文件到內(nèi)存中

  • 使用格式   tftf  內(nèi)存地址   文件名字 

  tftp  0x30000000  zImage-qt   將服務(wù)器上zImage-qt文件下載到開發(fā)板的內(nèi)存0x30000000

  • 要使ubootserveriptftp服務(wù)器的ip地址

6)     movi

  • SD/iNand/EMMC操作指令

  • movi是一個(gè)命令集,有很多子命令

  • movi指令都是movi readmovi write一組,movi readiNand中讀取內(nèi)容到內(nèi)存中,movi write將內(nèi)存數(shù)據(jù)寫入到iNand

  • movi read u-boot 0x30000000,把iNand中的u-boot分區(qū)讀出到內(nèi)存的0x30000000起始的位置處。(uboot代碼將iNand分成了很多分區(qū),每個(gè)分區(qū)有地址范圍和分區(qū)名,uboot程序操作中可以直接使用地址來操作iNand分區(qū),也可以使用分區(qū)名來操作分區(qū))

  •      nand

  • 操作nandflash,和movi操作基本一樣,不過九鼎的uboot中去掉了這個(gè)指令

8)     內(nèi)存操作指令:mm,mw,md

  • 內(nèi)存不像FLASH有分區(qū),只有地址,操作時(shí)注意不能越界。

  • Uboot是一個(gè)裸機(jī)程序,不像操作系統(tǒng)會由系統(tǒng)整體管理所有內(nèi)存,系統(tǒng)負(fù)責(zé)分配和管理,系統(tǒng)會保證內(nèi)存不會越界。但是裸機(jī)程序uboot并不管理內(nèi)存,內(nèi)存是隨便可以使用,所以使用uboot時(shí),內(nèi)存地址要使用正確。

  • md,顯示內(nèi)存區(qū)域數(shù)據(jù), .b 以字節(jié)顯示, .w 以半字顯示, .l 以字顯示

  • mw,memory write將數(shù)據(jù)寫入到內(nèi)存

  • mmmemory modify,修改內(nèi)存中的某一塊,地址會自動增加。修改結(jié)束,輸入y結(jié)束。

9)     啟動內(nèi)核指令:bootmgo

  • Uboot的終極目標(biāo)就是啟動內(nèi)核,啟動內(nèi)核在uboot中表現(xiàn)為一個(gè)指令,uboot命令行中調(diào)用這個(gè)指令就會啟動內(nèi)核

  • 差別,bootm啟動內(nèi)核同時(shí)給內(nèi)核傳參,而go命令啟動內(nèi)核不傳參。

  • go命令內(nèi)部其實(shí)就是一個(gè)函數(shù)指針指向一個(gè)內(nèi)存地址然后直接調(diào)用那個(gè)函數(shù)。所以go命令的實(shí)質(zhì)就是PC直接跳轉(zhuǎn)到一個(gè)內(nèi)存地址去運(yùn)行。go命令可以在uboot中執(zhí)行裸機(jī)程序。

  •             環(huán)境變量

  • 環(huán)境變量有2份,一份在FLASH中,另一份在內(nèi)存中。uboot開機(jī)時(shí)一次性從FLASH中讀取全部環(huán)境變量到內(nèi)存中作為環(huán)境變量的初始值,然后使用過程中是用內(nèi)存中這一份,用戶可以用saveenv命令將內(nèi)存中的環(huán)境變量保存到FLASH的環(huán)境變量,實(shí)現(xiàn)更新。

  • 環(huán)境變量在uboot中是用字符串表示的。uboot按照字符匹配的方式來區(qū)分各個(gè)環(huán)境變量。

  • 變量

  • 自動運(yùn)行倒數(shù)時(shí)間:bootdelay

  • ipaddr,開發(fā)板的本地IP地址

  • serverip是開發(fā)板通過tftp指令去tftp服務(wù)器下載文件時(shí)的tftp服務(wù)器的IP地址

  • gatewayip是開發(fā)板的本地網(wǎng)關(guān)地址

  • netmask是子網(wǎng)掩碼

  • ethaddr是開發(fā)板的本地網(wǎng)卡的MAC地址

  • bootcmd,啟動運(yùn)行命令

uboot啟動后,會進(jìn)行倒數(shù)bootdelay時(shí)間,如果中間沒有被打斷,uboot會自動執(zhí)行啟動命令。

uboot開機(jī)自動啟動時(shí)機(jī)就是在內(nèi)部執(zhí)行了bootcmd這個(gè)環(huán)境變量的值所對應(yīng)的命令集。

  • bootargs,ubootkernel傳遞的參數(shù)

  • linux內(nèi)核啟動時(shí)可以接收uboot給他傳遞的啟動參數(shù),這些啟動參數(shù)是uboot和內(nèi)核約定好的形式、內(nèi)容,linux內(nèi)核在這些啟動參數(shù)的指導(dǎo)下完成啟動過程。這樣的設(shè)計(jì)是為了靈活,為了內(nèi)核在不重新編譯的情況下可以用不同的方式啟動

  • uboot的環(huán)境變量中設(shè)置bootargs,然后bootm命令啟動內(nèi)核是會自動將bootargs傳給內(nèi)核

  • bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3

console=ttySAC2,115200,控制臺使用串口2,波特率115200。

root=/dev/mmcblk0p2 rw 根文件系統(tǒng)在SD卡端口0設(shè)置(iNand)第二分區(qū),可讀可寫

init=/linuxrc  linux的進(jìn)程1init進(jìn)程)的路徑

rootfstype=ext3  指根文件系統(tǒng)的類型為ext3

  1. d)         內(nèi)核傳參非常重要,內(nèi)核移植,如果傳值不正確,會造成內(nèi)核啟動不起來

  2. 七、            UbootFLASHDDR的管理

  3. 1.    FLASH的分區(qū)

  4. a)         所謂分區(qū),也就是對FLASH進(jìn)行分塊管理

  5. b)         Uboot中沒有操作系統(tǒng),因此需要自己對FLASH進(jìn)行管理,所以需要實(shí)現(xiàn)對FLASH進(jìn)行分區(qū)界定,有了這個(gè)界定,在部署系統(tǒng)是按照分區(qū)界定方法來部署,ubootkernel的軟件也是按照這個(gè)分區(qū)界定來工作。

  6. c)         分區(qū)方法不是固定的,是可以變動的,但是在一個(gè)移植中必須先設(shè)計(jì)好,然后使用統(tǒng)一的分區(qū)。標(biāo)準(zhǔn):

  7. l  Uboot:必須從FLASH起始地址開始存放(也許是扇區(qū)0,也許是扇區(qū)1,也許是其他,取決于Soc啟動設(shè)計(jì),如210從扇區(qū)1開始),uboot的分區(qū)大小必須保證uboot能夠放下,一般設(shè)置為512KB1MB。

  8. l  環(huán)境變量: 環(huán)境變量分區(qū)一般緊貼著uboot存放,大小為32KB或者更多

  9. l  Kernel 可以緊貼環(huán)境變量,大小一般為3MB5MB或其他。

  10. l  根文件系統(tǒng): 緊貼著kernel,大小得看情況

  11. l  自由分區(qū): kernel啟動后,將自由分區(qū)掛在到rootfs下使用

2.    DDR的分區(qū)

DDR的分區(qū)和FLASH的分區(qū)不同,因?yàn)?/span>FLASH是掉電存在的,而DDR是掉電丟失的,所以DDR是每次系統(tǒng)運(yùn)行時(shí)開開始部署的。

內(nèi)存的分區(qū),主要是在linux啟動之前進(jìn)行分區(qū),linux內(nèi)核啟動后內(nèi)核的內(nèi)存管理模塊會接管整個(gè)內(nèi)存空間,這個(gè)時(shí)候我們就不需要管理了。

內(nèi)存分區(qū)關(guān)鍵就在于內(nèi)存中那一塊用來干什么必須分配好,以避免各個(gè)不同功能使用了同一塊內(nèi)存造成的數(shù)據(jù)影響。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
為什么要有uboot?
uboot 下更改NAND的分區(qū) fdisk
uboot和Linux內(nèi)核移植
S3C2440移植uboot之裁剪和修改默認(rèn)參數(shù)
【整理】BIOS、BootLoader、uboot對比
uboot環(huán)境變量與內(nèi)核MTD分區(qū)關(guān)系一
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服