在2440上实现ramdisk文件系统



一、准备工作

1. 下载linux-2.6.22内核
2. 安装arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
3. 文件系统,rootfs(之前制作好的)


二、配置、编译内核

1.  ramdisk是一种内存虚拟磁盘技术,本次实验中使用的ext2文件格式制作RAMDISK镜像,所以首先配置内核支持ext2文件系统。

$ make ARCH=arm CROSS_COMPILE=/home/vm/jz2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- menuconfig

选中<*> Second extended fs support:

File systems  --->
	<*> Second extended fs support

2.  配置ramdisk有关选项

General setup  ---> 
	[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support


Device Drivers  --->
	Block devices  --->
		(12288) Default RAM disk size (kbytes)

其中12288要和后面制作的RAMDISK的大小设置一样。否则启动会报错。

3.  编译内核,复制到nfs服务器目录

$ make ARCH=arm CROSS_COMPILE=/home/vm/jz2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- uImage -j4

$ cp arch/arm/boot/uImage /nfs_rootfs -r

三、制作ramdisk文件系统

     本次使用ramdisk文件系统的制作工具:genext2fs,如果系统没有安装这个工具,在ubuntu安装的命令是:

$ sudo apt-get install genext2fs

    首先确定RAMDISK的大小,设置为略大于实际文件系统的总大小,建议设置为4096的倍数。

$ du -h
6.8M	./lib
4.0K	./tmp
4.0K	./usr/sbin
20K	./usr/bin
28K	./usr
152K	./sbin
4.0K	./sys
8.0K	./etc/init.d
20K	./etc
744K	./bin
4.0K	./proc
4.0K	./dev
4.0K	./mnt
4.0K	./root
7.7M	.

$ genext2fs -b 8192 -d rootfs ramdisk
genext2fs: couldn't allocate a block (no free space)

报以上错是设置的8192的容量不够,所以按如下设置,执行后,正常生成ramdisk文件。

参数说明:-b是设置ramdisk的大小,单位是k。 -d是指定要制作成ramdisk的文件系统的源目录

$ genext2fs -b 12288 -d fs_mini_mdev ramdisk

此时会生成大小为12288*1024 byte的ramdisk文件,再进一步压缩成gzip文件,自动生成ramdisk.gz文件

$ gzip -9 -f ramdisk

$ cp ramdisk.gz /nfs_rootfs

四、使用ramdisk文件启动2440

1. 设置u-boot参数(另一种方法:在内核配置时设置一个固定的参数,不接收到u-boot的命令行参数,这样避免修改u-boot)

# setenv bootargs initrd=0x30800000,0xC00000 root=/dev/ram rw console=ttySAC0,115200 mem=64M init=/linuxrc

说明:本实验,准备将内核下载到0x30000000的地址,将ramdisk文件系统下载到0x30800000,所以此处initrd(rd:ramdisk的意思)的设置表示ramdisk的起始在0x30800000,大小是0xC00000=12M等于上面ramdisk制作时设置的12288k。

2. 下载内核和ramdisk到内存,并启动

# nfs 30800000 192.168.1.156:/nfs_root/ramdisk.gz ;nfs 30000000 192.168.1.156:/nfs_root/uImage ; bootm

……此处省略内核、文件系统下载相关信息的打印

## Booting image at 30000000 ...

   Image Name: Linux-2.6.22 Created: 2015-07-18 4:13:15 UTC

   Image Type: ARM Linux Kernel Image (uncompressed)

   Data Size: 1847748 Bytes = 1.8 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... OK

OK

Starting kernel ...Uncompressing Linux...................................................................................................................... done,

booting the kernel.Linux version 2.6.22 (xxx@xxx-virtual-machine) (gcc version 3.4.5) #2 Sat Jul 18 12:12:25 CST 2015

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

Machine: SMDK2440

Memory policy: ECC disabled, Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz

S3C24XX Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 setsBuilt 1 zonelists. Total pages: 16256

Kernel command line: initrd=0x30800000,0xC00000 root=/dev/ram rw console=ttySAC0,115200 mem=64M init=/linuxrc

……此处省略若干行

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 140K  【 注意:如果卡在此处,并打印Warning: unable to open an initial console.,请查看/dev/下是否有console和null两个设备节点(通常在ubuntu下操作设备节点文件时需要使用root权限,所以以非root用户在拷贝解压文件系统时,可能会不小心丢失这两个文件,所以如果没有需要手动创建】
init started: BusyBox v1.7.0 (2008-01-22 10:04:09 EST)
starting pid 764, tty '': '/etc/init.d/rcS'

starting pid 770, tty '/dev/s3c2410_serial0': '/bin/sh'
#

到此,ramdisk文件系统启动成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值