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内核参照的过程,移植成功。中间出现问题:因配置错误导致编译不能正常通过。后重新配置后,正常,而且可以正确挂载文件系统。
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内核参照的过程,移植成功。中间出现问题:因配置错误导致编译不能正常通过。后重新配置后,正常,而且可以正确挂载文件系统。
相关文章推荐
- linux2.6.14内核移植到2410
- linux 2.6.14内核的移植(基于gec2410开发板)
- 【嵌入式】S3C2410平台移植linux 2.6.14内核
- 【嵌入式】S3C2410平台移植linux 2.6.14内核
- linux 2.6.14内核的移植(基于gec2410开发板)
- linux-2.6.14内核移植
- 基于S3C2410平台的Linux 2.6.14内核+平台驱动的移植指南(最终版)
- 基于S3C2410平台移植Linux 2.6.14内核指南
- 基于S3C2410平台移植Linux 2.6.14内核&驱动指南
- linux-2.6.14内核移植
- 基于S3C2410平台的Linux 2.6.14内核+平台驱动的移植指南(最终版)
- 【嵌入式】S3C2410平台移植linux 2.6.14内核
- Linux-2.6.32.2内核在mini2440上的移植(十)---配置USB外设
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动
- linux内核移植s3c2410,准备工作,继续
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(十六)---基于中断的按键驱动移植
- 【引用】Linux-2.6.32.2内核在mini2440上的移植(四)---根文件系统制作(1)
- Linux内核移植和根文件系统制作
- linux--mini2440内核移植手册
- linux2.6.30.4内核移植(5)——构建根文件系统(yaffs文件系统格式的镜像)