u-boot-2012.04.01移植到TQ2440(一):建立自己的开发板

到官网http://ftp.denx.de/pub/u-boot/下载u-boot-2012.04.01.tar.bz2

解压后在board/samsung/目录下任然没有2440,虽然没有直接支持2440开发板,但其代码已经支持,只需添加相关配置即可。新版u-boot要使用较新的交叉编译器,我使用的是4.4.3

一、    首先建立自己的开发板

拷贝board/samsung/smdk2410/目录到board/tq2440

root@zjh:/home/work/u-boot-2012.04.01#cp -a board/samsung/smdk2410/ board/tq2440

进入board/tq2440目录修改

root@zjh:/home/work/u-boot-2012.04.01/board/tq2440#mv smdk2410.c tq2440.c

修改该目录下的Makefile

COBJS   := tq2440.o

拷贝配置文件

root@zjh:/home/work/u-boot-2012.04.01#cp include/configs/smdk2410.h include/configs/tq2440.h

增加开发板配置选项

在顶层目录下的Makefile中搜索不到smdk2410

在顶层目录执行如下命令

root@zjh:/home/work/u-boot-2012.04.01#grep "smdk2410" . –nR

./boards.cfg:65:smdk2410                     arm         arm920t     -                   samsung        s3c24x0

./MAINTAINERS:750:    smdk2410 ARM920T

./board/samsung/smdk2410/Makefile:28:COBJS       := smdk2410.o

./arch/arm/include/asm/mach-types.h:1644:#define machine_is_smdk2410()  (machine_arch_type== MACH_TYPE_SMDK2410)

./arch/arm/include/asm/mach-types.h:1646:#define machine_is_smdk2410()      (0)

知道在顶层目录下的boards.cfg文件中定义了smdk2410开发板的配置选项,仿照它定义TQ2440开发板的配置选项

# Target   ARCH       CPU         Board name          Vendor         SoC         Options

########################################################################################

tq2440    arm         arm920t     -                   -              s3c24x0

由于我们在board目录下创建开发板目录,所以Vendor指定为空

/*************************************************/

一、    修改时钟

在配置文件include/configstq2440.h中加入S3C2440的配置,屏蔽掉S3C2410的配置

//#defineCONFIG_S3C2410        /* specifically aSAMSUNG S3C2410 SoC */

#define CONFIG_S3C2440

//#defineCONFIG_SMDK2410       /* on a SAMSUNGSMDK2410 Board */

屏蔽一些暂时不用的支持

#if 0

#define CONFIG_CS8900          /* we have a CS8900 on-board */

#define CONFIG_CS8900_BASE     0x19000300

#define CONFIG_CS8900_BUS16  /* the Linux driver does accesses as shorts */

#endif

#if 0

#define CONFIG_USB_OHCI

#define CONFIG_USB_KEYBOARD

#define CONFIG_USB_STORAGE

#define CONFIG_DOS_PARTITION

#endif

//#defineCONFIG_CMD_DHCP

//#defineCONFIG_CMD_NAND

//#defineCONFIG_CMD_USB

#if 0

#define CONFIG_CMD_FAT

#define CONFIG_CMD_EXT2

#define CONFIG_CMD_UBI

#define CONFIG_CMD_UBIFS

#define CONFIG_CMD_MTDPARTS

#define CONFIG_MTD_DEVICE

#defineCONFIG_MTD_PARTITIONS

#define CONFIG_YAFFS2

#define CONFIG_RBTREE

#endif

在arch/arm/cpu/arm920t/start.S添加如下代码

# if defined(CONFIG_S3C2410)

ldr  r1, =0x3ff

ldr  r0, =INTSUBMSK

str  r1, [r0]

# endif

# ifdefined(CONFIG_S3C2440)

ldr  r1,=0x7fff

ldr  r0,=INTSUBMSK

str  r1,[r0]

# endif

# ifdefined(CONFIG_S3C2440)

# define MPLLCON 0x4C000004    //系统主频配置寄存器

# define UPLLCON  0x4C000008 //USB频率配置寄存器

# define CAMDIVN 0x4C000018 //照相机时钟分频寄存器

ldr r0, =CAMDIVN

mov r1, #0

str r1, [r0]

ldr r0, =CLKDIVN

mov r1, #0x05

str r1, [r0]

/*如果HDIVN不等于0,CPU必须设置为异步总线模式*/

mrc p15,0,r0,c1,c0,0

orr r0,r0,#0xc0000000

mcr p15,0,r0,c1,c0,0

ldr r0, =UPLLCON

ldr r1, =0x38022  // 48MHZ

str r1, [r0]

/*

**When you set MPLL&UPLL values, you haveto set the UPLL

**value first and then the MPLL value. (Needsintervals

**approximately 7 NOP)

*/

nop

nop

nop

nop

nop

nop

nop

ldr r0, =MPLLCON

ldr r1, =0x5c011 //400MHZ

str r1, [r0]

# else

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr  r0, =CLKDIVN

mov      r1, #3

str  r1, [r0]

# endif /*CONFIG_S3C2440 */

#endif    /* CONFIG_S3C24X0 */

屏蔽board/tq2440/tq2440.c中board_early_init_f()函数对时钟的设置

#if 0

struct s3c24x0_clock_power * const clk_power =

s3c24x0_get_base_clock_power();

#endif

struct s3c24x0_gpio * const gpio =s3c24x0_get_base_gpio();

#if 0

/* to reduce PLL lock time, adjust the LOCKTIME register */

writel(0xFFFFFF, &clk_power->locktime);

/* configure MPLL */

writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,

&clk_power->mpllcon);

/* some delay between MPLL and UPLL */

pll_delay(4000);

/* configure UPLL */

writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,

&clk_power->upllcon);

/* some delay between MPLL and UPLL */

pll_delay(8000);

#endif

在board_init函数中修改机器码

gd->bd->bi_arch_number= MACH_TYPE_S3C2440;

修改代码以支持直接烧到SDRAM运行

修改配置文件include\configs\tq2440.h

#define CONFIG_SYS_TEXT_BASE 0x32000000

#define CONFIG_SKIP_LOWLEVEL_INIT

#defineCONFIG_AUTO_COMPLETE  //开启命令自动补全

修改命令提示符

#define CONFIG_SYS_PROMPT      "TQ2440# "

修改顶层目录Makefile(根据自己的tftp服务器目录修改,这只是为了以后方便)

$(obj)u-boot.bin:   $(obj)u-boot

$(OBJCOPY) ${OBJCFLAGS} -O binary $<$@

$(BOARD_SIZE_CHECK)

cp u-boot.bin/home/tftpboot

配置

root@zjh:/home/work/u-boot-2012.04.01#make tq2440_config

Configuring for tq2440board...

编译

root@zjh:/home/work/u-boot-2012.04.01#make

将u-boot.bin烧到0x32000000地址然后执行

TQ2440 # tftp 32000000u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T #############

done

Bytes transferred = 180536(2c138 hex)

TQ2440 # go 32000000

## Starting application at0x32000000 ...

U-Boot 2012.04.01 (Dec 292012 - 14:00:52)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

### ERROR ### Please RESETthe board ###卡在这里不动了

搜索“Flash:”

puts("Flash: ");

flash_size = flash_init();

if (flash_size > 0) {

# ifdefCONFIG_SYS_FLASH_CHECKSUM

char *s = getenv("flashchecksum");

print_size(flash_size, "");

/*

* Compute and printflash CRC if flashchecksum is set to 'y'

*

* NOTE: Maybe weshould add some WATCHDOG_RESET()? XXX

*/

if (s && (*s == 'y')) {

printf(" CRC: %08X", crc32(0,

(const unsigned char *) CONFIG_SYS_FLASH_BASE,

flash_size));

}

putc('\n');

# else     /* !CONFIG_SYS_FLASH_CHECKSUM */

print_size(flash_size, "\n");

# endif /*CONFIG_SYS_FLASH_CHECKSUM */

} else {

puts(failed);

hang();

}

在看下hang()函数

void hang(void)

{

puts("### ERROR ### Please RESET the board ###\n");

for (;;);

}

从这里可以知道是Flash初始化失败

/******************************************************/

一、    移植NOR FLASH

去掉配置文件include\configs\tq2440.h中的宏并修改代码段基地址

#define CONFIG_SYS_TEXT_BASE 0x0

//#defineCONFIG_SKIP_LOWLEVEL_INIT

在board\tq2440\lowlevel_init.S修改SDRAM’刷新频率

#define REFCNT                     0x4f4

该文件中的这三条指令其实可以用一条指令替换adrl r0, SMRDATA

ldr     r0, =SMRDATA

ldr    r1, _TEXT_BASE

sub  r0, r0, r1

进入/drivers/mtd/cfi_flash.c中的flash_init()函数

