Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397357
  • 博文数量: 115
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 1009
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-23 17:05
文章分类

全部博文(115)

文章存档

2011年(2)

2010年(86)

2009年(27)

我的朋友

分类: 嵌入式

2010-10-16 23:45:24

内核移植

1.3.1 移植内核和根文件系统准备工作

移植内核前,保证你已经装上了Linux系统,建立好了交叉编译环境,我用的是虚拟机,装的Redhat9.0系统,交叉编译工具用的是友善之臂的arm-linux-gcc-4.3.2

开始移植Linux内核了,下面是我我使用的内核和文件系统,以及所用到的工具及获取方法:

1Linux系统

我是在虚拟机上安装的Redhat9.0XP系统下虚拟机设置的共享目录是D:\share,对应的Linux系统的目录是/mnt/hgfs/share。我将下面准备的压缩包和文件都统一放到该目录下。

2Linux内核

主页,进入该网站中链接FTP ftp://ftp.kernel.org/pub/,在里面进入文件夹“linux->kernel->v2.6,会出现很多版本的内核压缩包和补丁,选中Linux-2.6.29.1.tar.bz2下载。

3、交叉编译工具链

使用友善之臂提供的arm-linux-4.3.2工具链,没有的到下载。工具链也可以自己做,可以参考《构建嵌入式Linux系统》一书或其它资料。

4yaffs2代码

进入,点击“Download GNU tarball”,下载后出现cvs-root.tar.gz压缩包。

5busybox-1.13.3

下载busybox,这里下载的是busy busybox-1.13.3.tar.gz

6、根文件系统制作工具

到友善之臂 网站下载根文件系统制作工具mkyaffs2image.tgz

7、友善之臂的根文件系统

在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂的根文件系统root_qtopia中的链接库lib,到友善之臂网站 下载root_qtopia.tgz

这些文件都下载到D:\share中,通过虚拟机进入Redhat9.0系统,进入/mnt/hgfs/share目录便可访问这些与XP共享的文件。

8、硬件平台

       友善之臂的mini2440

1.3.2 修改Linux源码中参数

1、解压内核源码

mkdir /opt/studyarm

cd /mnt/hgfs/share

tar –jxvf linux-2.6.29.1.tar.bz2 –C /opt/studyarm

进入内核目录,修改makefile,并对内核进行默认配置进行修改

       193行,修改

       ARCH                        ?=arm

       CROSS_COMPILE   ?=arm-linux-

修改平台输入时钟

        找到内核源码arch/arm/mach-s3c2440/mach-smdk2440.c文件,在函数 static void __init smdk2440_map_io(void)中,修改成s3c24xx_init_clocks(12000000)

修改machine名称(可以不改)

修改文件arch/arm/mach-s3c2440/mach-smdk2440.c,在文件中找到MACHINE_START( ),修改为MACHINE_START(S3C2440, “Study-S3C2440”)

修改Nand flash分区信息

修改文件kernel.git/arch/arm/plat-s3c24xx/common-smdk.c

第一,修改分区信息:

static struct mtd_partition smdk_default_nand_part[] = {

       [0] = {

       .name = "bootloader",

       .offset = 0x00000000,

       .size = 0x00030000,

       },

       [1] = {

       .name = "kernel",

       .offset = 0x00050000,

       .size = 0x00200000,

       },

       [2] = {

       .name = "root",

       .offset = 0x00250000,

       .size = 0x03dac000,

       }

};

第二,再修改s3c2410_platform_nand_smdk_nand_info smdk_nand_info = {

.tacls = 0,

.twrph0 = 30,

.twrph1=0,

};

6 修改LCD背光

修改文件/arch/arm/mach-s3c2440/mach-smdk2440.c,因为友善的3.5寸液晶的背光控制是由S3C2440GPG4引脚来控制的,故下面的改动将开启背光。

static void __init smdk2440_machine_init(void)

{

       s3c24xx_fb_set_platdata(&smdk2440_fb_info);

       platform_add_devices();

       s3c2410_gpio_cfgpin(S3C2410_GPG4,S3C2410_GPG4_OUTP);

       s3c2410_gpio_setpin(S3C2410_GPG4,1);                                     smdk_machine_init();

}

LCD参数修改

        这里用的是NEC3.5英寸屏液晶屏,大小为320x240,需要修改修改文件arch/arm/mach-s3c2440/mach-smdk2440.c

static struct s3c2410fb_display smdk2440_lcd_cfg __initdata =

{

      

       .right_margin = 37,

       .hsync_len = 6, 

       .upper_margin =2,

       .lower_margin = 6,

       .vsync_len =2,

};

static struct s3c2410fb_mach_info smdk2440_fb_info   __initdata      ={

.default_display =0

       .gpccon         = 0xaa955699,

       .gpccon_mask      = 0xffc003cc,

       .gpcup           = 0x0000ffff,

       .gpcup_mask = 0xffffffff,

       .gpdcon         = 0xaa95aaa1,

       .gpdcon_mask      = 0xffc0fff0,

       .gpdup           = 0x0000faff,

       .gpdup_mask = 0xffffffff,

.lpcsel = 0xf82,

};

给内核打yaffs2文件系统的补丁

cd /mnt/hgfs/share

tar –zxvf /mnt/hgfs/share/cvs-root.tar.gz –C /opt/studyarm

    cd /opt/stdudyarm/cvs/yaffs2/

./patch-ker.sh c /opt/studyarm/linux-2.6.29.1/ 

上面命令完成下面三件事情:

(1) 修改内核fs/Kconfig

    增加一行:source "fs/yaffs2/Kconfig"

(2) 修改内核fs/Kconfig

    增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/

(3) 在内核fs/目录下创建yaffs2目录

    yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;

    yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下;

    yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.

、修改S3C2440的机器号

由于Bootloader传递给Linux内核的机器号为782,为与Bootloader传递参数一致,修改 arch/arm/tools/math-types文件。

s3c2440                     ARCH_S3C2440              S3C2440                    362

修改为:

s3c2440                     ARCH_S3C2440              S3C2440                    782

另外,还可以不修改内核中的S3C2440机器号,只需修改修改Bootloader传递给内核的参数中的机器号就可以了。在VIVI中菜单中,按s,再按s,输入mach_type,回车,输入362w,保存。

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