Welcome 微信登录

首页 / 操作系统 / Linux / OK6410开发板Linux内核移植

一、环境介绍:

1、环境配置

?  开发板:ok6410-A?  宿主机:XP-sp3下用Vmware搭建的CentOS6.0系统注:1)、外网网卡用的NAT方式连接,用来在window客户端用putty连接虚拟机和更新工具连上网用;2)、第二块儿网卡用的桥接方式,用来连接开发板;3)、串口用来在虚拟机里使用minicom连接开发板。?  交叉工具:arm-linux-4.4.1.tar.gz

2、环境搭建结果

Minicom连接开发板:Putty连接好虚拟机:结束后内核能正常启动并挂载NFS系统:

二、移植过程

1、源代码准备

接下来开始。。哈哈 ,此过程痛并快乐着。。。准备好了么?gogogo。。。。更新最新源代码,并创建新实验分支:[root@localhost linux-2.6]# git fetchremote: Counting objects: 270, done.remote: Compressing objects: 100% (117/117), done.remote: Total 120 (delta 87), reused 0 (delta 0)Receiving objects: 100% (120/120), 26.10 KiB, done.Resolving deltas: 100% (87/87), completed with 54 local objects.From git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6   371de6e..89307ba  master     -> origin/master[root@localhost linux-2.6]# git status# On branch zkfnothing to commit (working directory clean)[root@localhost linux-2.6]# git checkout -b testSwitched to a new branch "test"[root@localhost linux-2.6]# lsarch     Documentation  init     lib          README          soundblock    drivers        ipc      MAINTAINERS  REPORTING-BUGS  toolsCOPYING  firmware       Kbuild   Makefile     samples         usrCREDITS  fs             Kconfig  mm           scripts         virtcrypto   include        kernel   net          security[root@localhost linux-2.6]#新添加一个说明文件,说明一下修改源代码遵循GPL版权[root@localhost linux-2.6]# vi ok6410_readme.txt[root@localhost linux-2.6]# git add ok6410_readme.txt[root@localhost linux-2.6]# git commit –a[test 97a3a32] add note 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 ok6410_readme.txt[root@localhost linux-2.6]#

2、移植过程

(1)、修改顶层makefile文件

注释掉默认的并新添加:export KBUILD_BUILDHOST := $(SUBARCH)#ARCH           ?= $(SUBARCH)ARCH            ?= arm#CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)CROSS_COMPILE   ?= arm-linux# Architecture as present in compile.h

(2)、新增并修改板级文件

(复制现有最相近的板子的)[root@localhost mach-s3c64xx]# lsclock.c      Kconfig                 mach-smartq.c     setup-i2c0.ccpu.c        mach-anw6410.c          mach-smartq.h     setup-i2c1.cdev-audio.c  mach-crag6410.c         mach-smdk6400.c   setup-ide.cdev-spi.c    mach-crag6410-module.c  mach-smdk6410.c   setup-keypad.cdev-uart.c   mach-hmt.c              Makefile          setup-sdhci.cdma.c        mach-mini6410.c         Makefile.boot     setup-sdhci-gpio.cinclude      mach-ncp.c              pm.c              sleep.Sirq.c        mach-real6410.c         s3c6400.cirq-eint.c   mach-smartq5.c          s3c6410.cirq-pm.c     mach-smartq7.c          setup-fb-24bpp.c[root@localhost mach-s3c64xx]# pwd/home/linux-2.6/arch/arm/mach-s3c64xx其中的mach-mini6410.c 板子的配置与ok6410比较相似[root@localhost mach-s3c64xx]# cp mach-mini6410.c mach-ok6410.c修改mach-ok6410.c/* linux/arch/arm/mach-s3c64xx/mach-ok6410.c将文件中所有mini6410替换为ok6410:%s/mini6410/ok6410/g注意需要将大写的MINI6410也要替换掉(其中大部分都是输出信息,有一处与机器码有关的要更改) MACHINE_START(MINI6410, "MINI6410")        /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */        .atag_offset    = 0x100,        .init_irq       = s3c6410_init_irq,        .map_io         = ok6410_map_io,        .init_machine   = ok6410_machine_init,        .timer          = &s3c24xx_timer, 此文件中包含NAND的分区信息可以根据自己的需求修改:/*modify by zkf//static struct mtd_partition ok6410_nand_part[] = {//      [0] = {//              .name   = "uboot",//              .size   = SZ_1M,//              .offset = 0,//      },//      [1] = {//              .name   = "kernel",//              .size   = SZ_2M,//              .offset = SZ_1M,//      },//      [2] = {//              .name   = "rootfs",//              .size   = MTDPART_SIZ_FULL,//              .offset = SZ_1M + SZ_2M,//      },//};*/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  = "User",  .offset  = (6 * SZ_1M),  .size  = (120*SZ_1M) , },{  .name  = "File System",  .offset  = MTDPART_OFS_APPEND,  .size  = MTDPART_SIZ_FULL, }};/*modify by zkf end*/修改此目录下的Makefile 文件,使之在编译的时候编译我们刚才新建的“mach-ok6410”文件:# Machine supportobj-$(CONFIG_MACH_ANW6410)      += mach-anw6410.oobj-$(CONFIG_MACH_SMDK6400)     += mach-smdk6400.oobj-$(CONFIG_MACH_SMDK6410)     += mach-smdk6410.oobj-$(CONFIG_MACH_REAL6410)     += mach-real6410.oobj-$(CONFIG_MACH_OK6410)       += mach-ok6410.oobj-$(CONFIG_MACH_MINI6410)     += mach-mini6410.oobj-$(CONFIG_MACH_NCP)          += mach-ncp.oobj-$(CONFIG_MACH_HMT)          += mach-hmt.oobj-$(CONFIG_MACH_SMARTQ)       += mach-smartq.oobj-$(CONFIG_MACH_SMARTQ5)      += mach-smartq5.oobj-$(CONFIG_MACH_SMARTQ7)      += mach-smartq7.oobj-$(CONFIG_MACH_WLF_CRAGG_6410) += mach-crag6410.o mach-crag6410-module.o修改此目录下的Kconfig文件:(比照其他开发板增加)config MACH_OK6410        bool "OK6410"        select CPU_S3C6410        select S3C_DEV_HSMMC        select S3C_DEV_HSMMC1        select S3C64XX_SETUP_SDHCI        select S3C_DEV_USB_HOST        select S3C_DEV_NAND        select S3C_DEV_FB        select S3C64XX_SETUP_FB_24BPP        select SAMSUNG_DEV_ADC        select SAMSUNG_DEV_TS        help          Machine support for the FriendlyARM MINI6410 

