VIVI

1 前言

VIVI 是一種 LINUX 載入器,由韓國 MIZI 公司發表。 VIVI 使用 GCC 2.95.3 for ARM 的交叉編譯器編譯程式碼。 編譯 VIVI 之前,必須先將 arm-linux-gcc-2.95.3.tgz 安裝到 LINUX。 arm-linux-gcc-2.95.3.tgz 可以在網路上找到並下載。


2 執行 VIVI

因為我使用的開發板是用 NANDFLASH 起動。 VIVI 必須先燒錄到 NANDFLASH。 當完成了 VIVI 的燒錄,並起動執行,準備燒錄 LINUX 時,我發現 VIVI 無法在我的開發板上正確的執行 bon part 0 192k 2m 的命令。 VIVI 無法執行磁區分割。所以我走了另一條路,偵錯 VIVI。


3 建立 VIVI 開發環境

為了偵錯 VIVI,我先將自己寫好的支援 TFTP 和 XMODEM 的 BOOTLOADER 燒錄到開發板。 再將編譯好的 VIVI 映像下載到開發板執行。

VIVI 使用 arm linux gcc 2.95.3,必須安裝在 linux 的環境中。因此需要建立 LINUX 的開發環境。 有兩個方式可以用來建立開發環境,一個方式是在 WINXP 上使用 VIRTUALBOX 安裝 UBUNTU 10.10,另一種方式是使用一台實體機器跑 FEDORA 15。

使用 VIRTUALBOX 安裝 UBUNTU 10.10 DESKTOP,WINXP 的硬體平台最好是 INTEL PENTIUM DUALCORE 以上的 CPU,以免兩個作業系統使用同一顆 CPU 而拖慢整體效能。 不過筆者並沒有使用 DUALCORE,而是使用 INTEL P4 2.8G 的 CPU,安裝 UBUNTU 10.10 DESKTOP。 雖然速度慢,至少所有的操作都在同一部電腦上,比較省電。

使用實機跑 LINUX,筆者選用 FEDORA 15,原因是 FEDORA 的資源比 UBUNTU 豐富,而且視窗系統不會挑顯示晶片。 UBUNTU 需要更高階的顯示晶片才能運作順利。


3.1 安裝交叉編譯器

1.以 root 登入 LINUX。
為了從視窗登入 root,FEDORA 15 和 UBUNTU 提供不同的方法。

2.執行 #tar xvzf arm-linux-gcc-2.95.3.tgz -C /。
這個動作會把編譯器安裝到 /Uusr/local/arm/2.95.3/。

3.設定編譯器的路徑。
在 FEDORA 15,將 pathmunge /usr/local/arm/2.95.3/bin 寫入檔案 /etc/profile。
在 UBUNTU 10.10,使用 export PATH=$PATH:/usr/local/arm/2.95.3/bin。


3.2 使用 VIRTUALBOX 安裝 LINUX

使用 VIRTUALBOX 安裝 UBUNTU 10.10 DESKTOP,WINXP 的硬體平台最好是 INTEL PENTIUM DUALCORE 以上的 CPU,以免兩個作業系統使用同一顆 CPU 而拖慢整體效能。 不過筆者並沒有使用 DUALCORE,而是使用 INTEL P4 2.8G 的 CPU,安裝 UBUNTU 10.10 DESKTOP。 雖然速度慢,至少所有的操作都在同一部電腦上,比較省電。

筆者把 VIRTUALBOX 安裝在 C:\ORACLE\VIRTUALBOX。 設定 RAM 為 512 MB,硬碟為固定式 10.26GB。 將 UBUNTU 光碟映像設定到光碟機,開始安裝 UBUNTU,完成後,設定 root 登入。
設定方式是在命令列上執行下列指令。
bookysc@ubuntu~#sudo passwd root
enter password:1234 (<-bookysc password)
enter new password:1234 (<-root password)
retype new password:1234
完成後,重新開機,即可從 root 登入桌面視窗系統。

接下來,點入 VIRTUALBOX 目錄的裝置的安裝 guest additions 項目,準備安裝和 WINXP 的共享目錄。 VIRTUALBOX 會在 UBUNTU 上新增 VBOXADDITIONS 套件。這是一個光碟形式的檔案系統。

開啟自動執行提示,按確定。準備安裝 VBOXADDITIONS 套件。

s3c2440

按確定,執行 VBOXADDITIONS 套件。

s3c2440

VBOXADDITIONS 套件的安裝過程與安裝完成畫面。

s3c2440

回到 WINXP,建立目錄 C:\ORACLE\vmshare,做為 UBUNTU 和 WINXP 之間公享的目錄。這個目錄中的檔案將可以同時由 UBUNTU 和 WINXP 讀寫。

s3c2440

點入 VIRTUALBOX 的裝置的共享資料夾,選擇目錄 C:\ORACLE\vmshare,勾選自動掛載和永久性,按確定。

s3c2440

之後,VIRTUALBOX 的共享資料夾就會出現 C:\ORACLE\vmshare 這個目錄,按確定。

s3c2440

將 VIRTUALBOX 的 UBUNTU 重新開機,打開"位置"的"電腦",進入 /Media 會看到 sf_vmshare,就是 WINXP 上的 C:\ORACLE\vmshare。

s3c2440

回到 WINXP,將 arm-linux-gcc-2.95.3.tgz 和 vivi2440_src.tar.gz 複製到這個目錄。 進入 sf_vmshare,就可以看到這兩個檔案,沒有看到的話,點入視窗的"檢視"的"重新載入",即可看到。

s3c2440

3.3 使用實機安裝 LINUX

使用實機跑 LINUX,筆者選用 FEDORA 15,原因是 FEDORA 的資源比 UBUNTU 豐富,而且視窗系統不會挑顯示晶片。 UBUNTU 需要更高階的顯示晶片才能運作順利。

安裝 arm-linux-gcc-2.95.3.tgz,並解壓縮 vivi2440_src.tar.gz。

設定網路分享功能,連接到 WINXP 的網路芳鄰,以便從 LINUX 取得編譯好的 VIVI 映像。
方法是先在 WINXP 上分享一個目錄,回到 FEDORA 15,打開網路。
接著,再打開網路的檔案的連接伺服器。
接著,伺服器欄位設定 192.168.0.254,即該 WINXP 的 IP。
類型欄位設定 WINDOS 分享。
網域名稱 MSHOME。
使用者名稱 bookysc,這是 WINXP 上的使用者帳號。
使用者名稱 *******,這是 WINXP 上的使用者密碼。

gnuarm

按下"連線",即可出現 WINXP 分享的目錄視窗。 之後,只要將編譯好的 vivi.nand 複製到 bin 目錄,即可由 WINXP 將 vivi.nand 透過 TFTP 上傳開發板。

gnuarm

3.4 修改並編譯 VIVI

修改 VIVI 的部份,有一個地方要先改。
就是修改 arch/s3c2440/head.S,將 bl copy_myself 註解掉,即在 bl 之前加上 @,使成為 @bl copy_myself。因為不需要執行 NANDFLASH 載入動作。
另外,筆者自己寫的 BOOTLAODER 也要修改,BOOTLOADER 的執行位址改成 0x33e00000,並將映像載入位址改成 0x33f00000,而不是原來的 0x30000000。


3.5 下載 VIVI

使用 WINXP 將編譯好的 VIVI 映像上傳到開發板。 WINXP 必需有兩個網路卡,一個接區域網路(192.168.0.245),一個接開發板(192.168.2.1)。開發板的網路 IP 是 192.168.2.2。
方法是
1.起動開發板電源,在 secureCRT 的命令列上執行 tftp。
2.mytftp -i 192.168.2.2 put vivi.nand。
3.在 secureCRT 的命令列上執行 runimage 命令,啟動 VIVI。


