Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1043067
  • 博文数量: 297
  • 博客积分: 11721
  • 博客等级: 上将
  • 技术积分: 3431
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 10:21
文章分类

全部博文(297)

文章存档

2016年(9)

2011年(71)

2010年(137)

2009年(80)

分类: LINUX

2010-05-11 11:07:07

下面是移植步骤,

1.下载内核代码,修改构架和编译器

2.修改时钟频率,mini2440开发板用的是12M晶振,修改arch/arm/mach-s3c2440/mach-smdk2440.c

把下面代码中的16934400改为12000000,如果不改串口会出现乱码

static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

3.修改mini2440的lcd配置,有两个地方要修改,第一是修改LCD屏幕的参数,第二是修改fbi

修改LCD屏幕参数,mini2440使用的是3.5寸的屏幕,在arch/arm/mach-s3c2440/mach-smdk2440.c中,写入

  • 3.1修改LCD参数结构。

#define LCD_WIDTH 240
#define LCD_HEIGHT 320
#define LCD_PIXCLOCK 170000

#define LCD_RIGHT_MARGIN 25
#define LCD_LEFT_MARGIN 0
#define LCD_HSYNC_LEN 4

#define LCD_UPPER_MARGIN 1
#define LCD_LOWER_MARGIN 4
#define LCD_VSYNC_LEN 1

修改lcd参数结构为:

static struct s3c2410fb_display mini2440_lcd_cfg __initdata = {

#if !defined (LCD_CON5)
.lcdcon5   = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
#else
.lcdcon5   = LCD_CON5,
#endif

.type       = S3C2410_LCDCON1_TFT,

.width       = LCD_WIDTH,
.height       = LCD_HEIGHT,

.pixclock   = LCD_PIXCLOCK,
.xres       = LCD_WIDTH,
.yres       = LCD_HEIGHT,
.bpp       = 16,
.left_margin   = LCD_LEFT_MARGIN + 1,
.right_margin   = LCD_RIGHT_MARGIN + 1,
.hsync_len   = LCD_HSYNC_LEN + 1,
.upper_margin   = LCD_UPPER_MARGIN + 1,
.lower_margin   = LCD_LOWER_MARGIN + 1,
.vsync_len   = LCD_VSYNC_LEN + 1,
};

  • 3.2修改fbi

static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
.displays   = &smdk2440_lcd_cfg,
.num_displays   = 1,
.default_display = 0,

.gpccon =       0xaa955699,
.gpccon_mask = 0xffc003cc,
.gpcup =        0×0000ffff,
.gpcup_mask =   0xffffffff,

.gpdcon =       0xaa95aaa1,
.gpdcon_mask = 0xffc0fff0,
.gpdup =        0×0000faff,
.gpdup_mask =   0xffffffff,

.lpcsel       = 0xf82,
};

4.修改nand分区表,修改arch/arm/plat-s3c24xx/common-smdk.c,这个根据自己的情况来写,照抄是没用滴。

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name   = “bootloader”,
.size   = 0×00060000,
.offset   = 0,
},
[1] = {
.name   = “kernel”,
.offset = 0×00060000,
.size   = 0×00200000,
},
[2] = {
.name   = “root”,
.offset = 0×00260000,
.size   = 0×3fd80000,
}
};

5.修改machine ID,修改arch/arm/tools/mach-types,填写自己的machine ID

s3c2440           ARCH_S3C2440       S3C2440           1999

6.给内核打yaffs文件系统的补丁。去下载GNU tarball,解压后进入yaffs2目录,给内核打补丁

./patch-ker.sh c ~/kernel/linux-2.6.32

补丁打好后,在内核代码目录下的fs目录新增了yaffs2目录和相关配置文件

7.因为2410和2440很多地方是一样的,可以用2410的配置文件为基础来配置内核。在内核代码主目录下执行:

make s3c2410_defconfig

这个命令其实就是把arch/arm/configs/s3c2410_defconfig文件拷贝过来命名为.config,所以也可以自己cp。其实在2.6.31版内核中就已经加入了对mini2440开发板的支持,但是我没有选。

配置内核这里没有什么好说的,按照自己的需求来配置。

注意两个问题:

(1)编译后的镜像大小不要超过分区配额

(2)不要裁剪太狠了,把一些基本支持都去掉了,这样一些设备就用不了啦

开始编译。我的机器配置是Core 2 T5500 1.66G,2.5G 内存,运行Debian Lenny 5.0.3,编译10分钟左右就OK了。

网卡驱动我一直没有移植成功。后面弄好了再写上来。

EOF

http://ganquan.org/blog/2009/12/2-6-32-port-to-mini2440/

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~