您的位置:首页 > 其它

在2440上实现ramdisk文件系统

2015-07-18 18:11 337 查看


一、准备工作

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文件系统启动成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: