Ramdisk文件系统制作

来源:互联网 发布:小猪微信cms源码 编辑:程序博客网 时间:2024/05/07 23:35

Ramdisk文件系统制作

 

ramdisk 制作全过程

 

1 建立根文件系统结构

 

#mkdir rootfs

 

#cd rootfs

 

#mkdir bin dev etc lib proc sbin tmp usr var

 

#chmod 1777 tmp

 

#mkdir usr/bin usr/lib usr/sbin

 

#mkdir var/lib var/lock var/log var/run var/tmp

 

#chmod 1777 var/tmp

 


2 准备链接库

 

#cd ${OBJ_LIB}/lib (${OBJ_LIB}是交叉编译环境的目录)

 

#for file in libc libcrypt libdl libm /

 

>libpthread libresolv libutil

 

>do

 

>cp $file-*.so /home/fortis/rootfs/lib

 

>cp -d $file.so.[*0-9] /home/fortis/rootfs/lib

 

>done

 

#cp -d ld*.so* /home/fortis/rootfs/lib

 


3 使用busybox制作系统应用程序

3.1 下载busybox(http://www.busybox.net/)并解压。
3.2 进入解压后的目录,配置Busybox
$make menuconfig
Busybox Settings >
General Configuration >
[*] Support for devfs
Build Options >
[*] Build BusyBox as a static binary (no shared libs)

[*] Do you want to build BusyBox with a Cross Compiler?
(/usr/local/arm/3.3.2/bin/armlinux)
Cross Compiler prefix
Init Utilities >

[*] init
[*] Support reading an inittab file

Shells >
Choose your default shell (ash) >

[*] ash
Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo (basic SuSv3 version taking no options)
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch
Editors >
[*] vi
Linux System Utilities >
[*] mount
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file
Networking Utilities >
[*] inetd

3.3 编译并安装Busybox
$make TARGET_ARCH=arm CROSS=armlinux/
PREFIX=/home/arm/dev_home/rootfs/my_rootfs/ all install
PREFIX指明安装路径:就是我们根文件系统所在路径。

 

4 准备所需的设备文件

 

可以直接拷贝宿主机上的,或者自建几个就是。

 

#cd rootfs/dev

 

#mknod -m 600 console c 5 1

 

5 创建linuxrc文件
内容如下:
$ vim rootfs/linuxrc
#!/bin/sh

echo "Hello linux ,gggggg"

exec /sbin/init
然后修改权限:chmod 775 linuxrc

6 制作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 rootfs/* initrd

 

#umount

 

#gzip -9 initrd.img



 

内核启动时遇到的问题:
-----------------------------------------------
“could not run '/bin/sh': No such file or directory”

解决方法:
要这样配置:
Shells --->   
    Choose your default shell (ash) --->     

如果是这样配置的话,虽然可以生成ash,但不能生成sh,将会在内核启动时出现上面出现的问题:
Shells --->   
    Choose your default shell (none) --->
[*] ash 

 

 

Busybox不能使用Ctrl+c结束当前进程

我用的busybox是1.2.2.1,编译器是3.3.2,make menuconfig后在Init Utilities中选中support running commands  with a controlling tty即可啦。。哈哈。
我看了1.1.3版本里也有这个选项。在1.00-pre版本里就没,估计老版本的就要修改源码啦。

 

Busybox命令行提示,在make menuconfig中shell中有相关如cmd history saving    Tab completion 等,选中即可。

 

如果想要添加insmod和rmmod命令,在添加时必须去掉对2.4内核支持的选项(和insmod 和 rmmod 在同一个菜单下),否则编译时会报错。