Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312494
  • 博文数量: 26
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 00:51
个人简介

努力 奋斗 专注于linux内核 微信:tolimit 扣扣:348958453

文章分类
文章存档

2015年(26)

分类: LINUX

2015-03-03 09:49:40

本文为原创,转载请注明:http://blog.chinaunix.net/uid/26772321.html

首先修改资源代码,进入arch/arm/mach-s3c64xx/目录,在这里我们使用mini6410的资源配置文件,首先复制一份mach-mini6410.cmach-ok6410.c,修改mach-ok6410.c.

 

把文件中所有mini6410改为ok6410

:%s/mini6410/ok6410/g

:%s/MINI6410/OK6410/g

 

修改struct mtd_partition结构体内容,此结构体用于保存nandflash分区信息 

static struct mtd_partition ok6410_nand_part[] = {

         [0] = {

                   .name = "Bootloader",

                   .size = (1 * SZ_1M),

                   .offset = 0,

                   .mask_flags = MTD_CAP_NANDFLASH,

         },

         [1] = {

                   .name = "Kernel",

                   .size = (5 * SZ_1M),

                   .offset = (1 * SZ_1M),

                   .mask_flags = MTD_CAP_NANDFLASH,

         },

         [2] = {

                   .name = "Root File System",

                   .offset = (6 * SZ_1M),

                   .size = (5 * SZ_1M),

         },

         [3] = {

                   .name  = "User",

                   .size = (120 * SZ_1M),

                   .offset = (11 * SZ_1M),

         },

};

 

这里有个bug我们需要屏蔽掉

进入driver/mtd/nand/目录,打开nand_base.c文件,找到3265行附近的

         Case 128:

                   Chip->ecc.layout = &nand_oob_128;

                   Break;

在此行下添加

         Case 218:

                   Chip->ecc.layput = &nand_oob_128;

                   Break;

 

 

 

我们需要关闭ECC校验

进入driver/mtd/nand/目录,修改s3c2410.c文件

找到chip->ecc.mode = NAND_ECC_SOFT

改为chip->ecc.mode = NAND_ECC_NONE;

 

然后我们需要增加devfs文件管理器的支持,修改fs/Kconfig,找到menu "Pseudo filesystems"

在之后添加

config DEVFS_FS

         bool "/dev file system support (OBSOLETE)"

         default y   

config DEVFS_MOUNT

bool "Automatically mount at boot"

default y

depends on DEVFS_FS

 

修改arch/arm/mach-s3c64xx/Kconfig文件

找到config MACH_SMDK6410

cp一整段config MACH_SMDK6410

把新的MACH_SMDK6410改为MACH_OK6410

 

添加ok6410的硬件码

进入arch/arm/tools目录

打开mach-types文件

添加一行:ok6410                      MACH_OK6410                 OK6410                       1626

 

修改arch/arm/mach-s3c64xx/Makefile文件

添加一行obj-$(CONFIG_MACH_OK6410)         +=mach-ok6410.o

 

回到内核源代码顶层目录,修改顶层目录的Makefile,找到….

修改为 ARCH     ?= arm

CROSS_COMPILE     ?=(你的交叉编译器所在目录,注意最后需要加arm-linux- 若为eabi编译器则为arm-unknown-linux-gnueabi-我的是:/usr/local/arm/4.4.1/bin/arm-linux-)

 

进入arm/arm/configs目录

在这里我们使用s3c6400的默认配置文件将s3c6400_defconfig复制到源代码顶层目录,并重命名为.config

 

 

在源代码根目录中执行make menuconfig

(我只列出必选项,必须禁止选项会特殊说明,一般我们只增不减)

进入System type --->

        ARM system type(Samsung S3C64XX)   //这项一定要正确

        ………………

       *** System MMU ***

        [*]OK6410                          //在System MMU中选择ok6410

       ………………

进入Device Drivers --->

    <*>Memory Technology Device (MTD) support --->

       ………………

       <*> Caching block device access to MTD devices

       ………………

       <*> NAND Device Support --->

           <*> NAND Flash support for Samsung S3C SoCs

 

进入与 <*>Memory Technology Device (MTD) support ---> 同一等级列表的Block devices  选上<*> RAM block device support

 

退回到主界面,进入File systems,在这里自己选择需要的文件系统,

进入File systems的 Pseudo filesystems--->

选上 [*] /dev file system support(OBSOLETE)

         [*]   Automatically mount at boot

(这两项即为之前我们添加的devfs 文件管理器支持)

 

回到主界面,进入Boot options,里面有一行是需要我们自己手动填写的,是linux启动参数,在这里我初略说一下

 

noinitrd   

不使用临时的根文件系统

 

root=…          

该参数告诉内核启动时使用哪个设备作为根文件系统。比如第3分区作为根文件系统:root=/dev/mtdblock2

 

rootfstype=…   

根文件系统类型(比如rootfstype=cramfs)

 

ro/rw        

ro以只读方式加载根文件系统,rw以读写方式加载(rw为默认值)

 

init=..      

初始化进程名(使用busybox制作的根文件系统这一项一般为init=/linuxrc)

console=…

字面意思:控制台,就是控制台信息输出到哪,这里OK6410填ttySAC0,115200

 

我的启动参数为noinitrd root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200 init=/linuxrc

 

设置完毕,保存信息,编译内核吧.

阅读(2538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~