uboot里讀sd卡內容


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協議下載 映象 。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 中的環境變量的操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM