Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1695792
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: LINUX

2009-12-30 08:59:43

安装交叉编译工具
Ø        下载交叉编译工具
(本文默认所有软件均下载在用户主目录下)
arm-linux-gcc-3.4.1 —— 编译内核
URL:
Ø        安装
       //将压缩包移动至根目录下
       #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内核
URL:
Ø        解压内核
       #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>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
Ø        修改Makefile
       #vi $KERNEL/Makefile
       找到ARCH与CROSS_COMPILE,修改为
       ARCH ?= arm
       CROSS_COMPILE ?= arm-linux-
Ø        将分区信息加入内核
#vi $KERNEL/arch/arm/mach-s3c2410/devs.c
添加头文件:
              #include
#include
#include
添加分区结构:
              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
Yaffs2加载
Ø        下载Yaffs2
       URL:
Ø        解压Yaffs2并将其加入Linux内核
       #cd ~
       #tar zxvf yaffs2.tar.gz
       #cd yaffs2
       #sh patch-ker.sh c $KERNEL
内核配置(.config)与编译
Ø        内核配置(基于$KERNEL/arch/arm/configs/s3c2410_defconfig)
     (见附录)
Ø        编译内核
       #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
Ø        重启开发板,完成工作。
附录:内核配置文件.config


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1750011

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