bootcmd 和bootargs

看到這個標題,可能覺得這個并沒有什么的,其實不然,編好了u-boot了,但是如何來使用確不是那么簡單的,想當初我將uboot制作出來后以為全部都搞定了,屁顛屁顛的燒到板子上后可系統就是起不來,為什么了,折騰了很久以后才發現是u-boot的環境變量設置錯誤,在后來的工作中,我發現一些有一定經驗的人在這方面也是模模糊糊的扯不清,所以這里要討論一下。

?

???u-boot的環境變量是使用u-boot的關鍵,它可以由你自己定義的,但是其中有一些也是大家經常使用,約定熟成的,有一些是u-boot自己定義的,更改這些名字會出現錯誤,下面的表中我們列出了一些常用的環境變量:

?

環境變量

描述

bootdelay

?執行自動啟動的等候秒數

baudrate

?串口控制臺的波特率

netmask

?以太網接口的掩碼

ethaddr

?以太網卡的網卡物理地址

bootfile

?缺省的下載文件

bootargs

?傳遞給內核的啟動參數

bootcmd

?自動啟動時執行的命令

serverip

?服務器端的ip地址

ipaddr

?本地ip地址

stdin

?標準輸入設備

stdout

?標準輸出設備

stderr

?標準出錯設備

?

?

上面只是一些最基本的環境變量,請注意,板子里原本是沒有環境變量的,u-boot的缺省情況下會有一些基本的環境變量,在你執行了saveenv之后,環境變量會第一次保存到flash中,之后你對環境變量的修改,保存都是基于保存在flash中的環境變量的操作。

?

???U-boot的環境變量值得注意的有兩個:bootcmdbootargs

u??????bootcmd

???前面有說過bootcmd是自動啟動時默認執行的一些命令,因此你可以在當前環境中定義各種不同配置,不同環境的參數設置,然后設置bootcmd為你經常使用的那種參數。

u??????bootargs

???bootargs是環境變量中的重中之重,甚至可以說整個環境變量都是圍繞著bootargs來設置的。bootargs的種類非常非常的多,我們平常只是使用了幾種而已,感興趣的可以看看這篇文章說的很全:http://blog.chinaunix.net/u2/79570/showart_1675071.html。bootargs非常的靈活,內核和文件系統的不同搭配就會有不同的設置方法,甚至你也可以不設置bootargs,而直接將其寫到內核中去(在配置內核的選項中可以進行這樣的設置),正是這些原因導致了bootargs使用上的困難。

???下面介紹一下bootargs常用參數,bootargs的種類非常的多,而且隨著kernel的發展會出現一些新的參數,使得設置會更加靈活多樣。

?

A.?root

用來指定rootfs的位置,?常見的情況有:

???root=/dev/ram?rw??

???root=/dev/ram0?rw

?請注意上面的這兩種設置情況是通用的,我做過測試甚至root=/dev/ram1?rw和root=/dev/ram2?rw也是可以的,網上有人說在某些情況下是不通用的,即必須設置成ram或者ram0,但是目前還沒有遇到,還需要進一步確認,遇到不行的時候可以逐一嘗試。

?

???root=/dev/mtdx?rw

???root=/dev/mtdblockx?rw

???root=/dev/mtdblock/x?rw

???root=31:0x

?

上面的這幾個在一定情況下是通用的,當然這要看你當前的系統是否支持,不過mtd是字符設備,而mtdblock是塊設備,有時候你的挨個的試到底當前的系統支持上面那種情況下,不過root=/dev/mtdblockx?rw比較通用。此外,如果直接指定設備名可以的話,那么使用此設備的設備號也是可以的。

?

???root=/dev/nfs

在文件系統為基于nfs的文件系統的時候使用。當然指定root=/dev/nfs之后,還需要指定nfsroot=serverip:nfs_dir,即指明文件系統存在那個主機的那個目錄下面。

?

B.?rootfstype

???這個選項需要跟root一起配合使用,一般如果根文件系統是ext2的話,有沒有這個選項是無所謂的,但是如果是jffs2,squashfs等文件系統的話,就需要rootfstype指明文件系統的類型,不然會無法掛載根分區.

?

C.console

console=tty?使用虛擬串口終端設備.