4 VIVI 程式碼預覽

檢視 VIVI 程式碼,修改並測試 VIVI。

arch S3C2440 的入口點和內部驅動程式。
driversMTD、NET、SERIAL等驅動程式。
initC 主程式。
lib系統函式庫,包括記憶體管理、字串處理程式等。
mylib此開發板的製造商自己的程式,包括IIC、LCD、VGA等。
net網路應用程式,包括 tftp、ping、nfs、rarp、sntp等。
test測試程式,用來取代 VIVI,測試開發板。

目錄 arch 有檔案 config.in、Makefile、vivilds.in。

config.in 描述 menuconfig 的目錄與項目結構。在執行 make 之前,要先執行 make menuconfig,以決定要編譯的內容。
Makefile用來產生連結 VIVI 映像的連結檔 vivi.lds,指定 VIVI 連結的位址。
vivi.lds.in是連結檔的樣本檔,用來產生 vivi.lds。

目錄 arch/S3C2440 有檔案 head.S、mmu.c、proc.c、nand_read.c、smdk.c、smdk2440_test.c。

head.S 提供 VIVI 的入口點,設定 S3C2440 晶片時脈,執行NANDFLASH 載入器,最後跳躍到 C 語言入口點 main。
mmu.cS3C2440 的記憶體管理器函式庫。
proc.cS3C2440 晶片函式庫,包括時脈函式庫、串列埠鮑率、晶片資訊等,有點雜亂。
nand_read.cNANDFLASH 載入器函式庫,由 head.S 呼叫,將VIVI 從 NANDFLASH 載入到 SDRAM。
smdk.c從 SMDK 剪貼過來的程式碼,包括鮑率參數、分割區參數、XMODEM 參數、網路參數,以及開發板初始函式等。
smdk2440_test.cSMDK 的測試程式,測試晶片的睡眠、中斷、GPIO輸出入等功能。

目錄 arch/def-configs 有檔案 smdk2440。smdk2440 是 VIVI 的內定組態檔。執行 make menuconfig 時,要將其載入。

目錄 drivers 有目錄 mtd、net、serial。

mtd 提供 NORFLASH、NANDFLASH 上層驅動程式和 S3C2440 的 NANDFLASH 下層驅動程式。
net提供 CS8900 和 DM9000X 的驅動程式。
serial提供串列埠函式庫,包括 XMODEM、YMODEM等協定。

目錄 init 有目錄 main.c、version.c。

main.c 是 C 語言入口點,提供VIVI 的初始化程序。
version.c提供 VIVI 的版本資訊。

目錄 lib 有目錄 boot_kernel.c、command.c、ctype.c、exec.c、heap.c、load_file.c 、memory.c、memtst.c、misc.c、printk.c、reset_handle.c、string.c、time.c。

boot_kernel.cLINUX 啟動函式庫,。
command.c命令管理器,可以註冊所有命令。
ctype.c不懂,。
exec.c命令執行器,。
load_file.c使用 XMODEM 下載檔案到 FLASH。
heap.c堆積管理器,用來執行動態記憶體管理。
memory.c記憶體管理函式庫,不同於堆積。
memtst.c記憶體測試函式庫,讀寫測試記憶體。
misc.c其他輔助函式庫,。
printk.c訊息顯示函式庫,會從串列埠將訊息顯示。
reset_handle.c重置處理器,包括軟體中斷重置和硬體重置。
string.c字串處理函式庫,。
time.c時間管理函式庫,。

目錄 mylib 有目錄 vgadriver.c,提供 lcd 和 vga 函式庫。

目錄 net 提供 tcpip 堆疊和 tftp 等網路指令。

