这次,还是把基本的基于我目前最新的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如下:


posted on 2014-06-08 11:32  程序马  阅读(1233)  评论(0编辑  收藏  举报