console=ttyS[,options]?使用特定的串口,options可以是這樣的形式bbbbpnx,這里bbbb是指串口的波特率,p是奇偶校驗位,n是指的bits。

console=ttySAC[,options]?同上面。

?

看你當前的環境,有時用ttyS,有時用ttySAC,網上有人說,這是跟內核的版本有關,2.4用ttyS,2.6用ttySAC,但實際情況是官方文檔中也是使用ttyS,所以應該是跟內核版本沒有關聯的。可以查看Documentation/serial-console.txt找到相關描述。

?

D.?mem

mem=xxM指定內存的大小,不是必須的

?

E.?ramdisk_size

ramdisk=xxxxx??????????不推薦??

ramdisk_size=xxxxx??推薦

上面這兩個都可以告訴ramdisk驅動,創建的ramdisk的size,默認情況下是4m(s390默認8M),你可以查看Documentation/ramdisk.txt找到相關的描述,不過ramdisk=xxxxx在新版的內核都已經沒有提了,不推薦使用。

?

F.?initrd,?noinitrd

當你沒有使用ramdisk啟動系統的時候,你需要使用noinitrd這個參數,但是如果使用了的話,就需要指定initrd=r_addr,size,?r_addr表示initrd在內存中的位置,size表示initrd的大小。

?

G.?init

init指定的是內核啟起來后,進入系統中運行的第一個腳本,一般init=/linuxrc,或者init=/etc/preinit,preinit的內容一般是創建console,null設備節點,運行init程序,掛載一些文件系統等等操作。請注意,很多初學者以為init=/linuxrc是固定寫法,其實不然,/linuxrc指的是/目錄下面的linuxrc腳本,一般是一個連接罷了。

?

H.?mtdparts

mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)

要想這個參數起作用,內核中的mtd驅動必須要支持,即內核配置時需要選上Device?Drivers?--->?Memory?Technology?Device?(MTD)?support?--->?Command?line?partition?table?parsing

?

mtdparts的格式如下:

mtdparts=[;<?font>

?:=?:[,]

?:=?[@offset][][ro]

??:=?unique?id?used?in?mapping?driver/device

???:=?standard?linux?memsize?OR?"-"?to?denote?all?remaining?space

???:=?(NAME)

因此你在使用的時候需要按照下面的格式來設置:

mtdparts=mtd-id:@(),@()

這里面有幾個必須要注意的:

a.?mtd-id必須要跟你當前平臺的flash的mtd-id一致,不然整個mtdparts會失效

b.?size在設置的時候可以為實際的size(xxM,xxk,xx),也可以為''-''這表示剩余的所有空間。

舉例:

假設flash的mtd-id是sa1100,那么你可以使用下面的方式來設置:

mtdparts=sa1100:-????→?只有一個分區

mtdparts=sa1100:256k(ARMboot)ro,-(root)?→?有兩個分區

可以查看drivers/mtd/cmdlinepart.c中的注釋找到相關描述。

?

I.?ip

指定系統啟動之后網卡的ip地址,如果你使用基于nfs的文件系統,那么必須要有這個參數,其他的情況下就看你自己的喜好了。設置ip有兩種方法:

?ip?=?ip?addr

?ip=ip?addr:server?ip?addr:gateway:netmask::which?netcard:off

這兩種方法可以用,不過很明顯第二種要詳細很多,請注意第二種中which?netcard是指開發板上的網卡,而不是主機上的網卡。

?

說完常見的幾種bootargs,那么我們來討論平常我經常使用的幾種組合:

1).假設文件系統是ramdisk,且直接就在內存中,bootargs的設置應該如下:

setenv?bootargs?‘initrd=0x32000000,0xa00000?root=/dev/ram0?console=ttySAC0?mem=64Minit=/linuxrc’

?

2).假設文件系統是ramdisk,且在flash中,bootargs的設置應該如下:

setenv?bootargs?‘mem=32M?console=ttyS0,115200?root=/dev/ram?rw?init=/linuxrc’

注意這種情況下你應該要在bootm命令中指定ramdisk在flash中的地址,如bootm?kernel_addr?ramdisk_addr?(fdt_addr)

?

3).假設文件系統是jffs2類型的,且在flash中,bootargs的設置應該如下

setenv?bootargs?‘mem=32M?console=ttyS0,115200?noinitrd?root=/dev/mtdblock2?rwrootfstype=jffs2?init=/linuxrc’

?

4).假設文件系統是基于nfs的,bootargs的設置應該如下

setenv?bootargs‘noinitrd?mem=64M?console=ttySAC0?root=/dev/nfs?nfsroot=192.168.0.3:/nfs?ip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off’

或者

setenv?bootargs‘noinitrd?mem=64M?console=ttySAC0?root=/dev/nfs?nfsroot=192.168.0.3:/nfs?ip=192.168.0.5’

?

?

上面就是我們經常使用的幾種bootargs的組合,老實說,bootargs非常非常的靈活,所以設置的方法有很多中形式,具體的還應該根據你的平臺具體的情況來設置

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

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

相關文章

名詞解釋(容器、并發,插件,腳本)及程序對象的創建和注釋文檔

一、專有名詞 1‘  容器 創建一種對象類型&#xff0c;持有對其他對象的引用&#xff0c;被稱為容器的新對象。在任何時候都可以擴充自己以容納置于其中的所有東西。 java在其標準類庫中包含了大量的容器。在某些類庫中&#xff0c;一兩個通用容器足以滿足所有的需要&#xf…

POJ 1696 Space Ant 極角排序(叉積的應用)

題目大意&#xff1a;給出n個點的編號和坐標&#xff0c;按逆時針方向連接著n個點&#xff0c;按連接的先后順序輸出每個點的編號。 題目思路&#xff1a;Cross&#xff08;a,b&#xff09;表示a,b的叉積&#xff0c;若小于0&#xff1a;a在b的逆時針方向&#xff0c;若大于0a在…

C#模板匹配創建模板與查找模板函數

