注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
daicheng的个人空间 https://home.eeworld.com.cn/space-uid-78216.html [收藏] [复制] [分享] [RSS]
日志

mini2440平台搭建之(linux 内核移植)

已有 3332 次阅读2009-11-17 20:38 |

简介

1:使用平台

    1)、系统 Red Hat Linux 9

    2)、编译器3.4.1

      (3)、linux-2.6.24.1

2:硬件设备

      Mini2440 TE2440

linux移植

   1步骤:
1)准备工作
2)修改顶层Makefile
3)添加分区
4)添加yaffs补丁

5) 修改串口时钟
6) 配置编译内核

(一)、准备工作
建立工作目录,下载源码,安装交叉工具链,步骤如下。

(二)、修改顶层Makefile
修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是    arm-linux-
    vi Makefile
  
找到ARCHCROSS_COMPILE,修改
   ARCH ?= arm
   CROSS_COMPILE ?= arm-linux-
  
保存退出。

(三)、设置NAND分区

1)修改linux-2.6.24.4/arch/arm/plat-s3c24xxstatic struct mtd_partition smdk_default_nand_part[]

    {

[0] = {

.name = "boot",

.size = 0x00030000,

.offset = 0,

},

[1] = {

.name = "param",

.offset   = 0x00040000,

.size = 0x00020000,

},

[2] = {

.name = "kernel",

.offset   = 0x00060000,

.size = 0x00200000,

},

[3] = {

.name = "cramfs",

.offset = 0x260000,

.size = 0xa00000,

},

[4] = {

.name = "yaffs",

.offset = 0xc60000,

.size = 0x73a0000,

},

   }

name: 代表分区名字
size:
代表flash分区大小(单位:字节)
offset:
代表flash分区的起始地址(相对于0x0的偏移)

其中第一个分区为u-boot ,第二个为参数,第三个为内核,下面的二个是文件系统。(上面仅供参考)

2建立Nand Flash芯片支持

struct s3c2410_platform_nand superlpplatform={
tacls:0,
twrph0:30,
twrph1:0,
sets: &nandset,
nr_sets: 1,
};

 3):指定启动时初始化
kernel
启动时依据我们对分区的设置进行初始配置.
arch/arm/mach-s3c2410/mach-smdk2410.c
文件
vi mach-smdk2410.c
修改

static struct platform_device *smdk2440_devices[] __initdata = {

    &s3c_device_usb,

    &s3c_device_lcd,

    &s3c_device_wdt,

    &s3c_device_i2c,

    &s3c_device_iis,

   &s3c_device_rtc,

   //添加如下语句即可      

   &s3c_device_nand,

};
保存,退出

4)、禁止Flash ECC校验
我们的内核都是通过UBOOT写到Nand Flash, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE;
(四)、添加yaffs补丁

    javascript:;下载代码

进入yaffs文件执行:./patch-ker.sh c /home/linux-2.6.24.4/( 内核文件)

    上面命令完成了:

    Fs/Kconfig中增加:

source “fs/yaffs2/Kconfig”

     obj-$(CONFIG_YAFFS_FS)+=yaffs2

   yaffs2中的makefile.kernel 复制为fs/yaffs2/Makefile

   Kconfig 复制到fs/yaffs2

   复制所有的*.c*.hfs/yaffs2目录中。

(五)、修改平台输入时钟

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

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

static void __init smdk2440_map_io(void)

{

       s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

       //s3c24xx_init_clocks(16934400);

    s3c24xx_init_clocks(12000000);

       s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

(六)修改机器码:

    u-boot传递的机器码为1999(为了与原内核一致),修改arch/arm/tools/math-types 3c2440   ARCH_S3C2440  S3C2440   1999

配置过程大家 可以自己尝试一下!

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章