在该文件开头定义宏DEBUG打开调试信息

#define DEBUG 1

#define _DEBUG     1

重新编译

用原先的u-boot从NOR FLASH启动,将新u-boot.bin烧到NOR FLASH

TQ2440 # tftp 32000000u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T #############

done

Bytes transferred = 180828(2c25c hex)

TQ2440 # protect off all

Un-Protect Flash Bank # 1

TQ2440 # erase 0 +30000

...... done

Erased 6 sectors

TQ2440 # cp.b 32000000 030000

Copy to Flash...9....8....7....6....5....4....3....2....1....done

TQ2440 #

重启开发板

U-Boot 2012.04.01 (Dec 292012 - 14:25:05)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: fwc addr (null) cmdf0 00f0 16bit x 16 bit

fwc addr 0000aaaa cmd aa00aa 16bit x 16 bit

fwc addr 00005554 cmd 550055 16bit x 16 bit

fwc addr 0000aaaa cmd 900090 16bit x 16 bit

fwc addr (null) cmd f0 00f016bit x 16 bit

JEDEC PROBE: ID 1c2249 0

fwc addr (null) cmd ff 00ff16bit x 16 bit

fwc addr (null) cmd 90 009016bit x 16 bit

fwc addr (null) cmd ff 00ff16bit x 16 bit

JEDEC PROBE: ID 13 ea00 0

*** failed ***

### ERROR ### Please RESETthe board ###

搜索“JEDEC PROBE:”

flash_read_jedec_ids(info);

debug("JEDECPROBE: ID %x %x %x\n",

info->manufacturer_id,

info->device_id,

info->device_id2);

if (jedec_flash_match(info,info->start[0]))

break;

else

unmap_physmem((void*)info->start[0],

MAP_NOCACHE);

drivers\mtd\jedec_flash.c中的jedec_flash_match()函数:

/*-----------------------------------------------------------------------

* match jedec ids against table. If a match isfound, fill flash_info entry

*/

intjedec_flash_match(flash_info_t *info, ulong base)

{

int ret = 0;

int i;

ulong mask = 0xFFFF;

if (info->chipwidth == 1)

mask = 0xFF;

for (i = 0; i < ARRAY_SIZE(jedec_table); i++) {

if ((jedec_table[i].mfr_id & mask) ==(info->manufacturer_id & mask) &&

(jedec_table[i].dev_id & mask) == (info->device_id & mask)) {

fill_info(info, &jedec_table[i], base);

ret = 1;

break;

}

}

return ret;

}

flash_read_jedec_ids(info)读出了我们的开发板的NOR FLASH的厂商ID为0x1c,设备ID为0x2249

jedec_flash_match(info,info->start[0])将读出的信息与jedec_table[]数组进行匹配,如果有匹配成功则填充flashin信息并返回1,否则返回0。说明这里没有匹配成功,需要在jedec_table[]数组中添加我们自己开发板的NOR FLASH信息。

修改配置文件include\configs\tq2440.h

#defineCONFIG_SYS_FLASH_LEGACY_1024Kx16

在drivers\mtd\jedec_flash.c文件中jedec_table[]数组中增加EN29LV160AB的配置根据芯片手册。

#ifdefCONFIG_SYS_FLASH_LEGACY_1024Kx16

/* TQ2440 EN29LV160AB */

{

.mfr_id     = 0x1c,  /* 厂商ID */

.dev_id     = 0x2249,  /* 设备ID */

.name      = "EON EN29LV160AB",

.uaddr      = {/* 因为NOR FLASH的ADDR0接到了S3C2440的ADDR1 */

[1] = MTD_UADDR_0x0555_0x02AA/* x16 */

},

.DevSize    = SIZE_2MiB,

.CmdSet     = P_ID_AMD_STD,

.NumEraseRegions= 4,

.regions    = {

ERASEINFO(0x04000, 1),

ERASEINFO(0x02000, 2),

ERASEINFO(0x08000, 1),

ERASEINFO(0x10000, 31),

}

},

#endif

重新编译通过工具将u-boot.bin烧写到NOR FLASH

U-Boot 2012.04.01 (Dec 292012 - 15:26:09)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: fwc addr (null) cmdf0 00f0 16bit x 16 bit

fwc addr 0000aaaa cmd aa00aa 16bit x 16 bit

fwc addr 00005554 cmd 550055 16bit x 16 bit

fwc addr 0000aaaa cmd 900090 16bit x 16 bit

fwc addr (null) cmd f0 00f016bit x 16 bit

JEDEC PROBE: ID 1c 2249 0

ERROR: too manyflash sectors

2 MiB

*** Warning - bad CRC, usingdefault environment

In:    serial

Out:   serial

Err:   serial

Net:   No ethernet found.

TQ2440 #

出现一个错误ERROR: too many flash sectors

修改配置文件include\configs\tq2440.h

#defineCONFIG_SYS_MAX_FLASH_SECT (35)

取消调试信息drivers\mtd\cfi_flash.c

//#define DEBUG    1

//#define _DEBUG  1

重新编译

U-Boot 2012.04.01 (Dec 292012 - 15:33:09)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

*** Warning - bad CRC, usingdefault environment

In:    serial

Out:   serial

Err:   serial

Net:   No ethernet found.

TQ2440 # fflinfo

Bank # 1: EON EN29LV160ABflash (16 x 16)  Size: 2 MB in 35 Sectors

AMD Legacy command set, Manufacturer ID:0x1C, Device ID: 0x2249

Erase timeout: 30000 ms, write timeout: 100ms

Sector Start Addresses:

00000000  RO   00004000   RO  00006000   RO   00008000  RO   00010000   RO

00020000  RO   00030000        00040000        00050000        00060000

00070000  RO   00080000        00090000        000A0000        000B0000

000C0000        000D0000        000E0000        000F0000        00100000

00110000       00120000        00130000        00140000        00150000

00160000        00170000        00180000        00190000        001A0000

001B0000        001C0000        001D0000        001E0000        001F0000

TQ2440 # md.b 32000000 a

32000000: 13 00 00 ea 14 f09f e5 14 f0    ..........

TQ2440 # erase 100000 +a

. done

Erased 1 sectors

TQ2440 # cp.b 32000000100000 a

Copy to Flash... done

TQ2440 # md.b 100000 a

00100000: 13 00 00 ea 14 f09f e5 14 f0    ..........

/******************************************************/

一、    移植网卡DM9000

在配置文件include\configs\tq2440.h中添加DM9000的配置信息

#if 0

#define CONFIG_CS8900          /* we have a CS8900 on-board */

#define CONFIG_CS8900_BASE     0x19000300

#define CONFIG_CS8900_BUS16  /* the Linux driver does accesses as shorts */

#endif

#defineCONFIG_DRIVER_DM9000

#defineCONFIG_DM9000_NO_SROM   1

#defineCONFIG_DM9000_BASE             0x20000000

#defineDM9000_IO                      CONFIG_DM9000_BASE

#defineDM9000_DATA                    (CONFIG_DM9000_BASE + 4)

修改IP地址,添加MAC地址(也可在u-boot启动后通过setenv命令设置)

#define CONFIG_NETMASK      255.255.255.0

#define CONFIG_IPADDR       192.168.2.100

#define CONFIG_SERVERIP     192.168.2.209

#define CONFIG_ETHADDR      00:0c:29:4d:e4:f4

修改board\tq2440\tq2440.c

int board_eth_init(bd_t*bis)

{

int rc = 0;

#ifdef CONFIG_CS8900

rc = cs8900_initialize(0, CONFIG_CS8900_BASE);

#endif

#ifdefCONFIG_DRIVER_DM9000

rc = dm9000_initialize(bis);

#endif

return rc;

}

重新编译烧到NOR FLASH执行

U-Boot 2012.04.01 (Dec 292012 - 15:58:53)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

*** Warning - bad CRC, usingdefault environment

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

TQ2440 #

现在可以用tftpboot命令通过网络下载文件了,前提是确保服务器IP和开发板u-boot的IP在同一个网段。

TQ2440 # pri

baudrate=115200

bootdelay=5

ethact=dm9000

ethaddr=00:0c:29:4d:e4:f4

ipaddr=172.28.12.10

netmask=255.255.255.0

serverip=172.28.12.60

stderr=serial

stdin=serial

stdout=serial

Environment size: 194/65532bytes

TQ2440 # tftp 32000000 u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

could notestablish link

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: #############

done

Bytes transferred = 183576(2cd18 hex)

出现一个错误could not establish link

解决错误并加快速度

修改drivers\net\dm9000x.c

#if 0

i = 0;

while (!(dm9000_phy_read(1) & 0x20)) {     /* autonegation complete bit */

udelay(1000);

i++;

if (i == 10000) {

printf("could not establish link\n");

return 0;

}

}

