Linux-2.6.28内核移植及Yaffs文件系统制作 for FL2440(一)

开发板:FL2440

交叉编译工具:arm-linux-gcc-3.3.2

编译平台:rhel-server-6.0

Linux内核:linux-2.6.28.7

busybox-1.1.3

文件系统:Yaffs2

文件系统制作工具:http://arm9download.cncncn.com/linux/mkyaffs2image.tgz


内核制作

1.给内核打上补丁,使内核对yaffs2文件系统支持。

下载最新的驱动http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz?view=tar

 

解压yaffs2和linux-2.6.28.7放在同一根目录,执行:

tar zxvfyaffs2.tar.gz

cd yaffs2

./patch-ker.sh  c  ../linux-2.6.28.7

 

成功后打印信息:

 

   Updating /file/fl/linux-2.6.28.7/fs/Kconfig

   Updating /file/fl/linux-2.6.28.7/fs/Makefile

 

2.修改机器码。进入内核目录,修改机器码跟bootloader的机器码一致(FL2440为193)

 [root@ localhost linux-2.6.28.7]#vi arch/arm/tools/mach-types

首先删除以下行:

s3c2410                ARCH_S3C2410            S3C2410                182

然后将以下行:

s3c2440                ARCH_S3C2440            S3C2440                362

修改为:

s3c2440                ARCH_S3C2440            S3C2440                193

3.指定目标板machine、编译器和编译器路径。修改Makefile文件,注意将CROSS_COMPILE对应到你系统中交叉编译器地址

[root@ localhost linux-2.6.28.7]# vi Makefile

将两行:

ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?=

修改为以下两行:

ARCH            ?= arm
CROSS_COMPILE   ?=/usr/local/arm/3.3.2/bin/arm-linux-

4.增加devfs文件管理器的支持。

[root@ localhost linux-2.6.28.7]#vi fs/Kconfig

找到以下行:

menu "Pseudo filesystems"

在此行后面增加以下内容:

config DEVFS_FS
         bool "/dev file system support(OBSOLETE)"
         default y   
config DEVFS_MOUNT
bool "Automatically mount atboot"
default y
depends on DEVFS_FS

5.修改晶振频率( 可解决打印信息乱码问题 )。修改文件arch/arm/mach-s3c2440/mach-smdk2440.c

[root@ localhost linux-2.6.28.7]#vi arch/arm/mach-s3c2440/mach-smdk2440.c

将如下行:

s3c24xx_init_clocks(16934400);

修改为:

s3c24xx_init_clocks(12000000);

6.修改MTD分区。打开文件arch/arm/plat-s3c24xx/common-smdk.c,此处注意两个地方:

一、必须跟bootloader分区一样。

二、文件系统fs_yaffs必须在第4个分区,即索引号为3。

其他一些分区信息可以不要,如下:

[root@ localhost linux-2.6.28.7]#vi arch/arm/plat-s3c24xx/common-smdk.c

找到static struct mtd_partitionsmdk_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,
        }

7.关闭ECC校验。修改文件drivers/mtd/nand/s3c2410.c

[root@ localhost linux-2.6.28.7]#vi drivers/mtd/nand/s3c2410.c

将以下行:

chip->ecc.mode      = NAND_ECC_SOFT;

修改为:

chip->ecc.mode      = NAND_ECC_NONE;

8.修改nandflash驱动,支持K9F1G08的nandflash。文件为:drivers/mtd/nand/nand_bbt.c

[root@ localhost linux-2.6.28.7]#vi drivers/mtd/nand/nand_bbt.c

将以下两个部分进行修改

static struct nand_bbt_descrlargepage_memorybased = {

        .options = 0,

        .offs = 0,

        .len = 1, //原始值为2,改成1

        .pattern = scan_ff_pattern

};

static struct nand_bbt_descrlargepage_flashbased = {

        .options = NAND_BBT_SCAN2NDPAGE,

        .offs = 0,

        .len = 2, //原始值为2,改成1

        .pattern = scan_ff_pattern

};

9.把s3c2410的默认配置写入config文件(有的yaffs2可能会出错)。

在/ linux-2.6.28.7/arch/arm/configs目录找到s3c2410_defconfig文件放在/linux-2.6.28.7根目录中,执行命令:make s3c2410_defconfig

[root@ localhost linux-2.6.28.7]#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

fs/yaffs2/Kconfig:179: unknownoption "boot"

make[1]: *** [s3c2410_defconfig] 错误 1

make: *** [s3c2410_defconfig] 错误 2

以上出现错误,主要是补丁造成,修改fs/yaffs2/Kconfig的179行,将boot改成bool,即改成如下:

bool "Disable yaffs2 blockrefreshing"

[root@ localhost linux-2.6.28.7]#make s3c2410_defconfig

#

# configuration written to .config

#

10.配置内核,注意System Type中,S3C2440中只选择以下内容即可。

[root@ localhost linux-2.6.28.7]#make menuconfig

配置CPU选项(记得跟S3C2440 Machines平级的其它以及子项都不选)

System Type  --->
   S3C2440Machines  --->
        [*] SMDK2440
        [*] SMDK2440 with S3C2440 CPU module

配置yaffs2选项

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

11.最后制作内核。

[root@WEB188 linux-2.6.33]#make zImage


你可能感兴趣的:(System,makefile,编译器,linux内核,文件管理器,filesystems)