实验内容H—Linux内核移植
一、实验目的
根据前两次实验的基础上做Linux内核移植实验,为以后移植应用程序做准备(P84)。
二、实验内容
在Linux下利用交叉编译工具配置编译zlmage并烧写到arm开发箱屮。
三、实验步骤
(1)实验准备
从网上下载Linux的最新版本,解压后可以看到它的全部源代码,我们这里以 linux-2.6.24为例,实现Linux的内核移植。
mkdir ?p /arm2410/kemel
cd /arm2410/kemel
#wgetftp://192.16&4.210/crosstool/linux?2.6.24.tar.bz2
cp /mnt/hgfs/ker nel/crosstool/linux-2.6.24.tar.bz2?
tar -xjvf linux-2.6.24.tar.bz2
cd linux-2.6.24
(2)修改顶层Makefile
在顶层Makefile先要定义交叉编译器,这里就使用我们第一次实验屮构建的交叉编
译器。查找ARCH,在193行左右修改确认ARCH和CROSS COMPILE的值
ARCH ?=arm
CROSS COMPILE ?= arm-linux-
如果学生机上没有交叉编译环境,先从教师机上下载交叉编译环境或者通过共享冃录来 解压已经做好的交叉编译环境。
#wget 10/u-boot/arm-linux-gcc.tar.bz2
#tar? xjvfarm-linux-gcc.tar.bz2 ?C /
tar -xjvf /mnt/hgfs/kemel/u-boot/arm-linux-gcc.tar.bz2 -C/# 通过共亨 口 录
为了方便使用ami?linux?gcc,我们可以把它所在的目录添加到环境变量中
gedit /etc/profile
在export PATH前面插入
PATH=/arm2410/crosstool/gcc-4.1. l-glibc-2.3.2/arm-linux/bin/:$PATH
这样一句,以后启动就可以直接使用arm-linux-gcc 了。
要使环境变量立马生效,可以使用下面的命令。
source /etc/profile
~~我们可以用arm-linux?gcc來查看交叉编译器版本,如果是4.1.1就是正确的。
(3)设置Nand Flash分区信息表
设置Nand Flash的分区信息表是为内核启动以后加载文件系统用的,可以将Nand Flash看成我们PC机的硬盘,对Nand Flash的分区看成是对硬盘的分区,硬盘可以分成C 盘,D盘之类,而Nand Flash则可以分成很多块,每块有不同的名字、大小和用途。下面 是对Super-ARM实验箱的Nand Flash进行分区的情况(参考表5-1-1):
第0块命名为“uboot”,它用来存放u-boot.bin映像,起始地址是Nand Flash的 0x000000,最大 0x30000 个字节;
第1块命名为“kernel",用來存放内核,起始地址是Nand Flash的0x30000,最大 0X1D0000个字节;
第2块命名为lootfs”,用来存放根文件系统,起始地址是Nand Hash的 0x200000,最大 30M 字节;
笫3块命名为”ext?fsl“,留给用户存放其他文件系统,起始地址是Nand Flash 的0x2000000,最大32M字节;
至于具体要怎么分,这样根据你的目标机的Nand Flash來定,不能一概而论。分区的 方法就是修改 arch/arm/plat-s3c24xx 口 录卜?的 common-smdk.c 文件:
执彳了 gcdit arch/ann/plat-s3c24xx/common-smdk.c 命令,找到:static struct mtd_partition smdk_dcfault_nand_part[],在其中填入下面的内容(将原来的内容覆盖)
[0] = {
.name = "uboot°, .size = 0x30()()0, .offset = 0,
},
[11 = {
.name = "kernel", .offset = 0x30000, .size = Ox 1D0000,
},
[2]={ .name = "rootfs", .offset = SZ_2M, .size = SZ_lM*30,
},
[3] = {
.name = "ext-fsl", .offset = SZ_32M, .size = SZ_32M,
添加devfs文件系统支持
为了我们的内核支持devfs,以及在启动时能自动挂载/dev。编辑fs/Kconfig:在907