Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141911
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-04 13:11
文章分类

全部博文(29)

文章存档

2015年(2)

2014年(27)

我的朋友

分类: 嵌入式

2014-07-07 16:42:59

Linux内核移植

1:获得内核源代码

1-1建立mini2440文件夹

wxudong@wlinux:~$ makdir mini2440

1-2解压文件夹内的内核源码

wxudong@wlinux:~/mini2440$ tar zxvf linux-2.6.32.2.tar.gz

2:指定交叉编译变量

2-1修改顶层makefile

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH   ?= arm

CROSS_COMPILE ?= arm-linux-

其中,ARCH 是指定目标平台为 arm,CROSS_COMPILE 是指定交叉编译器,这里指定的是系统默认的交叉编译器,如要使用其它的,则要把编译器的全路径在这里写出。

2-2测试能否编译通过

#make s3c2410_defconfig,

使用缺省内核配置文件,生成.config配置文件,以后可以直接使用make menuconfig 修改配置。

#make ,编译时间较长

3:克隆自己的目标平台

3-1删除原文件

linux-2.6.32.2/arch/arm/mach-s3c2440 目录下有个mach-mini2440.c文件,它其实就是国外爱好者为 mini2440 移植添加的主要内容了,但我们不用它,把它直接删除。

3-2复制新文件

将linux-2.6.32.2/arch/arm/mach-s3c2440/目录下的mach-smdk2440.c复制一份。命名为mach-mini2440.c,找到MACHINE_START(S3C2440, "SMDK2440"),修改为

MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")。

3-3修改时钟频率

第 160 行static void __init smdk2440_map_io(void)函数中,把其中的16934400改为12000000,即12Mhz

3-4讲所有的smdk2440改为mini2440

在 vim 的命令模式下输入:%s/smdk2440/mini2440/g

3-5删除初始化函数

在mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用smdk2440 原来的

3-6编译测试

#make mini2440_defconfig ;使用 Linux 官方自带的 mini2440 配置

#make zImage ;编译内核,时间较长,最后会生成 zImage(arch/arm/boot目录)

在vivi下选择k下载内核,选择b运行内核。

4:移植Nand驱动并更改分区信息

4-1mach-mini2440.c中加入以下代码

static struct mtd_partition mini2440_default_nand_part[] = {

[0] = {

.size = 0x00040000,

.offset = 0,

},

[1] = {

.name = "param",

.offset = 0x00040000,

.size = 0x00020000,

},

[2] = {

.name= "Kernel",

.offset = 0x00060000,

.size = 0x00500000,

},

[3] = {

.name = "root",

.offset = 0x00560000,

.size = 1024 * 1024 * 1024,

},

[4] = {

.name = "nand",

.offset = 0x00000000,

.size = 1024 * 1024 * 1024, //

}

};

 

static struct s3c2410_nand_set mini2440_nand_sets[] = {

[0] = {

.name = "NAND",

.nr_chips = 1,

.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),

.partitions = mini2440_default_nand_part,

},

};

 

static struct s3c2410_platform_nand mini2440_nand_info = {

.tacls = 20,

.twrph0 = 60,

.twrph1 = 20,

.nr_sets = ARRAY_SIZE(mini2440_nand_sets),

.sets = mini2440_nand_sets,

.ignore_unset_ecc = 1,

};

4-2 nand flash 设备注册到系统中

static struct platform_device *mini2440_devices[] __initdata = {

      &s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&s3c_device_nand,

};

4-3加入头文件

#include 

#include 

#include 

#include 

#include 

4-4解决编译出错的改动

只需在mach-mini2440.c的初始化函数mini2440_machine_init(void)里加入

s3c_device_nand.dev.platform_data=&mini2440_nand_info;

4-5编译测试

 

 

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