分类: LINUX
2009-11-11 14:48:59
这个可以用参考网上busybox 的编译,里面大部分会讲到ramdisk的制作,我这里是假如我们的nfs已经制作好了,我把它命名为/nfs-lite,然后我把它制作成ramdisk的文件系统,步骤如下:
制作initrd映象文件
#mkdir initrd
#dd if=/dev/zero of=initrd.img bs=1k count=8192
#/sbin/mke2fs -F -v -m0 initrd.img
#mount -o loop initrd.img initrd
#cp -av nfs-lite/* initrd
#umount
#gzip -9 initrd.img
这样我就在当前目录下得到了一个名为initrd.img.gz的ramdisk的文件系统镜像(看来它是一个压缩的镜像),这个镜像在下面我们会用到的。
二、制作内核和文件系统同一的镜像bootpImage
bootpImage是编译包含zImage和initrd(ramdisk文件系统)的映像,这样我们在uboot阶段就只需要加载一个统一的镜像就什么都可以搞定了,没必要分两个阶段进行加载内核和文件系统。
步骤一:在内核编译时要选上相应的内核选项来支持:
(1)
在device driver中进入block device中选中中间四个
(2)进入file system中,选中ext2文件系统的支持
(3)如果你是一般挂载ramdisk文件系统你还得在Boot options --->中填上自己的启动参数
选上这三个就让我们的内核支持了ramdisk了。现在开始制作bootpImage
步骤二:制作bootpImage:
在make menuconfig后输入
[root@local hostlinux-v3.3]#make bootpImage INITRD_PHYS=0x31000000 INITRD=./initrd.img.gz PARAMS_PHYS=0x30000100
这个就能在/arch/arm/boot/下面生成bootpImage镜像了,其中注意:
INITRD_PHYS是文件系统的起始物理地址,PARAMS_PHYS是uboot存放启动参数列表的地方在这里我们是固定为0x30000100的地址。这两个必须要,因为在/arch/arm/boot/bootp/init.s中会用到这两个参数,本来还有一个参数ZRELADDR
ZRELADDR := $(zreladdr-y)内核启动的首地址,但这个在我们的SEP4020的体系架构文件/arch/arm/mach-sep4020/Makefile.boot中已经定义好了:
zreladdr-$(CONFIG_ARCH_4020) := 0x30008000
这样就不用我们在这里再手动指定了。
步骤三:制作uImage(uboot能认镜像)
我们接着输入指令:
[root@localhost linux-v3.3]# mkimage -n "Kernel
这样生成的vmlinux.img就是一个uImage镜像。
一、启动内核:
经过上面的编译我们就得到了一个内核和文件系统同一的镜像vmlinux.img,我们在这里应该重新配置下uboot的启动参数:
SEP4020=> Set bootargs root=/dev/ram0 rw console=ttyS0,115200 initrd=0x31000000,6mb mem=32mb
保存重启,在启动过程中我们会发现这样一些启动ramdisk的信息:
CPU: Testing write buffer coherency: ok
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 6144K
RAMDISK driver initialized: 16 RAM disks of 65536K size 1024 blocksize
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 112K
init started: BusyBox v
starting pid 192, tty '': '/etc/init.d/rcS'
**********************************************
SEP4020 ARM Linux-
**********************************************
# mount all...........
# Starting mdev.........
starting pid 199, tty '': '-/bin/sh'
/ # ls
这样我们就成功加载了bootpIamge了