原创 Linux 2.6内核在S3C2440平台上移植过程介绍

2013-9-3 15:28 742 12 13 分类: MCU/ 嵌入式
    本文主要介绍 Linux 2.6内核在S3C2440平台上移植,此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:http://www.kernel.org/
 
    1.解压linux-2.6.34.tar.bz2源码包
    #tar jxvf  linux-2.6.34.tar.bz2
    2.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改
    ARCH ? =arm
    CROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux-
    注意:
    交叉编译器的环境变量也需要改为4.3.2
    #export PATH=/usr/local/arm/4.3.2/bin/:$PATH
    其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件
    PATH 用来决定交叉编译器版本
    3.修改机器类型ID号
    Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:
    MACHINE_START(S3C2440, "SMDK2440")
    /* Maintainer: Ben Dooks <ben@fluff.org> */
    .phys_io= S3C2410_PA_UART,
    .io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
    .boot_params= S3C2410_SDRAM_PA + 0x100,
    .init_irq= s3c24xx_init_irq,
    .map_io= smdk2440_map_io,
    .init_machine= smdk2440_machine_init,
    .timer= &s3c24xx_timer,
    MACHINE_END
    MACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。
    4.修改平台输入时钟
    由于我们使用的开发板跟SMDK2440.c晶振不同,需要修改 修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”,把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M。
    5.解压yaffs.tar.gz2源码包,进入yaffs2文件夹,给内核打上补丁使内核支持yaffs2
    Linux官方不支持yaffs文件系统,我们需要打上相应的补丁
    2.6.35(含)之前的补丁从这里下载:
    http://www.rayfile.com/zh-cn/files/2dab2568-c59a-11e0-89da-0015c55db73d/
    #./patch-ker.sh c /home/linux-2.6.34
    2.6.36(含)之后的补丁从这里下载
    http://www.rayfile.com/zh-cn/files/680097c0-c59a-11e0-943b-0015c55db73d/
    #./patch-ker.sh c a /home/linux-2.6.34
    6.修改内核mtd分区和bootloader(vivi)使其一致
    使用vivi或U-boot烧写内核、根文件系统时,需要知道内核以及根文件系统的具体物理地址,我们可以修改一下文件更改此信息,注必须保证这里的地址与vivi,u-boot保持一致,否则出现烧写启动不一致的现象。
    我的分区是:
    bootloader:    192k
    param:         128k (vivi和u-boot的参数保存区域,内核里没有表明,但地址空间预留出来了)
    kernel:        3M
    rootfs:        60M
    编辑文件arch/arm/plat-s3c24xx/common-smdk.c
    static struct mtd_partitionsmdk_default_nand_part[] =
    {
    [0]= {
    .name      = "bootloader",
    .size = 0x00030000,
    .offset     = 0,
    },
    [1]= {
    .name      = "kernel",
    .offset= 0x00050000,
    .size = 0x00300000,
    },
    [2]= {
    .name      = "rootfs",
    .offset= 0x00350000,
    .size = 0x03cac000,
    }
    };
    7.修改文件drivers/mtd/nand/s3c2410.c
    内核中去掉对nand FLASH的ecc校验,由yaffs自己完成
    将s3c2410_nand_init_chip函数里的NAND_ECC_SOFT改为NAND_ECC_NONE
    8.到llinux-2.6.30目录下执行命令
    找一个内核自带的与S3C2440比较接近的配置文件,修改得到我们的配置文件
    #cp  arch/arm/configs/s3c2410_defconfig  .config
    9.执行make menuconfig,并对选项进行配置
    1)SystemType --->
    S3C2440 and S3C2442 machines --->
    仅保留SMDK2440 与SMDK2440 whith S3C2440CPU module两个选项,将其他的选项全部勾掉
    2)Kernel Features --->
   
  • Usethe arm EABI to compile the kernel(选中该选项,因为我们采用的编译器是带EABI(软浮点运算)的编译器)
  •     3)Filesystems --->
        a、把与ext2 ext3 ext4相关的所有选项全部去掉(为了减小编译完内核的体积、可选)
        b、Miscellaneous filesystems --->
        <*>yaffs2file system support(选中此选项)
        4)Device Drivers----->
        Character devices--->
       
  • /dev/kmem virtual device support
  •    
  • Legacy(BSD) PTY support
  •     Block devices--->
        <>Loopback device support
        <>RAW block device support
        5)保存退出
        10.编译
        make zImage,在arch/arm/boot下生成编译好的可执行程序:zImage  vivi一般采用此类型的内核
        make uImage,在arch/arm/boot下生成编译好的可执行程序:UImage  u-boot一般采用此类型的内核
     
        以上文章由凌阳教育嵌入式培训讲师徐老师提供,转载请以原始链接注明出处!原文链接:http://emb.sunplusedu.com/answer/2013/0731/2052.html

    文章评论1条评论)

    登录后参与讨论

    用户403664 2013-9-4 10:39

    你这广告别太明显了
    相关推荐阅读
    用户1708372 2013-09-10 12:14
    如何查看linux系统版本?
        1. 查看内核版本命令:     linuxserver">chen@mylinuxserver:~> cat /proc/version     Linux vers...
    用户1708372 2013-09-10 12:06
    关于嵌入式培训机构中的就业明星究竟是怎么回事?
        相信很多的之前有考察过嵌入式培训机构的同学都有发现一个问题:一些培训机构在说到他们的学员就业时总会搬出一些高薪就业的明星传奇人物。或许这对于很多的应届毕业生来说,确实有很大的诱惑力。但是如...
    用户1708372 2013-09-06 14:30
    初学者如何更好的自学ARM嵌入式开发?
        由于嵌入式行业迅猛,很多人开始学习嵌入式开发,一部分人通过自学,还有一部分人通过参加相关ARM嵌入式培训 班学习。下面是凌阳教育嵌入式培训 网主要针对自学人群提出的关于学习ARM嵌入式开发...
    用户1708372 2013-09-06 14:25
    嵌入式开发成为应届毕业生职业新宠儿
        随着"三网融合"不断提速,3G网络全面铺开,嵌入式行业将带来更大的人才需求。嵌入式软件人才已成为目前企业争夺的目标。嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。     ...
    用户1708372 2013-09-04 15:31
    如何优化Linux服务器性能
        一、影响Linux服务器性能的因素     操作系统级:CPU、内存、磁盘I/O带宽、网络I/O带宽     程序应用级     二、系统性能评估     影响性能因素 ...
    用户1708372 2013-09-04 15:22
    北京考察嵌入式培训机构不得不说的一家
        对于一个外行人来说,想要在北京找一家有实力的嵌入式培训学校相当难。随着目前国内嵌入式培训市场的火热,各地大大小小的嵌入式培训机构不断兴起,北京大大小小的嵌入式培训学校更是数不胜数。为了在北...
    我要评论
    1
    12
    关闭 站长推荐上一条 /2 下一条