Skip to content

Green color

Narrow screen resolution  Wide screen resolution  Increase font size  Decrease font size  Default font size  Skip to content Default color Pink color Green color Green color
知天培训嵌入技术论坛
欢迎您, 游客
请您在右方表单注册或登陆
3oi;grthygtfrdeswWQFT
Linux2.6内核移植笔记 (1 个人正在浏览) (1) 游客
到底部 发表回复
被收藏: 0
话题: Linux2.6内核移植笔记
#6
xsfh588 (会员)
刑事犯红
武林新丁
帖子: 3
graphgraph
该会员已离线 点此观看该会员的个人资料
ICQ#: 361238023 性别: 男 位置: 山西太原 出生日期: 1984-09-11
Linux2.6内核移植笔记 11 月 之前 评分: 0  
一、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info[]={

{/*128k*/

name:"vivi",

size:0x00020000,

offset:0x00000000

},{/*64k*/

name:"param",

size:0x00010000,

offset:0x00020000

},{/*2m+832k*/

name:"kernel",

size:0x002d0000,

offset:0x00030000

},{/*3m*/

name:"root",

size:0x0030000,

offset:0x00300000

},{/*48*/

name:"user",

size:0x03000000,

offset:0x00600000

}

};




/*加入NAND FLASH 分区*/

static struct s3c2410_nand_set nandset = {

nr_partitions:5, /*the number of partition*/

partitionsartition_info,

};

/*建立芯片支持*/

static struct s3c2410_platform_nand superlpplatform = {

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};










static struct resource s3c_nand_resource[] = {

[0] = {

.start = S3C2410_PA_NAND,

.end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,

.flags = IORESOURCE_MEM,

}

};




/*-----加入芯片支持到nand flash驱动----------*/




struct platform_device s3c_device_nand = {

.name = "s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resource),

.resource = s3c_nand_resource,

/*------------------------for MTD partitions------------------*/

.dev = {

.platform_data = &superlpplatform

}

/*------------------------------------------------------------*/

};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

指定启动时初始化分区,使上面的修改生效。找到*smdk2410_devices[]__initdata




Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,




}

修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

配置内核
修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

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




(2)配置内核产生.config文件

为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。

$cp arch/arm/configs/smdk2410_defconfig .config

$make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Defaul、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: "root",

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: "user",

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = "noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0";

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>

/*-------------------------------------------*/




……………………………

/*NAND Controller*/

/*建立flash分区表*/

/*--------------------------for partitions---------*/




static struct mtd_partition partition_info、实验目的:
实验箱原OS为Linux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源
硬件资源

CPU
Samsung S3C2410A

Nand flash
Samsung K9D1208V0M 64M

RAM
64M


软件资源

bootloader
vivi

Linux kernel




三、实验前的准备
1、vivi源代码

2、Linux kernel 源代码。到http://www.kernel.org下载,我用的是2.6.18.8。

3、Linux开发环境,CROSS toolchain2.95.2(用来编译vivi)和4.0.0(用来编译内核)

四、实验步骤
1、修改bootloader
修改arch/s3c2410/smdk.c
NAND flash 原分区为:

文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00130000
o
1m=0x00100000

root
0x00130000

0x00330000
4
2m=0x00200000

user
0x00330000

0x04000000
8
59m+832k














由于2.6内核编译后的压缩镜像,经常超过1m,需将NAND flash改为:




文件
地址空间
标志
存储空间

vivi
0x00000000

0x00020000
o
128k=0x00020000

param
0x00020000

0x00030000
o
64k=0x00010000

kernel
0x00030000

0x00300000
o
2m+832k=0x002d0000

root
0x00300000

0x00600000
4
3m=0x00300000

user
0x00600000

0x04000000
8
48m=0x03000000


要达到此目的,需要修改arch/s3c2410/smdk.c文件中的default_mtd_partitions[]。修改后的内容为:

mtd_partition_t default_mtd_partitions[] = {

{

name: &quot;vivi&quot;,

offset: 0,

size: 0x00020000,

//vivi size 128k modifyed by Eric

flag: 0

}, {

name: &quot;param&quot;,

offset: 0x00020000,

size: 0x00010000,

//param size 64k

flag: 0

}, {

name: &quot;kernel&quot;,

offset: 0x00030000,

size: 0x002d0000,

//kernel size 2m+832k

flag: 0

}, {

name: &quot;root&quot;,

offset: 0x00300000,

size: 0x00300000,

//root size 3m

flag: MF_BONFS

}, {

name: &quot;user&quot;,

offset: 0x00600000,

size: 0x03000000,

//user size 48m

flag: MF_JFFS2

}

};

由于在2.4内核中串口ttyS0,在2.6内核中改为ttySAC0,需要将此文件中的linux_cmd[]改为:

//by Eric

char linux_cmd[] = &quot;noinitrd root=/dev/bon/3 init=/linuxrc console=ttySAC0 console=tty0&quot;;

其中:

noinitrd:不使用initrd文件

root=/dev/bon/3:代表nand flash的第4个分区,作为rootfs

init=/linuxrc:启动初始化文件位置

console=ttySAC0:控制台使用串口1

console=tty0:控制台使用终端1

修改好此文件后,配置编译vivi

配置编译vivi
在交叉编译前需要修改vivi根目录下的Makefile文件中的相关设置

(1) 将CROSS_COMPILE指向交叉编译器路径。由于vivi用4.0.0交叉编译器,编译出错,需选择用2.95.2或2.95.3交叉编译器

我的是:CROSS_COMPILE =…../toolchain/2.95.2/bin/arm-linux-

(2)将ARM_GCC_LIB指向链接时使用的标准文件库路径,一般和CROSS_COMPILE在同一上层目录中

我的是:ARM_GCC_LIB =…../toolchain/2.95.2/lib/gcc-lib/arm-linux/2.95.2

(3)将LINUX_INCLUDE_DIR指向linux内核头文件所在路径

我的是:LINUX_INCLUDE_DIR =…../kernel/linux-2.6.18.8/include

设置好Makefile文件后,开始编译vivi,步骤很简单:

$make distclean

$make menuconfig

$make

编译好后,在vivi根目录下出现vivi文件:)




2、Linux2.6内核移植
修改Makefile文件
修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCH和CROSS_COMPILE,修改为:

ARCH ?=arm

CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-

设置flash分区
修改arch/arm/mach-s3c2410/devs.c文件

添加如下内容:




/*--------------for NAND Flash---------------*/

#include &lt;linux/mtd/partitions.h&gt;

#include &lt;linux/mtd/nand.h&gt;

#include &lt;asm/arch/nand.h&gt;

/*-------------------------------------------*/




…………