Fs2410采用S3C2410的嵌入式微处理器,基于ARM920T内核,主频203MHz。
外部存储器,内存:64M字节,地址0x30000000;
NOR Flash: 2M字节;
NAND Flash: 64M字节;
S3C2410支持两种启动方式:一种是从NAND FLASH启动;另外一种是从外部片选的Nor Flash启动
硬件资源分配图如下所示:
目前,系统采用u-boot-1.3.4引导linux内核,同时用到了nor flash和nand flash。由nor flash来片选启动。
Linux 2.6.26.5 arch/arm/plat-s3c24xx/common-smdk.c中nand flash分区定义如下:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Uboot-1.3.4",
.size = 0x80000,
.offset = 0,
},
[1] = {
.name = "Linux Kernel 2.6.26.5",
.offset = 0x00080000,
.size = 0x200000,
},
[2] = {
.name = "Rootfs jffs2",
.offset = 0x280000,
.size = 0x1800000,
},
[3] = {
.name = "Roofts user",
.offset = 0x1a80000,
.size = SZ_1M*24,
},
}
系统启动的过程如下:先有nor flash从地址0启动,运行u-boot,然后读取存储在nand flash中的内核,加载到内存0x3000 8000,然后启动内核,最后内核加载jffs2根文件系统,整个系统就跑起来了,理想情况是u-boot也从nand中启动就最好了。
从u-boot中加载linux kernel的配置,设置启动的参数
set bootcmd 'nand read 0x30008000 0x80000 0x0020 0000;bootm 0x30008000'
具体含义是从地址0x80000处,读取长度为0x200000的数据复制到内存0x30008000,然后从该内存地址启动;
Setenv bootargs root=/dev/mtdblock2 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc
Saveenv
1)Nand erase 0x8 0000 0x20 0000 //从地址0x8000起,删除长度0x200000, 2M;
2)Nand write 0x30008000 0x8 0000 0x20 0000 //从内存30008000的数据写到地址8000上,长度是200000
3)nand read 0x30008000 0x8 0000 0x0020 0000 //从地址80000将长度为20 0000的数据复制到3000 8000
Mkfs.jffs2 –r /nfsrootfs/rootfs –o rootfs.jffs2 –e 0x4000 --pad=0x1800000 -n
/nfsrootfs/rootfs根文件系统的目录
Rootfs.jffs2 生成的映像文件
-e 0x4000 nand flash的块大小
0x1800000 该大小应该 >= 生成的映像文件的大小,
在将映像文件写到nand flash上时,该数值和写入的空间应该一致,否则启动时会发生错误,错误如下: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x008d4020: 0x0004 instmtd->read(0x3c08 bytes from 0x8d83f8) returned ECC error
mtd->read(0x400 bytes from 0x8dc000) returned ECC error
-n 如果挂载后出现 CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0 , 则需要该 –n 的参数
启动时把/bin/sh文件删掉了,产生错误:
cannot run '-/bier to activate this console.
将jffs2根文件系统映像写入nand flash
Tftp 30008000 rootfs.jffs2 //通过u-boot将映像导到内存30008000
Nand write.jffs2 30008000 280000 180 0000 //将在内存中的映像保存到地址为280000,长度为1800000的nand flash空间。