2012年3月13日 星期二

u-boot 安裝筆記

LinkStation HD-HG300LAN 在原廠的環境 kernel 2.4.20 下安裝 u-boot:

先看一下 Flash ROM 的配置:
0xFFC00000, 3MB, firmimg.bin
0xFFF00000, 448KB, Boot loader

把電腦 IP 設定為 192.168.11.149,再把 LinkStation IP 設定為 192.168.11.150
(配合 U-Boot 1.2.0 環境變數的預設值)

DOS 視窗執行 nc:
C:\>nc -v -v -u -p 6666 192.168.11.150 6666
先把 Boot loader 用 u-boot 置換。
再刷含 kernel 2.4.33 與 telnet 的 firmimg.bin ,可於 EM Mode 登入系統救援。(詳見 Uboot firmimg.bin ppc)
最後別忘了比較一下 Flash 與檔案內容是否一致。

LinkStation 執行:
$ wget http://downloads.buffalo.nas-central.org/LSHG_PPC/Bootloader/Uboot/Precompiled/u-boot-lsppchg-flash-1.2.0-r2.bin $ wget http://downloads.buffalo.nas-central.org/ALL_LS_KB_PPC/Bootloader/UBoot/FirmimgBins/linux-2.4.33.3-list.mg.2-v3/firmimg.bin $ dd if=u-boot-lsppchg-flash-1.2.0-r2.bin of=/dev/mtdblock1 bs=1k $ cmp u-boot-lsppchg-flash-1.2.0-r2.bin /dev/mtd1 $ dd if=firmimg.bin of=/dev/mtdblock0 bs=1k $ cmp firmimg.bin /dev/mtd0 $ reboot
reboot 後 DOS 視窗輸出:
C:\>nc -v -v -u -p 6666 192.168.11.150 6666 192.168.11.150: inverse host lookup failed: h_errno 11004: NO_DATA (UNKNOWN) [192.168.11.150] 6666 (?) open U-Boot 1.2.0 (Apr 10 2007 - 19:13:32) LinkStation HG / KuroBox HG stdin : nc stdout: nc stderr: nc IDE: Bus 0: OK Device 0: Model: SAMSUNG HD300LD Firm: WK100-12 Ser#: S0A4J1TL527572 Type: Hard Disk Supports 48-bit addressing Capacity: 286168.1 MB = 279.4 GB (586072368 x 512) Boot in 01 seconds ('s' to stop)... Loading 0:1:boot/uImage ** Unable to read "boot/uImage" from ide 0:1 ** ** Unable to read "boot/kuroboxHG.dtb" from ide 0:1 ** ## Booting image at ffc00000 ... ******* Product Information ******* ---------------------------------- Product Name: HD-HGLAN(IEMITSU) VER: 2.08 Date: 2006/2/9 12:0:6 ---------------------------------- Verifying checksum... OK Uncompressing kernel...done. Loading Ramdisk at 0x07C6C000, end 0x07E6E31A ... OK Booting the kernel
#$%&@,出現錯誤訊息,想說死定了...
還是研究一下文件,看是發生啥事。

拜讀文件後發現:
u-boot 如果沒有被暫停,會執行 "boot" 指令。
(按 "s" 再按 "Enter" 即會暫停,出現 u-boot 的提示符號 "=>")

使用 u-boot 預設變數轉換 "boot" 指令後就是:
=> run echo Loading 0:1:boot/uImage; ext2load ide 0:1 800000 boot/uImage; ext2load ide 0:1 7f0000 boot/kuroboxHG.dtb; ...
原來 u-boot 預設值就是嘗試從 /dev/hda1 的 /boot 載入 kernel image 檔。
原廠系統當然沒有 kernel image,所以才會出現錯誤訊息。

所以我們只要執行 run flboot 就可以進入原來的 /dev/hda1 系統了
( run flboot 是讀取 ffc00000 的firmimg.bin )
=> run flboot 或者 => setenv bootargs root=/dev/hda1;bootm ffc00000
指令
boot    - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory 
ext2load- load binary file from a Ext2 filesystem and into memory at the specified address.  

變數
bootcmd=run bootcmd1
bootcmd1=run hdboot;run flboot
hdboot=run hdload boothd
flboot=setenv bootargs root=/dev/hda1;bootm ffc00000 
hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile};ext2load ide ${hdpart} 7f0000 boot/kuroboxHG.dtb
hdpart=0:1
hdfile=boot/uImage
ldaddr=800000

切換到 /dev/hda3,kernel 2.4 系統的指令
=> setenv bootargs root=/dev/hda3;bootm ffc00000
升級 kernel 2.6 後,預設從 /dev/hda3 啟動,則要修改變數:
=> hdpart=0:3 => boothd= 'setenv bootargs root=/dev/hda3;bootm ${ldaddr}' => saveenv
進入 EM Mode,使用 "mount_disk" 指令可掛載 hda1和 hda3。
$ mount_disk
參考文件:
Linkstation上U-BOOT 
U-boot Default Environmental Variables and Values 
U-boot bootloader
Kurobox support in stock 2.6 kernels
Uboot firmimg.bin ppc
Information/HGFlashROM
使用檔案: 
nc111nt.zip 
u-boot-lsppchg-flash-1.2.0-r2.bin 
firmimg.bin 

沒有留言:

張貼留言