zoukankan      html  css  js  c++  java
  • S3C6410嵌入式应用平台构建(四)——linux-3.14.4移植到OK6410-(初步启动)

    这次,还是把基本的基于我目前最新的Linux源码进行移植到OK6410吧,同时也写下我移植过程中遇到的问题及解决方法,不过有些方法是借鉴网上的,有些是自己加的,会有一些小bug。

        一、基本工作

        1. 源码下载    https://www.kernel.org/   ,最好是下载stable版本,否则会有小bug。(我现在调试的是stable版本, linux-3.14.4)

        2. 拷到自己的文件夹下解压,我下的是.xz后缀的,这样文件比较小,只是解压时多一个步骤。

          $ xz –d linux-3.14.4.tar.xz

          $ tar xvf linux-3.14.4.tar

       3. 解压完后,进入解压后的目录

       二、源码修改

        1. 修改根目录下的Makefile,针对修改arch和cross_compile,如下:

       2. 添加相关型号mach文件

        目前最新内核已经支持好几种开发板,我们先从最基本的6410开始,选择mini6410,基于mini6410来修改配置,因此,进入arch/arm/mach-s3c64xx目录,拷贝mach-mini6410.c,重命名为mach-ok6410.c,下面需要对该文件进行一些修改:

        2.1 将代码中替换为6410, 如下: mini6410->ok6410;  MINI6410->OK6410

        2.2 然后修改nand分区信息,修改static struct mtd_partition ok6410_nand_part[],这个修改需要结合你之前移植Uboot及你自己定义的分区布局。我的是这样的。


       2.3 既然我们添加了一个文件,依据linux添加文件的规则,我们还修改相对应目录下Makefile和Kconfig

       修改kconfig,参照MINI6410的配置,添加OK6410,如下:


          修改Makefile,加入ok6410

    3. 修改arch/arm/tools/mach-types文件,加入OK6410的mach-type,这个必须和U-BOOT中的MACH-TYPE一致,这里选用smdk6410的mach-type:1626

    4. Menuconfig配置

        回到主目录下,我们选用针对6400的默认配置,在此基础上进行配置。复制config下的s3c6400_defconfig到主目录并重命名为.config文件

      $  cp arch/arm/configs/s3c6400_defconfig  ./.config
      $  make menuconfig

      进入后做如下配置:(这里说一下:此情况下删除你的输入,需要按delete+shift,按backspace是没用的)

      4.1 选择General Setup,打开Cross_compiler tool perfix,输入arm-linux-

    image
    4.4 选择System Type, 取消其他6410,只选择OK6410

    image 

    4.3 选择Kernel Features , 选择以下两项

    image

    4.4 为了调试方便,我们顺便把nand flash的debug也打开,并选择硬件ECC。

          Device Drivers—>Memory Technology Device(MTD) support—>NAND Device Support—>

    image

          完成以上配置后,保存退出!

          在主目录下执行,make uImage( 前提是你已经把Uboot tools/下的mkimage工具拷贝到/bin目录下)

         最后在编译完成后,输出信息如下:

    image

        通过tftp下载到板子上,运行后界面如下:

    image

         从上面我们可以看出,内核加载地址和入口地址是一样的:50008000,这是不合理的,入口地址应该是50008000,因为是uImage,需要在入口处添加文件头。

       因此我们进行如下修改:

       修改scripts/下的makefile.lib文件:将UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR) 改为:

       IMAGE_ENTRYADDR ?= $(shell echo $(UIMAGE_LOADADDR) | sed -e "s/..$$/40/")

    修改后,再次make uImage, 编译完后的输出信息如下:

    image
    从上面我们可以看出,入口地址已经变为50008040,

    下载到板子上,已经可以引导内核了。

    从log可以看出,我们的nand flash并没有识别到,因为出错在这里:

    [06/08-11:25:41:371]s3c24xx-nand s3c6400-nand: failed to get clock

    [06/08-11:25:41:371]s3c24xx-nand: probe of s3c6400-nand failed with error –2

    为了方便阅读,我还是在下一篇文章写吧,目前这个问题是需要解决的。

    完整启动log如下:


  • 相关阅读:
    【zookeeper】
    关于redis-windows环境下的一些配置:
    mybatis-注解开发
    jQuery的Validate插件
    Thymeleaf 学习笔记-实例demo(中文教程)
    thymeleaf 学习笔记-基础篇(中文教程)
    AGC 043C
    JOISC 2020 部分题解
    Loj #2687
    CF 1270I
  • 原文地址:https://www.cnblogs.com/lixiaoming90/p/3775991.html
Copyright © 2011-2022 走看看