**来源:飞凌嵌入式 http://www.witech.com.cn/
写给比我晚接触嵌入式的嵌入式爱好者们!!
接触嵌入式有一段时间了,这段时间里多亏了飞凌工程师帮忙,解答了我发在论坛里的很多弱弱的问题。。。。这里我把这段时间里我移植内核到飞凌的OK-2440-III板子的详细步骤发出来,希望能对朋友们有所帮助,也当作一种回报给论坛。。。。。
交叉编译工具链:cross-3.4.1(飞凌的随板子光盘里面提供了,或者自己可以去百度搜)
内核:linux-2.6.25.8 (可以到www.kernel.org去下载)
目标板:飞凌公司的ARM9开发板OK-2440-III
平台:虚拟机redhat linux-9
移植开始!
还有不知道有没有必要说,以下我说的执行XX命令都是在虚拟机linux的终端执行。。。。。。。。
一、首先正确配置虚拟机,安装Vmtools,使虚拟机linux可以和windows共享文件(怎么安装虚拟机linux就不用说了吧,不会的去百度吧):
VMware工具的安装:
1.在虚拟机开机时,在VMware菜单中选择VM->Install VMware tools选项安装VMware工具。
注意:其实通过这步操作并没有真正安装上。你可以看一下,你设的共享目录仍然没有,分辩率也没法设。
2.在虚拟机linux里打开光驱,有两个文件,其中一个是VMware Tools的tar文件,我现在的是VMware-Tools-5.5.3-34685.tar.gz。
3.copy这个tar文件到~/temp下(你的主目录下的哪个目录下都行)。
4.解压这个文件到当前目录,会发现~/temp下多了一个解压出的vmware-tools-distrib目录。
5.cd到这个目录下,执行./vmware-install.pl(安装很简单一路回车就OK)。
6.cd vmware-tools-distrib/bin目录下 执行./vmware-config-tools.pl来配置工具(这个过程需要虚拟机上已经安装了GCC,过程也很简单,根据提示作就可以完成)。
重新启动虚拟机,会发现我们在第六步设置的分辨率起作用了,我们设的共享目录也可以看到了(在/mnt/hgfs目录下)。
。。。。。。设置好之后在windows端你设置的共享文件夹里放入需要共享到虚拟linux的文件,然后在linux的/mnt/hgfs目录下就可以找到。。。。
至此,搞定windows和虚拟linux文件共享问题!
二、安装交叉编译工具链
在/usr/local目录下,新建arm/目录,将共享的交叉编译工具cross-3.4.1.tar.bz2复制到里面(即复制到/usr/local/arm目录),新建终端,执行:cd /usr/local/arm,切换到/usr/local/arm目录,执行:tar jxvf cross-3.4.1.tar.bz2命令将交叉编译工具解压到当前目录,会生成3.4.1文件夹,将来编译所需的工具就在里面。
。。。。。。至此交叉编译环境搭建好了。。。
三、内核移植
将共享的linux-2.6.25.8.tar.bz2复制到/home目录,执行:tar jxvf linux-2.6.25.8.tar.bz2命令将内核解压到当前目录,在终端执行:cd /home/linux-2.6.25.8命令切换到内核源码目录。
。。。。。真正的移植开始。。。。
1、执行:gedit Makefile命令打开顶层的Makefile文件(注意Makefile的第一个字母是大写,linux里面是区分大小写的),找
ARCH ?=(SUBARCH) 和 CROSS_COMPILE ?=
将其改为:
ARCH ?= arm
CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-
(相信很多人在网上会看到资料说:CROSS_COMPILE ?=arm-linux- ,但是这样就需要设置环境变量,还不如直接写全路径的好)
2、执行:gedit arch/arm/mach-s3c2440/mach-smdk2440.c找到
Smdk2440_map_io函数,将16934400修改为12000000(此处为平台输入时钟,OK-2440-III用的是12MHz的外部时钟
3、修改MTD分区
执行:gedit arch/arm/plat-s3c24xx/common-smdk.c命令
在109行左右,找到内核的分区信息:
将它修改为和bootloader的分区一致,即:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Boot",
.size = 0x00100000,
.offset = 0
},
[1] = {
.name = "MyApp",
.size = 0x003c0000,
.offset = 0x00140000,
},
[2] = {
.name = "Kernel",
.size = 0x00300000,
.offset = 0x00500000,
},
[3] = {
.name = "fs_yaffs",
.size = 0x03c00000,
.offset = 0x00800000,
},
[4] = {
.name = "WINCE",
.size = 0x03c00000,
.offset = 0x04400000,
}
};
4、修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验
找到s3c2410_nand_init_chip()函数,在该函数体最后把:
chip->ecc.mode = NAND_ECC_SOFT;
修改成:
chip->ecc.mode = NAND_ECC_NONE;
修改完成后保存,关闭。
。。。。。。。。做完这些后,内核的基本修改已经完成,接下来可以简单配置一下内核,然后编译,再下载到板子上看看效果,但是现在还没有进行文件系统的移植,一定会报错的,没关系,只要能看到你内核分区的打印信息就说明上面的修改生效了,然后就可以继续移植文件系统了。。。。。。。。。
5、移植yaffs文件系统
说明一下,这里的移植文件系统还不是真正的移植,只是给内核打上文件系统补丁,让内核支持yaffs文件系统,因为O-2440-III的板子预先烧写好的文件系统就是yaffs的,所以这里咱们先利用预先烧写好的文件系统来测试移植的内核,换句话说就是:如果内核移植和配置的没有问题的话,是可以正确挂载板子上预先烧写的文件系统的。Understand?
好了,废话少说,开始干活。。。。。。。
首先到 www.aleph1.co.uk/cgi-bin/viewcvs.cgi 下载一个yaffs文件系统的补丁,打开网页后,点击Download tarball 下载补丁。
然后利用上面做好的windows和虚拟机linux共享文件的方法把下载好的压缩包复制到/home目录下,假如你下载的这个压缩包名字为:root.tar.gz
解压到当前目录:tar xvzf root.tar.gz
进入解压出来的yaffs2目录
执行:./patch-ker.sh c /home/linux-2.6.25.8/ (注意最前面有个“.”)
此时在内核源码的fs/目录下你将会看到一个新添加的名为“yaffs2”的目录,同时fs/目录下面的Makefile 文件和Kconfig文件也添加了yaffs2的配置和编译条件。
。。。。。。。至此基本的移植工作已经完成(除一些相关驱动移植,驱动移植在后面慢慢完成),下面将自己移植的内核配置一下就可以烧进板子检验一下了。。。。。
6、配置内核
切换到内核目录:cd /home/linux-2.6.25.8
执行:make s3c2410_defconfig 载入缺省的2410内核配置,因为2410的配置和2440的相近,这样我们就可以在2410的配置的基础上进行更改,节省一些力气。
执行:make menuconfig 打开内核配置界面,
然后配置如下:
平台配置
----------------------------------------------
人生重要的不是所站的位置,而是所朝的方向! |