(3)、机器码修改

修改/home/linux-2.6/arch/arm/tools目录下mach-types文件,增加新添加开发板的机器码# machine_is_xxx        CONFIG_xxxx             MACH_TYPE_xxx           numbersmdk4212                MACH_SMDK4212           SMDK4212                3638smdk4412                MACH_SMDK4412           SMDK4412                3765ok6410                  MACH_OK6410             OK6410                  1216

(4)、配置内核

接下来配置内核:(如果有现成的配置文件更好啦,哈哈)[root@localhost linux-2.6]# make menuconfig  HOSTCC  scripts/basic/fixdep  HOSTCC  scripts/kconfig/conf.o *** Unable to find the ncurses libraries or the *** required header files. *** "make menuconfig" requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. ***make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1make: *** [menuconfig] 错误 2 提示错误没有安装ncurses[root@localhost linux-2.6]# yum –y install ncurses  ncurses-devel 安装后进入配置界面:有耐心可以每项都看看。。。。这里附上一个配置好的文件(cp ok6410_config .config 即可)此时文件的修改已经结束了, 。

(5)修改文件概览

看一下修改的文件有哪些:[root@localhost linux-2.6]# git status# On branch test# Changed but not updated:#   (use "git add <file>..." to update what will be committed)#   (use "git checkout -- <file>..." to discard changes in working directory)##       modified:   Makefile#       modified:   arch/arm/mach-s3c64xx/Makefile#       modified:   arch/arm/tools/mach-types## Untracked files:#   (use "git add <file>..." to include in what will be committed)##       arch/arm/mach-s3c64xx/mach-ok6410.c#       ok6410_configno changes added to commit (use "git add" and/or "git commit -a")[root@localhost linux-2.6]# git add arch/arm/mach-s3c64xx/mach-ok6410.c[root@localhost linux-2.6]# git add ok6410_configCommit一下做一下记录:commit c07db86a1c7f6658958678eccb418f08bf665c6bAuthor: zkaifa@VM <zkaifa@163.com>Date:   Fri Dec 30 16:22:59 2011 +0800     config is done     lala...Prepare to "make" commit a26c6397a3446766ed6744012b4e570e185a698e

(6)、编译内核

make  zImage 

三、烧写内核

由于linux下DNW不太好用所以暂时把串口切换到windows下,使用DNW工具下载调试(大家谁有好的办法记得通知我哦, )

1、将编译好的zImage拷贝到windows下

2、用DNW下载内核

选择好内核下载到板子内存中下载完成

3、擦除NAND内核分区

4、写入NAND

Reset一下,重启板子。