📄 恒丰锐科-最新linux 2_6内核的移植过程--arm 2410开发板手册选登--.txt
字号:
恒丰锐科-最新linux 2.6内核的移植过程--arm 2410开发板手册选登--
最新咨询产品中心S3C44b0开发板S3C2410开发板嵌入式系统教程嵌入式系统硬件设计和工艺
PC硬件接口资源下载软件代码恒丰论坛客户留言板项目合作网站帮助
关于我们
首页->>S3C2410开发板->>软件开发->>本页
最新linux 2.6内核的移植过程--arm 2410开发板手册选登
日期:2005-12-23 11:06:55 来源:恒丰锐科 浏览次数:1811
第二章编译移植内核
在以上章节介绍了2.4内核的编译过程,因为三星公司的smdk2410开发板使用的是2.4.18的内核,所以目前国内有相当多的客户都很熟悉2.4的使用和配置,我们不再对这个内核作介绍了。我们在这一章中将主要讲述最新的linux2.6.14内核的移植过程。由于2410已经成为linux2.6的标准支持平台,所以移植起来相对并不是很复杂。
第一节在hfrk2410开发板上运行linux2.6内核
一.准备必要的文件
我们首先去官方网站下载最新的llinux内核
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2
因为linux2.6.14内核需要更新版本的编译器,所以我们需要下载交叉编译器
ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2
注:这个编译器已经包含在光盘的\DISK4\linux相关\linuxtool目录下面。
二.安装文件
我们把gcc安装在/usr/local/arm/3.4.1目录下,安装方法和安装gcc2.95.3和gcc3.3.2是相同的,在此我们不再描述了
接下来需要解压linux内核,输入命令:
[root·localhost hfrk]# tar jxvf linux-2.6.14.tar.bz2
内核被解压到linux-2.6.14目录下。
三.修改makefile文件
内核的编译是根据makefile文件的指示进行的,Makefile文件来组织内核的各模块之间的关系,记录了各个模块之间的相互联系和依赖关系。
我们首先修改linux-2.6.14的根目录下的makfile文件,我们须改的主要内容是目标代码的类型和为编译内核指定一个编译器。
我们注释掉以下内容:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
增加如下内容:
ARCH : = arm
CROSS_COMPILE
=/usr/local/arm/3.4.1/bin/arm-linux-
四.修改相关的文件。
1. 修改arch\arm\mach-s3c2410\devs.c文件
增加头文件定义
/***********add here***********/
#include <linux/mtd/partitions.h>
#include <asm/arch/nand.h>
#include <linux/mtd/nand.h>
/**************end add********/
增加nand flash分区信息
/***********add here***********/
static struct mtd_partition
partition_info[] ={
{
name: "loader",
size: 0x00020000,
offset: 0,
}, {
name: "param",
size: 0x00010000,
offset: 0x00020000,
}, {
name: "kernel",
size: 0x001c0000,
offset: 0x00030000,
}, {
name: "root",
size: 0x00200000,
offset: 0x00200000,
mask_flags: MTD_WRITEABLE,
}, {
name: "user",
size: 0x03af8000,
offset: 0x00400000,
}
};
struct s3c2410_nand_set nandset ={
nr_partitions: 5 ,
partitions: partition_info ,
};
struct s3c2410_platform_nand
superlpplatform={
tacls:0,
twrph0:30,
twrph1:0,
sets: &nandset,
nr_sets: 1,
};
/**************end add********/
struct platform_device s3c_device_nand = {
.name = "s3c2410-nand",
.id = -1,
.num_resources =
ARRAY_SIZE(s3c_nand_resource),
.resource = s3c_nand_resource,
/***********add here****************/
.dev = {
.platform_data = &superlpplatform
}
/**************end here************/
};
2. 修改arch\arm\mach-s3c2410\mach-smdk2410.c文件
Startic struct platform_device
*smdk2410_devices[] __initdata={
&s3c_device_usb,
&s3c_device_lcd;
&s3c_device_wdt,
&s3c_device_i2c;
&s3c_device_iis,
&s3c_device_nand, /*add here*/
};
五.我们做完以上修改以后,内核编译以后就可以在hfrk2410开发板上运行了。
打开终端窗口,切换到linux-2.6.14目录下,输入命令:
[root·localhost linux-2.6.14]# mak smdk2410_defconfig
[root·localhost linux-2.6.14]# mak
等编译完成以后,会生成镜像文件arch/arm/boot/zImage,把这个文件下载到开发板上,就会看到linux2.6的内核启动信息,我们迈出了linux2.6内核移植的第一步!
第二节移植LCD驱动程序
我们通过上面的工作,在串口中已经看到了linux2.6.14的启动信息,但是在LCD上没有任何显示,这是因为我们还没有对LCD进行初始化,linux2.6.14已经包含了lcd的驱动程序,驱动程序位于/linux-2.6.14/drivers/video/目录下,文件名是s3c2410fb.c,头文件是s3c2410fb.h.。我们在这里可以不研究这个文件。只要我们对lcd进行以下初始化就可以了。
我们打开/linux-2.6.14/arch/arm/mach-s3c2410/mach-smdk2410.c,在这个文件里增加包含文件:
#include
#include
然后增加LCD初始化的代码,
static struct s3c2410fb_mach_info hfrk_lcdcfg
__initdata = {
.fixed_syncs= 0,
.regs={
.lcdcon1= S3C2410_LCDCON1_TFT16BPP | \
S3C2410_LCDCON1_TFT | \
S3C2410_LCDCON1_CLKVAL(6),
.lcdcon2= S3C2410_LCDCON2_VBPD(2) | \
S3C2410_LCDCON2_LINEVAL(319) | \
S3C2410_LCDCON2_VFPD(0) | \
S3C2410_LCDCON2_VSPW(4),
.lcdcon3= S3C2410_LCDCON3_HBPD(47) | \
S3C2410_LCDCON3_HOZVAL(239) | \
S3C2410_LCDCON3_HFPD(15),
.lcdcon4= S3C2410_LCDCON4_MVAL(1) | \
S3C2410_LCDCON4_HSPW(31),
.lcdcon5= S3C2410_LCDCON5_FRM565 | \
S3C2410_LCDCON5_INVVLINE | \
S3C2410_LCDCON5_HWSWP,
},
.lpcsel= 0x0,
.gpccon= 0xaaaaaaaa,
.gpccon_mask= 0xffffffff,
.gpcup= 0xffffffff,
.gpcup_mask= 0xffffffff,
.gpdcon= 0xaaaaaaaa,
.gpdcon_mask= 0x0,
.gpdup= 0xffffffff,
.gpdup_mask= 0xffffffff,
.width= 240,
.height= 320,
.xres= {240,240,240},
.yres= {320,320,320},
.bpp= {16,16,16},
};
static void __init sdmk2410_init(void)
{
set_s3c2410fb_info(&hfrk_lcdcfg);
}
在系统初始化中增加对lcd的初始化。
MACHINE_START(SMDK2410, "SMDK2410") /* @TODO:
request a new identifier and switch
* to SMDK2410 */
/* Maintainer: Jonas Dietsche */
……
.map_io = smdk2410_map_io,
.init_irq = smdk2410_init_irq,
.init_machine = sdmk2410_init, /*这一句是新增加的*/
.timer = &s3c24xx_timer,
MACHINE_END
现在我们重新保存这个文件,现在需要重新进入配置菜单,检查一下LCD的相关选项是否选上,[Device
Drivers->Graphics
support->]这个配置菜单下面是相关LCD的配置。回到根目录下,输入make编译内核,重现烧写内核到开发板,再次启动linxu2.6.14以后就可以在lcd上看到一个小的企鹅。我们的lcd驱动已经移植完成了。
相关文章:
linux 内核配置简介如何移植arm yaffs文件系统
如何设置linux的NFS服务器
评论
北京恒丰锐科科技有限公司版权所有2002-2004 Copyrights
BeiJing HengFengRuiKe Science and Technology CO.,LTD. All Rights Reserved
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -