導航:首頁 > 編程語言 > boot內核省電代碼

boot內核省電代碼

發布時間:2023-05-13 18:06:45

Ⅰ uboot 命令具體是如何實現的,我看了一部分,現在卡住了;求高人指點; 我的QQ:436035433

那u-boot的那些個關於命令的結構體到底從何而來呢?在include/command.h里定義了這樣的宏:

#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))

... ... ... ...

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}


二個宏展開便定義了悔卜一個代表u-boot命令的結構體。也就是說定義了一個變數,並賦與其初值。關鍵在於Struc_Section,它被展開後成了
__attribute__
((unused,section(".u_boot_cmd")))。也就是說,每個變數(占內存!)都放在.u_boot_cmd段里。它們還被加上
了unused的屬性,應該是為了平息編譯器的警告。確實,沒有任何代碼引用過它們!!如果這些變數被放在一個顯示聲明的數組里,那麼,每增加一個命令都
得去更改數組的定義。然後,通過這種方法,各人想要增加新的命令時,只需用上面的這個宏即可。這些表示命令的結構體被統一放在.u_boot_cmd段
里,鏈接腳本里又有:

__u_boot_cmd_start = .;

.u_boot_cmd : { *(.u_boot_cmd) }

__u_boot_cmd_end = .;

即,
把所有待鏈接文件里u_boot_cmd段合並在一起生成一個大的.u_boot_cmd段,並且用__u_boot_cmd_start與
__u_boot_cmd_end兩個符號標識這塊內存的首尾邊界。這樣,不用大家去修改某一文件的代碼(為了改變數組的定義),而是像資料庫一樣,各個神祥
提供自己的信息。藉由編譯器與鏈接器生成這個「資料庫」,操作數據時對「資料庫」進行查詢即可。正是一個月前看《計算機程序構造與解釋》時看到的
「Data Direct」(好像是這么說)。在Grub及內核里也用了這樣機制。碧瞎穗

參考:http://blog.163.com/lijiji_1515/blog/static/12687744620114522449739/

Ⅱ uboot的作用和功能

uboot的作用類似個人電腦裡面的BIOS,主要完成硬體初始化,設置啟動參數,引導操作系統等功能。

Ⅲ BIOS裡面有main , advanced , H/W monitor , boot , Secuity,exit分別是什麼意思

AWARD BIOS設置詳解

AWARD公司是世界最大的BIOS生產廠商之一,其產品也被廣泛使用。但由於AWARD BIOS裡面的信息都是基於英文且需要用戶對相關專業知識的理解相對深入,使得普通用戶設置起來感到困難很大。而如果這些設置不當的話,將會影響整台電腦的性能設置是不能正常使用,所以一份詳細的設置說明是必要的。下面就介紹一下AWARD BIOS中的有關設置選項的含義和設置方法。

【Standard CMOS Setup】(標准設定)
在本菜單中,用戶可以修改日期、時間、第一主IDE設備(硬碟)和IDE設備(硬碟或CD-ROM)、第二個主IDE設備(硬碟或CD-ROM)和從IDE設備(硬碟或CD-ROM)、軟碟機A與B、顯示系統的類型、什麼出錯狀態要導致系統啟動暫停等。主要說明如下:

(1) 用戶可以在Type(類型)和Mode(模式)項設置為Auto,使BIOS自動檢測硬碟。也可以在主菜單中的【IDE HDD Auto Detection】操作來設置。用戶還可以使用User選項,手動設定硬碟的參數。您必須輸入柱面數(Cyls),磁頭數(Heads),寫預補償(Precomp),磁頭著陸區(Landz),每柱面扇區數(Sectorxs),工作模式(Mode,內容見下)等幾種參數。硬碟大小在上述參數設定後自動產生。

硬碟工作模式(MODE)的三種選項:

NORMAL模式:傳統的標准模式,支持硬碟容量最高至528MB。
LARGE模式:當硬碟容量超過528MB,而硬碟或操作系統不支持LBA模式時,可採用此選項。
LBA 模式(Logical Block Addressing Mode):適用於硬碟容量超過528M且支持"邏輯區塊地址"(LBA)功能(一般都使用此項)

(2) 顯示類型可選EGA/VGA(EGA、VGA、SEGA、SVGA、PGA顯示適配卡選用)、CGA40(CGA顯示卡,40列方式)、CGA80(CGA顯示卡,80列方式)、MONO(單色顯示方式,包括高解析度單顯卡)等四種,用戶應根據情況正確選用。

(3) 暫停的出錯狀態選項有:
1. AllErrors:BIOS檢測到任何錯誤,系統啟動均暫停並且給出出錯提示。
2. NoErrors:BIOS檢測到任何錯誤都不使系統啟動暫停。
3. All ,But Keyboard:除鍵盤錯誤外,BIOS檢測到任何其它桐森錯誤,均暫停系統啟動並且局衫畝給出出錯提示。
4. All ,But Disk/Key:除鍵盤、磁碟錯誤外,BIOS檢測到任何其它錯誤,均暫停系統啟動並且給出出錯提示。

