安装交叉编译工具
Ø 下载交叉编译工具
(本文默认所有软件均下载在用户主目录下)
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
添加分区结构:
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) |