uboot裡讀sd卡內容

來源:互聯網
上載者:User

1. sd卡升級命令

mmcinit 0

fatload mmc 0:1 0 uzImage.bin 80000

fatload mmc 0:1 1000000 initrd.gz 580000

bootm 0


2.
U-Boot指令碼

可以儲存成nfs.script,放在tftp的根目錄

setenv bootargs mem=214M root=/dev/nfsroot nfsroot=10.1.1.2:/home/nfs_android ip=dhcp rw console=ttyS0,115200n8 androidboot.console=ttyS0 init=/init lcdid=1 lpj=750000

如何載入呢

setenv bootcmd setenv ipaddr 10.1.1.3/;setenv
serverip 10.1.1.2

/

;setenv gatewayip
10.1.1.1

/

;tftpboot 02000000 nfs.script

/

;autoscr

這裡/;把多個命令組成一個命令。

這裡bootcmd引用bootargs

U-Boot允許儲存命令序列在純文字檔案中,用命令mkimage將該檔案轉換成指令碼映像,該映像可用U-Boot命令autoscr執行。

轉換成映像檔案的方法列出如下:

bash$ mkimage -T script -C none -n 'Demo Script File' -d
setenv-commands setenv.img

Image Name: Demo Script File

Created: Mon Jun 6 13:33:14 2005

Image Type: PowerPC Linux Script (uncompressed)

Data Size: 1147 Bytes = 1.12 kB = 0.00 MB

Load Address: 0x00000000

Entry Point: 0x00000000

Contents:

Image 0: 1139 Bytes = 1 kB = 0 MB

在目標板上,使用者可以像其他映像檔案一樣使用tftp這樣的命令進行裝載,然後,使用命令autoscr執行該映像,方法如下:

=> tftp 100000 /tftpboot/TQM860L/setenv.img

 

3. tftpboot,bootm,tftp

bootm是載入並啟動作業系統鏡像和檔案系統,第1個參數是核心的鏡像地址,RAM地址或者flash地址。第二個參數是可選,initrd映象的地址。同時把ramdisk的大小和地址告訴核心。

tftp是下載到指定地址。

tftpboot通過tftp協議下載
verdana,geneva;">映象
。tftpboot [loadaddress] [filename]


 

附:http://blog.chinaunix.net/u3/94312/showart_1923637.html

U-boot的環境變數: bootcmd 和bootargs

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=[;
  := :[,]
  :=
[@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=64M
init=/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 rw
rootfstype=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非常非常的靈活,所以設定的方法有很多中形式,具體的還應該根據你的平台具體的情況來設定。

 



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

中的環境變數的操作。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.