net.c網路管理程式,。
eth.c網路封包收發程式,。
bootp.c DHCP 封包處理,。
cmdnet.c網路命令,。
netcmd1.c網路命令二,已由 cmdnet.c 取代,沒有用。
netcmd.c網路命令一,已由 cmdnet.c 取代,沒有用。
nfs.c網路檔案收發程式,基於 TFTP 協定層。
rarp.c網路位址解析協定。
sntp.c簡易網路時間協定。
tftp.cTFTP 檔案傳輸協定。
vsprintf.c偵錯訊息函式庫,。

目錄 scripts 提供 menuconfig 的函式庫,包括目錄項目的屬性等。

目錄 util 提供 LINUX 環境下的工具程式,不屬於 VIVI 映像。

main.c 是 C 語言入口點,提供VIVI 的初始化程序。
version.c提供 VIVI 的版本資訊。

5 VIVI 的蟲

經過了一番的努力,筆者找到 VIVI 的蟲。筆者感覺這隻蟲像是惡意的蟲,不像是 VIVI 應該會有的蟲。
蟲的位置是在 vivi/drivers/mtd/nand/bon.c 的函式 command_part。

原來的程式碼。

01  static void 
02  command_part(int argc, const char **argv)
03  {
04  	int i;
05  	struct mtd_info *mtd;
06  
07  	if (mtd_nget(0) == NULL) {
08  		printk("we have not mtd\n");
09  		return;
10  	}
11      ....
12  }

更正後的程式碼。

01  static void 
02  command_part(int argc, const char **argv)
03  {
04  	int i;
05  	struct mtd_info *mtd;
06  
07  	if ((mtd=mtd_nget(0)) == NULL) {
08  		printk("we have not mtd\n");
09  		return;
10  	}
11      ....
12  }

第七行必須加入 mtd=mtd_nget(0),以給定 mtd 的指標值。否則後面就全部出錯了。


6 使用 XMODEM 燒錄 LINUX

修正 VIVI 後,重新編譯,並將 VIVI 燒錄到開發板。
執行四個動作。
動作一 > bon part 0 192k 2m
這個動作會將整個 flash 切分成三個區域,0~192k,192k~2m,2m~64m。(2m~end)

01  VIVI version 0.1.4 (root@bookysc-VirtualBox) (gcc version 2.95.3 20010315 (release)) #0.1.4 鈭?6??22 23:35:49 CST 2012
01  MMU table base address = 0x33DFC000
01  Succeed memory mapping.
01  0NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9F1208U0B)
01  Found default vivi parameters
01  vga initialized ok!
01  Press Return to start the LINUX now, any other key for vivi
01  type "help" for help.
01  vivi> bon part 0 192k 2m
01  doing partition
01  size = 0
01  size = 196608
01  size = 2097152
01  check bad block
01  part = 0 end = 196608
01  part = 1 end = 2097152
01  part = 2 end = 67108864
01  erase block bad:512
01  800000: is bad
01  k = 0 block = 384
01  part0:
01          offset = 0
01          size = 196608
01          bad_block = 0
01  part1:
01          offset = 196608
01          size = 1900544
01          bad_block = 0
01  part2:
01          offset = 2097152
01          size = 64978944
01          bad_block = 1
01   384

動作二 > load flash vivi x
這個動作會透過 xmodem 將 VIVI 映像下載到開發板,再次的燒寫 VIVI 到 nandflash 0~192 的範圍。

01  vivi> load flash vivi x
01  Ready for downloading using xmodem...
01  Waiting...
01  Downloaded file at 0x30000000, size = 84096 bytes
01  Found block size = 0x00018000
01  Erasing...    ... done
01  Writing...    ... done
01  NAND Written 84096 bytes

動作三 > load flash kernel x
這個動作會透過 xmodem 將 LINUX 核心映像 zImage 下載到開發板,並燒寫到 nandflash 192k~2m 的範圍。

