linux367移植至ok6410Word文档下载推荐.docx

上传人:b****6 文档编号:20639289 上传时间:2023-01-24 格式:DOCX 页数:13 大小:257.82KB
下载 相关 举报
linux367移植至ok6410Word文档下载推荐.docx_第1页
第1页 / 共13页
linux367移植至ok6410Word文档下载推荐.docx_第2页
第2页 / 共13页
linux367移植至ok6410Word文档下载推荐.docx_第3页
第3页 / 共13页
linux367移植至ok6410Word文档下载推荐.docx_第4页
第4页 / 共13页
linux367移植至ok6410Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

linux367移植至ok6410Word文档下载推荐.docx

《linux367移植至ok6410Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《linux367移植至ok6410Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

linux367移植至ok6410Word文档下载推荐.docx

保存退出。

4、由于机器码ID必须和uboot的ID一致,所修改arch/arm/tools/mach-types文件,这里的作用是使我们的uboot能够识别我们移植的内核,如果不修改,即使内核被下载到正确的地址,但是uboot不能找到内核,从而会出现内核启动不了的问题。

smdk6410 

 

MACH_SMDK6410 

SMDK6410 

1626 

把它改成

ok6410 

MACH_OK6410 

OK6410 

保存退出

5、修改mach-ok6410.c

5.1把文件中所有的mini6410改成ok6410,但是在MACHINE_START后面括号里的参数需要改成大写的OK,即MACHINE_START(OK6410,"

),因为这里跟我们前面配置的Kconfig和mach-types文件中的名字对应,**大小写注意必须一致 

5.2 

修改staticstructmtd_partitionok6410_nand_part 

/* 

[0]={

.name="

uboot"

.size=SZ_1M,

.offset=0,

},

[1]={

kernel"

.size=SZ_2M,

.offset=SZ_1M,

[2]={

rootfs"

.size=MTDPART_SIZ_FULL,

.offset=SZ_1M+SZ_2M,

},*/

改为

{

Bootloader"

.size=(2*SZ_1M),

.mask_flags=MTD_CAP_NANDFLASH,

Kernel"

.offset=(2*SZ_1M),

.size=(5*SZ_1M),

FileSystem"

.offset=(7*SZ_1M),

.size=(200*SZ_1M),

User"

.offset=MTDPART_OFS_APPEND,

}

6、当前makefile中添加我们的mach-ok6410.c

obj-$(CONFIG_MACH_OK6410) 

+= 

mach-ok6410.o

7、修改顶层的makefile

ARCH?

=arm 

***************这里禁止在arm后出现空格或其它符号 

CROSS_COMPILE?

=/usr/local/arm/4.3.2/bin/arm-linux- 

********你的交叉编译器的路径 

8、将arch/arm/configs/s3c6400-defconfig配置文件复制到顶层然后保存为 

.config 

因为只有这个配置文件与我们的最相近。

9、makemenuconfig

配置如下:

9.1先选择LoadanAlternateConfigurationFile,输入arch/arm/configs/s3c6400_defconfig

9.2选择GeneralSetup,打开Cross_compilertoolperfix,输入

/usr/local/arm/4.5.1/bin/arm-linux-

9.3选择SystemType,取消SMDK6400,A&

W6410,SMDK6410等平台,只选择OK6410

9.4选择SaveanAlternateConfigurationFile,保存为.config然后退出。

10、移植nand驱动

10.1、从开发板厂家提供的源码中找到s3c_nand.c,放到drivers/mtd/nand目录下,修改其Makefile,加入:

obj-$(CONFIG_MTD_NAND_S3C) 

 

+=s3c_nand.o 

修改Kconfig,为了和原来的NAND驱动区分开来,我把新加的驱动叫S3C64xxS5P64xx,原来的叫做S3C24xxS3C64xx.修改的地方如下:

并加入:

configMTD_NAND_S3C

tristate"

NANDsupportforSamsungS3C64xxS5P64xx"

dependson(ARCH_S3C64XX||ARCH_S5P64XX||ARCH_S5PC1XX)&

&

MTD_NAND

help

ThisenablestheNANDflashcontrollerontheS3C

Noboardspecificsupportisdonebythisdriver,eachboard

mustadvertiseaplatform_deviceforthedrivertoattach.

configMTD_NAND_S3C_DEBUG

bool"

SamsungS3C64xxS5P64xxNANDdriverdebug"

dependsonMTD_NAND_S3C

EnabledebuggingoftheS3CNANDdriver

configMTD_NAND_S3C_HWECC

SamsungS3C64xxS5P64xxNANDHardwareECC8BITS"

EnabletheuseoftheS3C'

sinternalECCgeneratorwhen

usingNAND.Earlyversionsofthechiphavehadproblemswith

incorrectECCgeneration,andifusingthese,thedefaultof

softwareECCispreferable.

IfyoulaydownadevicewiththehardwareECC,thenyouwill

currentlynotbeabletoswitchtosoftware,asthereisno

