Chinaunix首页 | 论坛 | 博客
  • 博客访问: 284597
  • 博文数量: 68
  • 博客积分: 352
  • 博客等级: 入伍新兵
  • 技术积分: 296
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-16 15:41
文章分类
文章存档

2021年(1)

2020年(2)

2017年(4)

2016年(3)

2015年(1)

2013年(1)

2012年(21)

2011年(35)

分类:

2011-11-10 13:50:14

    这篇文章是我初期做的内核移植,没有包含其他的驱动程序移植,近期准备再做完整的移植 到时候再将笔记发出。。。。。

交叉编译工具链:cross-3.4.1(飞凌的随板子光盘里面提供了,或者自己可以去百度搜)

内核:linux-2.6.25.8 (可以到去下载)

目标板:飞凌公司的ARM9开发板OK-2440-III

平台:虚拟机redhat linux-9

移植开始!

还有不知道有没有必要说,以下我说的执行XX命令都是在虚拟机linux的终端执行。。。。。。。。

一、首先正确配置虚拟机,安装Vmtools,使虚拟机linux可以和windows共享文件(怎么安装虚拟机linux就不用说了吧,不会的去百度吧):

VMware工具的安装:
1.
在虚拟机开机时,在VMware菜单中选择VM->Install VMware tools选项安装VMware工具。
注意:其实通过这步操作并没有真正安装上。你可以看一下,你设的共享目录仍然没有,分辩率也没法设。
2.
在虚拟机linux里打开光驱,有两个文件,其中一个是VMware Toolstar文件,我现在的是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?

好了,废话少说,开始干活。。。。。。。

首先到 下载一个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 smdk2410_defconfig 载入缺省的2410内核配置,因为2410的配置和2440的相近,这样我们就可以在2410的配置的基础上进行更改,节省一些力气。

   执行:make menuconfig 打开内核配置界面,

 然后配置如下:

 

平台配置

 

System Type --->

S3C2410 Machines --->

[*] SMDK2410/A9M2410

[ ] IPAQ H1940

[ ] Acer N30

[ ] Simtec Electronics BAST (EB2410ITX)

[ ] NexVision OTOM Board

[ ] AML M5900 Series

[ ] Thorcom VR1000

[ ] QT2410

S3C2412 Machines --->

[ ] SMDK2413

[ ] SMDK2412

[ ] VMSTMS

S3C2440 Machines --->

[ ] Simtec Electronics ANUBIS

[ ] Simtec IM2440D20 (OSIRIS) module

[ ] HP iPAQ rx3715

[*] SMDK2440

[ ] NexVision NEXCODER 2440 Light Board

[*] SMDK2440 with S3C2440 CPU module

S3C2442 Machines --->

[ ] SMDM2440 with S3C2442 CPU module

S3C2443 Machines --->

[ ] 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 S3C2410/S3C2440 SoC

 

文件系统

 

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, Canada)

<*> 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命令编译内核。(再强调一遍,在终端里cdlinux-2.6.25.8目录,然后再make

   如果没有错误的话2分钟左右编译完成,将在/home/linux-2.6.25.8/arch/arm/boot/目录生成编译好的内核映像文件zImage,将它烧写进OK-2440-III的板子看看吧。

。。。。。。。至此移植工作基本完成,正常情况下映像文件烧写进板子之后应该能正常启动,挂载文件系统,其他的一些驱动如液晶屏驱动,USB驱动之类的等我移植整理之后一并发出。。。。。。

 

个人原创文章,转载请注明转自  gugugu9999.cublog.cn

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