zoukankan      html  css  js  c++  java
  • 移植linux-2.6.32.2到qq2440

    编译该版本内核使用的编译器版本:arm-linux-gcc 3.4.1

    1.获取linux-2.6.32.2

    2.解压内核

    3.切换到刚解压的内核目录下:

    cd linux-2.6.32.2

    4.修改Makefile

    将以下内容修改:

    修改前:

    ARCH            ?= $(SUBARCH)
    CROSS_COMPILE   ?=
    修改后:

    ARCH            ?= arm
    CROSS_COMPILE   ?= arm-linux-

    5.使用以下命令生成.config

    make s3c2410_defconfig

    6.修改平台输入时钟,由于qq2440的输入时钟为12MHz的无源晶振,故修改arch/arm/mach-s3c2440/mach-smdk2440.c文件的以下内容:

    修改前:

    static void __init smdk2440_map_io(void)
    {
            s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
            s3c24xx_init_clocks(16934400);
            s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
    }
    修改后:

    static void __init smdk2440_map_io(void)
    {
            s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
            s3c24xx_init_clocks(12000000);//修改了原来的数据为12000000
            s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
    }
    7.修改mtd分区信息,修改arch/arm/plat-s3c24xx/common-smdk.c文件的以下内容:

    修改前:

    static struct mtd_partition smdk_default_nand_part[] = {
            [0] = {
                    .name   = "Boot Agent",
                    .size   = SZ_16K,
                    .offset = 0,
            },
            [1] = {
                    .name   = "S3C2410 flash partition 1",
                    .offset = 0,
                    .size   = SZ_2M,
            },
            [2] = {
                    .name   = "S3C2410 flash partition 2",
                    .offset = SZ_4M,
                    .size   = SZ_4M,
            },
            [3] = {
                    .name   = "S3C2410 flash partition 3",
                    .offset = SZ_8M,
                    .size   = SZ_2M,
            },
     [4] = {
                    .name   = "S3C2410 flash partition 4",
                    .offset = SZ_1M * 10,
                    .size   = SZ_4M,
            },
            [5] = {
                    .name   = "S3C2410 flash partition 5",
                    .offset = SZ_1M * 14,
                    .size   = SZ_1M * 10,
            },
            [6] = {
                    .name   = "S3C2410 flash partition 6",
                    .offset = SZ_1M * 24,
                    .size   = SZ_1M * 24,
            },
            [7] = {
                    .name   = "S3C2410 flash partition 7",
                    .offset = SZ_1M * 48,
                    .size   = SZ_16M,
            }
    };

    修改后:

    static struct mtd_partition smdk_default_nand_part[] = {
            [0] = {
                    .name   = "Bootloader",
                    .size   = 0x00000000,
                    .offset = 0x00030000,
            },
            [1] = {
                    .name   = "Kernel",
                    .offset = 0x00050000,
                    .size   = 0x00200000,
            },
            [2] = {
                    .name   = "Root",
                    .offset = 0x00250000,
                    .size   = 0x03dac000,
            }

    };

    8.修改s3c2440的机器码,修改arch/arm/tools/mach-types文件的内容如下:

    修改前:

    s3c2440                 ARCH_S3C2440            S3C2440                 362

    修改后:

    s3c2440                 ARCH_S3C2440            S3C2440                 782

    9.给内核打yaffs2文件系统的补丁,这样就可以让内核支持yaffs2文件系统

    9.1从git仓库获取yaffs2源码,获取源码的命令如下:

    git clone git://www.aleph1.co.uk/yaffs2

    9.2将内核补丁插入内核,使用如下方法:

     a.先进入yaffs2目录下:

      cd yaffs2

     b.yaffs2目录下有一个脚本patch-ker.sh,那么执行该脚本即可:

      ./patch-ker.sh ./patch-ker.sh c m ../linux-2.6.32.2

    10.内核配置:

    使用以下命令进行配置操作:

    make menuconfig

    需要修改的配置项如下:

    10.1[*] Enable loadable module support  --->

        [*]   Forced module loading                             
        [*]   Module unloading

    10.2System Type  --->

        S3C2410 Machines  --->

          [*] SMDK2410/A9M2410 ,该条目下的其他都不选

        S3C2440 Machines  --->

          [*] SMDK2440

          [*] SMDK2440 with S3C2440 CPU module,该条目下的其他都不选

        其余Machines选项下的条目均不选(不选的有s3c2400,s3c2412,s3c2442,s3c2443)

    10.3Boot options  --->

        noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0

    10.4Userspace binary formats  --->

         [*] Kernel support for ELF binaries,其余选项均不选

    10.5File systems  --->

          [*] Miscellaneous filesystems  --->

            <*>   yaffs2 file system support

            [*]         Lets yaffs do its own ECC

    10.6-*- Native language support  --->

          <*>   Codepage 437 (United States, Canada)

          <*>   Simplified Chinese charset (CP936, GB2312)

          <*>   Traditional Chinese charset (Big5)

          <*>   NLS ISO 8859-1  (Latin 1; Western European Languages)

          <*>   NLS UTF-8

    11.开始编译内核:

    make zImage -j5

    11.1出错如下:

    In file included from fs/yaffs2/yaffs_guts.c:18:
    fs/yaffs2/yaffs_endian.h:32: error: parse error before "swap_loff_t"
    fs/yaffs2/yaffs_endian.h:32: error: parse error before "lval"
    fs/yaffs2/yaffs_endian.h:33: warning: return type defaults to `int'
    fs/yaffs2/yaffs_endian.h:33: warning: function declaration isn't a prototype
    fs/yaffs2/yaffs_endian.h: In function `swap_loff_t':
    fs/yaffs2/yaffs_endian.h:34: error: `lval' undeclared (first use in this function)
    fs/yaffs2/yaffs_endian.h:34: error: (Each undeclared identifier is reported only once
    fs/yaffs2/yaffs_endian.h:34: error: for each function it appears in.)
    fs/yaffs2/yaffs_endian.h:37: error: `Y_LOFF_T' undeclared (first use in this function)
    fs/yaffs2/yaffs_endian.h:38: error: parse error before "vall"
    fs/yaffs2/yaffs_endian.h:38: warning: statement with no effect
      CC      fs/proc/uptime.o
    make[2]: *** [fs/yaffs2/yaffs_guts.o] 错误 1
    make[2]: *** 正在等待未完成的任务....
      CC      fs/proc/version.o
    In file included from fs/yaffs2/yaffs_checkptrw.c:16:
    fs/yaffs2/yaffs_endian.h:32: error: parse error before "swap_loff_t"
    fs/yaffs2/yaffs_endian.h:32: error: parse error before "lval"
    fs/yaffs2/yaffs_endian.h:33: warning: return type defaults to `int'
    fs/yaffs2/yaffs_endian.h:33: warning: function declaration isn't a prototype
    fs/yaffs2/yaffs_endian.h: In function `swap_loff_t':
    fs/yaffs2/yaffs_endian.h:34: error: `lval' undeclared (first use in this function)
    fs/yaffs2/yaffs_endian.h:34: error: (Each undeclared identifier is reported only once
    fs/yaffs2/yaffs_endian.h:34: error: for each function it appears in.)
    fs/yaffs2/yaffs_endian.h:37: error: `Y_LOFF_T' undeclared (first use in this function)
    fs/yaffs2/yaffs_endian.h:38: error: parse error before "vall"
    fs/yaffs2/yaffs_endian.h:38: warning: statement with no effect
    make[2]: *** [fs/yaffs2/yaffs_checkptrw.o] 错误 1
    make[1]: *** [fs/yaffs2] 错误 2
    make[1]: *** 正在等待未完成的任务....

    对策:看来不能使用最新的yaffs2,因此从另一个内核linux-2.35.7将fs/yaffs2文件夹的内容都复制到linux-2.6.32.2/fs/中

  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/dakewei/p/5931163.html
Copyright © 2011-2022 走看看