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 套件。


按确定,执行 VBOXADDITIONS 套件。


VBOXADDITIONS 套件的安装过程与安装完成画面。


回到 WINXP,建立目录 C:\ORACLE\vmshare,做为 UBUNTU 和 WINXP 之间公享的目录。这个目录中的档案将可以同时由 UBUNTU 和 WINXP 读写。


点入 VIRTUALBOX 的装置的共享文件夹,选择目录 C:\ORACLE\vmshare,勾选自动挂载和永久性,按确定。


之后,VIRTUALBOX 的共享文件夹就会出现 C:\ORACLE\vmshare 这个目录,按确定。


将 VIRTUALBOX 的 UBUNTU 重新启动,打开”位置”的”计算机”,进入 /Media 会看到 sf_vmshare,就是 WINXP 上的 C:\ORACLE\vmshare。


回到 WINXP,将 arm-linux-gcc-2.95.3.tgz 和 vivi2440_src.tar.gz 复制到这个目录。 进入 sf_vmshare,就可以看到这两个档案,没有看到的话,点入窗口的”检视”的”重载”,即可看到。


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 上的用户密码。


按下”联机”,即可出现 WINXP 分享的目录窗口。 之后,只要将编译好的 vivi.nand 复制到 bin 目录,即可由 WINXP 将 vivi.nand 透过 TFTP 上传开发板。


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 的入口点和内部驱动程序。
drivers MTD、NET、SERIAL等驱动程序。
init C 主程序。
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.c S3C2440 的内存管理器函式库。
proc.c S3C2440 芯片函式库,包括频率函式库、串行端口鲍率、芯片信息等,有点杂乱。
nand_read.c NANDFLASH 加载器函式库,由 head.S 呼叫,将VIVI 从 NANDFLASH 载入到 SDRAM。
smdk.c 从 SMDK 剪贴过来的程序代码,包括鲍率参数、分割区参数、XMODEM 参数、网络参数,以及开发板初始函式等。
smdk2440_test.c SMDK 的测试程序,测试芯片的睡眠、中断、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.c LINUX 启动函式库。
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.c TFTP 文件传输协定。
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。
原来的程序代码。

static void 
command_part(int argc, const char **argv)
{
    int i;
    struct mtd_info *mtd;

    if (mtd_nget(0) == NULL) {
        printk("we have not mtd\n");
        return;
    }
    ....
}

更正后的程序代码。

static void 
command_part(int argc, const char **argv)
{
    int i;
    struct mtd_info *mtd;

    if ((mtd=mtd_nget(0)) == NULL) {
        printk("we have not mtd\n");
        return;
    }
    ....
}

第七行必须加入 mtd=mtd_nget(0),以给定 mtd 的指标值。否则后面就全部出错了。


6 使用 XMODEM 刻录 LINUX

修正 VIVI 后,重新编译,并将 VIVI 刻录到开发板。
执行四个动作。
动作一 > bon part 0 192k 2m
这个动作会将整个 flash 切分成三个区域,0~192k,192k~2m,2m~64m。(2m~end)

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
MMU table base address = 0x33DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9F1208U0B)
Found default vivi parameters
vga initialized ok!
Press Return to start the LINUX now, any other key for vivi
type "help" for help.
vivi> bon part 0 192k 2m
doing partition
size = 0
size = 196608
size = 2097152
check bad block
part = 0 end = 196608
part = 1 end = 2097152
part = 2 end = 67108864
erase block bad:512
800000: is bad
k = 0 block = 384
part0:
        offset = 0
        size = 196608
        bad_block = 0
part1:
        offset = 196608
        size = 1900544
        bad_block = 0
part2:
        offset = 2097152
        size = 64978944
        bad_block = 1
384

动作二 > load flash vivi x

这个动作会透过 xmodem 将 VIVI 映像下载到开发板,再次的烧写 VIVI 到 nandflash 0~192 的范围。

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

动作三 > load flash kernel x
这个动作会透过 xmodem 将 LINUX 核心映像 zImage 下载到开发板,并烧写到 nandflash 192k~2m 的范围。

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

动作四 > load flash root x
这个动作会透过 xmodem 将文件系统 root_china.yaffs 下载到开发板,并烧写到 nandflash 2m~64m 的范围。
完成上述动作后,重新启动开发板,即可。

vivi> load flash root x
Ready for downloading using xmodem...
Waiting...
Downloaded file at 0x30000000, size = 3091968 bytes
Found block size = 0x002f4000
Erasing...   erase block bad:512
... done
Writing...    ... done
NAND Written 3091968 bytes
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。

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

使用 net ping 测试远程计算机是否正常运作。这个指令动作失败了,不过笔者的计算机端的网络是有反应的,可能是 VIVI 的 ping 只测试一次,所以失败了就放弃了。

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

在进行网络刻录 LINUX 之前,必须在远程点脑上先启动 TFTP SERVER。
假设所有 LINUX 相关的映像档都放在 C:\BIN,执行命令 tftpsrv d:c:\bin\。 参数 d:c:\bin\ 是目录自变量 d: 加上路径字符串 c:\bin\,表示要存取档案的目录是 c:\bin\。

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

刻录步骤一,执行 net tftp 192.168.1.156 0x30008000 zImage。从远程计算机的 tftp server 取得档案 zImage。

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

刻录步骤二,刻录 LINUX 核心映像 zImage。

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

刻录步骤三,执行 net tftp 192.168.1.156 0x30008000 root_china.yaffs。从远程计算机的 tftp server 取得档案 root_china.yaffs。

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

刻录步骤四,刻录 LINUX 根文件系统 root_china.yaffs。

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

重新启动后,就可以运行 LINUX。

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

Please press Enter to activate this console. 


BusyBox v1.00-pre2 (2007.07.06-03:31+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

-sh: can't access tty; job control turned off
#     

作者:陈育书 wildboy
来源:http://www.formosaos.url.tw/myarm/vivi.html
状态: 已编辑,未校对。