class ShapeModulInspect{/// <summary>/// /// </summary>/// <param name="InspectImg">圖像</param>/// <param name="ModulRoi">ROI</param>/// <param name="AngleStart">起始角</param>/…

SuperMap iDesktop之導入數據

SuperMap作為一個平臺軟件有自己的數據格式&#xff0c;現要將ESRI的SHP數據導入到SuperMap的udb數據庫中&#xff0c;可以完成導入&#xff0c;但也不得不說幾點問題。 下面是ArcGIS中批量導入SHP的操作界面。 比較分析 &#xff08;1&#xff09;界面簡潔性 明顯ArcGIS要簡潔…

Ajax教程

AJAX AJAX Asynchronous JavaScript and XML&#xff08;異步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的編程語言&#xff0c;而是一種使用現有標準的新方法。 AJAX 是與服務器交換數據并更新部分網頁的藝術&#xff0c;在不重新加載整個頁面的情況下。 AJAX 是一種在…

dm365 resize

DM368支持視頻的縮放功能&#xff0c;例如DM365可以編碼一個720P的&#xff0c;同時可以以任意分辨率&#xff08;小于720P的分辨率&#xff09;輸出。其中有兩種模式&#xff1a;IMP_MODE_SINGLE_SHOT&#xff0c;IMP_MODE_CONTINUOUS. 在用dm365的時候&#xff0c;用resizer…

SSH

http://www.cnblogs.com/hoobey/p/5512924.html struts --- 控制器 hibernate 操作數據庫 spring 解耦 Struts 、 spring 、 Hibernate 在各層的作用 1 &#xff09; struts 負責 web 層 . ActionFormBean 接收網頁中表單提交的數據&#xff0c;然后通過 Action 進…

C#halcon點擬合圓形函數

public bool FitCircle(double[] X, double[] Y, out double RcX, out double RcY, out double R){t

MyBatis 實踐 -配置

MyBatis 實踐標簽&#xff1a; Java與存儲 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名稱隨意),其配置內容和順序例如以下: properties : 屬性(文件)載入/配置settings : 全局配置參數typeAliases : 定義類型別名typeHandlers : 類型處理器objectF…

DM365視頻處理流程/DM368 NAND Flash啟動揭秘

DM365的視頻處理涉及到三個相關處理器&#xff0c;分別是視頻采集芯片、ARM處理器和視頻圖像協處理器&#xff08;VICP&#xff09;&#xff0c;整個處理流程由ARM核協調。視頻處理主要涉及三個處理流程&#xff0c;分別是視頻采集、視頻編碼和對編碼后的視頻的處理&#xff0c…

系統的Drawable(四)-LayerListDrawable

系統的Drawable(四)-LayerListDrawable 學習自 https://blog.csdn.net/u014695188/article/details/52815444 LayerListDrawable 漫談 使用layer-list可以將多個drawable按照順序層疊在一起顯示&#xff0c;默認情況下&#xff0c;所有的item中的drawable都會自動根據它附上vie…

圖像處理:鏡頭頻率(衍射極限) 和 相機采樣:顯微鏡的采樣定理

采樣定理大家都知道&#xff0c;相信不用多說。 我自己寫下來給自己看。 下面&#xff0c;我總結 大家平時照相的鏡頭或者顯微鏡的物鏡的情況下&#xff1a; 采樣頻率是指圖像在數字化的時候的過程&#xff0c;實際上就是我們相機感光元件CCD或者CMOS的一個個小像元把模擬的連續…

【練習】使用事務控制語句

1.使用show engines 命令確定系統中是否有任何事務存儲引擎可用以及哪個是默認引擎。 2.使用set autocommit 語句啟用autocommit。 3.為使用world數據庫做準備&#xff0c;確認city表使用事務存儲引擎innodb。 4.使用start transaction 語句顯式啟動新事務。 5.刪除一行。 6.使…

老男孩Day1作業(一):編寫登錄接口

要求&#xff1a;編寫登錄接口 1. 輸入用戶名和密碼 2. 認證成功后顯示歡迎信息 3. 輸錯三次后鎖定 1&#xff09;編寫思路 編寫思路參考下面GitHub鏈接中的流程圖 https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作業/Day1_作業_登錄接口…

hashcat源碼分析1

typedef struct hash{void *digest;salt_t *salt;void *esalt;void *hook_salt; // additional salt info only used by the hook (host)int cracked;hashinfo_t *hash_info;char *pw_buf;int pw_len;} hash_t;一.1. 信號 函數&a…

Davinci及U-boot的一些介紹

TI推出的數字多媒體平臺DM系列&#xff0c;集成了ARM與DSP雙核處理器&#xff1a;DSP處理器運行DSP/BIOS操作系統&#xff0c;負責音視頻編解碼算法以及其他圖形處理算法&#xff1b;ARM處理器運行MontaVista Linux操作系統&#xff0c;負責設備初始化、用戶圖形界面管理。ARM處…

像素越多越好?像元的面積越小越好?為何底大一級壓死人?

像素越多越好&#xff1f;像素點的面積越小越好&#xff1f;為何底大一級壓死人&#xff1f; 像素是&#xff1a;圖像最小單元的數量&#xff0c;例如6000*4000&#xff0c;像素數量就是24*10^6。 像素太少當然圖像就看不見了&#xff0c;看不清晰了。 但是現在幾乎所有手機和相…

設計模式(5)--工廠模式

//5.工廠模式 //ver1 //回顧簡單工廠模式 class OperationFactory { public:static Operation createOperation(char chOper){Operation * op NULL;switch(chOper){case :op new OperationAdd();break;case -:op new OperationSub();break;default:break;}return *op;} };vo…

對于多屬性類型系統的數據庫設計

主要是以下幾類系統: 生活信息系統, 內容:小, 屬性:大,電商商品系統, 內容:大, 屬性:大,風控征信系統, 內容:小, 屬性:大,新聞系統, 內容:大, 屬性:小,這些系統共同的特點, 都是在主體內容上會攜帶多個屬性, 并且屬性需要隨時能調整, 并且要求能兼容舊屬性, 還需要頻繁的通過屬…

linux環境部署常用命令

1.  查看當前所屬目錄&#xff1a;pwd2.  回到上級目錄&#xff1a;cd ../回到上兩級目錄&#xff1a;cd ../ ../3.  查看當前目錄下有哪些文件&#xff1a;ls4.  查看最后100行日志&#xff1a;tail -100 catalina.out動態重看操作日志&#xff1a;tail -f catalina.o…