【BIOS Features Setup】(功能設定)
該項用來設置系統配置選項清單,其中有些選項由主板本身設計確定,有些選項用戶可以進行修改設定,以改善系統的性能。主要說明如下:
(1) VirusWarning:病毒防禦警告(預設值為Disable),此功能可防止硬碟的關鍵磁區及分區被更改,任何試圖寫入該區的操作將會導致系統死機並形式警告信息。
注意:當安裝新的操作系統(如Win95)時,請先取消(disable)此功能,以免因沖突而無法順利安裝。
(2) CPU Internal Cache:預設為Enable(開啟),它允許系統使用CPU內部的第一級Cache。486、586檔次的CPU內部一般都帶有Cache,除非塌族當該項設為開啟時系統工作不正常,此項一般不要輕易改動。該項若置為Disable(關閉),將會降低系統的性能。
(3) External Cache:預設設為Enable,它用來控制主板上的第二級(L2)Cache。根據主板上是否帶有Cache,選擇該項的設置。
(4) Quick Power On Self Test:預設設置為Enable,該項主要功能為加速系統上電自測過程,它將跳過一些自測試。使引導過程加快。
(5) IDE HDD Block Mode Sectors:IDE硬碟設定, 預設值為HDDMAX。新式IDE硬碟大多支持一次傳輸多個磁塊的功能。啟用(enable)本功能可加快硬碟存取速度。選項有HDDMAX、Disabled、2、4、8、16、及32。
(6) HDD Sequence SCSI/IDE First:IDE/SCSI硬碟開機優先順序設定,預設值為IDE。當同時安裝SCSI及IDE硬碟時,本選項功能可用來選擇以SCSI或IDE硬碟作為開機硬碟。
(7) BootSequence:選擇驅動器啟動順序。一般有以下幾種啟動順序:
[A,CD-ROM,C]、[CD-ROM,C,A]、[D,A]、[E,A]、[F,A]、[C only]、[A,C]、[C,A]
請注意,某些老式主板並不支持由CD-ROM啟動,而現在的新主板增加了更多的啟動順序如LS120,ZIP等。
(8) Swap Floppy Drive:(交換軟盤驅動器)預設設定為Disable。當它Disable時,BIOS把軟碟機連線扭接端子所接的軟盤驅動器當作第一驅動器。當它開啟時,BIOS將把軟碟機連線對接端子所接的軟盤驅動器當作第一驅動器,即在DOS下A盤當作B盤用,B盤當作A盤用。
(9) BootUp Floppy Seek:當Enable時,機器啟動時BIOS將對軟碟機進行尋道操作。
(10) Floppy Disk Access Contol:當該項選在R/W狀態時,軟碟機可以讀和寫,其它狀態只能讀。
(11) BootUp Numlock Strtus:該選項用來設置小鍵盤的預設狀態。當設置為ON時,系統啟動後,小鍵盤的預設為數字狀態;設為OFF時,系統啟動後,小鍵盤的狀態為箭頭狀態。
(12) BootUp System Speed:該選項用來確定系統啟動時的速度為HIGH還是LOW。
(13) Typematic Rate Setting:該項可選Enable和Disable。當置為Enable時,如果按下鍵盤上的某個鍵不放,機器按您重復按下該鍵對待(重復按鍵速度可在下面的選項中設置);當置為Disable時,如果按下鍵盤上的某個鍵不放,機器按鍵入該鍵一次對待。
(14) Typematic Rate:如果上面的選項置為Enable,那麼可以用此選項設定當您按下鍵盤上的某個鍵一秒鍾,那麼相當於按該鍵6次。該項可選6、8、10、12、15、20、24、30。
(15) Typematic Delay:如果(13)選項置為Enable,那麼可以用此選項設定按下某一個鍵時,延遲多長時間後開始視為重復鍵入該鍵。該項可選250、500、750、1000,單位為毫秒。
(16) Security Option:選擇System時,每次開機啟動時都會提示您輸入密碼,選擇Setup時,僅在進入CMOS Setup時會提示您輸入密碼(該設置僅在設置了密碼的情況下有效)。
(17) PS/2Mouse Function Control:當該項設為Enable,機器提供對於PS/2類型滑鼠的支持。否則,選Disable。
(18) Assign PCI IRQ For VGA:選Enable時,機器將自動設定PCI顯示卡的IRQ到系統的DRAM中,以提高顯示速度和改善系統的性能。
(19) PCI/VGA Palett Snoop:該項用來設置PCI/VGA卡能否與MPEGISA/VESAVGA卡一起用。當PCI/VGA卡與MPEGISA/VESAVGA卡一起用時,該項應設為Enable,否則,設為Disable。
(20) OS/2 Select For DRAM>64MB:該項允許您在OS/2操作系統中,使用64M以上的內存。該項可選為NON-OS2,OS2。
(21) System BIOS Shadow:該選項的預設設置默認為Enable,當它開啟時,系統BIOS將拷貝到系統Dram中,以提高系統的運行速度和改善系統的性能。
(22) Video BIOS Shadow:預設設定為開啟(Enable),當它開啟時,顯示卡的BIOS將拷貝到系統DRAM中,以提高顯示速度和改善系統的性能。
(23) C8000-CBFFF Shadow/DFFFF Shadow:這些內存區域用來作為其他擴充卡的ROM映射區,一般都設定為禁止(Disable)。如果有某一擴充卡ROM需要映射,則用戶應搞清楚該ROM將映射地址和范圍,可以將上述的幾個內存區域都置為Enable;但這樣將造成內存空間的浪費。因為映射區的地址空間將佔用系統的640K~1024K之間的某一段內存。

【Chipset Features Setup】(晶元組功能設定)
該項用來設置系統板上晶元的特性。它有以下選項:

注意:此菜單下的選項會因不同主板而不同,如果你不太了解它們的功能,最好設置為預設值。

