1. include/configs/s 3c 2410 中的 CONFIG_COMMANDS 中加入:
lCFG_CMD_USB |\
lCFG_CMD_FAT |\

2. 并在文件中加入以下设定:
l#define CONFIG_USB_OHCI
l#define CONFIG_USB_STORAGE
l#define CONFIG_USB_KEYBOARD
l#define CONFIG_DOS_PARTITION
l#defineCFG_DEVICE_DEREGISTER
l#define CONFIG_SUPPORT_VFAT
l#define LITTLEENDIAN

3. 这时 usb start usb info 等功能正常,而其它一些功能不正常。

4. 功能 fatls 不正常,修改 fs/fat/fat.c
l
没有把 VFAT UNICODE 字符串转换过来,加入 UNICODE 字符串转换函数。 Uni2ansi () , 增加 slot2str() cp936 , 增加一个 toshort ()。
l
加入 #define cp 936
l
fat_getenv() 中有一个对齐错误,修改 fat.h 使 fatbuff 字对齐。
l
do_fat_read() 中加入两句,以消除列根目录错误。
l
board/cmd_fat.c 中加入两句,以消除没有 usb storage 设备时的错误:
if(!dev_desc)
printf(
Not init storage usb device:\n usb start\n usb info\n usb scan\n );

5.
修改 fs/fat/fat.c
get_cluster()
函数中加入 if(size / FS_BLOCK_SIZE > 0), 以防读文件时不能成功读出。
启始 LINUX
现在我们可以启始 LINUX 了。
l
要启始 bzip2 linux 核,把 CFG_MALLOC_SIZE 改为大于 4M
l
把编译好的 LINUX 内存,通过 uboot/tools/mkp_w_picpath 转换成 uboot 格式
1.mkp_w_picpath -A arm -O linux -T kernel -C bzip2 -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux1.bz 2 c
2.mkp_w_picpath -A arm -O linux -T kernel -C gzip -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux.gz b
3.mkp_w_picpath -A arm -O linux -T ramdisk -C gzip -a 0 -e 0 -n 'init ramdisk' -d ramdisk.p_w_picpath.gz ramdisk
l
include/configs/s 3c 2410.h 中加入:
1.#define CONFIG_BOOTARGS "initrd=0x30800000,0x200000 root=/dev/ram init=/linuxrc console=ttyS0,115200"
2.#define CONFIG_BOOTFILE"vmlinux_for_uboot.gz"
3.#define CONFIG_BOOTCOMMAND"bootm 0x80000 0x 1a 0000"
0x80000
为内核在 flash 中的位置。
0x 1a 0000
ramdisk.p_w_picpath.gz flash 中的内容。
4.#defineCFG_LOAD_ADDR0x30800000/* default load address*/
l
lib_arm/armlinux.c do_bootm_linux 中加入:
1.memcpy ((char *)CFG_LOAD_ADDR, (char *)data, len);
2.data = CFG_LOAD_ADDR;
ramdisk 复制到 0x30800000 位置的 RAM
3.
定义以下组态,把讯息传入 LINUX 核心的 TAG
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG