Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4524771
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-03-29 09:29:01

转:http://hi.baidu.com/ns_linux/blog/item/ff240bfed15736849e5146aa.html

TQ2440+2.6.29.3移植(whizer)
前提准备:开发板TQ2440开发板
          linux内核为linux-2.6.29.3

一、将Linux2.6.29.3内核源码放到工作目录的kernel文件夹下,并解压
下载地址:
二、修改机器码
在 TQ2440 使用的 uboot 的机器码是 168 ,这里需要修改机器码,否则会出现不能启动的情况。机器码保存在内核源码的 “arch/arm/tools/mach-types”文件中,在大概 379 行,把原来的 362 改为 168。也可以修改uboot中的机器码,在“\include\asm-arm\mach-types.h”中,找到“#define MACH_TYPE_S3C2440              168”,将168改成与linux内核一致的机器码,注意,这个机器码要没有使用的,否则会编译中提示冲突。然后保存即可。

三、修改内核源码根目录下的Makefile文件

#ARCH       ?= arm
#CROSS_COMPILE     ?=arm-linux-

四、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。
(1) 找到smdk_default_nand_part,改成:
static struct mtd_partition smdk_default_nand_part[] = {
   [0] = {
            .name        = "TQ2440_uboot",
            .size        = 0x00040000,
            .offset        = 0x00000000,
       },
       [1] = {
            .name        = "TQ2440_kernel",
            .offset        = 0x0004C000,
            .size        = 0x00200000,
       },
       [2] = {
            .name        = "TQ2440_yaffs2",
            .offset        = 0x0024C000,
            .size        = 0x03DB0000,
       }
};
此处的分区一定也要与u-boot的分区一致
(2) 然后修改 Nand Flash 的读写匹配时间,修改 common-smdk.c 文件的刚刚修改后的大概 140 行左右的smdk_nand_info 结构体,修改内容如下:
static struct s3c2410_platform_nand smdk_nand_info = {
    .tacls       = 10,
    .twrph0       = 25,    //这 三个数字要改的 默认是20 60 20
    .twrph1       = 10,
    .nr_sets     = ARRAY_SIZE(smdk_nand_sets),
    .sets       = smdk_nand_sets,
};
四、修改时钟频率
修改平台的时钟频率,以满足 TQ2440的工作频率。修改内核源码,否则在超级终端中会出现乱码。修改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);
    s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

五、增加Yaffs2文件系统的支持
      解压Yaffs2并将其加入Linux内核(打补丁的方式)。最新的yaffs2源代码包可以从获得
#cd yaffs2
#./patch-ker.sh c /(linux内核路径)(注意:c与路径之间有一个空格)

六、从配置内核

先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程
    # cp arch/arm/configs/s3c2410_defconfig .config
   # make menuconfig

1.General setup --->
  
Configure standard kernel features (for small systems) --->    
    选上这项,否则文件系统中的一些选项不会出现

2. System Type ---->
  
S3C2410 DMA support   
Support ARM920T processor
   S3C2410 Machines --->
           
SMDK2410/A9M2410
   S3C2440 Machines --->
           
SMDK2440
           
SMDK2440 with S3C2440 CPU module

3.Boot options --->
    将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
可能根据个人板子的设置会不一样,TQ2440是从Nand Flash中加载文件系统,其中mtdblock2是存放Linux文件系统的分区。
4.
Enable loadable module support --->
  
Module unloading
  
Automatic kernel module loading
   选择这两个,剩下的可以去掉
5.Device Drivers --->
   <*> Memory Technology Device (MTD) support --->
           
MTD partitioning support
            <*> NAND Device Support --->
                      <*> NAND Flash support for S3C2410/S3C2440 SoC
                      [ ]     S3C2410 NAND Hardware ECC     //这个要去掉
  
Network device support --->
           
Ethernet (10 or 100Mbit) --->
               <*> DM9000 support
   < > Real Time Clock ---> //这个去掉
6.File systems----->
      Miscellaneous filesystems --->
         <*>YAFFS2 file system support
文件系统为YAFFS2 ,如果不选此,则出现Kernel panic: VFS: Unable to mount root fs on unknown-block(31,2)

七、编译 make zImage
阅读(616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~