您的位置:首页 > 运维架构 > Linux

linux-2.6.14内核移植

2009-08-19 16:22 316 查看
下载linux-2.6.14.1.tar.bz2

tar -zxvf linux-2.6.14.1.tar.bz2

下载arm-linux-3.4.1.tar.jz

tar -jxvf arm-linux-3.4.1.tar.jz

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

[arm@localhost linux-2.6.14]# vi Makefile

找到 ARCH 和 CROSS_COMPILE,修改(大约在183行)

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-

修改环境变量 将交叉编译工具路径和内核路径加入环境变量

[arm@localhost linux-2.6.14]# vi /etc/profile

在最后添加 export PATH=/usr/local/arm/bin:$PATH

export KERNEL=/home/admin/linux-2.6.14.1

#make menuconfig

system type:-> arm system type:->samsung s3c2410

make zImage 报错

drivers/video/console/vgacon.c:290: error:'PCIMEM_BASE'undeclared(first use in this function)

解决办法

make menuconfig

device drivers->

Graphics support->

Console display driver support->

[ ]VGA text console (去掉即可)

再次编译 又报错

LD .tmp_vmlinux1

arm-linux-ld:arch/arm/kernel/vmlinux.lds:1439: parse error

make: *** [.tmp_vmlinux1] Error 1

解决办法

[root@localhost linux-2.6.14]$ vi arch/arm/kernel/vmlinux.lds

将文件尾2条的ASSERT注释掉

/* ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") */

/* ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") */

终于编译过去了

************************************************************************************************************

交叉编译内核

************************************************************************************************************

一、设置flash分区

指明分区信息

在arch/arm/mach-s3c2410/devs.c文件中添加如下内容:

#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/arch/nand.h>

/* NAND Controller */

1.、建立Nand Flash分区表

static struct mtd_partition partition_info[] ={
{
name: "vivi",
offset: 0,
size: 0x00020000,

}, {
name: "param",
offset: 0x00020000,
size: 0x00010000,
}, {
name: "kernel",
offset: 0x00030000,
size: 0x001d0000,
}, {
name: "root",
offset: 0x00200000,
size: 0x00a00000,
}, {
name: "jffs2",
offset: 0x00c00000,
size: 0x01400000,
}
};
name: 代表分区名字
size: 代表flash分区大小(单位:字节)
offset: 代表flash分区的起始地址(相对于0x0的偏移)
目标板计划分5个区,分别存放vivi,param, kernel, root以及以便以后扩展使用的用户文件系统空间。

2、加入Nand Flash分区

struct s3c2410_nand_set nandset ={
nr_partitions: 5, /* the number of partitions */
partitions: partition_info, /* partition table */
};
nr_partitions: 指明partition_info中定义的分区数目
partitions: 分区信息表

3、 建立Nand Flash芯片支持

struct s3c2410_platform_superlpplatform_nand={
tacls:0,
twrph0:30,
twrph1:0,
sets: &nandset,
nr_sets: 1,
};
tacls, twrph0, twrph1的意思见S3C2410手册的63,
这3个值最后会被设置到NFCONF中,见S3C2410手册66.
sets: 支持的分区集
nr_set:分区集的个数

4.、加入Nand Flash芯片支持到Nand Flash驱动

struct platform_device s3c_device_nand = {
.name = "s3c2410nand", /* Device name */
. id = -1, /* Device ID */
.num_resources = ARRAY_SIZE(s3c_nand_resource),
.resource = s3c_nand_resource, /* Nand Flash Controller Registers */

/*添加以下内容用来支持NAND Flash芯片*/

.dev = {
.platform_data = &superlpplatform_nand
}

name: 设备名称
id: 有效设备编号,如果只有唯一的一个设备为-1,有多个设备从0开始计数.
num_resource: 有几个寄存器区
resource: 寄存器区数组首地址
dev: 支持的Nand Flash设备

二、指定启动时初始化

kernel启动时依据我们对分区的设置进行初始配置

修改arch/arm/mach-s3c2410/mach-smdk2410.c文件smdk2410_devices[],指明初始化时包括我们在前面所设置的flash分区信息

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校验

修改drivers/mtd/nand/s3c2410.c 文件s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:

chip->eccmode = NAND_ECC_NONE;

edit /include/linux/mtd/partitions.h
partitions.h文件的最前面加上#include <linux/list.h>

四、配置内核
1、支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改
fs/Kconfig文件找到menu "Pseudo filesystems"添加如下语句:
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 .config拷到内核目录树根下

make menuconfig 将smdk2410_defconfig 导入,在smdk2410_defconfig基础上,配置内核

Loadable module support >
[*] Enable loadable module support
[*] Automatic kernel module loading

System Type >
[*] S3C2410 DMA support
Boot options >
Default kernel command string:
noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
说明:mtdblock3代表我的第4个flash分区,它是我的rootfs
console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.

Floating point emulation >
[*] NWFPE math emulation

接下来要做的是对内核MTD子系统的设置

Device Drivers >
Memory Technology Devices (MTD) >
[*] MTD partitioning support /*支持MTD分区,这样我们在前面设置的分区才有意义*/
[*] Command line partition table parsing /*支持从命令行设置flash分区信息,灵活*/
RAM/ROM/Flash chip drivers >
<*> Detect flash chips by Common Flash Interface (CFI) probe
<*> Detect nonCFI AMD/JEDECcompatible flash chips
<*> Support for Intel/Sharp flash chips
<*> Support for AMD/Fujitsu flash chips
<*> Support for ROM chips in bus mapping
NAND Flash Device Drivers >
<*> NAND Device Support
<*> NAND Flash support for S3C2410/S3C2440 SoC
Character devices >
[*] Nonstandard serial port support
[*] S3C2410 RTC Driver

接下来做的是针对文件系统的设置

File systems >
<> Second extended fs support #去除对ext2的支持
Pseudo filesystems >
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
[*] /dev file system support (OBSOLETE)
[*] Automatically mount at boot (NEW)
这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
Miscellaneous filesystems >
<*> Compressed ROM file system support (cramfs) /*支持cramfs*/
Network File Systems >
<*> NFS file system support

到这里就可以保存退出,make zImage了。

以上是我移植2.6.14内核参照的过程,移植成功。中间出现问题:因配置错误导致编译不能正常通过。后重新配置后,正常,而且可以正确挂载文件系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: