Ø
下载交叉编译工具
(本文默认所有软件均下载在用户主目录下)
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
# 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)
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
<*> 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
Ø
重启开发板,完成工作。