您的位置 首页 知识

Linux2.6.36移植到飞凌S3C6410开发板 过程

今天终于让linux内核在飞凌ok6410的板子上跑起来了,想来也是艰辛,为了移植成功,断断续续做了将近两个月的努力,期间郁闷不可言语形容啊,

今日总算让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 都是飞凌开发板自带的
二、 源码取得
内核源码到http://www.all.kernel.org/下载;
三、 移植过程:
1.将Linux2.6.34.2内核源码放到作业目录文件夹下,并解压。
#tar xzvf linux2.6.36.2.tar.gz –c /
#pwd
/
# cd linux2.6.36.2
2. 修正内核源码根目录下的Makefile文件(CROSS_COMPILE =的值因个人状况而定,其他能够照做,蓝色部分为修正部分。)
#gedit Makefile
……
#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
#gedit mach-smdk6410.c //add here
// 留意:此处的nandflash分区信息是飞凌自带的2.6.28的内核设置,因为此处要用到uboot是飞凌的,所以分区信息也要按人家的来
增加头文件
#include #include #include
#include
struct mtd_partition s3c_partition_info[] = {
{
.name = “Bootloader”,
.offset = 0,
.size = (256*SZ_1K),
.mask_flags =MTD_CAP_NANDFLASH,
},
{
.name = “Kernel”,
.offset = (256*SZ_1K),
.size = (4*SZ_1M) – (256*SZ_1K),
.mask_flags = MTD_CAP_NANDFLASH,
},
#if defined (CONFIG_SPLIT_ROOT_FILESYSTEM)
{
.name = “Rootfs”,
.offset = (4*SZ_1M),
.size = (80*SZ_1M),//
},
#endif
{
.name = “File System”,
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
static struct s3c2410_nand_set s3c_nandset[]={
[0]= {
.name =”s3c24xx-nand”,
.nr_chips = 1,
.nr_partitions =ARRAY_SIZE(s3c_partition_info),
.partitions =s3c_partition_info,
}
};
static struct s3c2410_platform_nand s3c_platform={
.tacls =25,
.twrph0 =55,
.sets = &s3c_nandset,
.nr_sets =ARRAY_SIZE(s3c_nandset),};
//add here…
static struct platform_device *smdk6410_devices[] __initdata = {
#ifdef CONFIG_SMDK6410_SD_CH0
&s3c_device_hsmmc0,
#endif
#ifdef CONFIG_SMDK6410_SD_CH1
&s3c_device_hsmmc1,
#endif
&s3c_device_i2c0,
&s3c_device_i2c1,
&s3c_device_fb,
&s3c_device_ohci,
&s3c_device_usb_hsotg,
&s3c64xx_device_iisv4,
//add here
&s3c_device_nand,
//add here…
}
static void __init smdk6410_map_io(void){
u32 tmp;
//add here
s3c_device_nand.name = “s3c6410-nand”;
//add here…

}
static void __init smdk6410_machine_init(void){
u32 cs1;
s3c_i2c0_set_platdata(NULL);
s3c_i2c1_set_platdata(NULL);
s3c_fb_set_platdata(&smdk6410_lcd_pdata);
//add here
s3c_nand_set_platdata(&s3c_platform);//
//add here…
}

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:
……………………………………………………….

[] (kernel_init+0x94/0x14c) from [] (kernel_thread_exit+0x0/0x8)
—[ 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 = {
……………………………………………….
&smdk6410_smsc911x,
&s3c_device_adc,
&s3c_device_cfcon,
&s3c_device_rtc,
&s3c_device_ts,
&s3c_device_wdt,
&s3c_device_nand,
}; 结构体中所有设备都找不到开释函数,经过剖析,可能是这些板级设备初始化时呈现问题,所以体系调用开释资源的函数,但是内核中没有这些函数(可能是没有必要吧,所以内核中没有界说!此上纯属个人胡猜,期望高手纠正),所以呈现如上问题,经过我很多的剖析,问题在static struct resource s3c_nand_resource[](途径:arch./arm/plat-samsung) 这个组织体中,
static struct resource s3c_nand_resource[] = {
[0] = {
.start = S3C_PA_NAND,
.end = S3C_PA_NAND + SZ_1M-1,
.flags = IORESOURCE_MEM,
}
};
.end = S3C_PA_NAND + SZ_1M-1, 这个值后边再减去1,就能够了,这是比照其他的设备资源结构做出的修正,此处涉及到这些设备的总线地址规模,我揣摩着呈现上述问题,便是这个总线地址抵触了,期望高手纠正啊!(内核中的界说,怎么会呈现过错呢,这当地我还真搞不懂啊),不知道自己修正的适宜不适宜
所以处理方法便是修正arch./arm/plat-samsung/dev-nand.c 中的
static struct resource s3c_nand_resource[] = {
[0] = {
.start = S3C_PA_NAND,
.end = S3C_PA_NAND + SZ_1M-1,
.flags = IORESOURCE_MEM,
}
};
.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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/261495.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部