平台:Fedora9 + mini2440(64M Flash)
交叉编译工具:arm-linux-gcc 4.4.3
由于本文章主要是针对内核的移植,所以有关supervivi 和文件系统的制作在此不作讲解,supervivi采用mini2440官网上的最新supervivi,由于本人的开发板是64M的,最新的linux系统下的文件系统太大下载不了,依据官网上的资料对文件系统进行剪裁后的制作的,如果你的FLASH大于64M,那你就可以直接使用光盘中的制作好的文件系统,现在主要讲解一下linux移植。
1)下载linux内核源代码
获取内核的网址是:
可以看到你里面有各种版本的Linux,下载现在要移植的Linux-2.6.32版本,如果Linux可以上网的话,可以使用wget ,命令直接在当前的目录下进行下载(建议在windows系统下下载,然后通过共享复制到linux系统下)
2) 解压linux内核源代码
假设内核包已经存放在/opt/FriendlyARM/mini2440/目录下,终端下输入以下命令:
cd /opt/FriendlyARM/mini2440/ 切换到内核存放的目录
tar xvzf linux-2.6.32.tar.gz 将内核解压到当前目录下
3) 修改源代码中的相应文件以适应mini2440
(1)修改Makefile文件
由于linux内核源代码默认的平台为X86平台,编译器默认的为gcc 所以要修改linux内核的默认平台为arm平台,编译器默认为arm-linux-,要修改这两项大约在文本的182行左右,下面两附图为修改前后的内容:
修改前:
修改后:
4) 测试linux内核能否顺利通过编译
4.1 make s3c2410_defconfig //使用缺省的配置文件,也就是SMDK2440的缺省配置文件,完成此步后,将会在linux-2.6.32下产生一个.config文件,想要查看此文件是否存在,使用"ls -a"命令.
4.1 也可以将s3c2410_defconfig拷贝到linux-2.6.32目录下,首先切换目录到linux-2.6.32,然后执行以下命令:
cp ./arch/arm/configs/s3c2410_defconfig .config
4.2 编译内核,编译的内核存放在/arch/arm/boot/目录下
make or make zImage or make bzImage //编译的过程比较长,大约在二十分钟左右
(zImage和bzImage的区别:仅仅在X86平台下有区别,zImage只能编译小于512K的内核)
5) 修改机器码
很关键的一点是,在启动内核时,是根据bootloader传入的机器码(MACH_TYPE),来决定应启动那种目标平台,2.6.29以后的版本,友善之臂申请了字节的机器码1999,在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types中.
由于我们在此并没有使用mini2440的平台,使用的是SMDK2440的平台,但bootloader(supervivi)内的机器码为1999,所以这里我们可以将s3c2440的机器码改为1999.
如果传入的机器码不对的话,启动的时候一般会出现下面的错误
Uncompressing
Linux................................................................................
done, booting
the kernel.
运行到这就停止了.
5)修改时钟源
在 mach-mini2440.c的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz,元器件标号为 X2),如果不更改的话,串口通信将会出现乱码.
更改后:
更改前:
6) 修改NAND分区信息.
要让内核知道nand flash的分区信息,设置成跟bootloader一致. 在arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[],注意这个一定要跟bootloader的一致.
查看supervivi分区信息
(1) 输入q进入goto shell of vivi
Supervivi-> part show 显示以下分区表:
(2) 按上面的信息修改分区表,修改后:
7) 增加Yaffs2文件系统的支持
首先到 网站下 载一个 yaffs 文件系统的补丁,点击下图中的Download GNU tarball,下载.
得到补丁包后将其放到/opt/FrinedlyARM/mini2440/目录下,解压补丁,然后打上 yaffs2 的补丁,方法如下:
tar xvfz cvs-root.tar.gz (
解压得到补丁目录 cvs)
cd /opt/Frinedly/mini2440/cvs/yaffs2/ (进到 yaffs2 的补丁目录下)
./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32(执行补丁脚本,打补丁到内核中,其中/opt/FriendlyARM/mini2440/linux-2.6.32为内核源码的地址)此时到内核源码的“fs/”目录下面将会看到新添加了一个名为“yaffs2/”的目录,同时 fs/目录下面的Makefile 文件和 Kconfig 文件也添加了 yaffs2 的配置和编译条件。
8)配置内核
9.配置内核
调用自带的一个默认配置单, 该配置单在内核源码的 “arch/arm/configs/”目录下面,名为:“s3c2410_defconfig”,该配置文件里面选择了几乎所有的和 S3C24XX 系列 CPU 相关的 配置选项,我们完全可以在该配置单的基础上进行配置。
操作前提是切换到linux-2.6.32目录下进行:
cp arch/arm/configs/s3c2410_defconfig .config 或者 make s3c2440_defconfig
make menuconfig
(1).General setup --->
[*] Configure standard kernel features (for small systems) --->
选上这项,否则文件系统中的一些选项不会出现
(2). System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
(3).[*] Enable loadable module support --->
[*] Module unloading
(4).Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
< > Real Time Clock --->
(5).File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
(6).kernel Features----->
[*]Use the ARM EABI to compile the Kernel
保存退出.
10)编译内核
make zImage
编译完成后下载内核启动即可.
阅读(5787) | 评论(0) | 转发(5) |