Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2298872
  • 博文数量: 395
  • 博客积分: 10994
  • 博客等级: 上将
  • 技术积分: 5586
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 19:49
文章存档

2014年(1)

2013年(10)

2012年(74)

2011年(303)

2010年(7)

分类: LINUX

2011-03-21 17:46:57

郁闷了快一个星期了,终于把内核移植成功了(这个是真正的成功了的),参照的是一下内容,在此也要感谢这位郑州大学的学生呀,呵呵,原博客地址为:
 
不过其中的根文件系统移植在我上面不成功,在此,我只复制内核移植的步骤,如下:
(所以,我用的是友善的根文件系统)我的nand flash是256M的
 

一, 下载安装交叉编译环境
 
1
)下载安装交叉编译器 4.3.2.tgz,将其解压到根目录下 :
# tar jxvf arm-linux-gcc-4.3.2.tgz -C /
2)修改主用户目录 .bashrc 文件,将交叉编译器的路径添加到环境变量PATH,在.bashrc添加 :
export PATH=$PATH:/usr/local/arm/4.3.2/bin
这样下次电脑启动后直接就可以在shell中使用交叉开发工具了,但目前环境变量还没有生效,使用命令
#source .bashrc
之后输入
#arm-linux-gcc -v
可以查看交叉环境是否成功建立。


二、准备源码包
1
Linux 2.6.30.4的下载地址:


2
yaffs2文件系统的下载地址:

点击Download GNU tarball,下载cvs-root.tar.gz

请把linux-2.6.30.4.tar.bz2cvs- root.tar.gz放在同一目录内!


三、移植内核
1
)解压内核源码包
# tar jxvf linux-2.6.30.4.tar.bz2

2
)进入内核目录
# cd linux-2.6.30.4

3
)修改顶层Makefile
# gedit Makefile
193
ARCH  ?= $(SUBARCH)
CROSS_COMPILE  ?=

修改为
ARCH  ?= arm
CROSS_COMPILE  ?=  arm-linux-


4
)修改机器码
# gedit arch/arm/tools/mach-types
379
s3c2440            ARCH_S3C2440        S3C2440            362
修改为
s3c2440            ARCH_S3C2440        S3C2440            1999
supervivi 传入的机器码参数一致即可!(注意此时的机器码不同的机器可能不一样,它对应于所使用的 vivi 源码中的include/platform/smdk2440.h文件中的MACH_TYPE,我的是1999

5
)修改时钟频率
# gedit arch/arm/mach-s3c2440/mach-smdk2440.c
160

 

static void __init smdk2440_map_io(void)
{
s3c24xx_init_io
(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
    //s3c24xx_init_clocks(16934400); //注释这句,加入下一句
    s3c24xx_init_clocks(12000000);

s3c24xx_init_uarts
(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

 

 

6)修改Nand Flash分区
首先将开发板从nor flash启动,输入q进入supervivi命令行界面,输入
part show
以查看Nand Flash的分区情况,根据分区情况修改comman-smdk.c文件
比如我的分区情况为
name           :                 offset                       size                   flag
--------------------------------------------------------------------------
vivi               :                 0x00000000              0x00040000       0
param          :                 0x00040000              0x00020000       0
kernel          :                 0x00060000              0x00500000       0
root             :                 0x00560000              0x3fa80000        0
# gedit arch/arm/plat-s3c24xx/common-smdk.c

109

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name    = "vivi",
.size    = 0x00040000,
.offset    = 0x00000000,
},
[1] = {
.name    = "param",
.offset = 0x00040000,
.size    = 0x00020000,
},
[2] = {
.name    = "kernel",
.offset = 0x00060000,
.size    = 0x00500000,
},
[3] = {
.name    = "root",
.offset    = 0x00560000,
.size    = 0x3fa80000,
}

};

 

四、配置内核
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig   (这个地方也不知道咋回事,有时候经常出现找不到文件,这个时候,一般我是重新从官网上下载源码,在依次操作的,也不知道为啥)
器类型只选以下三项:

System Type ---> S3C2410 Machines ---> [*] SMDK2410/A9M2410
S3C2440 Machines
---> [*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module

 

内核特性加上以下两项:

Kernel Features ---> [*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this(EXPERIMENTA) kernel

 

如果你想 了解每个配置选项的意义,请点击:Linux 2.6.19.x 内核编译配置选项简介

五、编译内核
# make zImage


六、下载、烧写内核镜像
先使用友善之臂公司提供的yaffs2根文件系统镜像做测试,可以运行到这里:

 

FAT: unable to read boot sector
VFS
: Cannot open root device "mtdblock2" or unknown-block(31,2)
Please append a correct
"root=" boot option; here are the available partitions:
1f00 192 mtdblock0
(driver?)
1f01 2048 mtdblock1
(driver?)
1f02 63152 mtdblock2
(driver?)
Kernel panic
- not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
[<c002c700>] (unwind_backtrace+0x0/0xdc) from [<c02a7d2c>] (panic+0x40/0x110)
[<c02a7d2c>] (panic+0x40/0x110) from [<c0008fcc>] (mount_block_root+0x1d0/0x210)
[<c0008fcc>] (mount_block_root+0x1d0/0x210) from [<c0009264>] (prepare_namespac)
[<c0009264>] (prepare_namespace+0x164/0x1bc) from [<c0008598>] (kernel_init+0xb)
[<c0008598>] (kernel_init+0xb4/0xe0) from [<c004812c>] (do_exit+0x0/0x578)
[<c004812c>] (do_exit+0x0/0x578) from [<00000001>] (0x1)

 

 

七、加入对yaffs2文件系统的支持
1
回到上级目录
# cd ..

2)解 yaffs2文件系统源码包
# tar zxvf cvs-root.tar.gz

3)进入yaffs2源码目录
# cd cvs/yaffs2

4)打补丁
# ./patch-ker.sh c ../../linux-2.6.30.4
Updating ../../linux-2.6.30.4/fs/Kconfig
Updating ../../linux-2.6.30.4/fs/Makefile

5
回到内核目录
# cd ../../linux-2.6.30.4

6
重新配置
# make menuconfig
上以下一项:

File systems ---> [*] Miscellaneous filesystems ---> <*> YAFFS2 file system support


7

)重新编译内核
# make zImage

 

之后你就可以把这个景象下载到你的开发板中了,我在我的板子上试过,成功运行了(nand flash 是256M的),注意了这个知识能够启动了,不过还是不能联网(dm9000驱动也没有移植),lcd驱动也没有移植,还有触摸屏。

 

 

 

};

 

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