Chinaunix首页 | 论坛 | 博客
  • 博客访问: 711947
  • 博文数量: 105
  • 博客积分: 3532
  • 博客等级: 中校
  • 技术积分: 1328
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-20 18:57
文章分类

全部博文(105)

文章存档

2015年(1)

2014年(1)

2013年(7)

2012年(14)

2011年(21)

2010年(61)

分类: 嵌入式

2010-05-16 01:53:38

  1. 平台:
    系统:Ubuntu9.04
    交叉编译器:gcc-3.4.1,glibc-2.3.3
    其他工具:mkimage
    开发板:PW2440
    CPU:S3C3440;晶振:16.9344MHz;Nand flash:64M;SRAM:64M;串口:UART1
    LCD:3.5寸TFT(带触摸屏);网卡:DM9000a
    启动方式:Nand flash
    本人使用bootloader:u-boot-2009.08
    文件系统:busybox-1.3.1
  2. 内核下载
    版本
  3. 解压内核:

    tar jxvf linux-2.6.33.4.tar.bz2

    cd linux-2.6.33.4

  4. 修改Makefile

    gedit Makefile

    修改成如下:

    ARCH             ?= arm
    CROSS_COMPILE    ?= arm-linux-

  5. 修改机器码和频率

    gedit arch/arm/mach-s3c2440/mach-smdk2440.c

    修改代码如下

    s3c24xx_init_clocks(16934400);          //外部晶振频率 16934400 Hz
    MACHINE_START(SMDK2440, "SMDK2440");    /*与bootloader匹配的设备ID:SMDK2440==1008,在arch/arm/tools/mach-types中定义*/

  6. 修改程序存储器的分区

    gedit arch/arm/plat-s3c24xx/common-smdk.c

    修改smdk_default_nand_part结构体根据自己的板子和bootloader来修改这个结构体,修改后的代码:

    /* NAND parititon from 2.4.18-swl5 */

    static struct mtd_partition smdk_default_nand_part[] = {
        [0] = {//存储u-boot
            .name    = "bootloader",
            .size    = 0x00080000,
            .offset    = 0,
        },
        [1] = {//存储设置参数
            .name    = "parameter",
            .offset = 0x00080000,
            .size    = 0x00010000,
        },
        [2] = {//存储内核
            .name    = "kernel",
            .offset = 0x00090000,
            .size    = 0x00280000,
        },
        [3] = {//存储文件系统
            .name    = "file system",
            .offset    = 0x00310000,
            .size    = 0x03CE0000,
        }
    };

  7. 支持yaffs2文件系统
    • 下载
    • 解压cvs-root.tar.gz

      tar zxvf cvs-root.tar.gz

    • 给内核打补丁

      pwd
      /home/mry/src/linux-2.6.33.4

      ./cvs/yaffs2/patch-ker.sh c ./

    • 此补丁作用如下
      • 修改内核fs/Kconfig
        增加一行:source "fs/yaffs2/Kconfig"
      • 修改内核fs/Makefile
        增加一行:ojb-$(CONFIG_YAFFS_FS)+=yaffs2/
      • 在内核fs/目录下建立yaffs2目录
        yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;
        yaffs2 源码目录的Kconfig文 件复制到内核fs/yaffs2目录下;
        yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录 下。


  8. 内核配置
    该处的目的是使内核支持我们的CPU S3C2440,和YAFFS2文件系统,构成一个具有基本功能的系统
    执行命令:

    make dep
    make clean
    cp arch/arm/configs/s3c2410_defconfig .config
    make menuconfig

    进入如下界面
    • system type --->
      • (1) S3C UART to use for low-level messages //因为本人串口用的是UART1
      •     S3C2410 Machines --->
        • [*]SMDK2410/A9M2410 //该界面的其他项全部不选中,即[ ]
      •     S3C2412 Machines --->     //其子菜单全不选中
      •     S3C2440 Machines --->    
        • [*]SMDK2440
        • [*]SMDK2440 with S3C2440 CPU module //该界面其他选项不选中
      •     S3C2442 Machines --->     //其子菜单全不选中
      •     S3C2443 Machines --->     //其子菜单全不选中
    • File system --->
      • [*]Miscellaneous filesystems --->
        • <*> YAFFS2 file system support
    • Save an Alternate Configuration File
      //保存配置文件为 .config ,编译的时候默认使用该配置文件
    • Exit //退出配置界面
  9. 编译内核
    在这里是编译得到经过压缩的内核文件,即zImage,这样可以节省我们的很多程序存储空间

    make zImage

    经过一段时间的字符飘过(时间长短与机器配置有关系),你就取得成功了,呵呵,不排除你会遇到错误,编译不过,一般都是编译器的问题,换其他的编译器再试试,一个好的编译器可以给你带来很高的效率。
    编译完成会在 arch/arm/boot/ 下面生成一个 zImage 文件(被压缩过的内核镜像二进制文件)
  10. 后继工作
    需要配合你的bootloader,可能需要对zImage做一些加工(例如用u-boot来引导需要使用mkimage工具把zImage加一些头信息,变为uImage),然后把内核下载到nand flash的指定位置(由上面第六步的smdk_default_nand_part结构体定义可知,我的内核应该下载到0x00090000处,而且大小不能超过0x00280000字节),使用bootloader来引导内核,内核就可以运行了,但是还缺少文件系统,所以还不是一个完整的系统,文件系统的制作在后面会相继介绍的
    上面的第八步提到过这只是一个基本的内核,很多其他的功能并没有启动,自己可以慢慢研究。下面给以用用u-boot引导起来的截图

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

zouwen1983172010-10-06 16:26:56

你好,我也有一块pw2440开发板,可是光盘不见了,你有没有原理图,发一个给我,谢谢 zoushiwen198317@21cn.com