Chinaunix首页 | 论坛 | 博客
  • 博客访问: 554827
  • 博文数量: 99
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1117
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-23 15:17
文章分类

全部博文(99)

文章存档

2011年(4)

2010年(13)

2009年(82)

我的朋友

分类: LINUX

2009-11-11 14:48:59

 
一、制作一个ramdisk的文件系统

这个可以用参考网上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.gzramdisk的文件系统镜像(看来它是一个压缩的镜像),这个镜像在下面我们会用到的。

 

二、制作内核和文件系统同一的镜像bootpImage

bootpImage是编译包含zImageinitrdramdisk文件系统)的映像,这样我们在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_PHYSuboot存放启动参数列表的地方在这里我们是固定为0x30000100的地址。这两个必须要,因为在/arch/arm/boot/bootp/init.s中会用到这两个参数,本来还有一个参数ZRELADDR   

ZRELADDR    := $(zreladdr-y)内核启动的首地址,但这个在我们的SEP4020的体系架构文件/arch/arm/mach-sep4020/Makefile.boot中已经定义好了:

  zreladdr-$(CONFIG_ARCH_4020)   := 0x30008000

这样就不用我们在这里再手动指定了。

步骤三:制作uImageuboot能认镜像)

我们接着输入指令:

[root@localhost linux-v3.3]# mkimage -n "Kernel 2.6.16" -A arm -O linux -T kernel -C none -a 30007fc0 -e 30008000 -d ./arch/arm/boot/bootpImage vmlinux.img

这样生成的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 v1.10.4 (2009-05-18 19:40:33 CST)

starting pid 192, tty '': '/etc/init.d/rcS'

 

**********************************************

   SEP4020 ARM Linux-2.6.16 SDK 3.2          

**********************************************

# mount all...........

# Starting mdev.........

starting pid 199, tty '': '-/bin/sh'

/ # ls

这样我们就成功加载了bootpIamge

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

billpig2010-04-14 14:35:06

这个除了加载一个统一的镜像还有其他特点么? 启动速度怎么样?