|  | 
 
|   
 我使用4510b + SST39V160(接nCRS0)
 bootloader用的是lumit提供的1.0.0 (www.lumit.org)
 
 在linux-2.4.x\drivers\mtd\maps目录中建了一个s3c4510b.c,相关信息如下:
 
 ......
 #define WINDOW_ADDR 0x01000000 | 0x04000000  // 不知这个地址有没有问题
 #define WINDOW_SIZE 0x200000
 #define BUSWIDTH 2
 .......
 
 /*
 * MTD 'PARTITIONING' STUFF
 */
 //分区信息
 static struct mtd_partition s3c4510b_partitions[] = {
 {
 name: "BOOTLOADER (32K)",
 size: 0x8000,
 offset: 0x00000,
 mask_flags: MTD_WRITEABLE
 },
 {
 name: "KERNEL (1024K)",
 size: 0x100000,
 offset: 0x8000
 },
 {
 name: "USER (992K)",
 size: 0xF8000,
 offset: 0x108000
 }
 };
 
 
 在/mtd/chips/jedec_probe.c中添加设备信息
 {
 mfr_id: MANUFACTURER_SST,
 dev_id: SST39LF160,
 name: "SST 39LF/VF160",
 DevSize: SIZE_2MiB,
 //CmdSet: P_ID_AMD_STD,
 NumEraseRegions: 1,
 /* Split into two regions to get around the 256-region restriction */
 regions: {ERASEINFO(0x10000,32)
 }
 }
 
 在linux-2.4.x/include/linux/mtd/mtd.h中修改了:
 
 #define MTD_BLOCK_MAJOR 30
 
 在vendors/Samsung/4510B/Makefiel中添加
 DEVICES = \
 tty,c,5,0 console,c,5,1 cua0,c,5,64 cua1,c,5,65 \
 mtd0,c,90,0 mtd1,c,90,1 mtd2,c,90,2 \
 mtdblock0,b,30,0 mtdblock1,b,30,1 mtdblock2,b,30,2 \
 mem,c,1,1 kmem,c,1,2 null,c,1,3 \
 zero,c,1,5 random,c,1,8 urandom,c,1,9  \
 
 
 修改内核配置,内容如下:
 # Memory Technology Devices (MTD)
 CONFIG_MTD=y
 CONFIG_MTD_DEBUG=y
 CONFIG_MTD_DEBUG_VERBOSE=3
 CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 # CONFIG_MTD_BOOTLDR_PARTS is not set
 # CONFIG_MTD_AFS_PARTS is not set
 CONFIG_MTD_CHAR=y
 CONFIG_MTD_BLOCK=y
 CONFIG_MTD_CFI=y
 CONFIG_MTD_JEDECPROBE=y
 CONFIG_MTD_GEN_PROBE=y
 # CONFIG_MTD_CFI_ADV_OPTIONS is not set
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CFI_AMDSTD=y
 # CONFIG_MTD_RAM is not set
 # CONFIG_MTD_ROM is not set
 # CONFIG_MTD_ABSENT is not set
 # CONFIG_MTD_OBSOLETE_CHIPS is not set
 # CONFIG_MTD_AMDSTD is not set
 # CONFIG_MTD_SHARP is not set
 # CONFIG_MTD_JEDEC is not set
 # CONFIG_MTD_PHYSMAP is not set
 # CONFIG_MTD_UCLINUX is not set
 # CONFIG_MTD_DRAGONIX is not set
 # CONFIG_MTD_NETtel is not set
 # CONFIG_MTD_SNAPGEODE is not set
 # CONFIG_MTD_NETteluC is not set
 # CONFIG_MTD_KeyTechnology is not set
 # CONFIG_MTD_NORA is not set
 # CONFIG_MTD_ARM_INTEGRATOR is not set
 # CONFIG_MTD_CDB89712 is not set
 # CONFIG_MTD_SA1100 is not set
 # CONFIG_MTD_DC21285 is not set
 # CONFIG_MTD_IQ80310 is not set
 # CONFIG_MTD_EPXA10DB is not set
 # CONFIG_MTD_AUTCPU12 is not set
 # CONFIG_MTD_IXP425 is not set
 CONFIG_MTD_S3C4510B=y
 # CONFIG_MTD_PCI is not set
 # Self-contained MTD device drivers
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_SLRAM is not set
 # CONFIG_MTD_MTDRAM is not set
 # CONFIG_MTD_BLKMTD is not set
 # CONFIG_MTD_DOC1000 is not set
 # CONFIG_MTD_DOC2000 is not set
 # CONFIG_MTD_DOC2001 is not set
 # CONFIG_MTD_DOCPROBE is not set
 # CONFIG_MTD_NAND is not set
 还有文件系统什么的配置信息这里没有写出来
 
 但是启动后发现:
 
 Linux version 2.4.20-uc0 ([email protected]) (gcc v5Processor: Samsung S3C4510B revision 6
 Architecture: SNDS100
 On node 0 totalpages: 4096
 zone(0): 0 pages.
 zone(1): 4096 pages.
 zone(2): 0 pages.
 Kernel command line: root=/dev/rom0
 Calibrating delay loop... 49.76 BogoMIPS
 Memory: 16MB = 16MB total
 Memory: 14148KB available (1800K code, 173K data, 40K init)
 Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)
 Inode cache hash table entries: 1024 (order: 1, 8192 bytes)
 Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
 Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
 Page-cache hash table entries: 4096 (order: 2, 16384 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
 Starting kswapd
 JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB.
 Samsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options edttyS00 at 0x3ffd000 (irq = 5) is a S3C4510B
 ttyS01 at 0x3ffe000 (irq = 7) is a S3C4510B
 Blkmem copyright 1998,1999 D. Jeff Dionne
 Blkmem copyright 1998 Kenneth Albanowski
 Blkmem 1 disk images:
 0: E3C50-1D404F [VIRTUAL E3C50-1D404F] (RO)
 RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize
 Samsung S3C4510 Ethernet driver version 0.1 (2002-02-20) <[email protected]>
 eth0: 00:40:95:36:35:34
 //***************下面有问题
 s3c4510b flash device: 200000 at 5000000
 CFI: Found no S3C4510B flash device device at location zero
 init_mtdchar: allocated major number 90.
 init_mtdblock: allocated major number 30.
 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 1024 bind 1024)
 VFS: Mounted root (romfs filesystem) readonly.
 Freeing init memory: 40K
 Shell invoked to run file: /etc/rc
 Command: hostname Samsung
 Command: /bin/expand /etc/ramfs.img /dev/ram0
 Command: /bin/expand /etc/ramfs2048.img /dev/ram1
 Command: mount -t proc proc /proc
 Command: mount -t ext2 /dev/ram0 /var
 Command: mount -t ext2 /dev/ram1 /ramdisk
 Command: chmod 777 /ramdisk
 Command: mkdir /var/config
 Command: mkdir /var/tmp
 Command: mkdir /var/log
 Command: mkdir /var/run
 Command: mkdir /var/lock
 Command: ifconfig lo 127.0.0.1
 Command: route add -net 127.0.0.0 netmask 255.255.255.0 lo
 Command: ifconfig eth0 192.168.168.101 netmask 255.255.255.0 up
 Command: cat /etc/motd
 Welcome to
 ____ _  _
 /  __| ||_|
 _   _| |  | | _ ____  _   _  _  _
 | | | | |  | || |  _ \| | | |\ \/ /
 | |_| | |__| || | | | | |_| |/    \
 |  ___\____|_||_|_| |_|\____|\_/\_/
 | |
 |_|
 
 For further information check:
 http://www.uclinux.org/
 
 Command: /bin/sh
 
 Sash command shell (version 1.1.1)
 /> Reading command line: Bad file descriptor
 pid 19: failed 256
 Execution Finished, Exiting
 init: Booting to single user mode
 
 Sash command shell (version 1.1.1)
 />
 
 
 后来在ftp://ftp.uk.linux.org/pub/people/dwmw2/mtd/cvs/mtd/mtd-jffs-HOWTO.txt中发现了下面的话
 
 Don't be fooled by the message:
 "physmap flash device
  xxxx at yyyyyyy" 
 This is just reporting what parameters you have compiled into the
 system (see above under "Physical mapping of flash chips".
 
 If your flash is really detected then it will print something like:
 "Physically mapped flash: Found bla-bla-bla at location 0".
 
 If no device is found, then physmap will refuse to load as a module!
 This is not a problem with compiling it as a module or with physmap or
 modprobe itself. Unfortunately this is the hard part. You have to dive
 into the routine "do_cfi_probe()" called from physmap.c.
 
 Caution! physmap.c uses ioremap() to map the physical memory into an
 area of logical memory. If your processor has a cache in it, then
 modify physmem to use ioremap_nocache(), else you will tear your hair
 out as your flash chips will never be detected.
 
 This routine is called cfi_probe() and is in the file "cfi_probe.c"
 under mtd/kernel/
 
 我还在一篇文章里看到这样一句话
 #define WINDOW_ADDR 0x01000000 | 0x04000000  //注意Flash分区地址必须是non-cacheble
 
 各位大虾,这是怎么回事啊?谢谢了!
 | 
 |