今日总算让linux内核在飞凌ok6410的板子上跑起来了,想来也是艰苦,为了移植成功,时断时续做了将近两个月的尽力,期间抑郁不行言语描述啊, 了解其间艰苦,将自己移植过程与心得与我们共享,期望对初踏次范畴之人有所协助,我所写的效果一部分也是网上长辈的所作,并非自己原创。
一、 移植环境
主 机:VMWare-Ubuntu
开发板:飞凌OK6410 nandflash,Kernel:2.6.36.2
编译器:arm-linux-gcc-4.3.2.tgz
u-boot:u-boot-1.1.6
注:编译器和u-boot 都是飞凌开发板自带的
二、 源码取得
三、 移植过程:
1.将Linux2.6.34.2内核源码放到作业目录文件夹下,并解压。
#tar xzvf linux2.6.36.2.tar.gz –c /
#pwd
/
# cd linux2.6.36.2
……
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/
# -e s/arm.*/arm/ -e s/sa110/arm/
# -e s/s390x/s390/ -e s/parisc64/parisc/
# -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
……
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
ARCH = arm
CROSS_COMPILE = /usr/local/arm/usr/local/arm/4.3.2/bin/arm-none-linux- gnueabi-
3增加NandFlash分区信息.
修正arch/arm/mach-s3c64xx/mach-smdk6410.c文件,增加Nand Flash的分区信息和Nand Flash的硬件信息。(蓝色字体为增加部分)
#pwd
// 留意:此处的nandflash分区信息是飞凌自带的2.6.28的内核设置,因为此处要用到uboot是飞凌的,所以分区信息也要按人家的来
增加头文件
#include
#include
struct mtd_partition s3c_partition_info[] = {
#if defined (CONFIG_SPLIT_ROOT_FILESYSTEM)
#endif
};
static struct s3c2410_nand_set s3c_nandset[]={
};
static struct s3c2410_platform_nand s3c_platform={
//add here…
static struct platform_device *smdk6410_devices[] __initdata = {
#ifdef CONFIG_SMDK6410_SD_CH0
#endif
#ifdef CONFIG_SMDK6410_SD_CH1
#endif
}
static void __init smdk6410_map_io(void){
…
}
static void __init smdk6410_machine_init(void){
}
5.装备内核。(arch/arm/configs/目录下是一般内核的默许装备)
支撑NandFlash
Device Drivers —>
<*> Memory Technology Device (MTD) support —>
MTD partitioning support
<*> NAND Device Support —>
<*> NAND Flash support for S3C/S3C SoC
device drivers ->
Memory Technology Device (MTD) support —>
Caching block device access to MTD devices
(此出勾选可防止呈现:VFS: Cannot open root device “mtdblock2” or unknown-block(2,0) 过错)
保存退出
仿制config文件,编译内核
#pwd
#/linux2.6.34.2
#cp –f arch/arm/configs/s3c6400_defconfig .config
能够运用make menuconfig对刚刚装备的内核依据详细的状况进行修正,开端我没有进行修正直接make zImage,最终在arch/arm/boot/目录下生成zImage镜像文件。
6.编译内核 make zImage
…………………………………..
CPU: Testing write buffer coherency: ok
s3c6400-nand: failed to claim resource 0
WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
…………………………………………………….
————[ cut here ]————
WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
Device s3c64xx-rtc does not have a release() function, it is broken and must be fixed.
Modules linked in:
……………………………………………………….
[
—[ end trace 1b75b31a2719ed1e ]—
————[ cut here ]————
WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
Device s3c64xx-pata.0 does not have a release() function, it is broken and must be fixed.
Modules linked in:
……………………………………………………………………………..
这个问题便是在mach-smdk6410.c 中的static struct platform_device *smdk6410_devices[] __initdata = {
……………………………………………….
}; 结构体中所有设备都找不到开释函数,经过剖析,可能是这些板级设备初始化时呈现问题,所以体系调用开释资源的函数,但是内核中没有这些函数(可能是没有必要吧,所以内核中没有界说!此上纯属个人胡猜,期望高手纠正),所以呈现如上问题,经过我很多的剖析,问题在static struct resource s3c_nand_resource[](途径:arch./arm/plat-samsung) 这个组织体中,
static struct resource s3c_nand_resource[] = {
};
所以处理方法便是修正arch./arm/plat-samsung/dev-nand.c 中的
static struct resource s3c_nand_resource[] = {
};
.end = S3C_PA_NAND + SZ_1M-1, 减去一就行了
7.再次编译内核,下载运转:
…………………………………
ifconfig: socket: Function not implemented
Try to bring eth0 interface up……ifconfig: socket: Function not implemented
ifconfig: socket: Function not implemented
ifconfig: socket: Function not implemented
route: socket: Function not implemented
Done
Starting Qtopia, please waiting…
Please press Enter to activate this console. touch…
阐明内核现已成功引导发动文件体系,只不过现在的内核没有触摸板驱动,下一步你就能够移植一下触摸板驱动了
此教程仅仅自己所遇到问题的总结,一些问题只做参阅,沟通,并不具有通用性,如按照上述过程遇到问题,联络我,能够帮着一同处理,自己菜鸟,教程制造匆急,如有过错,请我们见谅,
引证文章:
http://hi.baidu.com/serial_story … fd0edd267fb500.html
http://www.linuxidc.com/Linux/2010-08/27828p3.htm
http://www.witech.com.cn