linux2.6.33内核移植s3c2410以及搭建交叉编译环境,linux2.6.33内核移植(1)

宿主机:Redhat 9.0

目标机:s3c2440_fl2440

交叉编译器:arm-linux-gcc-3.4.1

交叉编译器路径:/home/thk8246/fl/file

要移植的内核版本:linux-2.6.33

文件系统类型: yaffs2 (目前使用光盘中linux-2.6.28的文件系统touch.yaffs)

个人体会:第一次移植linux内核没有加驱动,但是成功了,有点小高兴!虽然参考了飞凌的官方资料,里面有详细的步骤,但是某些方面还是不懂,比如nandflash驱动,原始值为2,为什么要改成1等等,但是我相信,久而久之,我就知其然,又知其所以然的。因为这linux学习不是一朝一夕之功呀!贵在坚持吗!

2、 将下载的文件存放在/home/thk8246/fl/source中。

3、 分别解压缩:

[root@localhost  source]# tar xzf linux-2.6.33.tar.gz -C ../file

[root@localhost  source]# tar xzf yaffs2.tar.gz -C ../fil

4、 为内核增加yaffs2补丁

[root@localhost  source]# cd ../file

[root@localhost  file]# cd yaffs2

[root@localhost  yaffs2]# ./patch-ker.sh c ../linux-2.6.33/

打印出信息如下,表示内核打补丁成功。

Updating ../linux-2.6.33//fs/Kconfig

Updating ../linux-2.6.33//fs/Makefile

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

[root@localhost  yaffs2]# cd ../linux-2.6.33

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

首先注销以下行:

#s3c2410                 ARCH_S3C2410            S3C2410                 182

然后将以下行:

s3c2440                 ARCH_S3C2440            S3C2440                 362

修改为:

s3c2440                 ARCH_S3C2440            S3C2440                 193

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

[root@localhost  linux-2.6.33]# vi Makefile

将两行:

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?=

修改为以下两行:

ARCH            ?= arm

CROSS_COMPILE   ?=/home/thk8246/fl/file/3.4.1/bin/arm-linux-

7、 增加devfs文件管理器的支持。修改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

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

将如下行:

s3c24xx_init_clocks(16934400);

修改为:

s3c24xx_init_clocks(12000000);

9、 修改MTD分区。打开文件arch/arm/plat-s3c24xx/common-smdk.c,此处注意两个地方:一、必须跟bootloader分区一样,二、文件系统fs_yaffs必须在第4个分区,即索引号为3。其他一些分区信息可以不要,如下:找到static struct mtd_partition smdk_default_nand_part[]的结构体,将内容修改为:

1 static struct mtd_partition smdk_default_nand_part[] =

2  {

3         [0] = {

4                 .name        = "Boot",

5                 .size        = 0x00100000,

6                 .offset = 0

7           },

8         [1] = {

9                 .name        = "MyApp",

10                 .size        = 0x003c0000,

11                 .offset = 0x00140000,

12          },

13         [2] = {

14                 .name        = "Kernel",

15                 .size        = 0x00300000,

16                 .offset = 0x00500000,

17           },

18         [3] = {

//与bootleader一致,否则挂载不上文件系统

19                 .name        = "fs_yaffs",

20                 .size        = 0x03c00000,

21                 .offset = 0x00800000,

22          },

23         [4] = {

24                 .name        = "WINCE",

25                 .size        = 0x03c00000,

26                 .offset = 0x04400000,

27          }

28 };

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

将以下行:

chip->ecc.mode      = NAND_ECC_SOFT;

修改为:

chip->ecc.mode      = NAND_ECC_NONE;

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

将以下两个部分进行修改

static struct nand_bbt_descr largepage_memorybased = {

.options = 0,

.offs = 0,

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

.pattern = scan_ff_pattern

};

static struct nand_bbt_descr largepage_flashbased = {

.options = NAND_BBT_SCAN2NDPAGE,

.offs = 0,

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

.pattern = scan_ff_pattern

};

12、 把s3c2410的默认配置写入config文件。

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

#

下面,开始配置内核。

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

[root@ localhost  linux-2.6.33]# make menuconfig

配置CPU选项(记得与S3C2440 Machines平级的以及它的子项都不选,否则编译时会出现错误的)

System Type  --->

S3C2440 Machines  --->

[*] 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

13、 最后等着基本内核大功告成把。

[root@localhost  linux-2.6.33]# make zImage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值