01  vivi> load flash kernel x
01  Ready for downloading using xmodem...
01  Waiting...
01  Downloaded file at 0x30000000, size = 810368 bytes
01  Found block size = 0x000c8000
01  Erasing...    ... done
01  Writing...    ... done
01  NAND Written 810368 bytes

動作四 > load flash root x
這個動作會透過 xmodem 將檔案系統 root_china.yaffs 下載到開發板,並燒寫到 nandflash 2m~64m 的範圍。
完成上述動作後,重新啟動開發板,即可。

01  vivi> load flash root x
01  Ready for downloading using xmodem...
01  Waiting...
01  Downloaded file at 0x30000000, size = 3091968 bytes
01  Found block size = 0x002f4000
01  Erasing...   erase block bad:512
01   ... done
01  Writing...    ... done
01  NAND Written 3091968 bytes
01  vivi> 


7 使用網路燒錄 LINUX

這個開發版也可以使用 VIVI 進行 LINUX 的燒錄。
有四個歩驟。燒錄四步驟之前,先確認 VIVI 的網路功能。
使用 net 命令,檢視 VIVI 的網路參數。
可以看到 VIVI 的 IP 是 192.168.1.111。所以遠端電腦的 IP 必須也是 192.168.1.XXX。XXX 是 1~254 其中的一個號碼。筆者設定自己的電腦是 192.168.1.156。

01  VIVI version 0.1.4 (root@bookysc-VirtualBox) (gcc version 2.95.3 20010315 (release)) #0.1.4 鈭?6??22 23:35:49 CST 2012
01  MMU table base address = 0x33DFC000
01  Succeed memory mapping.
01  0NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9F1208U0B)
01  Found default vivi parameters
01  vga initialized ok!
01  Press Return to start the LINUX now, any other key for vivi
01  type "help" for help.
01  vivi> cd\bin
01  Could not found 'cd\bin' command
01  If you want to konw available commands, type 'help'
01  vivi> net
01  Current Network Configuration
01  Ethernet Address: 00:01:5D:68:7A:0F
01  IP Address: 192.168.1.111
01  Net Mask: 255.255.255.0
01  Gateway: 192.168.1.1
01  Server IP: 192.168.1.222
01  Usage:
01  net ping ipaddr -- Ping function
01  net tftp   -- Download code From TFTP Server
01  net flash  -- Flash downloaded code to part
01  net set    -- Set IP Configuration
01  net show -- Show Current network Configuration
01  net save                        -- Save parameter table to flash memeory
01  net help

使用 net ping 測試遠端電腦是否正常運作。這個指令動作失敗了,不過筆者的電腦端的網路是有反應的,可能是 VIVI 的 ping 只測試一次,所以失敗了就放棄了。

01  vivi> net ping 192.168.1.156
01  dm9000 i/o: 0x19000300, id: 0x90000a46 
01  operating at 100M full duplex mode
01  ARP broadcast 1
01  

在進行網路燒錄 LINUX 之前,必須在遠端點腦上先啟動 TFTP SERVER。
假設所有 LINUX 相關的映像檔都放在 C:\BIN,執行命令 tftpsrv d:c:\bin\。 參數 d:c:\bin\ 是目錄引數 d: 加上路徑字串 c:\bin\,表示要存取檔案的目錄是 c:\bin\。

01  vivi>C:\bin>tftpsrv d:c:\bin\
01  vivi>TFTP Server V1.04
01  vivi>=================
01  vivi>
01  vivi>Usage : tftpsrv [w] [p] [dRootDirectory]
01  vivi>        w    : enable write accesses
01  vivi>        p    : protocol server actions
01  vivi>        d??? : define a root directory
01  vivi>
01  vivi>TFTP Server successful started

燒錄步驟一,執行 net tftp 192.168.1.156 0x30008000 zImage。從遠端電腦的 tftp server 取得檔案 zImage。

