1、为linux-2.6.33.7内核打上支持yaffs文件系统的补丁。
提前下载好linux-2.6.33.7.tar.bz2和 yaffs2.tar.gz
#tar -xjvf linux-2.6.33.7.tar.bz2
#tar -xzvf yaffs2.tar.gz
#cd yaffs2
#./patch-ker.sh c ../linux-2.6.33.7/
Updating ../linux-2.6.33.7//fs/Kconfig
Updating ../linux-2.6.33.7//fs/Makefile
出现上述两行字样,则表示已经打好补丁。
2、修改顶层Makefile,使内核支持arm平台。
为了让内核编译成arm平台可用的内核,需在顶层的Makefile上做出相应的修改:
#vim Makefile
把
ARCH ?= $(SUBARCH) CROSS_COMPILE ?=
修改为:
ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux-
3、修改机器码,要和FL2440的机器码相同。
飞凌开发板的bootloader默认的机器码是193,所以我们在使用smdk2440机器的时候,需要修改机器码。修改arch/arm/tools/ mach-types。
#vim arch/arm/tools/ mach-types
将该行注释:
s3c2410 ARCH_S3C2410 S3C2410 182
然后将以下行:
s3c2440 ARCH_S3C2440 S3C2440 362
修改为:
s3c2440 ARCH_S3C2440 S3C2440 193
4、增加devfs设备文件系统的支持。
#vim fs/Kconfig
找到以下行:
menu "Pseudo filesystems"
在此行后面增加以下内容:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
5、修改2440晶振的频率。
如果用默认的晶振频率,串口将会输出乱码,而无法看到启动信息。
#vim arch/arm/mach-s3c2440/mach-smdk2440.c
将如下行注释:
s3c24xx_init_clocks(16934400);
并在原位置增加一行为:
s3c24xx_init_clocks(12000000);
6、修改NandFlash的分区信息和硬件信息。
一、内核中关于nandflash的分区必须跟bootloader分区一样;
二、文件系统fs_yaffs必须在第4个分区,即索引号为3。其他一些分区信息可以按需要选择,如下:
# vim arch/arm/plat-s3c24xx/common-smdk.c
找到static struct mtd_partition smdk_default_nand_part[]的结构体,将内容修改为:
[0] = {
.name = "boot",
.size = 0x00020000,
.offset = 0
},
[1] = {
.name = "bootParam",
.size = 0x00060000,
.offset = 0x00020000,
},
[2] = {
.name = "Kernel",
.size = 0x00300000,
.offset = 0x00500000,
},
[3] = {
.name = "fs_yaffs",
.size = 0x03c00000,
.offset = 0x00800000,
},
[4] = {
.name = "eboot",
.size = 0x00080000,
.offset = 0x04400000,
},
[5] = {
.name = "WINCE",
.size = 0x03b80000,
.offset = 0x04480000,
}
<!--[if !supportLists]--> 7、 <!--[endif]-->关闭ECC校验。修改文件drivers/mtd/nand/s3c2410.c
# vim drivers/mtd/nand/s3c2410.c
将以下行:
chip->ecc.mode = NAND_ECC_SOFT;
修改为:
chip->ecc.mode = NAND_ECC_NONE;
8、修改nandflash驱动,适应FL2440开发板上的K9F1G08 128的flash芯片。
# vi drivers/mtd/nand/nand_bbt.c
将以下两个部分进行修改
static struct nand_bbt_descr largepage_memorybased = {
.options = 0,
.offs = 0,
.len = 1, // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash
.pattern = scan_ff_pattern
};
static struct nand_bbt_descr largepage_flashbased = {
.options = NAND_BBT_SCAN2NDPAGE,
.offs = 0,
.len = 1, // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash
.pattern = scan_ff_pattern
};
至此,已经为fl2440配置好一个简单的内核,此时将配置信息写入config文件:
#make s3c2410_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/basic/hash
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
12、配置内核。
# make menuconfig
配置CPU选项(记得跟S3C2440 Machines平级的其它以及子项都不选)去掉S3C2400 Machines、S3C2410 Machines(留下
- General setup --->
- [*] Configure standard kernel features (for small systems) --->
- [*] Enable 16-bit UID system calls
- [*] Sysctl syscall support
- [*] Load all symbols for debugging/ksymoops
- [ ] Include all symbols in kallsyms
- [ ] Do an extra kallsyms pass
- System Type --->
- S3C2400 Machines --->
- S3C2410 Machines --->
- [*] SMDK2410/A9M2410
- [ ] IPAQ H1940
- [ ] Acer N30 family
- [ ] Simtec Electronics BAST (EB2410ITX)
- [ ] NexVision OTOM Board
- [ ] AML M5900 Series
- [ ] TCT Hammer Board
- [ ] Thorco
- S3C2412 Machines --->
- [ ] Logitech Jive
- [ ] SMDK2413
- [ ] SMDK2412
- [ ] VMSTMS
- S3C2440 Machines --->
- [ ] Simtec Electronics ANUBIS
- [ ] Simtec IM2440D20 (OSIRIS) module
- [ ] HP iPAQ rx3715
- [*] SMDK2440
- [ ] NexVision NEXCODER 2440 Light Board
- [*] SMDK2440 with S3C2440 CPU module
- [ ] Avantech AT2440EVB development board
- [ ] MINI2440 development board
- S3C2442 Machines --->
- [ ] SMDM2440 with S3C2442 CPU module
- [ ] Openmoko GTA02 / Freerunner phone
- S3C2443 Machines --->
- [ ] SMDK2443
- Boot options --->
- (0x0) Compressed ROM boot loader base address
- (0x0) Compressed ROM boot loader BSS address
- (noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 Default command string
- [ ] Kernel Execute-In-Place from ROM
- [ ] Kexec system call (EXPERIMENTAL)
- Device Drivers --->
- <*> Memory Technology Device (MTD) support --->
- <*> NAND Device Support --->
- [ ] Verify NAND page writes
- [ ] NAND ECC Smart Media byte order
- [ ] Enable chip ids for obsolete ancient NAND devices
- < > GPIO NAND Flash driver
- <*> NAND Flash support for Samsung S3C SoCs
- [ ] Samsung S3C NAND driver debug
- [ ] Samsung S3C NAND Hardware ECC
- [ ] Samsung S3C NAND IDLE clock stop
- < > DiskOnChip 2000, Millennium and Millennium Plus (NAND reimplementation)(EXPERIMENTAL)
- < > Support for NAND Flash Simulator
- < > Support for generic platform NAND driver
- < > MTD driver for Olympus MAUSB-10 and Fujifilm DPC-R1
- File systems --->
- [*] Miscellaneous filesystems --->
- <*> YAFFS2 file system support
- -*- 512 byte / page devices
- -*- 2048 byte (or larger) / page devices
- [*] Autoselect yaffs2 format
- [*] Cache short names in RAM