Chinaunix首页 | 论坛 | 博客
  • 博客访问: 508026
  • 博文数量: 95
  • 博客积分: 5168
  • 博客等级: 大校
  • 技术积分: 1271
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-28 23:31
文章分类

全部博文(95)

文章存档

2013年(2)

2012年(3)

2011年(1)

2010年(8)

2009年(81)

分类: LINUX

2009-02-25 17:07:30

------------------------------------------
本文系本站原创,欢迎转载!

转载请注明出处:http://sjj0412.cublog.cn/

------------------------------------------

:准备工作

下载linux-2.6.13内核

大家可以在

下载

下载yaffs2源码

大家可以在

,点download toolbar载解压是cvs里面有yaffs,yaffs2源码。

二:配置,补丁,编译

          解压linux-2.6.13  tar zxvf linux-2.6.13

              Cd linux-2.6.13

修改配置文件:

1.修改Makefile,匹配交叉编译器。

在内核代码根目录下:vim Makefile

找到ARCH:(用vi的查找命令/ARCH

修改为

ARCH = arm

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

CORSS_COMPILE视自己的环境而定。

2 为了内核支持devfs 以及在启动时并在/sbin/init 运行之前能自动挂载/devdevfs 文件系统。编辑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

------------------------------------------------------------------------------------------------------------

 

修改源代码:

1.      添加yaffs2源码。

     首先解压下载的yaffs2源码,解压后是cvs,有两个文件夹,找到yaffs2文件夹,里面有个patch-ker.sh,运行它,./patch-ker.sh /usr/src/linux-2.6.13(这个为内核源码解压后的路径)

即可为内核打支持yaffs2的补丁,其实这个补丁很简单,如果你下的yaffs2没有这个补丁文件,可以手动打。

     首先将yaffs2文件夹拷贝到内核的fs文件夹下

 1】修改fs/Kconfig

 找到menu "Miscellaneous filesystems"在下面添加

include "fs/yaffs2/Kconifg"

注意KconfigZ中的K为大写

 2】修改fs/Makefile

 添加

Obj-$(CONFIG_YAFFS_FS)+=yaffs2/

 

2.      修改nand的分区信息。要让内核知道nand flash的分区信息.

 

arch/arm/mach-s3c2410/mach-smdk2440.c中添加nand分区信息,;我这设置为3个分区,这个要和你的bootLoad的分区情况一样,否则加载内核可能失败。

可以在bootload模式下通过part show查看分区情况,然后设置这里的值。

在我的板子中修改如下:

static int chip0_map[] = { 0 };

struct mtd_partition bit_default_nand_part[] = {

[0] = {

.name = "bootloader",

.offset = 0x00000000,

.size = 0x00030000,

},

[1] = {

.name = "kernel",

.offset = 0x00050000,

.size = 0x00200000,

},

[2] = {

.name = "root",

.offset = 0x00250000,

.size = 0x03dac000,

}

};

 

/* the bit has 1 selectable slots for nand-flash, the three

 * on-board chip areas, as well as the external SmartMedia

 * slot.

 *

 * Note, there is no current hot-plug support for the SmartMedia

 * socket.

*/

 

static struct s3c2410_nand_set bit_nand_sets[] = {

       [0] = {

              .name           = "chip0",

              .nr_chips      = 1,

              .nr_map        = chip0_map,

              .nr_partitions       = ARRAY_SIZE(bit_default_nand_part),

              .partitions     = bit_default_nand_part

       },

};

 

 

static struct s3c2410_platform_nand bit_nand_info = {

       .tacls            = 0,

       .twrph0         = 30,

       .twrph1         = 0,

       .nr_sets = ARRAY_SIZE(bit_nand_sets),

       .sets             = bit_nand_sets,

}

 

添加nand设备

static struct platform_device *smdk2440_devices[] __initdata = {

       &s3c_device_usb,

       &s3c_device_lcd,

       &s3c_device_wdt,

       &s3c_device_i2c,

       &s3c_device_nand,

       &s3c_device_iis,

};

修改smdk2440_map_io如下

  void __init smdk2440_map_io(void)

{

       s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

       s3c24xx_init_clocks(12000000);//默认值是1690000,改为12000000

       s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

       s3c24xx_set_board(&smdk2440_board);

       s3c_device_nand.dev.platform_data = &bit_nand_info;//添加的原来没有

}

 

3.修改nand Flash的校验方式,去掉ECC校验。

 

       drivers/mtd/nand/s3c2410.c 550

       chip->ecc.mode = NAND_ECC_SOFT;

       改为 chip->ecc.mode = NAND_ECC_NONE;

  在内核中明确说明是不建议这样做的,因为这样就等于忽略了对NAND FLASH坏块的检测   由于这个地方设置为NAND_ECC_NONE,mtd中的nand驱动就会报错,到时会出现如下错误,但是能正常挂载根目录。

 Writing data without ecc to nand flash is not recommended

 Reading data ……………….

 这个使得启动很慢,且复制和创建文件时都有,很不舒服,这时就需要更改nand.h的驱动,将这些错误信息注释掉。

drivers/mtd/nand/nand_base.c 873

printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");

改为

// printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");

同时通过vi的查找命令找recommended,找到所有这些提示printk,都注释掉。

 

4由于添加了内容,需要添加相应头文件:

 

mach-smdk2440.c中添加

#include

#include

#include

#include

否则会报错。

 

------------------------------------------------------------------------------------------------------------

 

配置

先把默认配置文件拷贝过来

cp arch/arm/configs/s3c2410_defconfig .config

配置

Make menuconfig

[*] Enable loadable module support --->

       [*]   Module unloading

       [*]   Automatic kernel module loading

       选择这两个,剩下的可以去掉

System Type ---->

       [*] S3C2410 DMA support

       [*] Support ARM920T processor

       S3C24xx Implementations --->

               [*] SMDK2410/A9M2410

                [*] SMDK2440

         这里面只留这两项

Boot option ----->

       修改启动参数为:

       noinitrd root=/dev/31:2 init=/linuxrc console=ttySAC0,115200

       可能根据个人板子的设置会不一样,我的是从Nand Flash中加载文件系统,其中31nand主设备号,2代表第3分区,也可设置为/dev/mtdblock2,是存放我的Linux文件系统的分区。不过,在bootloader可以传递内核参数的情况下这个设置是无效的。

Device Drivers --->

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

              [*]   MTD partitioning support

              <*> NAND Device Support --->

                     <*>   NAND Flash support for S3C2410/S3C2440 SoC

                     [ ]    S3C2410 NAND Hardware ECC     //这个要去掉

      

       File System--->

Miscellaneous filesystems--->

<*>YAFFS2 filesystem support

<*>Autoselect yaffs2 format

<*>Cache short name in RAM     (下面两个个是在YAFFS2 filesystem support选择后自动选的)

……

……

<>journalling flash file systemversion(jffs)  support

<>journalling flash file systemversion2(jffs2)  support

取消这两个,否则当你的root_fsyaffs2,由于jffsyaffs2文件系统都没有超级块,即不能识别文件类型,jffs也能挂载yaffs2系统,只不过他读的数据都是错的,并将所有数据放在/lost+found文件夹中,故如果jffs也加载了,他可能先挂载yaffs系统,这样就会挂载失败。  

其他的选择默认就可以了。

------------------------------------------------------------------------------------------------------------

 

 编译内核

 

最关键的时候到了

执行make zImage

如果你的机子够好,10多分钟Ok了。

然后将zimage下载到开发板,并制作yaffs根文件系统,进行验证。

制作yaffs根文件系统时,最好用yaffs源码下utils下的源文件编译得到的mkyaffsimage工具,否则可能通过此工具制作的yaffs2映像和内核的yaffs不一致,也可能加载根文件系统失败,如果你下载的源码中没有utils,可以下载这个试一下。

 

    

阅读(1834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~