01  vivi> net tftp 192.168.1.156 0x30008000 zImage
01  dm9000 i/o: 0x19000300, id: 0x90000a46 
01  operating at 100M full duplex mode
01  TFTP from server 192.168.1.156; our IP address is 192.168.1.111
01  Filename 'zImage'.
01  Load address: 0x30008000
01  Loading: ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  #################################################################
01           #################################################################
01           #############################
01  done
01  Bytes transferred = 810304 (c5d40 hex)
01  

燒錄步驟二,燒錄 LINUX 核心映像 zImage。

01  vivi> net flash kernel
01  Found block size = 0x000c8000
01  Erasing...    ... done
01  Writing...    ... done
01  NAND Written 810304 bytes
01  

燒錄步驟三,執行 net tftp 192.168.1.156 0x30008000 root_china.yaffs。從遠端電腦的 tftp server 取得檔案 root_china.yaffs。

01  vivi> net tftp 192.168.1.156 0x30008000 root_china.yaffs
01  dm9000 i/o: 0x19000300, id: 0x90000a46 
01  operating at 100M full duplex mode
01  TFTP from server 192.168.1.156; our IP address is 192.168.1.111
01  Filename 'root_china.yaffs'.
01  Load address: 0x30008000
01  Loading: ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T ARP broadcast 1
01  T T T T T T T T T T T T T T T T T T T T T #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           #################################################################
01           ###################
01  done
01  Bytes transferred = 3091968 (2f2e00 hex)
01  

燒錄步驟四,燒錄 LINUX 根檔案系統 root_china.yaffs。

01  vivi> net flash root
01  Found block size = 0x002f4000
01  Erasing...   erase block bad:512
01   ... done
01  Writing...    ... done
01  NAND Written 3091968 bytes
01  vivi> 

重新開機後,就可以運行 LINUX。

