移植linux2.6.25内核到s3c2440详解

时间:2021-02-17 14:51:40

一.开发环境的建立

   1.Linux系统,检查是否有 gcc (gcc -v)如果没有:就用yum install gcc

 

   2.交叉编译器版本为arm-linux-gcc-3.4.1

     tar zxvf arm-linux-gcc-3.4.1.tar.bz2   /,将编译器解压并安装到/usr/local/arm目录中(具体解压到   哪个目录要看你压缩包的原目录是什么了,你也可以指定目录)。

二.移植内核

1.下载内核源码到下面网站下载:www.kernel.org

2.建立工作目录

在命令行执行:mkdir  文件夹名

此目录是我的工作目录,名称你可以随意修改,如果修改下面的路径也需要做相应的修改

3.解压系统源码

     将内核源码解压的工作目录里,

4、在系统中添加对ARM 的支持及设置好编译器

进到内核源码:cd  工作文件/linux-2.6.25.8

修改顶层“Makefile ”文件,

ARCH ? =arm  

CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux- 然后保存。

5、修改平台输入时钟

修改平台的时钟频率,修改内核源码“arch/arm/machs3c2440/

mach-smdk2440.c”,把16934400 改为12000000,因为我们的开发板上为12M

6、修改机器类型ID号

Supervivi的机器码是782,所以这里需要修改机器码,否则会出现不能启动的

情况。修改内核源码的“arch/arm/tools/mach-types”文件,在大概379 行,把原来的362 改为782

7、Nand Flash 驱动移植

linux 里面已经做好了Nand Flash 的驱动,我们只需要进行简单的修改即可

以使用了。

1.修改内核源码“arch/arm/plat-s3c24xx/common-smdk.c”文件,这个是NAND FLASH分区的信息。

内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统,根据vivi的分区信息进行如下修改。

static struct mtd_partition smdk_default_nand_part[] = {
         [0] = { .name    = "vivi",
                 .size    = 0x00020000,
                 .offset = 0X00000000,
         },
         [1] = {   .name    = "kernel_linux2.6.25",
                 .offset = 0x00050000,
                 .size    = 0x00200000,
         },
         [2] = { .name    = "root_yaffs2",
                 .offset =0x00250000,
                 .size    =0x03dac000,
         }
};
8、制作配置文件

第一次配置,推荐调用自带的一个默认配置单,该配置单在内核源码的“arch/arm/configs/

s3c2410_defconfig”,该配置文件里面选择了几乎所有的和S3C24XX 系列CPU 相关的

配置选项,可以在该配置单的基础上进行修改自己的配置。当然您也可以自行配置,具体配置方法,建议摸索及参考网上资料。

首先到内核根目录下,输入make menuconfig将打开配置窗口。

在配置菜单中选择选项:“Load an Alternate Configuration File”,然后调用上面说到的那个配置文件,也就是在配置文件名对话框中输入下面的信息。

arch/arm/configs/s3c2410_defconfig                               

输入完毕后按回车返回到配置界面,进入到“System Type”选项下的配置单:

选中下面的配置项。

System Type --->

[*]    S3C2410 DMA support

[*]    support ARM920T processor

 

 

 

然后配置平台:

S3C2410 Machines --->

[*] SMDK2410/A9M2410

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

添加对应的NANDFLASH驱动配置

配置如下所示:

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

[*] MTD partitioning support

< > RedBoot partition table parsing

[ ] Command line partition table parsing

<*> NAND Device Support --->

<*> NAND Flash support for S3C2410/S3C2440 SoC

配置完毕这些之后,保存配置单。其它没涉及到的可以保留原配置,也可以根据你的需要修改。

配置完毕后,回到主菜单。然后选择选项:“Save an Alternate Configuration File”,

 

将其保存为:“.config”文件,因为编译系统时会调用该文件。

 

 

保存为“.config”文件后,退出配置单。
你也可以保存为你自己想要的配置名称像config_yourselfname,因为当你执行了#make distclean 命令后,将会清除所有生成的文件。包括配置文件。而你执行make distclean 命令后,在命令行输入cp config_yourselfname .config(目的是将上次的配置复制为.config, 因为编译系统时会调用该文件)
即而就可以在原配置的基础上进行需要的修改。
9、编译镜像
到内核根目录,输入:#make zImage,就可以进行编译了,编译完毕后,会在内核源码的“arch/arm/boot/”目录下面生成名为“zImage”的镜像