ARM Linux移植攻略之Linux 2.6.30.4移植TE2440II开发板

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
宿主机:Ubuntu9.10
目标机:s3c2440
交叉编译器:arm-linux-gcc-4.3.2
交叉编译器路径:/usr/local/arm/4.3.2
移植内核版本:linux-2.6.30.4
文件系统类型: yaffs2

步骤包括:

1)linux内核打上yaffs2补丁

2)修改机器码

3)修改目标板的arch和编译器路径,

4)增加devfs文件管理器支持

5)修改晶振频率

6)修改MTD分区

7)关闭ECC校验

8)修改nandflash驱动

9)配置内核

首先,从官网上下载linux-2.6.30.4的内核。
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
可以找到。

新建目录mkdir /home/haker,将内核源码包解压到hacker/目录下

tar –zxvf linux-2.6.30.4.tar.gz

1)给内核打jaffs2补丁

下载最新的驱动  http://www.linuxidc.com/Linux/2011-06/37643.htm

解压到/home/hacker/

tar –zxvf yaffs2.tar.gz

进入目录

cd yaffs2

给内核打补丁

./patch-ker.sh c /home/hacker/linux-2.6.30.4

加上c 他会自动解压到后面的目录中

成功后会打印信息:

Updating /home/hacker/linux-2.6.30.4/fs/Kconfig

Updating /home/hacker/linux-2.6.30.4/fs/Makefile

2)修改机器码

暂时我使用的是飞凌的boot,自己的boot还没有完全做好,飞凌boot的默认机器码是193,修改arch/arm/tools/mach-types,将

s3c2410 ARCH_S3C2410 S3C2410 193  删掉

然后将

s3c2440 ARCH_S3C2440 S3C2440 362

修改为 
s3c2440 ARCH_S3C2440 S3C2440 193

3)修改目标板的arch和编译器路径

修改linux/2.6.30.4下的Makefile

ARCH = $(SUBARCH)

CROSS_COMPILE ?=

修改成

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux-

4)增加devfs文件管理器支持

修改fs/Kconfig,找到

menu “Pseudo filesystems”

添加

config DEVFS_FS

      bool “/dev file system support (OBSOLETE)”

      default y

config DEVFS_MOUNT

bool “Automatially mount at bool”

default

depends on DEVFS_FS

5)修改晶振频率

arch/arm/mach-s3c2440/mach-smdk2440.c

/*s3c24xx_init_clocks(16934400);*/  s3c24xx_init_clocks(12000000); 

6)修改MTD分区,由于自己的uboot还没有完全做好,暂时用飞凌的boot的分区,

修改文件arch/arm/plat-s3c24xx/common-smdk.c

static struct mtd_partition smdk_default_nand_part[] = {

        [0] = {

                .name        = “Boot”,

                .size        = 0x00100000,

                .offset = 0

        },

        [1] = {

                .name        = “MyApp”,

                .size        = 0x003c0000,

                .offset = 0x00140000,

        },

        [2] = {

                .name        = “Kernel”,

                .size        = 0x00300000,

                .offset = 0x00500000,

        },

        [3] = {

                .name        = “fs_yaffs”,

                .size        = 0x03c00000,         //60M

                .offset = 0x00800000,

        },       

        [4] = {

                .name        = “WINCE”,

                .size        = 0x03c00000,

                .offset = 0x04400000,

        }

};

7)关闭ECC校验

文件drivers/mtd/nand/s3c2410.c

函数:s3c2410_nand_init_chip

/*chip->ecc.mode = NAND_ECC_SOFT; */  chip->ecc.mode = NAND_ECC_NONE;

这个有两个 软件校验和硬件校验都要关掉

8)修改nandflash驱动,修改drivers/mtd/nand下面的nand_bbt.c文件:

static struct nand_bbt_descr largepage_memorybased = {

        .options = 0,

        .offs = 0,

        .len = 1,           // 原数值为2,支持2K每页的flash修改为1K9F1G08K9F2G082k每页的flash

        .pattern = scan_ff_pattern

};

static struct nand_bbt_descr largepage_flashbased = {

        .options = NAND_BBT_SCAN2NDPAGE,

        .offs = 0,

        .len = 1,           //原数值为2,支持2K每页的flash修改为1K9F1G08K9F2G082k每页的flash

        .pattern = scan_ff_pattern

};

9)配置内核

make menuconfig

首先加载s3c24xx系列的通用配置,然后在此基础上修改

配置完后将配置文件保存为.config,这样方便下次make menuconfig时默认加载上次配置过的文件

 交叉编译内核

make zImage

如果没有任何错误,编译出来的内核在<span lang="

未经允许不得转载:演道网 » ARM Linux移植攻略之Linux 2.6.30.4移植TE2440II开发板

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册