微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > linux-2.6.35.3内核移植(s3c2440)

linux-2.6.35.3内核移植(s3c2440)

时间:11-20 来源:互联网 点击:
宿 主机:Fedora13

目标 机:s3c2440

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

交叉编译器路径:/usr/local/arm/3.4.1

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

文件 系统 类型: yaffs2

一、准备工作

1、下载 解压内核

从官网上下载linux-2.6.35的内核, ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ ,文件不大,约85M。

新建一个工作目录s3c2440,将内核源码包拷贝至工作目录下,再解压。

2、移植yaffs2驱动

下载最新的驱动http://www.aleph1.co.uk/cgi-bin/ ... fs2.tar.gz?view=tar 解压在工作目录s3c2440下

进入yaffs2: cd yaffs2

给内核打补丁: ./patch-ker.sh c ../linux-2.6.34

成功后打印信息: Updating /file/fl/linux-2.6.34/fs/Kconfig

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

?问题:

1、什么是补丁?

一个补丁就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。补丁是通

过diff应用程序来创建的。 为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产

生出来的以及这个补丁将要把目前的源代码树变化到什么新的版本。这些信息 或者会出现在补丁

文件的原数据中,或者可能从文件名中推断出来。

2、为什么要给内核打补丁?

因为该内核暂不支持yaff2的文件系统,打上补丁使之支持。

3、安装交叉编译环境

从http://www.handhelds.org/download/projects/toolchain/ 下载arm-linux-gcc-3.4.1.tar.bz2

解压之,su

tar vxjf arm-linux-gcc-3.4.1.tar.bz2

将交叉编译器安装到/usr/local/下。 值得注意的是:该/usr/local目录并不是Fedora系统根

录下的/usr/local,而是刚刚生成的/usr/local目录。这个一点要注意,否则浪费了时间不说,

也破坏了Linux系统。

二、移植

??1、修改机器码

飞凌开发板的bootloader默认的机器码是193,所以我们在使用smdk2440机器的时候,需要修

改机器码。修改内核2.6.35.3中的arch/arm /tools/mach-types。

?? 删掉

s3c2410 ARCH_S3C2410 S3C2410 182

然后将

s3c2440 ARCH_S3C2440 S3C2440 362

修改为

s3c2440 ARCH_S3C2440 S3C2440 193

2、指定目标板machine、编译器和编译器路径

?修改linux-2.6.35.3/Makefile,将

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

修改成ARCH ?= arm

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

注意:CROSS_COMPILE是指交叉编译器的路径,该路径一定要完整,比如本人的是:/home/kelvin /usr

/local/arm/3.4.1/bin/arm-linux- 这个/home/kelvin就不能少,否则最后make zImage时提示文件不存在。

3、增加devfs文件管理器的支持

我们所用的文件系统使用的是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

帮助理解:Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,能够修改Kconfig,

这样就能够选择这个驱动,假如想使这个驱动被编译,要修改Makefile。

4、修改晶振频率(可解决打印信息乱码问题)

文件:arch/arm/mach-s3c2440/mach-smdk2440.c

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

5、修改MTD分区

文件:arch/arm/plat-s3c24xx/common-smdk.c
需要和bootloader中的分区信息相同(256M),否则,启动时出错。

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "boot",

.size = 0x00020000,

.offset = 0

},

[1] = {

.name = "MyApp",

.size = 0x00380000,

.offset = 0x00180000,

},

[2] = {

.name = "Kernel",

.size = 0x00300000,

.offset = 0x00500000,

},

[3] = {

.name = "fs_yaffs",

.size = 0x07800000,

.offset = 0x00800000,

}

};

问题:什么是MTD?

MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。

MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。

有几点需要注意:

a、此信息需根据自己的实际分区信息修改

b、这里文件系统所在的分区标号必须与板子上root_fs的号码相同,否则启动会出错。因此这里不需要将所有

的分区信息都写进来,只要位置对应即可!

6、关闭

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top