/* see what we've got */

lnk = dm9000_phy_read(17) >> 12;

printf("operating at ");

switch (lnk) {

case 1:

printf("10M half duplex ");

break;

case 2:

printf("10M full duplex ");

break;

case 4:

printf("100M half duplex ");

break;

case 8:

printf("100M full duplex ");

break;

default:

printf("unknown: %d ", lnk);

break;

}

printf("mode\n");

#endif

重新编译烧到NOR FLASH运行

U-Boot 2012.04.01 (Dec 292012 - 17:14:04)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

*** Warning - bad CRC, usingdefault environment

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

TQ2440 # tftp 32000000u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T #############

done

Bytes transferred = 182996(2cad4 hex)

TQ2440 #

/************************************************/

一、    支持NAND FLASH读写

修改配置文件include\configs\tq2440.h打开之前注释掉的NAND相关的宏

#defineCONFIG_CMD_NAND

#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET0x40000
#define CONFIG_ENV_SIZE 0x20000

编译出错

iteral-Wno-format-security      -os3c2410_nand.o s3c2410_nand.c -c

s3c2410_nand.c: In function's3c2410_hwcontrol':

s3c2410_nand.c:57: warning:implicit declaration of function 's3c2410_get_base_nand'

s3c2410_nand.c:57: warning:initialization makes pointer from integer without a cast

s3c2410_nand.c:72: error:dereferencing pointer to incomplete type

s3c2410_nand.c:72: error:dereferencing pointer to incomplete type

s3c2410_nand.c:75: error:dereferencing pointer to incomplete type

s3c2410_nand.c:75: error:dereferencing pointer to incomplete type

s3c2410_nand.c: In function's3c2410_dev_ready':

s3c2410_nand.c:85: warning:initialization makes pointer from integer without a cast

s3c2410_nand.c:87: error:dereferencing pointer to incomplete type

s3c2410_nand.c: In function'board_nand_init':

s3c2410_nand.c:129: warning:initialization makes pointer from integer without a cast

s3c2410_nand.c:150: error:dereferencing pointer to incomplete type

s3c2410_nand.c:153: error:dereferencing pointer to incomplete type

s3c2410_nand.c:154: error:dereferencing pointer to incomplete type

make[1]: ***[s3c2410_nand.o] Error 1