(1) ISA Bus Clockfrequency(PCICLK/4)ISA:傳輸速率率設定,設定值有:PCICLK/3;PCICLK/4。
(2) Auto Configuration:自動狀態設定,當設定為Enabled時BIOS依最佳狀況狀態設定,此時BIOS會自動設定DRAMTiming,所以會有無法修改DRAM的細項時序,我們強烈建議選用Enabled,因為任意改變DRAM的時序可能造成系統不穩或不開機。
(3) Aggressive Mode:高級模式設定,當您想獲得較好的效能時,而且系統在非常穩定狀態下,可以嘗試Enabled此項功能以增加系統效能,不過必須使用較快速DRAM(60ns以下)。
(4) VIDEO BIOS Cacheable:(視頻快取功能,預設值為Disable),為Enable時,啟用快取功能以加快顯示速度;為Disable時,取消此功能。
(5) Memory Holeat Address:(預設值為None),一些ISA卡會要求使用14-16MB或15-16MB的內存地址空間,若選取14MB-16MB或15MB-16MB,則系統將無法使用這部份的內存空間。您可選取None來取消此功能。
(6) OnboardFDC SwapA:B:(A,B盤互換,預設值為NoSwap),當啟用(enable)本項功能時則A,B盤互換 。亦即原先A盤被指定成B盤,B盤被指定為A盤。如此一來,您就不需打開機箱互換排線了。
(7) OnboardSerialPort1:(預設值為3F8H/IRQ4),設定主機板上串口1的位址及IRQ,選項有:3F8H/IRO4、2F8H/IRQ3、3E8H/IRQ4、2E8H/IRQ10、Disable。
(8) OnboardSerialPort2:(預設值為2F8H/IRQ3),設定主機板上串口2的位址及IRQ,選項有:3F8H/IRQ4、2F8H/IRQ8、3E8H/IRQ4、2E8H/IRQ10、Disable。
(9) OnboardParallelPort:(預設值為378H/IRQ7),設定主機板上並口的位址及IRQ。
(10) Parallel PortMode:(並口模式,預設值為ECP+EPP),並口的操作模式有下列選項:
Normal:一般速度單向運行。
EPP:最高速度雙向運行。
ECP:超高速雙自運行。
ECP+EPP:ECP與EPP二種模式並用。
(11) ECP DMA Select:(ECP DMA通道選擇,預設值為3),若在ECP模式下操作時,則提供DMA通道選擇,有1,3,Disable三種設定。
(12) UART2 UseInfrared:(預設值為Disable),本項功能用來支持紅外線(IR)傳輸功能。為Enable時,則設定第二序列UART支持紅外線傳輸功能。設為Disable時,則設定第二序列UART支持COM2。
注意:如果沒有紅外線設備,不要Enable此項,否則會造成不必要的麻煩,例如系統不識別MODEM。
(13) Onboard PCI IDE Enable:(主機板IDE通道設置,預設值為Both),用來啟用內建IDE通道。選項有:
Primary IDE Channel:僅啟動主IDE通道(即第一IDE通道)。
Secondary IDE Channel:僅啟動輔IDE通道(即第二IDE通道)。
Both:第一、二IDE通道均啟用。
Disable:禁用所有IDE通道。
(14) IDE PIO Mode:這個設置取決於系統硬碟的速度,包括AUTO,0,1,2,3,4五個選項,Mode4硬碟傳輸速率大於是16.6MB/秒,其它模式的小於這個速率。請不要選擇超過硬碟速率的模式,這樣會丟失數據。
(15) IDE UDMA(UltraDMA) Mode:Intel430TX以後的晶元提供了Ultra DMA Mode,它可以把傳輸速率提高到一個新的水準。
(16) IDE0Master/SlaveMode,IDE1Master/SlaveMode:(硬碟時序模式設定,預設值為Auto),設為Auto時,系統會自動檢查四個IDE 裝置的時序模式以確保以最佳速度運行。也可以自行設定時序模式為(0,1,2,3,4)。

【Power Management Setup】(節電功能設定)
該項為電源管理設定,用來控制主板上的"綠色"功能。該功能定時關閉視頻顯示和硬碟驅動器以實現節能的效果。具體來說,實現節電的模式有四種:

1、Doze模式:當設定時間一到,CPU時鍾變慢,其他設備照常運作;
2、Standby模式:當設定時間一到,硬碟和顯示將停止工作,其他設備照常運作;
3、Suspend模式:當設定時間一到,除CPU以外的所有設備都將停止工作;
4、HDD Power Down模式:當設定時間一到,硬碟停止工作,其他設備照常運作。

該菜單項下面的可供選擇的內容有以下幾種:

(1) Power Management:節電模式的主控項,有四種設定:
Max Saving:(最大節電)在一個較短的系統不活動的周期(Doze、Standby、Suspend、HDDPowerDown四種模式的預設值均為1分鍾)以後,使系統進入節電模式,這種模式節電最大。
MIN Saving:(最小節電)在一段較長的系統不活動的周期在這種情況下,(Doze,Standby,Suspend三種模式的預設值均為1小時,HDD Power Down模式的預設值為15分鍾)後,使系統進入節電模式。
Disable:關閉節電功能,是預設設置。
User Defined:(用戶定義)允許用戶根據自己的需要設定節電的模式。

(2) VideoOFFOption:(顯示器關閉設定,預設值為Susp, Stby->Off),本選項用來設定在何種模式下關閉顯示器,選項如下:
1. Susp,Stby->Off:只在待機(Standby)或暫停(Suspend)的省電模式下才關閉顯示器。
2. Suspend->Off:只在暫停(Suspend) 模式下才關閉顯示器。
3. Alwayson:在任何模式下均不關,顯示器照常顯示。
4. Allmodes->Off:在任何省電模式下均關閉顯示器。

(3) Video Off Method:(視頻關閉)該選項可設為V/HSync+Blank、Dpms、BlankScreen三種,具體如下:

1. V/HSync+Blank:將關閉顯示卡水平與垂直同步信號的輸出埠,向視頻緩沖區寫入空白信號。
2.DPMS(顯示電源管理系統):設定允許BIOS在顯示卡有節電功能時,對顯示卡進行節能信息的初始化。只有顯示卡支持綠色功能時,用戶才能使用這些設定。如果沒有綠色功能,則應將該行設定為Blank Screen(關掉屏幕)。
3. Blank Screen(關掉屏幕):當管理關掉顯示器屏幕時,預設設定能通過關閉顯示器的垂直和水平掃描以節約更多的電能。沒有綠色功能的顯示器,預設設定只能關掉屏幕而不能終止CRT的掃描。
(4) PM Timers(電源管理記時器):下面的幾項分別表示對電源管理超時設置的控制。Doze,StandBy和Suspend Mode項設置分別為該種模式激活前的機器閑置時間,在MAX Saving模式,它每次在一分鍾後激活。在MIN Saving模式,它在一小時後激活。
(5) Power Down、Resume Events(進入節電模式和從節電狀態中喚醒的事件):該項下面所列述的事件可以將硬碟設在最低耗電模式,工作、等待和懸掛系統等非活動模式中若有事件發生,如敲任何鍵或IRQ喚醒、滑鼠動作、MODEM振鈴時,系統自動從電源節電模式下恢復過來。
(6) Soft-OffByPwr-Bttn:ATX機箱的設計不同於傳統機箱,按下開關4秒以上才能關閉系統;選擇instant-off方式將使ATX機器等同於傳統機器,而若置為delay4sec方式,那麼您按住開關的時間不足4秒時將使系統進入SuspendMode。

【PNP/PCI Configuration Setup】(即插即用與PCI狀態設定)
該菜單項用來設置即插即用設備和PCI設備的有關屬性。

(1) PNP OS Installed:如果軟體系統支持Plug-Play,如Win95,可以設置為YES。
(2) Resources ControlledBy:AWARD BIOS支持"即插即用"功能,可以檢測到全部支持"即插即用"的設備,這種功能是為類似Win95之類操作系統所設計,可以設置Auto(自動)或Manual(手動)。
(3) Resources Configuration Data:預設值是Disabled,如果選擇Enabled,每次開機時,Extend System Configuration Data(擴展系統設置數據)都會重新設置。
(4) IRQ 3/4/5/7/9/10/11/12/14/15,Assingned To:在預設狀態下,所有的資源除了IRQ3/4,都設計為被PCI設備佔用,如果某些ISA卡要佔用某資源可以手動設置。

【Load BIOS Defaults】(載入BIOS預設值)
當系統安裝後不太穩定,則可選用本功能。此時系統將會取消一些高效能的操作模式設定,而處在最保守狀態下。因此使用它容易找到主機板的安全值和除去主板的錯誤。當選擇本項時,主畫面會出現下列信息:
Load BIOS Defaults(Y/N)?
鍵入Y並按Enter即可執行本項功能。
注意:本項功能不會影響CMOS內存儲的"標准設定"(即【Standard CMOS Setup】項的設置值)

【Load Setup Defaults】(載入SETUP預設值)
此為BIOS出廠的設定值。此時系統會以最佳化的模式運行。選擇此功能時,主畫面會出現下列信息:
Load SETUP Defaults(Y/N)?
鍵入Y並按Enter即可執行本項功能。

【Supervisor Password And User Password Setup】(管理者與使用者密碼設定)
User Passowrd Setting功能為設定密碼。如果要設定此密碼,首先應輸入當前密碼,確定密碼後按y,屏幕自動回到主畫面。輸入User Passowrd可以使用系統,但不能修改CMOS的內容。輸入SupervisorPassword可以輸入、修改CMOS BIOS的值,Supervisor Password是為了防止他人擅自修改CMOS的內容而設置的。用戶如果使用IDE硬碟驅動器,該項功能可以自動讀出硬碟參數,並將它們自動記入標准CMOS設定中,它最多可以讀出四個IDE硬碟的參數。

【Saveand Exit Setup】將設定值儲存後,離開設置主畫面。

【Exit Without Saving】不儲存設定值,直接離開設置主畫面。
以上介紹了Award BIOS Setup的常用選項的含義及設置辦法。由於每種版本的BIOS具體設置都有所不同,所以上面列舉的設置項目,可能少於或多於你系統內的項目,但一般情況下,各種設置都大同小異,觸類旁通。另外,由於AMI BIOS的設置同AWARD BIOS基本相同,這里就一一介紹。

免跳線CPU在BIOS中的設置

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

