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