1)下载安装交叉编译器 ,将其解压到根目录下 :
# 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.bz2和cvs- 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) |
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[] = { }; |
四、配置内核
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
机 器类型只选以下三项:
System Type ---> S3C2410 Machines ---> [*] SMDK2410/A9M2410 |
内核特性加上以下两项:
Kernel Features ---> [*] Use the ARM EABI to compile the kernel |
如果你想 了解每个配置选项的意义,请点击:
五、编译内核
# make zImage
六、下载、烧写内核镜像
先使用友善之臂公司提供的yaffs2根文件系统镜像做测试,可以运行到这里:
FAT: unable to read boot sector |
七、加入对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
八、移植文件系统到开发板
1) 编译Busybox
从下载busybox-1.15.tar.bz2 ,解压后进入busybox 目录,执行
#make menuconfig
在编译/链接选项中使用静态链接:
Buld Options ---->
[*] Build Busybox as a static binary (no shared libs)
然后修改Makefile文件:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
保存后,执行
# make CONFIG_PREFIX={yourdir} install
其中yourdir为你选择的busybox安装目录,编译成功后busybox就安装到yourdir目录中了。
2) 构建根文件系统
构建etc目录
在busybox 的安装目录中rootfs中创建etc文件夹(这里假设busybox被安装到rootfs文件夹),在etc目录下新建inittab文件,内容如下
# /etc/inittab
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
在etc目录创建文件夹init.d,然后在init.d文件夹中新建一个脚本文件rcS ,添加内容
#! /bin/sh
mount -a
这个脚本是内核启动后希望执行的动作,此脚本由/bin/sh解析,你看添加自己希望启动的程序,另外还有给此脚本添加可执行属性:
chmod +x rcS
在etc目录下创建fstab文件,添加如下内容:
# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
返回busybox的安装目录rootfs,创建dev目录,并静态创建设备文件
# cd dev
# sudo mknod console c 5 1
# sudo mknod null c 1 3
# sudo mknod ttySAC0 c 204 64
# sudo mknod mtdblock0 b 31 0
# sudo mknod mtdblock1 b 31 1
# sudo mknod mtdblock2 b 31 2
构建其它目录
mkdir proc mnt tmp sys root
返回rootfs的上层目录,然后使用 mkyaffs2image-128M 生成文件系统镜像