http://blog./uid-26772321-id-4854844.html 2015
把文件中所有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
设置完毕,保存信息,编译内核吧. |
|
来自: 心不留意外尘 > 《compile build》