01  VIVI version 0.1.4 (root@bookysc-VirtualBox) (gcc version 2.95.3 20010315 (release)) #0.1.4 鈭?6??22 23:35:49 CST 2012
01  MMU table base address = 0x33DFC000
01  Succeed memory mapping.
01  0NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9F1208U0B)
01  Found default vivi parameters
01  vga initialized ok!
01  Press Return to start the LINUX now, any other key for vivi
01  Copy linux kernel from 0x00040000 to 0x30008000, size = 0x001c0000 ... copy kernel image from smc 0x00040000,size 0x001c0000,to 0x30008000.
01  done
01  zImage magic = 0x016f2818
01  Setup linux parameters at 0x30000100
01  linux command line is: "noinitrd init=/linuxrc console=ttyS0 root=/dev/mtdblock/2 mac=00:01:5d:68:7a:0f"
01  MACH_TYPE = 362
01  NOW, Booting Linux......
01  Uncompressing Linux.......................................................... done, booting the kernel.
01  Linux version 2.4.18-rmk7-pxa1 (fc@localhost.localdomain) (gcc version 2.95.3 20010315 (release)) #151  10堎 10 10:52:02 CST 2007
01  CPU: ARM/CIRRUS Arm920Tsid(wb) revision 0
01  Machine: Samsung-SMDK2440
01  On node 0 totalpages: 16384
01  zone(0): 16384 pages.
01  zone(1): 0 pages.
01  zone(2): 0 pages.
01  Kernel command line: noinitrd init=/linuxrc console=ttyS0 root=/dev/mtdblock/2 mac=00:01:5d:68:7a:0f
01  mac addr:00:01:5d:68:7a:0f
01  Console: colour dummy device 80x30
01  Calibrating delay loop... 199.88 BogoMIPS
01  Memory: 64MB = 64MB total
01  Memory: 62528KB available (1541K code, 325K data, 72K init)
01  Dentry-cache hash table entries: 8192 (order: 4, 65536 bytes)
01  Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
01  Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
01  Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
01  Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
01  POSIX conformance testing by UNIFIX
01  Linux NET4.0 for Linux 2.4
01  Based upon Swansea University Computer Society NET3.039
01  Initializing RT netlink socket
01  CPU clock = 400.000 Mhz, HCLK = 100.000 Mhz, PCLK = 50.000 Mhz
01  Initializing S3C2440 buffer pool for DMA workaround
01  check your kernel config.
01  USB Function Character Driver Interface - 0.5, (C) 2001, Extenex Corp.
01  usbctl: Opened for usb-char
01  usbctl: Started for usb-char
01  Starting kswapd
01  devfs: v1.10 (20020120) Richard Gooch (rgooch@atnf.csiro.au)
01  devfs: boot_options: 0x1
01  yaffs May 31 2007 14:12:01 Installing. 
01  ttyS%d0 at I/O 0x50000000 (irq = 52) is a S3C2440
01  ttyS%d1 at I/O 0x50004000 (irq = 55) is a S3C2440
01  ttyS%d2 at I/O 0x50008000 (irq = 58) is a S3C2440
01  Console: switching to colour frame buffer device 80x30
01  Installed S3C2440 frame buffer
01  pty: 256 Unix98 ptys configured
01  s3c2440-ts initialized
01  S3C2440 Real Time Clock Driver v0.1
01  block: 128 slots per queue, batch=32
01  loop: loaded (max 8 devices)
01   I/O: d0000300, VID: 90000a46 
01  SCSI subsystem driver Revision: 1.00
01  request_module[scsi_hostadapter]: Root fs not mounted
01  UDA1341 audio driver initialized
01  NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)
01  NAND_ECC_NONE selected by board driver. This is not recommended !!
01  Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
01  0x00000000-0x00030000 : "boot"
01  0x00030000-0x00200000 : "kernel"
01  0x00200000-0x03e00000 : "rootfs"
01  usb.c: registered new driver usbdevfs
01  usb.c: registered new driver hub
01  usb-ohci.c: USB OHCI at membase 0xe9000000, IRQ 26
01  usb.c: new USB bus registered, assigned bus number 1
01  hub.c: USB hub found
01  hub.c: 2 ports detected
01  usb.c: registered new driver hid
01  hid-core.c: v1.8 Andreas Gal, Vojtech Pavlik 
01  hid-core.c: USB HID support drivers
01  Initializing USB Mass Storage driver...
01  usb.c: registered new driver usb-storage
01  USB Mass Storage support registered.
01  mice: PS/2 mouse device common for all mice
01  NET4: Linux TCP/IP 1.0 for NET4.0
01  IP Protocols: ICMP, UDP, TCP
01  IP: routing cache hash table of 512 buckets, 4Kbytes
01  TCP: Hash tables configured (established 4096 bind 4096)
01  NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
01  NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
01  cramfs: wrong magic
01  FAT: bogus logical sector size 65535
01  yaffs: dev is 7938 name is "1f:02"
01  yaffs: Attempting MTD mount on 31.2, "1f:02"
01  block 385 is bad
01  VFS: Mounted root (yaffs filesystem).
01  Mounted devfs on /dev
01  Freeing init memory: 72K
01  hub.c: USB new device connect on bus1/2, assigned device number 2
01  usb.c: USB device not accepting new address=2 (error=-110)
01  hub.c: USB new device connect on bus1/2, assigned device number 3
01  usb.c: USB device not accepting new address=3 (error=-110)
01  mount /etc as ramfs
01  re-create the /etc/mtab entries
01  init started:  BusyBox v1.00-pre2 (2007.07.06-03:31+0000) mult?call binary
01  SIOCDELRT: No such process
01  mount: Mounting ramfs on /.kde failed: No such file or directory
01  /etc/init.d/rcS: 83: qtopia: not foun
01  
01  Please press Enter to activate this console. 
01  
01  
01  BusyBox v1.00-pre2 (2007.07.06-03:31+0000) Built-in shell (ash)
01  Enter 'help' for a list of built-in commands.
01  
01  -sh: can't access tty; job control turned off
01  #