Linux2.6内核移植笔记(一)

Linux2.6内核移植笔记(一)
 
 
一、实验目的:

实验箱原OSLinux 2.4,现在移植Linux2.6内核到开发板。其它硬件资源驱动暂时不考虑。

二、实验资源

硬件资源

CPU

Samsung S3C2410A

Nand flash

Samsung K9D1208V0M 64M

RAM

64M

软件资源

bootloader

vivi

Linux kernel


三、实验前的准备

1vivi源代码

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

3Linux开发环境,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指向交叉编译器路径。由于vivi4.0.0交叉编译器,编译出错,需选择用2.95.22.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,步骤很简单:

  1. $make distclean

  2. $make menuconfig

  3. $make

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


2Linux2.6内核移植
修改Makefile文件

修改内核根目录下的Makefile文件,指明交叉编译器

找到ARCHCROSS_COMPILE,修改为:

ARCH ?=arm

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

设置flash分区
  1. 修改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*/

partitions:partition_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

}

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

};

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

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


Static struct platform_device *smdk2410_devices[]__initdata ={

…….

…….

&s3c_device_iis,

/*添加如下语句*/

&s3c_device_nand,


}

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

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

chip->ecc.mode = NAND_ECC_NONE;

配置内核
  1. 修改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 --->Default kernel command string:

noinitrd root=/dev/mtdblock3 init=/linuxrc consolettySAC0,115200

mtdblock3 代表第四个flash分区,为root分区

Floating point emulation---->

[*]NWFPE math emulation

#MTD子系统的配置

Device Drivers--->

Memory Technology Devices(MTD)--->

............................................

[*]MTD partitioning support

[*]Command line partition table parsing

............................................

[*]RAM/ROM/Flash chip drivers-->

<*>Detect flash chip by Common Flash Interface(CFI) prob

<*>Detect non-CFI AMD/JEDEC-compatible flash chip

<*>Support for Intel/Sharp flash chip

<*>Support for AMD/Fujitsu flash chip

<*>Support for ROM chip in bus mapping

NAND Flash Device Drivers--->

................................

<*>NAND Device Support

<*>NAND Flash support foe S3C2410/S3C2440 Soc

Character devices--->

.............................

[*]Non-standard serial port support

[*]S3C2410 RTC Driver

File systems--->

<>Second extended fs support #去除ext2支持

Pseudo filesystems--->

[*]Virtual memory file system support(former shm fs)

[*]/dev file system support(OBSOLETE)

[*]Automatically mount at boot(NEW)

Miscellaneous filesystems--->

............................

<*>JFFS2

<*>cramfs

.............................

Network File Systems---->

<*>NFS file system support

保存退出

编译内核

$make zImage

烧写flash

烧写方法见:.................不再赘述:)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值