分类: LINUX
2014-02-18 17:25:09
这篇文章是我初期做的内核移植,没有包含其他的驱动程序移植,近期准备再做完整的移植 到时候再将笔记发出。。。。。
交叉编译工具链:cross-
内核:linux-
目标板:飞凌公司的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-
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-
。。。。。。至此交叉编译环境搭建好了。。。
三、内核移植
将共享的linux-
。。。。。真正的移植开始。。。。
1、执行:gedit Makefile命令打开顶层的Makefile文件(注意Makefile的第一个字母是大写,linux里面是区分大小写的),找到
ARCH ?=(SUBARCH) 和 CROSS_COMPILE ?=
将其改为:
ARCH ?= arm
CROSS_COMPILE ?=/usr/local/arm/
(相信很多人在网上会看到资料说:CROSS_COMPILE ?=arm-linux- ,但是这样就需要设置环境变量,还不如直接写全路径的好)
2、执行:gedit arch/arm/mach-s
Smdk2440_map_io函数,将16934400修改为12000000(此处为平台输入时钟,OK-2440-III用的是12MHz的外部时钟源)
3、修改MTD分区
执行:gedit arch/arm/plat-s
在109行左右,找到内核的分区信息:
将它修改为和bootloader的分区一致,即:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Boot",
.size = 0x00100000,
.offset = 0
},
[1] = {
.name = "MyApp",
.size = 0x
.offset = 0x00140000,
},
[2] = {
.name = "Kernel",
.size = 0x00300000,
.offset = 0x00500000,
},
[3] = {
.name = "fs_yaffs",
.size = 0x
.offset = 0x00800000,
},
[4] = {
.name = "WINCE",
.size = 0x
.offset = 0x04400000,
}
};
4、修改drivers/mtd/nand/s
找到s3c2410_nand_init_chip()函数,在该函数体最后把:
chip->ecc.mode = NAND_ECC_SOFT;
修改成:
chip->ecc.mode = NAND_ECC_NONE;
修改完成后保存,关闭。
。。。。。。。。做完这些后,内核的基本修改已经完成,接下来可以简单配置一下内核,然后编译,再下载到板子上看看效果,但是现在还没有进行文件系统的移植,一定会报错的,没关系,只要能看到你内核分区的打印信息就说明上面的修改生效了,然后就可以继续移植文件系统了。。。。。。。。。
5、移植yaffs文件系统
说明一下,这里的移植文件系统还不是真正的移植,只是给内核打上文件系统补丁,让内核支持yaffs文件系统,因为O-2440-III的板子预先烧写好的文件系统就是yaffs的,所以这里咱们先利用预先烧写好的文件系统来测试移植的内核,换句话说就是:如果内核移植和配置的没有问题的话,是可以正确挂载板子上预先烧写的文件系统的。Understand?
好了,废话少说,开始干活。。。。。。。
首先到 下载一个yaffs文件系统的补丁,打开网页后,点击Download tarball 下载补丁。
然后利用上面做好的windows和虚拟机linux共享文件的方法把下载好的压缩包复制到/home目录下,假如你下载的这个压缩包名字为:root.tar.gz
解压到当前目录:tar xvzf root.tar.gz
进入解压出来的yaffs2目录
执行:./patch-ker.sh c /home/linux-
此时在内核源码的fs/目录下你将会看到一个新添加的名为“yaffs2”的目录,同时fs/目录下面的Makefile 文件和Kconfig文件也添加了yaffs2的配置和编译条件。
。。。。。。。至此基本的移植工作已经完成(除一些相关驱动移植,驱动移植在后面慢慢完成),下面将自己移植的内核配置一下就可以烧进板子检验一下了。。。。。
6、配置内核
切换到内核目录:cd /home/linux-
执行:make smdk2410_defconfig 载入缺省的2410内核配置,因为2410的配置和2440的相近,这样我们就可以在2410的配置的基础上进行更改,节省一些力气。
执行:make menuconfig 打开内核配置界面,
然后配置如下:
平台配置
System Type --->
S
[*] SMDK2410/A
[ ] IPAQ H1940
[ ] Acer N30
[ ] Simtec Electronics BAST (EB2410ITX)
[ ] NexVision OTOM Board
[ ] AML M5900 Series
[ ] Thorcom VR1000
[ ] QT2410
S
[ ] SMDK2413
[ ] SMDK2412
[ ] VMSTMS
S
[ ] Simtec Electronics ANUBIS
[ ] Simtec IM2440D20 (OSIRIS) module
[ ] HP iPAQ rx3715
[*] SMDK2440
[ ] NexVision NEXCODER 2440 Light Board
[*] SMDK2440 with S
S
[ ] SMDM2440 with S
S
[ ] SMDK2443
MTD配置
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
< > RedBoot partition table parsing
[ ] Command line partition table parsing
<*> NAND Device Support --->
<*> NAND Flash support for S
文件系统
File systems --->
< > Second extended fs support
< > Ext3 journalling file system support
<*> Kernel automounter support
<*> Kernel automounter version 4 support (also supports v3)
<*> Filesystem in Userspace support
CD-ROM/DVD Filesystems --->
<*> ISO 9660 CDROM file system support
[ ] Microsoft Joliet CDROM extensions
[ ] Transparent decompression extension
< > UDF file system support
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
< > NTFS file system support
Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs)
[*] Tmpfs POSIX Access Control Lists
<*> Userspace-driven configuration filesystem
Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
[ ] Use older-style on-NAND data format with pageStatus byte
[*] Lets Yaffs do its own ECC
[ ] Use the same ecc byte order as Steven Hill's nand_ecc
-*- 2048 byte (or larger) / page devices
[ ] Autoselect yaffs2 format
[*] Disable lazy loading
[*] Turn off wide tnodes
[*] Force chunk erase check
[ ] Cache short names in RAM
-*- Native language support --->
--- Native language support
(iso8859-1) Default NLS Option
<*> Codepage 437 (United States,
<*> Simplified Chinese charset (CP936, GB2312)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
<*> NLS UTF-8
配置结束后退到最初配置单,选择:“Save an Alternate Configuration
File”,将其保存为:“.config”文件,将来编译时系统会调用这个文件,系统会按照刚才我们做的设置去配置内核。保存完毕之后退出配置单。
7、编译内核
执行:make zImage命令编译内核。(再强调一遍,在终端里cd进linux-
如果没有错误的话2分钟左右编译完成,将在/home/linux-
。。。。。。。至此移植工作基本完成,正常情况下映像文件烧写进板子之后应该能正常启动,挂载文件系统,其他的一些驱动如液晶屏驱动,USB驱动之类的等我移植整理之后一并发出。。。。。。
个人原创文章,转载请注明转自 gugugu9999.cublog.cn