zoukankan      html  css  js  c++  java
  • 给OK6410配置新内核

      由于学校的校园网服务器比较旧,开发板无法直接使用DHCP。

      所以有两种解决思路:

      1、在接入开发板之前,先接入一个交换机,接出来的接口再接开发板。

      2、可能由于开发板内核版本旧导致的驱动版本比较旧(因为开发板OK6410买来的时候,配给的是3.01,而12.04版本的ubuntu的内核版本是3.2,在接入时,PC是可以适配这个校园网并获得ip),所以现在进行对开发板内核进行更新,目标版本3.6.3。

      过程参考:http://blog.csdn.net/lwfbibi/article/details/7471877

      步骤一:解压

    # tar xvf linux-3.6.3.tar.bz2

      步骤二:制作OK6410的拷贝

      1、以mini6410的文件为模板

      文件目录:/arch/arm/mach-s3c64xx/

    # cp mach-mini6410.c mach-ok6410.c

      2、替换文件内容

    # vim mach-ok6410.c

      进入底行模式

    :%s/mini6410/ok6410/g
    :%s/MINI6410/OK6410/g
    :wq

      3、修改struct mtd_partition结构为

    struct mtd_partition ok6410_nand_part[] = {
            {
                    .name           = "Bootloader",
                    .offset         = 0,
                    .size           = (1 * SZ_1M),
                    .mask_flags     = MTD_CAP_NANDFLASH,
            },
            {
                    .name           = "Kernel",
                    .offset         = (1 * SZ_1M),
                    .size           = (5*SZ_1M) ,
                    .mask_flags     = MTD_CAP_NANDFLASH,
            },
            {
                    .name           = "File System",
                    .offset         = MTDPART_OFS_APPEND,
                    .size           = MTDPART_SIZ_FULL,
            }
    };

      步骤三:修改Kconfig、Makefile与mach-types

      1、/linux-3.6.3/arch/arm/mach-s3c64xx/Kconfig

      复制一段SMDK6410的配置项

      然后将副本的config MACH_SMDK6410中的 “SMDK” 更改为 “OK”

      2、/linux-3.6.3/Makefile

      更新为

      ARCH  ?= arm

      CROSS_COMPILE  ?= arm-linux-

      还有/linux-3.6.3/arch/arm/mach-s3c64xx/Makefile添加一行

      obj-$(CONFIG_MACH_OK6410)         += mach-ok6410.o

      

      3、arch/arm/tools/mach-types

      添加一行:

      ok6410 MACH_OK6410 OK6410 1626

      这里的类型号,要和uboot中的类型号对应

    //uboot中的类型号定义地址在/include/configs/smdk6410.h
    #define  MACH_TYPE    1626
    #define  UBOOT_MAGIC   (0x43090000 | MACH_TYPE)    

      步骤四: 配置config

      1、在linux-3.6.3根目录下make menuconfig

      (此处可以先将飞凌的3.0.1中的.config复制到这边根目录下,然后load一下再进行配置,如果曾自己编译过一次linux-3.0.1)

      2、因为用的是旧版本的.config,接着直接就make zImage了

      内核编译过程中出现如下错误(1): 

    drivers/base/power/domain.c: In function '__pm_genpd_add_device':
    drivers/base/power/domain.c:1312: error: implicit declaration of function 'genpd_acquire_lock'
    drivers/base/power/domain.c:1356: error: implicit declaration of function 'genpd_release_lock'
    drivers/base/power/domain.c: In function 'pm_genpd_add_subdomain':
    drivers/base/power/domain.c:1545: error: implicit declaration of function 'genpd_sd_counter_inc'
    drivers/base/power/domain.c: In function 'pm_genpd_remove_subdomain':
    drivers/base/power/domain.c:1588: error: implicit declaration of function 'genpd_sd_counter_dec'
    drivers/base/power/domain.c: In function 'genpd_attach_cpuidle':
    drivers/base/power/domain.c:1745: error: implicit declaration of function 'genpd_recalc_cpu_exit_latency'
    make[3]: *** [drivers/base/power/domain.o] 错误 1
    make[2]: *** [drivers/base/power] 错误 2
    make[1]: *** [drivers/base] 错误 2
    make: *** [drivers] 错误 2

      具体解决方法参详 http://comments.gmane.org/gmane.linux.kernel.samsung-soc/10344

      不得不再次赞叹,内核社区的牛人们…

       不过趁编译内核的空当,自己还是记录一下吧。

      修改两个文件:

       arch/arm/mach-exynos/Kconfig 

       arch/arm/mach-s3c64xx/Kconfig 

      1、 arch/arm/mach-exynos/Kconfig

      修改下面的内容

    config CPU_EXYNOS4210
         select ARM_CPU_SUSPEND if PM
         select S5P_PM if PM
         select S5P_SLEEP if PM
    -    select PM_GENERIC_DOMAINS
    +    select PM_GENERIC_DOMAINS if PM
         help
           Enable EXYNOS4210 CPU support

      2、arch/arm/mach-s3c64xx/Kconfig

      修改下面的内容

    config PLAT_S3C64XX
         bool
         depends on ARCH_S3C64XX
         select SAMSUNG_WAKEMASK
    -    select PM_GENERIC_DOMAINS
    +    select PM_GENERIC_DOMAINS if PM
         default y
         help
           Base platform code for any Samsung S3C64XX device

       

      错误(2):

    make[1]: *** 没有规则可以创建“firmware/sd8686_helper.bin.gen.o”需要的目标“firmware/sd8686_helper.bin”。 停止。
    make[1]: *** 没有规则可以创建“firmware/sd8686.bin.gen.o”需要的目标“firmware/sd8686.bin”。 停止。 
    
    
    

      具体参详:http://bbs.witech.com.cn/forum.php?mod=viewthread&tid=11518

      据飞凌官方人员透露,他们对配发的linux-3.0.1版本的内核进行了大量的改动。所以这里可以进入linux-3.6.3的firmware文件夹看到

      并没有依赖文件sd8686_helper.bin和sd8686.bin文件

      我的做法是直接将飞凌的sd8686.bin 和 sd8686_helper.bin 复制到当前内核的fireware目录下,然后继续编译。

  • 相关阅读:
    每周总结⑤
    每周总结④——所遇问题
    Leetcode566. 重塑矩阵
    移动应用开发三种方式
    html5离线存储manifest
    拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
    拓端tecdat|R语言用极大似然和梯度下降算法估计GARCH(p)过程
    拓端tecdat|R语言Keras用RNN、双向RNNs递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
    JAVA中CountDownLatch的简单示例
    网络编程基础篇
  • 原文地址:https://www.cnblogs.com/plinx/p/2953129.html
Copyright © 2011-2022 走看看