目前有不少免跳線主板採用BIOS程序設置CPU工作狀態,這無疑是超頻族的福音,因為它免去了許多麻煩,給用戶帶來了方便。如升技BH6、微星6119 W(中文BIOS)等主板,只要將CPU插好,啟動計算機,進入BIOS設置程序,就可對CPU參數進行設置,設置的內容包括CPU工作電壓、CPU外頻和CPU內頻等。下面就介紹具體的設置:
(1) CPU Operating Speed:CPU的內核工作速度設定。選項包括:User Define(用戶定義)、233(66×3.5)、266(66×4)、300(66×4.5)、333(66×5)、350(100×3.5)、400(100×4)等選項。選擇User Define後,CPU外頻和倍頻由用戶在下面的(3)、(4)中自行設置。另外,最新的微星6119(W)的BIOS設置中的CPU Plug & Play選項,可自動檢測CPU、設置其工作狀態。
(2) Turbo Frequency:CPU外頻加速模式設定。當Enable時,CPU的頻率被提升2.5%,此項目僅在External Clock(外頻)支持Turbo模式時方出現(目前只對100MHz提供支持)。
(3) External Clock:CPU外頻設定,包括66、75、83、100、112、124、133MHz等選項。
(4) Multiplier Factor:CPU倍頻設定,有2.0、2.5、3.0、3.5、4.0、4.5、5.0、5.5倍等選項
(5) SEL100/66# Signal:Signal 100/66信號設定,包括High"(高)和"Low"(低)兩個選項。當設置為"High"時,CPU外頻為100MHz,設置為"Low"時為66MHz。
注意:有些PⅡ350和PⅡ400運行在100MHz外頻時,倍頻分別被鎖定於3.5和4.0倍頻,SEL100/66#信號設置為"Low",可解除對倍頻的鎖定。
(6) AGPCLK/CPUCLK:AGP時鍾設定。預設值為2/3,此時AGP工作頻率是CPU外頻的2/3,如改設為1/1,則AGP工作頻率等於CPU外頻。
(7) Speed Error Hold:速度錯誤處理設定。包括"Disable"和"Enable"選項。默認 為"Disable"。如設置為"Enable"則相當於禁止超頻,由系統自動檢測CPU,發現設置值與CPU標稱值不符時系統拒絕工作。
(8) CPU Power Supply:CPU電壓設定。包括"CPU Default"(默認)和"User Define"(用戶定義)選項。選擇"User Define"時,需在(9)中設置CPU內核電壓。
(9) Core Voltage :CPU內核電壓設定。包括1.30V至3.2V間的電壓選項。選擇項中對電壓有一定限制,對2.8V 的 Pentium Ⅱ,電壓最高可調至3.2V;對2.0V的Pentium Ⅱ,最高只可調至2.3V。

Ⅳ 大哥大姐你們好,我想知道安卓rom里boot.img是系統內核嗎我想超頻,手機是中興天機,改內核

boot應該是是引導文件

Ⅳ uboot的protect指令使用

Printenv 列印環境變數。

uboot> printenv

baudrate=115200

ipaddr=192.168.0.111

ethaddr=32:34:46:78:9A:DC

serverip=192.168.0.100

Environment size: 80/8188 bytes

2. Setenv 設置新的變數

如:

uboot> setenv myboard AT91RM9200DK

uboot> saveenv

uboot> printenv

baudrate=115200

ipaddr=192.168.0.111

ethaddr=32:34:46:78:9A:DC

serverip=192.168.0.100

myboard=AT91RM9200DK

Environment size: 102/8188 bytes

又如想重置啟動參數bootargs:

uboot> setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'

uboot>圓數 saveenv

3. saveenv 保存變數 命令將當前定義的所有的變數及其值存入 flash 中。 用來存儲變數及橘源首其值的空間只有 8k 位元組,應不要超過。 (如上例,每次與setenv配合使用)

4. loadb 通過串口 Kermit 協議下載二進制數據。

5. tftp 通過網路下載程序,需要先設置好網路配置

簡單配置:

uboot> setenv ethaddr 32:34:46:78:9A:DC

uboot> setenv ipaddr 192.168.0.111

uboot> setenv serverip 192.168.0.100

//下載 bin 文件到地址 0x20000000 處。

uboot> tftp 20000000 application.bin (application.bin 應位於 tftp 服務程序的目錄)

uboot> tftp 32000000 zImage.bin

把 server (IP=環境變數中設置的 serverip) 中 FTP配置的默認目錄下的 zImage.bin通過 TFTP 讀入到物 理內存 32000000 處。

6. md 顯示內存區的內容。

7. mm 修改內存,地址自動遞增。

8. nm 修改內存,地址不自動遞增。

9. mw 用模型填充內存

uboot>mw 32000000 ff 10000(把內存 0x32000000 開始的 0x10000 位元組設為 0xFF)

10. cp 拷貝一塊內存到另一塊

11. cmp 比較兩塊內存區

這些內存操作命令後都可加一個後綴表示操作數據的大小, 比如 cp.b 表示按位元組拷貝。 Protect 防寫操作 protect on 1:0-3(就是對第一塊 FLASH 的 0-3 扇區進行保護) protect off 1:0-3 取消防寫 Erase 擦除扇區。

12. nfs

uboot>nfs 32000000 192.168.0.2:zImage.bin 把 192.168.0.2(LINUX 的 NFS 文件系統)中的 NFS 文件系統中的 aa.txt 讀入內存 0x32000000 處 (192.168.0.2是配置的NFS伺服器地址,且要復制的文件必須在NFS配置的服務目錄下)

uboot 命令使用教程(uboot參數設置)的更多相關文章
U-Boot命令大全(功能參數及用法)
U-Boot上電啟動後,按任意鍵可以退出自動啟動狀態,進入命令行. U-Boot 2010.03 (Sep 25 2011 - 16:18:50) DRAM: 64 MB Flash: ...