implementationforECCmethodusedbytheS3C

10.2、arch/arm/plat-samsung/include/plat/regs_nand.h加入寄存器定义:

#defineS3C_NFCONFS3C2410_NFREG(0x00)

#defineS3C_NFCONTS3C2410_NFREG(0x04)

#defineS3C_NFCMMDS3C2410_NFREG(0x08)

#defineS3C_NFADDRS3C2410_NFREG(0x0c)

#defineS3C_NFDATA8S3C2410_NFREG(0x10)

#defineS3C_NFDATAS3C2410_NFREG(0x10)

#defineS3C_NFMECCDATA0S3C2410_NFREG(0x14)

#defineS3C_NFMECCDATA1S3C2410_NFREG(0x18)

#defineS3C_NFSECCDATAS3C2410_NFREG(0x1c)

#defineS3C_NFSBLKS3C2410_NFREG(0x20)

#defineS3C_NFEBLKS3C2410_NFREG(0x24)

#defineS3C_NFSTATS3C2410_NFREG(0x28)

#defineS3C_NFMECCERR0S3C2410_NFREG(0x2c)

#defineS3C_NFMECCERR1S3C2410_NFREG(0x30)

#defineS3C_NFMECC0S3C2410_NFREG(0x34)

#defineS3C_NFMECC1S3C2410_NFREG(0x38)

#defineS3C_NFSECCS3C2410_NFREG(0x3c)

#defineS3C_NFMLCBITPTS3C2410_NFREG(0x40)

#defineS3C_NF8ECCERR0S3C2410_NFREG(0x44)

#defineS3C_NF8ECCERR1S3C2410_NFREG(0x48)

#defineS3C_NF8ECCERR2S3C2410_NFREG(0x4c)

#defineS3C_NFM8ECC0S3C2410_NFREG(0x50)

#defineS3C_NFM8ECC1S3C2410_NFREG(0x54)

#defineS3C_NFM8ECC2S3C2410_NFREG(0x58)

#defineS3C_NFM8ECC3S3C2410_NFREG(0x5c)

#defineS3C_NFMLC8BITPT0S3C2410_NFREG(0x60)

#defineS3C_NFMLC8BITPT1S3C2410_NFREG(0x64)

#defineS3C_NFCONF_NANDBOOT(1<

<

31)

#defineS3C_NFCONF_ECCCLKCON(1<

30)

#defineS3C_NFCONF_ECC_MLC(1<

24)

#defineS3C_NFCONF_ECC_1BIT(0<

23)

#defineS3C_NFCONF_ECC_4BIT(2<

#defineS3C_NFCONF_ECC_8BIT(1<

#defineS3C_NFCONF_TACLS(x)((x)<

12)

#defineS3C_NFCONF_TWRPH0(x)((x)<

8)

#defineS3C_NFCONF_TWRPH1(x)((x)<

4)

#defineS3C_NFCONF_ADVFLASH(1<

3)

#defineS3C_NFCONF_PAGESIZE(1<

2)

#defineS3C_NFCONF_ADDRCYCLE(1<

1)

#defineS3C_NFCONF_BUSWIDTH(1<

0)

#defineS3C_NFCONT_ECC_ENC(1<

18)

#defineS3C_NFCONT_LOCKTGHT(1<

17)

#defineS3C_NFCONT_LOCKSOFT(1<

16)

#defineS3C_NFCONT_MECCLOCK(1<

7)

#defineS3C_NFCONT_SECCLOCK(1<

6)

#defineS3C_NFCONT_INITMECC(1<

5)

#defineS3C_NFCONT_INITSECC(1<

#defineS3C_NFCONT_nFCE1(1<

#defineS3C_NFCONT_nFCE0(1<

#defineS3C_NFCONT_INITECC(S3C_NFCONT_INITSECC|S3C_NFCONT_INITMECC)

#defineS3C_NFSTAT_ECCENCDONE(1<

#defineS3C_NFSTAT_ECCDECDONE(1<

#defineS3C_NFSTAT_BUSY(1<

#defineS3C_NFECCERR0_ECCBUSY(1<

10.3、 

修改drivers/mtd/nand/nand_base.c文件,加入