make[1]: Leaving directory`/home/work/u-boot-2012.04.01/drivers/mtd/nand'

make: ***[drivers/mtd/nand/libnand.o] Error 2

将drivers/mtd/nand/s3c2410_nand.c拷贝为drivers/mtd/nand/s3c2440_nand.c

root@zjh:/home/work/u-boot-2012.04.01#cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c

在drivers/mtd/nand/Makefile文件中增加一行

COBJS-$(CONFIG_NAND_S3C2440)+= s3c2440_nand.o

将s3c2440_nand.c中所有的2410替换为2440

修改配置文件include\configs\tq2440.h

#define CONFIG_NAND_S3C2440

#define CONFIG_SYS_S3C2440_NAND_HWECC

修改drivers\mtd\nand\s3c2440_nand.c中的board_nand_init()函数

#ifdefined(CONFIG_S3C24XX_CUSTOM_NAND_TIMING)

tacls  =CONFIG_S3C24XX_TACLS;

twrph0 = CONFIG_S3C24XX_TWRPH0;

twrph1 = CONFIG_S3C24XX_TWRPH1;

#else

tacls = 0;

twrph0 = 1;

twrph1 = 0;

#endif

#if 0

cfg = S3C2440_NFCONF_EN;

cfg |= S3C2440_NFCONF_TACLS(tacls - 1);

cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);

cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);

#endif

cfg = (tacls << 12)|(twrph0 << 8)|(twrph1 << 4);

writel(cfg, &nand_reg->nfconf);

/*初始化ECC、禁止片选、使能NANDFLASH控制器*/

writel((1 << 4)|(1 << 1)|(1<< 0), &nand_reg->nfcont);

nand->select_chip = s3c2440_nand_select;

添加函数s3c2440_nand_select

static voids3c2440_nand_select(struct mtd_info *mtd, int chipnr)

{

structs3c2440_nand *nand = s3c2440_get_base_nand();

switch(chipnr) {

case-1: /* 取消选中 */

nand->nfcont |= (1<<1);

break;

case0:  /* 选中 */

nand->nfcont&= ~(1<<1);

break;

default:

BUG();

}

}

修改s3c2440_hwcontrol()函数

/*

** ctrl:表示做什么(选中芯片/取消选中,发命令还是发地址)

** cmd:命令值或地址值

*/

static voids3c2440_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)

{

struct s3c2440_nand*nand = s3c2440_get_base_nand();

if(ctrl & NAND_CLE) {

/*发命令 */

writeb(cmd,&nand->nfcmd);

}else if (ctrl & NAND_ALE) {

/* 发地址 */

writeb(cmd,&nand->nfaddr);

}

}

重新编译烧到NOR FLASh执行

TQ2440 # tftp 32000000u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T ################

done

Bytes transferred = 226588(3751c hex)

TQ2440 # pro off all

Un-Protect Flash Bank # 1

TQ2440 # erase 0 +40000

....... done

Erased 7 sectors

TQ2440 # cp.b 32000000 040000

Copy to Flash...9....8....7....6....5....4....3....2....1....done

TQ2440 # res

resetting ...

U-Boot 2012.04.01 (Dec 292012 - 21:53:59)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: 2 MiB

NAND:  256 MiB

*** Warning - bad CRC, usingdefault environment

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

TQ2440 #

测试

将SDRAM的0x32000000地址的0xff字节数据写到NAND FLASH的0地址

TQ2440 # nand write 320000000 ff

NAND write: device 0 offset0x0, size 0xff

255 bytes written: OK

从NAND FLASH的0地址读0xff字节数据到SDRAM的0x31000000地址

TQ2440 # nand read 310000000 ff

NAND read: device 0 offset0x0, size 0xff

255 bytes read: OK

比较

TQ2440 # cmp.b 3100000032000000 ff

/*******************************************************/

一、    支持NAND FLASH启动

新版u-boot在链接时加了“-pie”选项

-pie

Produce a position independentexecutable on targets which support it. For predictable results, you must also specify the same set of optionsthat were used to generate code (-fpie, -fPIE, or model suboptions) when youspecify this option.

产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意

位置,都可以正确的执行。

最终u-boot.bin中多了这些段

.rel.dyn : {

__rel_dyn_start = .;

*(.rel*)

__rel_dyn_end = .;

}

.dynsym : {

__dynsym_start = .;

*(.dynsym)

}

从NOR FLASH把代码复制到SDRAM,程序的链接地址是0,访问全局变量、静态变量、调用函数时是使用基于0地址编译得到的地址,现在把程序复制到了SDRAM(0x3000000),需要修改代码,把原来的地址改为新地址。这样太复杂了,我还是使用老版本的方法。

去掉“-pie”选项,在u-boot源码搜索“-pie”

root@zjh:/home/work/u-boot-2012.04.01#grep "\-pie" . -nR

./doc/README.arm-relocation:3:Atarch level: add linker flag -pie

./arch/x86/config.mk:43:LDFLAGS_FINAL+= --gc-sections -pie

./arch/arm/config.mk:75:LDFLAGS_u-boot+= -pie

去除arch/arm/config.mk:75:LDFLAGS_u-boot += -pie中的“-pie”

# needed for relocation

ifndef CONFIG_NAND_SPL

#LDFLAGS_u-boot +=-pie

endif

修改配置文件include\configs\tq2440.h,给u-boot分配512KB

#define CONFIG_SYS_TEXT_BASE 0x33f80000

增加文件board\tq2440\nand_read_ll.c并修改相应的Makefile

COBJS   := tq2440.onand_read_ll.o

Nand_read_ll.c文件内容如下:

/* NAND FLASH控制器 */

#define NFCONF(*((volatile unsigned long *)0x4E000000))

#define NFCONT(*((volatile unsigned long *)0x4E000004))

#define NFCMMD(*((volatile unsigned char *)0x4E000008))

#define NFADDR(*((volatile unsigned char *)0x4E00000C))

#define NFDATA(*((volatile unsigned char *)0x4E000010))

#define NFSTAT(*((volatile unsigned char *)0x4E000020))

static intisBootFromNorFlash(void)

{

volatile int *p = (volatile int *)0;

int val;

val = *p;

*p = 0x12345678;

if (*p == 0x12345678) {

/* 写成功,是nand启动 */

*p = val;

return 0;

} else {

/* NOR不能像内存一样写 */

return 1;

}

}

voidclear_bss(void)

{

extern int __bss_start, __bss_end__;

int *p = &__bss_start;

for (; p < &__bss_end__; p++)

*p = 0;

}

void nand_init_ll(void)

{

#define TACLS   0

#defineTWRPH0  1

#defineTWRPH1  0

/* 设置时序 */

NFCONF =(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);

/* 使能NAND Flash控制器,初始化ECC, 禁止片选 */

NFCONT =(1<<4)|(1<<1)|(1<<0);

}

static voidnand_select(void)

{

NFCONT &= ~(1<<1);

}

static voidnand_deselect(void)

{

NFCONT |= (1<<1);

}

static voidnand_cmd(unsigned char cmd)

{

volatile int i;

NFCMMD = cmd;

for (i = 0; i < 10; i++);

}

static voidnand_addr(unsigned int addr)

{

unsigned int col  = addr % 2048;

unsigned int page = addr / 2048;

volatile int i;

NFADDR = col & 0xff;

for (i = 0; i < 10; i++);

NFADDR = (col >> 8) & 0xff;

for (i = 0; i < 10; i++);

NFADDR = page & 0xff;

for (i = 0; i < 10; i++);

NFADDR = (page >> 8) & 0xff;

for (i = 0; i < 10; i++);

NFADDR = (page >> 16) & 0xff;

for (i = 0; i < 10; i++);

}

static voidnand_wait_ready(void)

{

while (!(NFSTAT & 1));

}

static unsignedchar nand_data(void)

{

return NFDATA;

}

voidnand_read_ll(unsigned int addr, unsigned char *buf, unsigned int len)

{

int col = addr % 2048;

int i = 0;

/* 1. 选中 */

nand_select();

while (i < len) {

/* 2. 发出读命令00h */

nand_cmd(0x00);

/* 3. 发出地址(分5步发出) */

nand_addr(addr);

/* 4. 发出读命令30h */

nand_cmd(0x30);

/* 5. 判断状态 */

nand_wait_ready();

/* 6. 读数据 */

for (; (col < 2048) && (i< len); col++) {

buf[i] = nand_data();

i++;

addr++;

}

col = 0;

}

/* 7. 取消选中 */

nand_deselect();

}

voidcopy_code_to_sdram(unsigned char *src, unsigned char *dest, unsigned int len)

{

int i = 0;

/* 如果是NOR启动 */

if (isBootFromNorFlash()) {

while (i < len) {

dest[i] = src[i];

i++;

}

} else {

nand_init_ll();

nand_read_ll((unsigned int)src, dest,len);

}

}

修改arch\arm\cpu\arm920t\start.S

call_board_init_f:

ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)

bic sp, sp, #7 /* 8-byte alignment for ABIcompliance */

ldr r0,=0x00000000

ldr r1, _TEXT_BASE

ldr r2, _bss_start_ofs

bl copy_code_to_sdram

bl clear_bss

ldr pc, = board_init_f  /* 跳转到SDRAM */

.globl second

second:

/* 调用第2阶段的代码 */

bl board_init_r

注释掉以下代码

#if 0

.globl    relocate_code

relocate_code:

mov      r4, r0   /* save addr_sp */

mov      r5, r1   /* save addr of gd */

mov      r6, r2   /* save addr of destination */

/* Set up the stack                                              */

stack_setup:

mov      sp, r4

adr r0, _start

cmp      r0, r6

beq       clear_bss          /* skip relocation */

mov      r1, r6                 /* r1 <- scratch forcopy_loop */

ldr  r3, _bss_start_ofs

add       r2, r0, r3           /* r2 <- source end address        */

copy_loop:

ldmia    r0!, {r9-r10}            /* copy from source address[r0]    */

stmia    r1!, {r9-r10}            /* copy to   target address [r1]    */

cmp      r0, r2                 /* until source end address[r2]    */

blo copy_loop

#ifndef CONFIG_SPL_BUILD

/*

* fix .rel.dynrelocations

*/

ldr  r0, _TEXT_BASE            /* r0 <- Text base */

sub       r9, r6, r0           /* r9 <- relocation offset */

ldr  r10,_dynsym_start_ofs   /* r10 <- sym tableofs */

add       r10, r10, r0             /* r10 <- sym table in FLASH */

ldr  r2,_rel_dyn_start_ofs      /* r2 <- reldyn start ofs */

add       r2, r2, r0           /* r2 <- rel dyn start in FLASH */

ldr  r3, _rel_dyn_end_ofs       /* r3 <- rel dyn end ofs */

add       r3, r3, r0           /* r3 <- rel dyn end in FLASH */

fixloop:

ldr  r0, [r2]              /* r0 <- location to fix up, INFLASH! */

add       r0, r0, r9           /* r0 <- location to fix up in RAM*/

ldr  r1, [r2, #4]

and       r7, r1, #0xff

cmp      r7, #23                     /* relative fixup? */

beq       fixrel

cmp      r7, #2                 /* absolute fixup? */

beq       fixabs

/* ignore unknown type of fixup */

b     fixnext

fixabs:

/* absolute fix: set location to (offset) symbol value */

mov      r1, r1, LSR #4         /* r1 <- symbol index in .dynsym */

add       r1, r10, r1        /* r1 <- address of symbol in table*/

ldr  r1, [r1, #4]              /* r1 <- symbol value */

add       r1, r1, r9           /* r1 <- relocated sym addr */

b     fixnext

fixrel:

/* relative fix: increase location by offset */

ldr  r1, [r0]

add       r1, r1, r9

fixnext:

str  r1, [r0]

add       r2, r2, #8          /* each rel.dyn entry is 8 bytes */

cmp      r2, r3

blo fixloop

#endif

clear_bss:

#ifndef CONFIG_SPL_BUILD

ldr  r0, _bss_start_ofs

ldr  r1, _bss_end_ofs

mov      r4, r6                 /* reloc addr */

add       r0, r0, r4

add       r1, r1, r4

mov      r2, #0x00000000         /* clear                         */

clbss_l:str  r2, [r0]              /*clear loop...                  */

add       r0, r0, #4

cmp      r0, r1

bne       clbss_l

bl coloured_LED_init

bl red_led_on

#endif

#endif

修改arch\arm\lib\board.c中的函数board_init_f

//addr -=gd->mon_len;

//addr &=~(4096 - 1);

addr =CONFIG_SYS_TEXT_BASE;

注视最后的重定位,并跳转到刚才定义的second

//relocate_code(addr_sp,id, addr);

second(id, addr);

修改链接脚本arch\arm\cpu\u-boot.lds把start.o、nand_read_ll.o、lowlevel_init.o编译到前面4k

CPUDIR/start.o (.text)

board/tq2440/libtq2440.o(.text)

重新编译,烧到NAND FLASH

TQ2440 # nand erase 040000;tftp 32000000 u-boot.bin;nand write 32000000 0 40000

NAND erase: device 0 offset0x0, size 0x40000

Erasing at 0x20000 -- 100%complete.

OK

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T ###############

done

Bytes transferred = 208508(32e7c hex)

NAND write: device 0 offset0x0, size 0x40000

262144 bytes written: OK

TQ2440 #

从NAND FLASH启动

U-Boot 2012.04.01 (Dec 312012 - 11:57:16)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

### ERROR ### Please RESETthe board ###

由于从NAND启动,CPU检测不到NOR FLASH,具体代码如下arch\arm\lib\board.c

#if!defined(CONFIG_SYS_NO_FLASH)

puts("Flash: ");

flash_size = flash_init();

if (flash_size > 0) {

# ifdefCONFIG_SYS_FLASH_CHECKSUM

char *s = getenv("flashchecksum");

print_size(flash_size, "");

/*

* Compute and printflash CRC if flashchecksum is set to 'y'

*

* NOTE: Maybe weshould add some WATCHDOG_RESET()? XXX

*/

if (s && (*s == 'y')) {

printf(" CRC: %08X", crc32(0,

(const unsigned char *) CONFIG_SYS_FLASH_BASE,

flash_size));

}

putc('\n');

# else     /* !CONFIG_SYS_FLASH_CHECKSUM */

print_size(flash_size, "\n");

# endif /*CONFIG_SYS_FLASH_CHECKSUM */

} else {

puts(failed);

hang();

}

#endif

void hang(void)

{

puts("### ERROR ### Please RESET the board ###\n");

for (;;);

}

我们直接注释掉上面的hang();

# endif /*CONFIG_SYS_FLASH_CHECKSUM */

} else {

puts(failed);

//hang();

}

#endif

重新编译,烧到NAND FLASH,从NAND启动

U-Boot 2012.04.01 (Dec 31 2012- 12:27:20)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

卡在这里,检查后发现修改start.S的时候调用第二阶段代码没有重新设置栈指针,做如下修改

board.c中的board_init_f函数

//relocate_code(addr_sp, id,addr);

second(id, addr, addr_sp);

start.S

second:

mov sp, r2 /*重新设置栈指针 */

/* 调用第2阶段的代码 */

bl board_init_r

重新编译,烧到NAND,从NAND启动

U-Boot 2012.04.01 (Dec 312012 - 12:31:58)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

TQ2440 #

一、    添加分区信息并启动jffs2文件系统

烧写之前的内核看输出分区信息

TQ2440 # tftp 32000000uImage

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'uImage'.

Load address: 0x32000000

Loading: T#################################################################

#################################################################

################

done

Bytes transferred = 2138388(20a114 hex)

TQ2440 # bootm 32000000

…………

Creating 4 MTD partitions on"NAND":

0x000000000000-0x000000040000: "u-boot"

0x000000040000-0x000000060000: "params"

0x000000060000-0x000000360000: "kernel"

0x000000360000-0x000010000000: "rootfs"

…………

修改配置文件include\configs\tq2440.h打开之前屏蔽的MTDPARTS命令的宏

#if 0

#define CONFIG_CMD_FAT

#define CONFIG_CMD_EXT2

#define CONFIG_CMD_UBI

#define CONFIG_CMD_UBIFS

#endif

#define CONFIG_CMD_MTDPARTS

#if 0

#define CONFIG_MTD_DEVICE

#defineCONFIG_MTD_PARTITIONS

#define CONFIG_YAFFS2

#define CONFIG_RBTREE

#endif

添加如下分区信息

#define CONFIG_MTD_DEVICE

#defineMTDIDS_DEFAULT              "nand0=tq2440-0"  /*哪一个设备 */

#defineMTDPARTS_DEFAULT  "mtdparts=tq2440-0:256k(u-boot),"       \

"128k(params),"          \

"3m(kernel),"  \

"-(rootfs)"        \

重新编译,烧到开发板并启动

U-Boot 2012.04.01 (Dec 312012 - 16:52:29)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

TQ2440 # mtdparts default第一次启动首先执行mtdparts default

TQ2440 # save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x40000 -- 100% complete.
Writing to Nand... done

TQ2440 # mtdparts

device nand0<tq2440-0>, # parts = 4

#: name                size            offset          mask_flags

0: u-boot              0x00040000      0x00000000      0

1: params              0x00020000      0x00040000      0

2: kernel              0x00300000      0x00060000      0

3: rootfs              0x0fca0000      0x00360000      0

active partition: nand0,0 -(u-boot) 0x00040000 @ 0x00000000

defaults:

mtdids  : nand0=tq2440-0

mtdparts:mtdparts=tq2440-0:256k(u-boot),128k(params),3m(kernel),-(rootfs)

TQ2440 # nand erase.part kernel

NAND erase.part: device 0offset 0x60000, size 0x400000

Erasing at 0x440000 -- 100%complete.

OK

TQ2440 # tftp 32000000 uImage

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'uImage'.

Load address: 0x32000000

Loading: T#################################################################

#################################################################

################

done

Bytes transferred = 2138388(20a114 hex)

TQ2440 # nand write 32000000 kernel

NAND write: device 0 offset0x60000, size 0x400000

4194304 bytes written: OK

设置启动参数

TQ2440 # set bootcmd nand read 32000000 kernel\;bootm 32000000

TQ2440 # save

Saving Environment toNAND...

Erasing Nand...

Erasing at 0x40000 -- 100%complete.

Writing to Nand... done

烧写jffs2文件系统

TQ2440 # tftpboot 32000000 rootfs.jffs2

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'rootfs.jffs2'.

Load address: 0x32000000

Loading: T#################################################################

#################################################################

#################################################################

############################

done

Bytes transferred = 3262836(31c974 hex)

TQ2440 # nand erase.part rootfs

NAND erase.part: device 0offset 0x460000, size 0xfba0000

Skipping bad block at  0x08260000

Erasing at 0xffe0000 -- 100%complete.

OK

TQ2440 # nand write 32000000 rootfs $filesize

NAND write: device 0 offset0x460000, size 0x31c974

3262836 bytes written: OK

设置启动参数

TQ2440 # set bootargs root=/dev/mtdblock3 rootfstype=jffs2init=/linuxrc console=ttySAC0,115200

TQ2440 # save

Saving Environment toNAND...

Erasing Nand...

Erasing at 0x40000 -- 100%complete.

Writing to Nand... done

TQ2440 # res  重启

resetting ...

U-Boot 2012.04.01 (Dec 31 2012- 16:52:29)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stopautoboot:  0

NAND read: device 0 offset0x60000, size 0x300000

3145728 bytes read: OK

## Booting kernel fromLegacy Image at 32000000 ...

Image Name:  Linux-2.6.36.4

Created:     2012-12-31   8:37:05 UTC

Image Type:  ARM Linux Kernel Image (uncompressed)

Data Size:   2138324 Bytes = 2 MiB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done,booting the kernel.

Linux version 2.6.36.4(root@zjh) (gcc version 4.4.3 (ctng-1.6.1) ) #4 Mon Dec 31 16:36:50 CST 2012

CPU: ARM920T [41129200]revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVTinstruction cache

Machine: SMDK2440

Memory policy: ECC disabled,Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, Copyright2004 Simtec Electronics

S3C244X: core 400.000 MHz,memory 100.000 MHz, peripheral 50.000 MHz

CLOCK: Slow mode (1.500MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zoneorder, mobility grouping on.  Totalpages: 16256

Kernel command line:root=/dev/mtdblock3 rootfstype=jffs2 init=/linuxrc console=ttySAC0,115200

PID hash table entries: 256(order: -2, 1024 bytes)

Dentry cache hash table entries:8192 (order: 3, 32768 bytes)

Inode-cache hash tableentries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60620k/60620kavailable, 4916k reserved, 0K highmem

Virtual kernel memorylayout:

vector : 0xffff0000 - 0xffff1000   (   4 kB)

fixmap : 0xfff00000 - 0xfffe0000   ( 896kB)

DMA    : 0xffc00000 - 0xffe00000   (   2 MB)

vmalloc : 0xc4800000 - 0xe0000000   ( 440 MB)

lowmem : 0xc0000000 - 0xc4000000   (  64 MB)

modules : 0xbf000000 - 0xc0000000   (  16MB)

.init : 0xc0008000 - 0xc0028000   ( 128 kB)

.text : 0xc0028000 - 0xc03d1000   (3748 kB)

.data : 0xc03ea000 - 0xc040cac0   ( 139 kB)

Hierarchical RCUimplementation.

RCU-based detection of stalled CPUs isdisabled.

Verbose stalled-CPUs detection isdisabled.

NR_IRQS:85

irq: clearing subpendingstatus 00000002

Console: colour dummy device80x30

console [ttySAC0] enabled

Calibrating delay loop...199.47 BogoMIPS (lpj=498688)

pid_max: default: 32768minimum: 301

Mount-cache hash tableentries: 512

CPU: Testing write buffercoherency: ok

gpiochip_add: gpios 288..303(GPIOK) failed to register

gpiochip_add: gpios 320..334(GPIOL) failed to register

gpiochip_add: gpios 352..353(GPIOM) failed to register

NET: Registered protocolfamily 16

S3C Power Management,Copyright 2004 Simtec Electronics

S3C2440: Initialisingarchitecture

S3C2440: IRQ Support

S3C24XX DMA Driver,Copyright 2003-2006 Simtec Electronics

DMA channel 0 at c4808000,irq 33

DMA channel 1 at c4808040, irq34

DMA channel 2 at c4808080,irq 35

DMA channel 3 at c48080c0,irq 36

S3C244X: Clock Support, DVSoff

bio: create slab<bio-0> at 0

SCSI subsystem initialized

usbcore: registered newinterface driver usbfs

usbcore: registered newinterface driver hub

usbcore: registered newdevice driver usb

s3c-i2c s3c2440-i2c: slaveaddress 0x10

s3c-i2c s3c2440-i2c: busfrequency set to 97 KHz

s3c-i2c s3c2440-i2c: i2c-0:S3C I2C adapter

Advanced Linux SoundArchitecture Driver Version 1.0.23.

NET: Registered protocolfamily 2

IP route cache hash tableentries: 1024 (order: 0, 4096 bytes)

TCP established hash tableentries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries:2048 (order: 1, 8192 bytes)

TCP: Hash tables configured(established 2048 bind 2048)

TCP reno registered

UDP hash table entries: 256(order: 0, 4096 bytes)

UDP-Lite hash table entries:256 (order: 0, 4096 bytes)

NET: Registered protocolfamily 1

RPC: Registered udptransport module.

RPC: Registered tcptransport module.

RPC: Registered tcp NFSv4.1backchannel transport module.

NetWinder Floating PointEmulator V0.97 (extended precision)

JFFS2 version 2.2. (NAND)(SUMMARY)  © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat,Inc.

msgmni has been set to 118

io scheduler noop registered

io scheduler deadlineregistered

io scheduler cfq registered(default)

Console: switching to colourframe buffer device 30x40

fb0: s3c2410fb frame bufferdevice

lp: driver loaded but nodevices found

ppdev: user-space parallelport driver

Serial: 8250/16550 driver, 4ports, IRQ sharing enabled

s3c2440-uart.0:s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1:s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2:s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

brd: module loaded

loop: module loaded

Uniform Multi-Platform E-IDEdriver

ide-gd driver 1.18

ide-cd driver 5.00

S3C24XX NAND Driver, (c)2004 Simtec Electronics

s3c24xx-nand s3c2440-nand:Tacls=1, 10ns Twrph0=3 30ns, Twrph1=1 10ns

s3c24xx-nand s3c2440-nand:NAND soft ECC

NAND device: ManufacturerID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for badblocks

Bad eraseblock 1043 at0x000008260000

Creating 4 MTD partitions on"NAND":

0x000000000000-0x000000040000: "u-boot"

0x000000040000-0x000000060000: "params"

0x000000060000-0x000000360000: "kernel"

0x000000360000-0x000010000000: "rootfs"

dm9000 Ethernet Driver,V1.31

usbmon: debugfs is notavailable

ohci_hcd: USB 1.1 'Open'Host Controller (OHCI) Driver

s3c2410-ohci s3c2410-ohci:S3C24XX OHCI

s3c2410-ohci s3c2410-ohci:new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci:irq 42, io mem 0x49000000

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 portsdetected

usbcore: registered newinterface driver libusual

usbcore: registered newinterface driver usbserial

USB Serial supportregistered for generic

usbcore: registered newinterface driver usbserial_generic

usbserial: USB Serial Drivercore

USB Serial supportregistered for FTDI USB Serial Device

usbcore: registered newinterface driver ftdi_sio

ftdi_sio: v1.6.0:USB FTDISerial Converters Driver

USB Serial supportregistered for pl2303

usbcore: registered newinterface driver pl2303

pl2303: Prolific PL2303 USBto serial adaptor driver

mice: PS/2 mouse devicecommon for all mice

S3C24XX RTC, (c) 2004,2006Simtec Electronics

S3C2410 Watchdog Timer, (c)2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt:watchdog inactive, reset disabled, irq enabled

No device for DAI UDA134X

No device for DAIs3c24xx-i2s

ALSA device list:

No soundcards found.

TCP cubic registered

NET: Registered protocolfamily 17

drivers/rtc/hctosys.c:unable to open rtc device (rtc0)

VFS: Mounted root (jffs2filesystem) on device 31:3.

Freeing init memory: 128K

Please press Enter toactivate this console.

Processing /etc/profile...

Done

[root@tq2440 /]#

/**********************************/

一、    支持yaffs烧写文件系统

先直接烧写试一下

TQ2440 # nand write.yaffs32000000 rootfs $filesize

NAND write: device 0 offset0x360000, size 0x614ac0

Unknown nandcommand suffix '.yaffs'.

不认识的后缀‘.yaffs’

搜索.yaffs

Cmd_nand.c(u-boot-2012.04.01\common):        } elseif (!strcmp(s, ".yaffs")) {

#ifdefCONFIG_CMD_NAND_YAFFS

} else if (!strcmp(s, ".yaffs")){

if (read) {

printf("Unknown nand command suffix'%s'.\n", s);

return 1;

}

ret = nand_write_skip_bad(nand, off, &rwsize,

(u_char *)addr, WITH_YAFFS_OOB);

#endif

因为没有定义上面那个宏,修改配置文件include\configs\tq2440.h添加该宏

#defineCONFIG_CMD_NAND_YAFFS

重新编译,烧到开发板并重启,再次烧写yaffs文件系统

TQ2440 # nand erase 040000;tftp 32000000 u-boot.bin;nand write 32000000 0 40000

重启

TQ2440 # tftp 32000000rootfs.yaffs;nand erase.part rootfs;nand write.yaffs 32000000 rootfs $filesize

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'rootfs.yaffs'.

Load address: 0x32000000

Loading: T#################################################################

#################################################################

#################################################################

done

Bytes transferred = 6376128(614ac0 hex)

NAND erase.part: device 0offset 0x360000, size 0xfca0000

Skipping bad block at  0x08260000

Erasing at 0xffe0000 -- 100%complete.

OK

NAND write: device 0 offset0x360000, size 0x614ac0

6376128 bytes written: OK

TQ2440 # set bootargs root=/dev/mtdblock3 rootfstype=yaffs2init=/linuxrc console=ttySAC0,115200

TQ2440 # res     重启

resetting ...

U-Boot 2012.04.01 (Dec 312012 - 18:46:42)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stopautoboot:  0

NAND read: device 0 offset0x60000, size 0x300000

3145728 bytes read: OK

## Booting kernel from LegacyImage at 32000000 ...

Image Name:  Linux-2.6.36.4

Created:     2012-12-31  10:56:09 UTC

Image Type:  ARM Linux Kernel Image (uncompressed)

Data Size:   2186324 Bytes = 2.1 MiB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done,booting the kernel.

Linux version 2.6.36.4(root@zjh) (gcc version 4.4.3 (ctng-1.6.1) ) #5 Mon Dec 31 18:55:35 CST 2012

CPU: ARM920T [41129200]revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVTinstruction cache

Machine: SMDK2440

Memory policy: ECC disabled,Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, Copyright2004 Simtec Electronics

S3C244X: core 400.000 MHz,memory 100.000 MHz, peripheral 50.000 MHz

CLOCK: Slow mode (1.500MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zoneorder, mobility grouping on.  Totalpages: 16256

Kernel command line:root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200

PID hash table entries: 256(order: -2, 1024 bytes)

Dentry cache hash tableentries: 8192 (order: 3, 32768 bytes)

Inode-cache hash tableentries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60532k/60532kavailable, 5004k reserved, 0K highmem

Virtual kernel memorylayout:

vector : 0xffff0000 - 0xffff1000   (   4 kB)

fixmap : 0xfff00000 - 0xfffe0000   ( 896kB)

DMA    : 0xffc00000 - 0xffe00000   (   2 MB)

vmalloc : 0xc4800000 - 0xe0000000   ( 440 MB)

lowmem : 0xc0000000 - 0xc4000000   (  64 MB)

modules : 0xbf000000 - 0xc0000000   (  16MB)

.init : 0xc0008000 - 0xc0028000   ( 128 kB)

.text : 0xc0028000 - 0xc03e8000   (3840 kB)

.data : 0xc0400000 - 0xc0422b80   ( 139 kB)

Hierarchical RCUimplementation.

RCU-based detection of stalled CPUs isdisabled.

Verbose stalled-CPUs detection isdisabled.

NR_IRQS:85

irq: clearing subpendingstatus 00000002

Console: colour dummy device80x30

console [ttySAC0] enabled

Calibrating delay loop...199.47 BogoMIPS (lpj=498688)

pid_max: default: 32768minimum: 301

Mount-cache hash tableentries: 512

CPU: Testing write buffercoherency: ok

gpiochip_add: gpios 288..303(GPIOK) failed to register

gpiochip_add: gpios 320..334(GPIOL) failed to register

gpiochip_add: gpios 352..353(GPIOM) failed to register

NET: Registered protocolfamily 16

S3C Power Management,Copyright 2004 Simtec Electronics

S3C2440: Initialisingarchitecture

S3C2440: IRQ Support

S3C24XX DMA Driver,Copyright 2003-2006 Simtec Electronics

DMA channel 0 at c4808000,irq 33

DMA channel 1 at c4808040,irq 34

DMA channel 2 at c4808080,irq 35

DMA channel 3 at c48080c0,irq 36

S3C244X: Clock Support, DVSoff

bio: create slab<bio-0> at 0

SCSI subsystem initialized

usbcore: registered newinterface driver usbfs

usbcore: registered newinterface driver hub

usbcore: registered newdevice driver usb

s3c-i2c s3c2440-i2c: slaveaddress 0x10

s3c-i2c s3c2440-i2c: busfrequency set to 97 KHz

s3c-i2c s3c2440-i2c: i2c-0:S3C I2C adapter

Advanced Linux SoundArchitecture Driver Version 1.0.23.

NET: Registered protocolfamily 2

IP route cache hash tableentries: 1024 (order: 0, 4096 bytes)

TCP established hash tableentries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries:2048 (order: 1, 8192 bytes)

TCP: Hash tables configured(established 2048 bind 2048)

TCP reno registered

UDP hash table entries: 256(order: 0, 4096 bytes)

UDP-Lite hash table entries:256 (order: 0, 4096 bytes)

NET: Registered protocolfamily 1

RPC: Registered udptransport module.

RPC: Registered tcptransport module.

RPC: Registered tcp NFSv4.1backchannel transport module.

NetWinder Floating PointEmulator V0.97 (extended precision)

JFFS2 version 2.2. (NAND)(SUMMARY)  © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat,Inc.

msgmni has been set to 118

io scheduler noop registered

io scheduler deadlineregistered

io scheduler cfq registered(default)

Console: switching to colourframe buffer device 30x40

fb0: s3c2410fb frame bufferdevice

lp: driver loaded but nodevices found

ppdev: user-space parallelport driver

Serial: 8250/16550 driver, 4ports, IRQ sharing enabled

s3c2440-uart.0:s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1:s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2:s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

brd: module loaded

loop: module loaded

Uniform Multi-Platform E-IDEdriver

ide-gd driver 1.18

ide-cd driver 5.00

S3C24XX NAND Driver, (c)2004 Simtec Electronics

s3c24xx-nand s3c2440-nand:Tacls=1, 10ns Twrph0=3 30ns, Twrph1=1 10ns

s3c24xx-nand s3c2440-nand:NAND soft ECC

NAND device: ManufacturerID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for badblocks

Bad eraseblock 1043 at0x000008260000

Creating 4 MTD partitions on"NAND":

0x000000000000-0x000000040000: "u-boot"

0x000000040000-0x000000060000: "params"

0x000000060000-0x000000360000: "kernel"

0x000000360000-0x000010000000: "rootfs"

dm9000 Ethernet Driver,V1.31

usbmon: debugfs is notavailable

ohci_hcd: USB 1.1 'Open'Host Controller (OHCI) Driver

s3c2410-ohci s3c2410-ohci:S3C24XX OHCI

s3c2410-ohci s3c2410-ohci:new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci:irq 42, io mem 0x49000000

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 portsdetected

usbcore: registered newinterface driver libusual

usbcore: registered newinterface driver usbserial

USB Serial supportregistered for generic

usbcore: registered newinterface driver usbserial_generic

usbserial: USB Serial Drivercore

USB Serial supportregistered for FTDI USB Serial Device

usbcore: registered newinterface driver ftdi_sio

ftdi_sio: v1.6.0:USB FTDISerial Converters Driver

USB Serial supportregistered for pl2303

usbcore: registered newinterface driver pl2303

pl2303: Prolific PL2303 USBto serial adaptor driver

mice: PS/2 mouse devicecommon for all mice

S3C24XX RTC, (c) 2004,2006Simtec Electronics

S3C2410 Watchdog Timer, (c)2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt:watchdog inactive, reset disabled, irq enabled

No device for DAI UDA134X

No device for DAIs3c24xx-i2s

ALSA device list:

No soundcards found.

TCP cubic registered

NET: Registered protocolfamily 17

drivers/rtc/hctosys.c:unable to open rtc device (rtc0)

yaffs: dev is32505859 name is "mtdblock3" rw

yaffs: passedflags ""

VFS: Mounted root(yaffs2 filesystem) on device 31:3.

Freeing initmemory: 128K

Failed to execute/linuxrc.  Attempting defaults...

Kernel panic - notsyncing: No init found.  Try passinginit= option to kernel. See Linux Documentation/init.txt for guidance.

[<c002e344>](unwind_backtrace+0x0/0xf0) from [<c02ff798>] (panic+0x54/0x17c)

[<c02ff798>](panic+0x54/0x17c) from [<c002856c>] (init_post+0x9c/0xbc)

[<c002856c>](init_post+0x9c/0xbc) from [<c00085e8>] (kernel_init+0x10c/0x148)

[<c00085e8>](kernel_init+0x10c/0x148) from [<c0029e50>] (kernel_thread_exit+0x0/0x8)

Yaffs文件系统挂载上了,但是没法执行/linuxrc,换回以前的u-boot烧写yaffs文件系统可以正常启动,说明是u-boot的问题。

YAFFS中,文件是以固定大小的数据块进行存储的,块的大小可以是512字节、1 024字节或者2 048字节。这种实现依赖于它能够将一个数据块头和每个数据块关联起来。每个文件(包括目录)都有一个数据块头与之相对应,数据块头中保存了ECC(ErrorCorrection Code)和文件系统的组织信息,用于错误检测和坏块处理。

TQ2440开发板用的NAND FLASH每页2k

用UltraEdit打开刚才烧写的rootfs.yaffs文件和烧到NAND FLASH里的数据对比

在u-boot中执行

TQ2440 # nand dump 360000

Page 00360000 dump:

03 00 00 00 01 00 00 00  ff ff 00 00 00 00 00 00

………………………………………………

ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff

OOB:

ff ff ff ff ff ff ff ff

ff ff ff ff ff ff ff ff

ff ff ff ff ff ff ff ff

ff ff ff ff ff ff ff ff

ff ff ff ff ff ff ff ff

aa 9a a7 ff f3 03 ff ff

ff ff ff ff ff ff ff ff

ff ff ff ff ff ff ff ff

TQ2440 #

通过对比发现烧到NAND FLASH里的数据和原文件不一致

跟踪u-boot源码common\cmd_nand.c

ret =nand_write_skip_bad(nand, off, &rwsize,

(u_char *)addr, WITH_YAFFS_OOB);

这里传入了一个参数WITH_YAFFS_OOB

drivers\mtd\nand\nand_util.c:nand_write_skip_bad()函数

if (!need_skip &&!(flags & WITH_DROP_FFS)) {

rval = nand_write (nand, offset, length, buffer);

这里如果没有坏块而且没有指定WITH_DROP_FFS标志就执行nand_write (nand, offset,length, buffer);

而我们需要执行write_oob(nand, offset, &ops);所以应该加上之前传入的参数

if (!need_skip &&!(flags & WITH_DROP_FFS) && !(flags &WITH_YAFFS_OOB))

ops.mode = MTD_OOB_RAW; /* 原来为AUTO,应该为原始 */

rval =nand->write_oob(nand, offset, &ops);

if (rval)       /* 返回0成功,非0失败,之前那样就只写了第一页 */

break;

重新编译重新烧写yaffs文件系统

TQ2440 # tftp 32000000rootfs.yaffs;nand erase.part rootfs;nand write.yaffs 32000000 rootfs $filesize

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'rootfs.yaffs'.

Load address: 0x32000000

Loading: T#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#############################################

done

Bytes transferred = 6376128(614ac0 hex)

NAND erase.part: device 0offset 0x360000, size 0xfca0000

Skipping bad block at  0x08260000

Erasing at 0xffe0000 -- 100%complete.

OK

NAND write: device 0 offset0x360000, size 0x614ac0

6376128 bytes written: OK

TQ2440 # res

resetting ...

U-Boot 2012.04.01 (Dec 312012 - 19:45:23)

CPUID: 32440001

FCLK:      400 MHz

HCLK:      100 MHz

PCLK:       50 MHz

DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stopautoboot:  0

NAND read: device 0 offset0x60000, size 0x300000

3145728 bytes read: OK

## Booting kernel fromLegacy Image at 32000000 ...

Image Name:  Linux-2.6.36.4

Created:     2012-12-31  10:56:09 UTC

Image Type:  ARM Linux Kernel Image (uncompressed)

Data Size:   2186324 Bytes = 2.1 MiB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done,booting the kernel.

Linux version 2.6.36.4(root@zjh) (gcc version 4.4.3 (ctng-1.6.1) ) #5 Mon Dec 31 18:55:35 CST 2012

CPU: ARM920T [41129200]revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVTinstruction cache

Machine: SMDK2440

Memory policy: ECC disabled,Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, Copyright2004 Simtec Electronics

S3C244X: core 400.000 MHz,memory 100.000 MHz, peripheral 50.000 MHz

CLOCK: Slow mode (1.500MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zoneorder, mobility grouping on.  Totalpages: 16256

Kernel command line:root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200

PID hash table entries: 256(order: -2, 1024 bytes)

Dentry cache hash table entries:8192 (order: 3, 32768 bytes)

Inode-cache hash tableentries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60532k/60532kavailable, 5004k reserved, 0K highmem

Virtual kernel memorylayout:

vector : 0xffff0000 - 0xffff1000   (   4 kB)

fixmap : 0xfff00000 - 0xfffe0000   ( 896kB)

DMA    : 0xffc00000 - 0xffe00000   (   2 MB)

vmalloc : 0xc4800000 - 0xe0000000   ( 440 MB)

lowmem : 0xc0000000 - 0xc4000000   (  64 MB)

modules : 0xbf000000 - 0xc0000000   (  16MB)

.init : 0xc0008000 - 0xc0028000   ( 128 kB)

.text : 0xc0028000 - 0xc03e8000   (3840 kB)

.data : 0xc0400000 - 0xc0422b80   ( 139 kB)

Hierarchical RCUimplementation.

RCU-based detection of stalled CPUs isdisabled.

Verbose stalled-CPUs detection isdisabled.

NR_IRQS:85

irq: clearing subpendingstatus 00000002

Console: colour dummy device80x30

console [ttySAC0] enabled

Calibrating delay loop...199.47 BogoMIPS (lpj=498688)

pid_max: default: 32768minimum: 301

Mount-cache hash tableentries: 512

CPU: Testing write buffercoherency: ok

gpiochip_add: gpios 288..303(GPIOK) failed to register

gpiochip_add: gpios 320..334(GPIOL) failed to register

gpiochip_add: gpios 352..353(GPIOM) failed to register

NET: Registered protocolfamily 16

S3C Power Management,Copyright 2004 Simtec Electronics

S3C2440: Initialisingarchitecture

S3C2440: IRQ Support

S3C24XX DMA Driver,Copyright 2003-2006 Simtec Electronics

DMA channel 0 at c4808000, irq33

DMA channel 1 at c4808040,irq 34

DMA channel 2 at c4808080,irq 35

DMA channel 3 at c48080c0,irq 36

S3C244X: Clock Support, DVSoff

bio: create slab<bio-0> at 0

SCSI subsystem initialized

usbcore: registered newinterface driver usbfs

usbcore: registered newinterface driver hub

usbcore: registered newdevice driver usb

s3c-i2c s3c2440-i2c: slaveaddress 0x10

s3c-i2c s3c2440-i2c: busfrequency set to 97 KHz

s3c-i2c s3c2440-i2c: i2c-0:S3C I2C adapter

Advanced Linux SoundArchitecture Driver Version 1.0.23.

NET: Registered protocolfamily 2

IP route cache hash tableentries: 1024 (order: 0, 4096 bytes)

TCP established hash tableentries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries:2048 (order: 1, 8192 bytes)

TCP: Hash tables configured(established 2048 bind 2048)

TCP reno registered

UDP hash table entries: 256(order: 0, 4096 bytes)

UDP-Lite hash table entries:256 (order: 0, 4096 bytes)

NET: Registered protocolfamily 1

RPC: Registered udptransport module.

RPC: Registered tcptransport module.

RPC: Registered tcp NFSv4.1backchannel transport module.

NetWinder Floating PointEmulator V0.97 (extended precision)

JFFS2 version 2.2. (NAND)(SUMMARY)  © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat,Inc.

msgmni has been set to 118

io scheduler noop registered

io scheduler deadlineregistered

io scheduler cfq registered(default)

Console: switching to colourframe buffer device 30x40

fb0: s3c2410fb frame bufferdevice

lp: driver loaded but nodevices found

ppdev: user-space parallelport driver

Serial: 8250/16550 driver, 4ports, IRQ sharing enabled

s3c2440-uart.0:s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1:s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2:s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

brd: module loaded

loop: module loaded

Uniform Multi-Platform E-IDEdriver

ide-gd driver 1.18

ide-cd driver 5.00

S3C24XX NAND Driver, (c)2004 Simtec Electronics

s3c24xx-nand s3c2440-nand:Tacls=1, 10ns Twrph0=3 30ns, Twrph1=1 10ns

s3c24xx-nand s3c2440-nand:NAND soft ECC

NAND device: ManufacturerID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for badblocks

Bad eraseblock 1043 at0x000008260000

Creating 4 MTD partitions on"NAND":

0x000000000000-0x000000040000: "u-boot"

0x000000040000-0x000000060000: "params"

0x000000060000-0x000000360000: "kernel"

0x000000360000-0x000010000000: "rootfs"

dm9000 Ethernet Driver,V1.31

usbmon: debugfs is notavailable

ohci_hcd: USB 1.1 'Open'Host Controller (OHCI) Driver

s3c2410-ohci s3c2410-ohci:S3C24XX OHCI

s3c2410-ohci s3c2410-ohci:new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci:irq 42, io mem 0x49000000

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 portsdetected

usbcore: registered newinterface driver libusual

usbcore: registered newinterface driver usbserial

USB Serial supportregistered for generic

usbcore: registered newinterface driver usbserial_generic

usbserial: USB Serial Drivercore

USB Serial supportregistered for FTDI USB Serial Device

usbcore: registered newinterface driver ftdi_sio

ftdi_sio: v1.6.0:USB FTDISerial Converters Driver

USB Serial supportregistered for pl2303

usbcore: registered newinterface driver pl2303

pl2303: Prolific PL2303 USBto serial adaptor driver

mice: PS/2 mouse devicecommon for all mice

S3C24XX RTC, (c) 2004,2006Simtec Electronics

S3C2410 Watchdog Timer, (c)2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt:watchdog inactive, reset disabled, irq enabled

No device for DAI UDA134X

No device for DAIs3c24xx-i2s

ALSA device list:

No soundcards found.

TCP cubic registered

NET: Registered protocolfamily 17

drivers/rtc/hctosys.c:unable to open rtc device (rtc0)

yaffs: dev is 32505859 nameis "mtdblock3" rw

yaffs: passed flags""

VFS: Mounted root(yaffs2 filesystem) on device 31:3.

Freeing init memory: 128K

Please press Enter toactivate this console.

Processing /etc/profile...

Done

[root@tq2440 /]#

u-boot-2012.04.01移植到TQ2440相关推荐

  1. u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统

    一.支持yaffs烧写文件系统 先直接烧写试一下 TQ2440 # nand write.yaffs32000000 rootfs $filesize NAND write: device 0 off ...

  2. u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统

    一.添加分区信息并启动jffs2文件系统 烧写之前的内核看输出分区信息 TQ2440 # tftp 32000000uImage dm9000 i/o: 0x20000000, id:0x90000a ...

  3. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  4. ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

    继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...

  5. (2012.01.12-2012.04.01)八十二天的学习小记

    (2012.01.12-2012.04.01)八十二天的学习小记   哈哈,原来又是过了八十二个日子了,真快啊~这次发的学习小记日期记录时间有点长,回看1月份的东西,原来已经隔了八十多个日子了,对于这 ...

  6. u-boot-2012.04.01移植(七)提供nor flash支持

    无论系统从NOR启动还是从NAND启动,都会打印相同的错误信息 Flash:*** failed *** ### ERROR ### Please RESET the board 正常的打印信息应该是 ...

  7. uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  8. uboot研读笔记 | 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  9. 移植u-boot-2012.04.01到JZ2440(二:分析启动流程)

    目录 2. 分析启动流程 2.1 u-boot.lds链接脚本 2.2 start.S启动文件     2.2.1 设置异常向量表     2.2.2 设置SVC管理模式.关看门狗.关中断.设置时钟频 ...

最新文章

  1. c语言程序改错类型,C语言程序改错总结
  2. VTK:PolyData之Curvatures
  3. 爆发前的最后按钮 白鹭推HTML5首款生态产品Egret Runtime
  4. 新建用户、付权限命令
  5. plsql developer 创建表空间和临时表
  6. csapp bufbomb实验
  7. 注解实现json序列化的时候自动进行数据脱敏
  8. oracle 11 启动不了,求助,oracle 11g 启动失败,求大神帮忙看看,谢谢
  9. 在excel工作表中c1单元格_Excel工作表中的11个逻辑函数应用技巧,中文解读,动图演示!...
  10. 线上python课程一般多少钱-培训python多少钱 ?
  11. 测试中国地理常识(中文版)
  12. 编辑按钮 php,自动编辑按钮-海豚PHP1.0.6完全开发手册-基于ThinkPHP5.0.10的快速开发框架...
  13. SSH学习之MVC和三层架构的区别
  14. js中函数传参的问题
  15. 北京16个山水美景| 清明小长假走起吧!
  16. Google点击没有反应怎么办?Google卸载不了怎么办?Google安装不了怎么办?
  17. (实战)决策树例子+画图
  18. 2018湖南计算机对口高考C语言答案,2018年湖南省对口高考C语言试题
  19. 华为云耀服务器与弹性云服务器的区别
  20. 注册表编辑器被改这样恢复

热门文章

  1. 学习初步练习基于c语言的socket编程
  2. 股票分时成交明细接口的数据怎么看?
  3. 什么是MySQL的预编译?
  4. [转]绝对地址和相对地址的区别,为什么要采用绝对地址?
  5. qsort vs sort
  6. 二、创建基础的drill集群
  7. WPS文字 JSA 学习笔记 - 批量设置表格
  8. 基于密度的聚类方法-OPTICS
  9. 哥们别逗 了,写个脚本那真不叫运维自动化! 【转载】
  10. 服务器开发macbook综述