uboot命令及內核啟動參數
修改:mw [內存地址] [值] [長度] 例如:mw 0x02000000 0 128 表示修改地址為0x02000000~0x02000000+128的內存值為0. 顯示:md [內存地址 ...

PM2用法簡介【命令行啟動 --env 參數設置使用問題】
環境切換裂型 正式開發中分為不同的環境(開發環境.測試環境.生產環境),我們需要根據不同的情景來切換各種環境 pm2通過在配置文件中通過env_xx來聲明不同環境的配置,然後在啟動應用時,通過--env參 ...

u-boot 環境變數參數設置
今天本來是燒寫內核,結果一不小心把uboot也整不能用了,無奈之下只好重新燒個uboot,等都弄好以後,發現系統還是啟動不了,原來是啟動參數設置不對,於是找到了這篇文章,//是我添加的內容. 原文地址 ...

Uboot 命令行 介紹
背景 基本上,本文轉載自:<ARM板移植Linux系統啟動(五)Uboot命令行> 上次說到uboot的啟動方式,最後會使用autoboot(自主模式)嘗試引導kernel,如果失敗或者被 ...

uboot命令簡介
uboot下的命令行 1.典型嵌入式linux系統啟動過程: 嵌入式系統上電後先執行uboot.然後uboot負責初始化DDR,初始化Flash,然後將OS從Flash中讀取到DDR中,然後啟動OS( ...

燒寫ARM開發板系統教程----->uboot 、內核以及文件系統
一.sd啟動 將u-boot鏡像寫入SD卡,將SD卡通過讀卡器接上電腦(或直接插入筆記本卡槽),通過"cat /proc/partitions"找出SD卡對應的設備,我的設備節點是 ...

1.ok6410移植bootloader,移植u-boot,學習u-boot命令
ok6410移植u-boot 既然是移植u-boot當然首先需要u-boot源碼,這里的u-boot代碼是由國嵌提供的. 一.配置編譯u-boot A. 解壓 u-boot 壓縮文件 B. 進入解壓生 ...

轉載 uboot 命令
1.bootm bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...' ...

Ⅵ uboot如何啟動內核

1.uboot啟動內核的代碼縮減如下:
Uboot 1.16/lib_arm/board.c中start_armboot()函數調用/common/main.c中main_loop()函數,在main_loop()中有uboot啟動內核的代碼:
s = getenv ("bootcmd");
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s :"<UNDEFINED>");
if (bootdelay >= 0 && s && !abortboot (bootdelay))
{
run_command(s, 0);
}

2.假設bootcmd = nandread.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
<1> nandread.jffs2 0x30007FC0 kernel
從nand讀出內核:
從哪裡讀? :kernel分區
讀到哪裡去?:0x30007FC0

何為分區?
簡單的說就是將nand劃分為幾個區域,一般如下:

bootloader->params->kernel->root

這些分區劃分穗余在/include/configs/100ask24x0.h中寫死的:

#define MTDPARTS_DEFAULT"mtdparts=nandflash0:256k@0(bootloader)," \
"128k(params)," \
"2m(kernel)," \
"-(root)"

進入uboot執行mtd ,可以查看已有分區:
# name 大小 在nand上的猜褲滾起始地址
0 bootloader 0x00040000 0x00000000
1 params 0x00020000 0x00040000
2 kernel 0x00200000 0x00060000
3 root 0xfda00000 0x00260000

上面的nand read.jffs2 0x30007FC0 kernel等價於:
nand read.jffs20x30007FC0 0x00060000 0x00200000
註:read.jffs2並不是指定特定的格式,僅表示不需要塊/頁對齊,所以kernel的分區大小可以隨意定。純岩

<2> bootm0x30007FC0
關鍵函數do_bootm()

flash上存的內核:uImage
uImage =頭部+真正的內核

頭部的定義如下:

typedef struct image_header {
uint32_t ih_magic;
uint32_t ih_hcrc;
uint32_t ih_time;
uint32_t ih_size;
uint32_t ih_load;
uint32_t ih_ep;
uint32_t ih_dcrc;
uint8_t ih_os;
uint8_t ih_arch;
uint8_t ih_type;
uint8_t ih_comp;
uint8_t ih_name[IH_NMLEN];
} image_header_t;

我們需要關心:
uint32_t ih_load;
uint32_t ih_ep;
ih_load是載入地址,即內核運行是應該位於的地方
ih_ep是入口地址,即內核的入口地址

這與uboot類似,uboot的載入地址是TEXT_BASE = 0x33F80000;入口地址是start.S中的_start。

從nand讀出來的內核可以放在ram中的任意地方,如0x31000000,0x32000000等等,只要它不破壞uboot所佔用的內存空間就可以

既然設定好了載入地址和入口地址,為什麼內核還能隨意放?
因為uImage有一個頭部!頭部里有載入地址和入口地址,當我們用bootm xxx時,
do_bootm先去讀uImage的頭部以獲取該uImage的載入地址和入口地址,當發現該uImage目前所處的內存地址不等於它的載入地址時,會將uImage移動到它的載入地址上,代碼中體現如下:
uboot 1.16/common/cmd_bootm.c中的bootm_load_os()函數
case IH_COMP_NONE::
if (load != image_start)
{
memmove_wd((void *)load, (void *)image_start, image_len, CHUNKSZ);
}

另外,當內核正好處於頭部指定的載入地址,便不用uboot的do_bootm函數來幫我們搬運內核了,可以縮短啟動時間。這就是為什麼我們一般都下載uImage到0x30007FC0的原因。

內核載入地址是0x30008000,而頭部的大小64個位元組,將內核拷貝到0x30007FC0,加上頭部的64個位元組,內核正好位於0x30008000處。

總結bootm做了什麼:
1.讀取頭部
2.將內核移動到載入地址
3.啟動內核

具體如何啟動內核?
使用在/lib_arm/bootm.c定義的do_bootm_linux(),我們已經知道入口地址,只需跳到入口地址就可以啟動linux內核了,在這之前需要做一件事———— uboot傳遞參數(啟動參數)給內核。
啟動代碼在do_bootm_linux()函數:
void (*theKernel)(int zero, int arch,uint params); //定義函數指針theKernel
theKernel = (void (*)(int, int, uint))images->ep; //先是將入口地址賦值給theKernel
theKernel (0, bd->bi_arch_number, bd->bi_boot_params); //然後是調用thekernel,以0,bd->bi_arch_number,bd->bi_boot_params為參數

下面分析這三個參數:
1. 0—相當於mov,ro #0
2.bd->bi_arch_number:uboot機器碼,這個在/board/100ask24x0.c設置:gd->bd->bi_arch_number = MACH_TYPE_S3C2440,MACH_TYPE_S3C2440在/arch/arm/asm/mach-types.h定義:362,內核機器碼和uboot機器碼必須一致才能啟動內核

2. bd->bi_boot_parmas--- 啟動參數地址
也是在在/board/100ask24x0.c設置:gd->bd->bi_boot_params = 0x30000100;

啟動參數(tag)在哪裡設置?
在lib_arm/armlinux.c設置:
setup_start_tag (bd);
setup_revision_tag (parmas);
setup_memory_tags (bd);
setup_commandline_tag (bd, commandline);
setup_initrd_tag (bd, images->rd_start, images->rd_end);
setup_videolfb_tag ((gd_t *) gd);
setup_end_tag (bd);

每一個啟動參數對應一個tag結構體,所謂的設置傳遞參數其實就是初始化這些tag的值,想了解這個結構體以及這些tag的值是如何設置的請看嵌入式Linux應用開發完全手冊的uboot章節

我們來看setup_start_tag(bd)函數:
static void setup_start_tag (bd_t *bd)
{
params = (struct tag *) bd->bi_boot_params;
params->hdr.tag = ATAG_CORE;
params->hdr.size = tag_size(tag_core);
params->u.core.flags = 0;
params->u.core.pagesize = 0;
params->u.core.rootdev = 0;
params = tag_next (params);
}

再看setup_commandline_tag (bd , commandline):
static void setup_commandline_tag (bd_t *bd, char*commandline)
{
// commandline就是我們的bootargs
char *p;
if (!commandline)
return;
for (p = commandline; *p == ' '; p++);
if (*p == '\0')
return;
params->hdr.tag = ATAG_CMDLINE;
params->hdr.size =
(sizeof(struct tag_header) + strlen (p) + 1 + 4) >> 2;
strcpy (params->u.cmdline.cmdline, p);
params = tag_next (params);
}

內核啟動時會讀取這些tag(參數)並跳轉啟動。

更多uboot啟動內核的細節觀看畢業班視頻自己寫uboot。

Ⅶ 關於bootloader的一些問題。高手確定的回答。

簡單地說,BootLoader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬體設備、建立內存空間映射圖,從而將系統的軟硬體環境帶到一個合適狀態,以便為最終調用操作系統內核准備好正確的環境。在嵌入式系統中,通常並沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統的載入啟動任務就完全由BootLoader來完成。比如在一個基於ARM7TDMI core的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的BootLoader程序。
在專用的嵌入式板子運行GNU/Linux系統已經變得越來越流行。一個嵌入式Linux系統從軟體的角度看通常可以分為四個層次: 1、 引導載入程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。 2、 Linux內核肆枝。特定於嵌入式板子的定製內核以及內核的啟動參數。 3、 文件系統。包括根文件系統和建立於Flash內存設備之上文件系統。通常用ramdisk來作為rootfs。 4、 用戶應用程序。特定於用戶的應用程序。有時在用戶應用程序和內核層之間可能還會包括一個嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。 引導載入程序是系統加電後或判運行的第一段軟體代碼。PC機中的引導載入程序由BIOS(其本質就是一段固件程序)和位於硬碟MBR中的OS BootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬體檢測和資源分配後,將硬碟MBR中的BootLoader讀到系統的RAM中,然後將控制權交給OS BootLoader。BootLoader的主要運行任務就是將內核映象從硬碟上讀到 RAM 中,然後跳轉到內核的入口點去運行,也即開始啟動操作系統。 通常,BootLoader是嚴重地依賴於硬體而實現的,特別是在嵌入式世界。因此,在嵌入式世界裡建立一個通用的BootLoader幾乎是不可能的。裂團敏盡管如此,我們仍然可以對BootLoader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。
編輯本段常見bootloader
Redboot
Redboot是Redhat公司隨eCos發布的一個BOOT方案,是一個開源項目。 當前Redboot的最新版本是Redboot-2.0.1,Redhat公司將會繼續支持該項目。 Redboot支持的處理器構架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一個完善的嵌入式系統Boot Loader。 Redboot是在ECOS的基礎上剝離出來的,繼承了ECOS的簡潔、輕巧、可靈活配置、穩定可靠等品質優點。它可以使用X-modem或Y-modem協議經由串口下載,也可以經由乙太網口通過BOOTP/DHCP服務獲得IP參數,使用TFTP方式下載程序映像文件,常用於調試支持和系統初始化(Flash下載更新和網路啟動)。Redboot可以通過串口和乙太網口與GDB進行通信,調試應用程序,甚至能中斷被GDB運行的應用程序。Redboot為管理FLASH映像,映像下載,Redboot配置以及其他如串口、乙太網口提供了一個互動式命令行介面,自動啟動後,REDBOOT用來從TFTP伺服器或者從Flash下載映像文件載入系統的引導腳本文件保存在Flash上。當前支持單板機的移植版特性有: - 支持ECOS,Linux操作系統引導 - 在線讀寫Flash - 支持串列口kermit,S-record下載代碼 - 監控(minitor)命令集:讀寫I/O,內存,寄存器、 內存、外設測試功能等 Redboot是標準的嵌入式調試和引導解決方案,支持幾乎所有的處理器構架以及大量的外圍硬體介面,並且還在不斷地完善過程中。
ARMboot
ARMboot是一個ARM平台的開源固件項目,它特別基於PPCBoot,一個為PowerPC平台上的系統提供類似功能的姊妹項目。鑒於對PPCBoot的嚴重依賴性,已經與PPCBoot項目合並,新的項目為U-Boot。 ARMboot發布的最後版本為ARMboot-1.1.0,2002年ARMboot終止了維護。 ARMboot支持的處理器構架有StrongARM ,ARM720T ,PXA250 等,是為基於ARM或者StrongARM CPU的嵌入式系統所設計的。 ARMboot的目標是成為通用的、容易使用和移植的引導程序,非常輕便地運用於新的平台上。ARMboot是GPL下的ARM固件項目中唯一支持Flash快閃記憶體,BOOTP、DHCP、TFTP網路下載,PCMCLA尋線機等多種類型來引導系統的。特性為: -支持多種類型的FLASH -允許映像文件經由BOOTP、DHCP、TFTP從網路傳輸; -支持串列口下載S-record或者binary文件 -允許內存的顯示及修改 -支持jffs2文件系統等 Armboot對S3C44B0板的移植相對簡單,在經過刪減完整代碼中的一部分後,僅僅需要完成初始化、串口收發數據、啟動計數器和FLASH操作等步驟,就可以下載引導uClinux內核完成板上系統的載入。總得來說,ARMboot介於大、小型Boot Loader之間,相對輕便,基本功能完備,缺點是缺乏後續支持。
U-Boot
U-Boot是由開源項目PPCBoot發展起來的,ARMboot並入了PPCBoot,和其他一些arch的Loader合稱U-Boot。2002年12月17日第一個版本U-Boot-0.2.0發布,同時PPCBoot和ARMboot停止維護。 U-Boot自發布以後已更新6次,最新版本為U-Boot-1.1.1,U-Boot的支持是持續性的。 U-Boot支持的處理器構架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)從名字就可以看出,它是在GPL下資源代碼最完整的一個通用Boot Loader。 U-Boot提供兩種操作模式:啟動載入(Boot loading)模式和下載(Downloading)模式,並具有大型Boot Loader的全部功能。主要特性為: -SCC/FEC乙太網支持 -BOOTP/TFTP引導 -IP,MAC預置功能 -在線讀寫FLASH,DOC, IDE,IIC,EEROM,RTC -支持串列口kermit,S-record下載代碼 -識別二進制、ELF32、pImage格式的Image,對Linux引導有特別的支持 -監控(minitor)命令集:讀寫I/O,內存,寄存器、內存、外設測試功能等 -腳本語言支持(類似BASH腳本) -支持WatchDog,LCD logo,狀態指示功能等 U-Boot的功能是如此之強大,涵蓋了絕大部分處理器構架,提供大量外設驅動,支持多個文件系統,附帶調試、腳本、引導等工具,特別支持Linux,為板級移植做了大量的工作。U-Boot1.1.1版本特別包含了對SA1100和44B0晶元的移植,所以44B0移植主要是針對Board 的移植,包括FLASH、內存配置以及串口波特率等等。U-Boot的完整功能性和後續不斷的支持,使系統的升級維護變得十分方便。
Blob
Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw發布的,是專門為StrongARM 構架下的LART設計的Boot Loader。 Blob的最後版本是blob-2.0.5。 Blob支持SA1100的LART主板,但用戶也可以自行修改移植。 Blob也提供兩種工作模式,在啟動時處於正常的啟動載入模式,但是它會延時 10 秒等待終端用戶按下任意鍵而將 Blob 切換到下載模式。如果在 10 秒內沒有用戶按鍵,則 Blob 繼續啟動 Linux 內核。其基本功能為: 初始化硬體(CPU速度,存儲器,中斷,RS232串口) -引導Linux內核並提供ramdisk - 給LART下載一個內核或者ramdisk -給FLASH片更新內核或者ramdisk -測定存儲配置並通知內核 -給內核提供一個命令行 Blob功能比較齊全,代碼較少,比較適合做修改移植,用來引導Liunx,目前大部分S3C44B0板都用Blob修改移植後來載入uClinux。
Bios-lt
Bios-lt是專門支持三星(Samsung)公司ARM構架處理器S3C4510B的Loader,可以設置CPU/ROM/SDRAM/EXTIO,管理並燒寫FLASH,裝載引導uClinux內核。這是國內工程師申請GNU通用公共許可發布的。 Bios-lt的最新版本是Bios-lt-0.74,另外還提供了S3C4510B的一些外圍驅動。
Bootldr
Bootldr是康柏(Compaq)公司發布的,類似於compaq iPAQ Pocket PC,支持SA1100晶元。它被推薦用來引導Llinux,支持串口Y-modem協議以及jffs文件系統。 Bootldr的最後版本為Bootldr-2.19。

閱讀全文

與boot內核省電代碼相關的資料

熱點內容
怎麼他么怎麼又網路了 瀏覽:649
java會出現內存泄露么 瀏覽:617
蘋果4s鎖屏後怎麼還顯示歌曲 瀏覽:207
鴻蒙系統文件管理哪些可以刪除 瀏覽:550
ubuntuqt創建工程沒有配置文件 瀏覽:126
網站登錄變成其他網站怎麼處理 瀏覽:202
ug數控編程學校有哪些 瀏覽:203
java圖片上傳顯示 瀏覽:402
ppt的文件名後綴 瀏覽:902
ug編程軟體下載到哪個盤 瀏覽:359
炫酷字體APP下載的文件在哪裡 瀏覽:668
廊坊哪裡有少兒編程機構 瀏覽:312
cad新文件能找回來嗎 瀏覽:951
導出手機qq文件到u盤 瀏覽:456
電腦如何打開ppt文件怎麼打開方式 瀏覽:782
魅族鎖定區文件夾 瀏覽:357
刻字cnc怎麼編程 瀏覽:182
學校的網路拓撲結構圖 瀏覽:784
收集100個pdf文件里關鍵詞 瀏覽:594
蘋果關閉4g網路設置 瀏覽:289

友情鏈接