今天搞定了Nandflash在SkyEye 1.3.1上的配置。本来应该很容易搞定了,无奈几经波折才解决所有问题。有些地方还是要注意的。
1. 增加Nanflash只需要在skyeye.conf文件中增加下面一行:
nandflash: type=s3c2410x, name=K9F1208U0B, dump=./nand.dump
配置文件无需做其他改动
2. 编译SkyEye(http://blog.csdn.net/Matrix_Designer/archive/2010/10/18/5949713.aspx )时,cpu主频不能调的太高(第四项的第二部分),否则会出现下面错误:
20 ns is too big for current clock rate 202800
60 ns is too big for current clock rate 202800
s3c24xx-nand s3c2410-nand: cannot get suitable timings
s3c24xx-nand: probe of s3c2410-nand failed with error -22
3. SkyEye中mknandflashdump的源码有BUG(http://blog.csdn.net/Matrix_Designer/archive/2010/10/18/5949713.aspx 中的第九项),需要修改。
4. ArmLinux 2.6.36(http://blog.csdn.net/Matrix_Designer/archive/2010/12/09/6066055.aspx )默认对s3c2410带的K9F1208U0B分了8个区。64M分了8个区,Linux够!@#$%。我用Nandflash主要是为了装载QT库文件的,NTF太慢了,所有只要两个分区就行了(注意第七项的第一部分)。
5. ArmLinux 2.6.36(http://blog.csdn.net/Matrix_Designer/archive/2010/12/09/6066055.aspx )默认对s3c2410带的K9F1208U0B采用了ECC校验。而SkyEye的mknandflashdump在制作dump文件时没有处理ECC,自然校验失败。所以需要关闭ECC(注意第七项的第二部分)。
6. 至于nand.dump的生成,比较麻烦。首先需要jfss2文件系统的制作工具。可以通过下列命令安装:
apt-get install mtd-utils
然后就可以通过命令:
mkfs.jffs2 -r rootfiles/ -o rootfs.jffs2 -e 0x4000 --pad=0x2000000 -n
来生成jfss2文件系统了。
由于我给K9F1208U0B分了两个区(每个区32M),也就需要两个文件系统镜像。可以分别制作,然后拷贝到rootfiles目录下,通过上述命令得到两个jfss2文件系统镜像rootfs1.jffs2和rootfs2.jffs2。然后先让SkyEye自己生成一个空的nand.dump,再通过命令:
mknandflashdump rootfs1.jffs2 nand.dump 0x0
mknandflashdump rootfs2.jffs2 nand.dump 0x2000000
将制作好的文件系统写到nand.dump文件中。
7. 启动SkyEye。两个Nandflash分区分别对应于设备/dev/mtdblock0和/dev/mtdblock1(没有可以自己创建,块设备文件,设别编号分别为31/0和31/1)。通过命令:
mount -t jffs2 /dev/mtdblock0 /nandflash/partition1
mount -t jffs2 /dev/mtdblock1 /nandflash/partition2
即可将两个分区分别挂载到/nandflash/partition1和/nandflash/partition2上了。然后可以通过:
ln -s
建立符号链接来装载QT库文件了。
至此Nandflash已在SkyEye 1.3.1上配置成功。现在的配置文件内容如下:
# skyeye config file for S3C2410X
arch: arm
cpu: arm920t
mach: s3c2410x
# physical memory
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00000024
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x01000000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc1800000, size=0x02800000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
mem_bank: map=I, type=RW, addr=0x19100300, size=0x00000020
net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1, state=on
lcd: type=s3c2410x, mod=gtk
touchscreen: type=s3c2410x, mod=gtk
nandflash: type=s3c2410x, name=K9F1208U0B, dump=./nand.dump
uart:mod=term
dbct:state=on
#log: logon=0, logfile=./sk1.log, start=5000000, end=6000000