在2440上实现ramdisk文件系统
2015-07-18 18:11
337 查看
2. 安装arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
3. 文件系统,rootfs(之前制作好的)
$ make ARCH=arm CROSS_COMPILE=/home/vm/jz2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- menuconfig
选中<*> Second extended fs support:
2. 配置ramdisk有关选项
其中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的倍数。
报以上错是设置的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
# 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. 下载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文件系统启动成功。
相关文章推荐
- Linux 文件系统分区基础
- 背包九讲
- hdu 1711 Number Sequence(kmp)
- 关于C/S和B/S结构的比较
- hdu 1711 Number Sequence(kmp)
- 近期需要学习的OI知识点
- centos6.5用memcached 来作PHP 的session.save_handler
- 解题报告:人人都有极客精神
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- Ubuntu12.04安装Freescale LTIB环境
- BAT文件语法和技巧(bat文件的编写及使用)
- Ubuntu12.04安装Freescale LTIB环境