最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

GEC2440 内核移植手册

来源:动视网 责编:小OO 时间:2025-09-28 00:20:02
文档

GEC2440 内核移植手册

本次将linux目前最新版的内核linux-2.6.32.8移植到广嵌GEC2440开发板上,使用u-boot引导(u-boot使用u-boot-2009.l1版,制作过程请参考《移植u-boot-2009.11到广嵌GEC2440开发板全过程》一文),交叉编译工具链使用的仍是gcc-3.4.5-glibc-2.3.6(制作过程请参考《ARMLinux交叉编译工具链的制作》一文),下面是移植的步骤:安装好交叉编译工具链后再进行下面操作。1¡¢ 解压linux-2.6.32.8内核源码包(tar
推荐度:
导读本次将linux目前最新版的内核linux-2.6.32.8移植到广嵌GEC2440开发板上,使用u-boot引导(u-boot使用u-boot-2009.l1版,制作过程请参考《移植u-boot-2009.11到广嵌GEC2440开发板全过程》一文),交叉编译工具链使用的仍是gcc-3.4.5-glibc-2.3.6(制作过程请参考《ARMLinux交叉编译工具链的制作》一文),下面是移植的步骤:安装好交叉编译工具链后再进行下面操作。1¡¢ 解压linux-2.6.32.8内核源码包(tar
本次将linux目前最新版的内核linux-2.6.32.8移植到广嵌GEC2440开发板上,使用u-boot引导(u-boot使用u-boot-2009.l1版,制作过程请参考《移植u-boot-2009.11到广嵌GEC2440开发板全过程》一文),交叉编译工具链使用的仍是gcc-3.4.5-glibc-2.3.6(制作过程请参考《ARM Linux交叉编译工具链的制作》一文),下面是移植的步骤:

安装好交叉编译工具链后再进行下面操作。

1¡¢  解压linux- 2.6.32.8内核源码包(tar xjvf linux-2.6.32.8.tar.bz2),然后进入解压后的目录(cd linux-2.6.32.8),修改Makefile文件,使之编译成ARM平台:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?=

修改为:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH            := arm   

CROSS_COMPILE   := arm-linux-

2¡¢  修改机器码,在u-boot-2009.11里第5步里设置了MACH_TYPE为MACH_TYPE_SMDK2440,查看u-boot里的include/asm-arm/mach-types.h文件,有下面定义:

     #define MACH_TYPE_SMDK2440 1008  //针对2440的MACH_TYPE码的值定义为1008

   而linux内核源码的arch/arm/tools/mach-types文件有如下定义:

smdk2440                MACH_SMDK2440           SMDK2440                1008

即u-boot和linux内核的同样类型的机器码都为1008。

那么我们就修改kernel的MACH_TYPE代码引用部分,确定kernel的MACH_TYPE。如下:

修改arch/arm/mach-s3c2440/mach-smdk2440.c : //修改文件最后面

   将MACHINE_START(S3C2440, "SMDK2440")修改为:MACHINE_START(SMDK2440, "SMDK2440")

   修改arch/arm/kernel/head.S  //在ENTRY(stext)下添加如下代码(红色部分)

   ENTRY(stext)

mov    r0, #0

mov    r1, #0x3f0   // MACH_TYPE_SMDK2440值1008换成十六进制就是0x3f0

ldr    r2, =0x30000100 //Linux kernel parameter

3¡¢  修改系统平台时钟为12MHz(即:12000000)

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

static void __init smdk2440_map_io(void)

{

        s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

        s3c24xx_init_clocks(12000000);   //(16934400);

        s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

4¡¢  修改Nand Flash分区。这里只创建三个分区,其他多余的分区屏蔽掉

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

static struct mtd_partition smdk_default_nand_part[] = {

        [0] = {

                .name   = "GCX_GEC2440 boot",   //"Boot Agent

                .size   = 0x00030000,           //SZ_16K,

                .offset = 0,

        },

        [1] = {

                .name   = "GCX_GEC2440 kernel",   //"S3C2410 flash partition 1

                .offset = 0x00050000,             //0,

                .size   = 0x00200000,             //SZ_2M,

        },

        [2] = {

                .name   = "GCX_GEC2440 filesystem",  //"S3C2410 flash partition 2

                .offset = 0x00250000,                //SZ_4M,

                .size   = 0x03dac000,                //SZ_4M,

        },

        //[3]至[7]的内容都注释掉

};

这样个性后所形成的分区分布情况如下:

          起始地址      结束地址

uboot : 0x00000000    0x00030000

param : 0x00030000    0x00040000 //注意这个环境变量的地址范围要与uboot第9节的补充内容中配置的CONFIG_ENV_OFFSET一致,相应定义是:#define CONFIG_ENV_OFFSET      0x30000 //将环境变量保存到nand中的0x30000位置,#define CONFIG_ENV_SIZE        0x10000

kernel: 0x00050000    0x00200000

root  : 0x00250000    0x03dac000

5¡¢  配置内核选项

make menuconfig

    

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

     

       各选项如下。这里只列出了要修改的项,其他的默认。

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

     

      

6、  交叉编译内核

make zImage

如无出错,会在arch/arm/boot/目录下生成zImage文件。

7、  下载运行zImage

使用uboot通过tftp下载zImage到30008000,并运行,结果如下: 

   

   MB Nand Flash分区情况:

   

   8、  烧写zImage

启动开发板上的uboot,并通过交叉网线与电脑相连,通过下面命令就可以把zImage烧到nand flash中:

tftp 30008000 zImage      //下载内核镜像

nand erase 0x50000 0x200000 //擦除nand的0x50000-0x200000的内容

nand write 0x30008000 0x50000 0x200000 //将内存0x30008000处的内容写入到nand的0x50000处

    setenv bootcmd nand read 0x30008000 0x50000 0x200000 \\;go 0x30008000

    saveenv

    重启后就可以引导运行内核了,但会出现如下一行提示:

图中最后一行提示是还没有根文件系统的原因,因为我们还没有将文件系统写到相应位置上。将在后面给出制作的过程步骤。

文档

GEC2440 内核移植手册

本次将linux目前最新版的内核linux-2.6.32.8移植到广嵌GEC2440开发板上,使用u-boot引导(u-boot使用u-boot-2009.l1版,制作过程请参考《移植u-boot-2009.11到广嵌GEC2440开发板全过程》一文),交叉编译工具链使用的仍是gcc-3.4.5-glibc-2.3.6(制作过程请参考《ARMLinux交叉编译工具链的制作》一文),下面是移植的步骤:安装好交叉编译工具链后再进行下面操作。1¡¢ 解压linux-2.6.32.8内核源码包(tar
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top