基于S3C2410平台移植Linux 2.6.14内核指南

Ø        下载交叉编译工具
(本文默认所有软件均下载在用户主目录下)
arm-linux-gcc-3.4.1 —— 编译内核
Ø        安装
       //将压缩包移动至根目录下
       #mv arm-linux-gcc-3.4.1.tar.bz2 /
       //解压,默认路径为 /usr/local/arm /3.4.1
       #tar jxvf arm-linux-gcc-3.4.1.tar.gz2
下载Linux内核
Ø        下载 Linux 2.6.14.1 内核
Ø        解压内核
       #cd ~
       #tar jxvf linux-2.6.14.1.tar.bz2
建立环境变量
Ø        将交叉编译工具路径和内核路径加入环境变量
#vi ~/.bashrc
export KERNEL=~/linux-2.6.14.1
export PATH=/usr/local/arm/3.4.1/bin:$PATH
内核移植
Ø        Flash 进行分区
       启动开发板,
       如果用vivi     
      进入vivi,对vivi进行分区操作
       vivi>bon part 0 128k 192k 2240k 5312k:m 64704k
       分区信息如下所示:
分区
起始地址
分区大小
分区作用
Part0
0x0
0x00020000 (128k)
bootloader
Part1
0x00020000
0x00010000 (64k)
bootloader params
Part2
0x00030000
0x00200000 (2m)
linux kernel
Part3
0x00230000
0x00300000 (3m)
root filesystem
Part4
0x00530000
0x03A00000 (58m)
yaffs filesystem
       将vivi写进Flash
       vivi>load flash vivi x
       如果用U-BOOT
     分区不必设置,只要记下内核的分区地址
Ø        修改 Makefile
       #vi $KERNEL/Makefile
       找到ARCH与CROSS_COMPILE,修改为
       ARCH ?= arm
       CROSS_COMPILE ?= arm-linux-
Ø        将分区信息加入内核
#vi $KERNEL/arch/arm/mach-s3c2410/devs.c
添加头文件:
              #include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/arch/nand.h>
添加分区结构:
              static struct mtd_partition partition_info[]={
                     {
                            name: "loader",             //分区名字,任意
                            size: 0x00020000,         //分区大小
                            offset: 0x0,                   //分区的起始地址,相对于0x0的偏移
                     },{
                            name: "param",
                            size: 0x00010000,
                            offset: 0x00020000,
                     },{
                            name: "kernel",
                            size: 0x00200000,
                            offset: 0x00030000,
                     },{
                            name: "rootfs",
                            size: 0x00300000,
                            offset: 0x00230000,
                     },{
                            name: "yaffs",
                            size: 0x03A00000,
                            offset: 0x00530000,
                     }
};
 
struct s3c2410_nand_set nandset={
                     nr_partitions: 5,                          //分区数量
                     partitions: partition_info,             //分区表
};
struct s3c2410_platform_nand superlpplatform={
       //NAND Flash芯片支持
       //参数意义可参考S3C2410手册
                     tacls: 0,
                     twrph0: 30,
                     twrph1: 0,
                     sets: &nandset,
                     nr_sets: 1,
};
修改s3c_device_nand,以加入NAND Flash驱动:
              struct platform_device s3c_device_nand = {
                     .name = "s3c2410-nand",      //设备名称
                     .id = -1, //有效设备编号,-1表示唯一设备
                     .num_resources = ARRAY_SIZE(s3c_nand_resource),              //寄存器区的个数
                     .resource = s3c_nand_resource,     //寄存器区的首地址
                     //添加如下信息,表示NAND Flash设备
       .dev={
                            .platform_data=&superlpplatform
                     }
};
Ø        指定启动时的设备初始化
       #vi $KERNEL/arch/arm/mach-s3c2410/mach-smdk2410.c
       修改:
       static struct platform_device *smdk2410_devices[] __initdata = {
              s3c_device_usb,
              s3c_device_lcd,
              s3c_device_wdt,
              s3c_device_i2c,
              s3c_device_iis,
              //添加如下信息
              s3c_device_nand,
};
Ø        禁止 Flash ECC 效验
内核通过vivi把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。
#vi $KERNEL/drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip函数,将chip->eccmode的值修改为:
NAND_ECC_NONE
用Uboot注意::::::!
修改内核的arch/arm/kernel/head.S,直接将s3c2410的参数赋给内核
# cd linux-2.6.19
# vi arch/arm/kernel/head.S +72
----------------------------------------------    
70     __INIT
71     .type       stext, %function
72 ENTRY(stext)
   /********* add here *********/
   mov    r0, #0
   mov    r1, #
0xc1
   ldr    r2, =0x30000100
   /********* end add *********/

73     msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
74     @ and irqs disabled


Yaffs2加载
Ø        下载 Yaffs2
Ø        解压 Yaffs2 并将其加入 Linux 内核
       #cd ~
       #tar zxvf yaffs2.tar.gz
       #cd yaffs2
       #sh patch-ker.sh c $KERNEL
内核配置(.config)与编译
Ø        内核配置(基于$KERNEL/arch/arm/configs/s3c2410_defconfig)
     《2.6.14 内核移植说明文档》
URL: http://www.cnitblog.com/luofuchong/archive/2007/01/10/21725.html
        YAFFS配置:
<*> YAFFS2 file system support
  <*> 512 byte / page devices
   <*> Lets Yaffs do its own ECC
        <*> 2048 byte (or larger) / page devices
   <*> Autoselect yaffs2 format
   <*> Disable lazy loading
   <*> Turn off wide tnodes
  <*> Turn off debug chunk erase check
      
Ø        编译内核
       #make zImage
修改根文件系统
       在宿主机上进入目录/arm2410s(博创2410-s平台提供),该目录下的root目录就是一个制作好的根文件系统。在此基础上,我们要对root/etc/fstab分区配置文件进行修改,用来挂载Yaffs文件系统。
       #vi /arm2410s/root/etc/fstab
       找到yaffs,修改为:
       /dev/mtdblock/4 /mnt/yaffs yaffs   defaults    1 1
    然后制作根文件系统镜像。
       #mkcramfs root root.cramfs
安装内核和根文件系统
Ø        将编译好的内核 2.6.14 .1 写入 Flash
       vivi>load kernel x
Ø        将制作的根文件系统 root.cramfs 写入 Flash
       vivi>load root x
Ø        修改 vivi 启动参数
       vivi>param set linux_cmd_line “ noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
       vivi>param save
Ø        重启开发板,完成工作。 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值