staticstructnand_ecclayoutnand_oob_218={

.eccbytes=104,

.eccpos={

24,25,26,27,28,29,30,31,32,33,

34,35,36,37,38,39,40,41,42,43,

44,45,46,47,48,49,50,51,52,53,

54,55,56,57,58,59,60,61,62,63,

64,65,66,67,68,69,70,71,72,73,

74,75,76,77,78,79,80,81,82,83,

84,85,86,87,88,89,90,91,92,93,

94,95,96,97,98,99,100,101,102,103,

104,105,106,107,108,109,110,111,112,113,

114,115,116,117,118,119,120,121,122,123,

124,125,126,127},

.oobfree=

{.offset=2,

.length=22

};

再找到intnand_scan_tail(structmtd_info*mtd)这个函数,在switch(mtd->

oobsize)里面加入

case218:

chip->

ecc.layout=&

nand_oob_218;

break;

找到if(!

ecc.strength){

pr_warn("

Drivermustsetecc.strengthwhenusinghardwareECC\n"

);

BUG();

}把BUG();

屏蔽掉

10.4、主目录下makemenuconfig:

找到DeviceDrivers-->

MemoryTechnologyDevice(MTD)support--->

NANDDeviceSupport--->

取消NANDsupportforSamsungS3C24xxS3C64xx,选择NANDsupportforSamsungS3C64xxS5P64xx

注意:

1、编译的时候会报错,显示add_mtd_partitions没有声明,根linux3.0.1相对比,在linux/mtd/partition.h中需要加入函数的声明:

intadd_mtd_partitions(structmtd_info*,conststructmtd_partition*,int);

intdel_mtd_partitions(structmtd_info*);

2、此时理论上nand驱动已经移植好了,但是本人在编译好内核的时候下载到板子上,nand驱动根本没有加载成功。

注意到dev_ID=38,查找这个nand的id,发现nand_ids.c根本没有这个id的定义。

说明这里原内核中不支持这种nandflash,找到linux3.0.1内核中的此文件,对比发现,飞凌加了{"

NAND2GiB1,8V8-bit"

0x38,4096,1024,512*1024,0},//MT的定义,所以把这块拷到我们这边的文件中。

注意上面的步骤,尤其注意最后添加的这两点,内核能编译通过,且下载到板子上能够显示难道的分区信息。

11、自己制作文件系统

11.1、给内核打补丁

本来纯净版的linux内核是不支持yaffs2文件系统的,所以必须打补丁。

从官方网站http:

//www.aleph1.co.uk/gitweb?

p=yaffs2.git;

a=summary下载yaffs2源码,解压后给linux3.6.7打补丁:

./patch-ker.shcm/kerneldirectory,完后看到fs目录下的Kconfig和Makefile文件都有增加yaffs2相关内容;

fs目录下也多了yaffs2文件夹。

基本上说明打补丁成功了, 

makemenuconfig 

DeviceDrivers配置

GenericDriverOptions选择

[*]Maintainadevtmpfsfilesystemtomountat/dev 

[*]Automountdevtmpfsat/dev,afterthekernelmountedthe.... 

MTD-->

CachingblockdeviceaccesstoMTDdevices

FileSystems 

配置

取消Secondextendedfssupport和Ext3journallingfilesystemsupport 

[*]Miscellaneousfilesystems--->

选择

Bootoptions配置

输入"

noinitrdroot=/dev/mtdblock2rootfstype=yaffs2init=/linuxrcconsole=ttySAC0,115200"

11.2、制作mkyaffs2image工具

进入yaffs2源码目录下utils目录,修改mkyaff2image.c:

#definechunkSize2048

#definespareSize64

#definepagesPerBlock64

#definechunkSize4096

#definespareSize218

#definepagesPerBlock128

进入yaffs2源码目录下direct目录,修改yportenv.h

增加#defineCONFIG_YAFFS_DEFINES_TYPES

保存后make,这时就在utils目录生产mkyaffs2image文件,把这个文件拷贝到/usr/bin目录下

11.3、制作根文件系统

11.3.1、下载并解压busybox1.20.2,修改Makefile

CROSS_COMPILE?

=/usr/local/arm/4.5.1/bin/arm-linux-

ARCH?

=arm

11.3.2配置busybox菜单如下:

a、makedefconfig(默认配置)

b、makemenuconfig

BusyboxSettings--->

BuildOptions--->

(/usr/local/arm/4.5.1/bin/arm-linux-)CrossCompilerprefix

GeneralConfiguration--->

[*]Don'

tuse/usr 

11.3.3 

编译、安装

a、make

b、makeinstall(由于前面没设置安装位置将默认安装在本文件夹的_install文件夹下)

11.3.4 

进入_install建立其他根文件系统文件夹.我写了个脚本creat_initramfs.sh

#!

/bin/sh

echo"

--------Createroot,dev......"

mkdirrootdevetcbinsbinmntsysproclibhometmpvarusr

mkdirusr/sbinusr/binusr/libusr/modulesusr/etc

mkdirmnt/usbmnt/nfsmnt/etcmnt/etc/init.d

mkdirlib/modules

chmod1777tmp

sudomknod-m600dev/consolec51

sudomknod-m666dev/nullc13

-------makedirectiondone---------"

然后保存脚本修改权限:

chmod+xcreat_initramfs.sh

运行脚本!

11.3.5建立相关文件

(1)在 

etc目录下创建profile文件,内容如下

#Ashprofile 

#vim:

syntax=sh

#Nocorefilesbydefault

ulimit-S-c0>

/dev/null2>

1

USER="

`id-un`"

LOGNAME=$USER

PS1='

[\u@\h\W]\#'

PATH=$P

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1