img文件格式 linux,在linux下如何制作img的映像文件

一.为什么要做这样一个linux

我一直想做一个属于自己的小型的linux,但从网上搜索所得结果都是打造放在软盘中的linux,而且都是用lilo启动。很不幸,本人的笔记本没有软驱,所以这些也不适合自己。干脆自己做一个可从光盘启动并运行的linux。

二.Linux启动简介

系统加电后进入bios,随后读取硬盘的主引导记录(MBR),然后调用另一个引导程序(grub或lilo)来加载内核和镜像文件。加载内核后系统会把文件系统存放到ram中,然后系统运行。在这里我们使用grub来加载内核和镜像文件。

三.编译内核

我使用的linux 2.6 内核,详细编译内核方法可以从以下文章中得到,这里不再赘述。http://hi.baidu.com/lianxi1999/blog/item/95c782111f75a212b8127b03.html

四.编译busybox

busybox是一个集成了一百多个最常用linux命令和工具的软件,我的理解就是用来生成linux下的常用命令的小程序。把编译后的busybox程序放到我们的要做的系统中后,我们就能用一些linux下的常用命令了。

编译busybox与编译其他linux下的程序一样,首先下载busybox,我用的是1.0版。

#tar xvfz busybox-1.00.tar.gz        // 解开busybox

#cd busybox-1.00

#make menuconfig              //配置busybox

下面是需要编译进busybox的功能选项,其他的可以根据需要自己

General Configuration应该选的选项

Show verbose applet usage messages

Runtime SUID/SGID configuration via /etc/busybox.conf

Build Options

Build BusyBox as a static binary (no shared libs)

这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.

Installation Options

Don't use /usr

这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.

其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了.

配置好后退出并保存.

#make            //编译busybox

#make install        //安装busybox

编译好后在busybox目录下生成子目录_install,里面的内容:

bin

linuxrc -> bin/busybox

sbin

五.          制作文件系统 (这一步主要参http://blog.linuxmine.com/html/34/6534_itemid_861.html谢谢GuCuiwen)

这是比较麻烦的一步,我弄了好久,看了挺多网上的文章,但总是不对。

建一个目录rootfs 用来装文件系统

#mkdir etc usr var tmp proc home root dev        //建立文件目录

其中etc,proc和dev是一定要建的,bin和sbin可以拷贝busybox生成的,其他的可以象征性的建几个就可以了.

拷贝busybox下的_install文件夹到rootfs下

#cp -R busybox-1.00/_install/* rootfs/

在dev文件夹下建立设备文件名:

#cd rootfs/dev

为了方便我们直接从原系统的/dev目录下拷贝过来.一定要叫-r参数

#cp -R /dev/console ./

#cp -R /dev/null ./

#cp -R /dev/zero ./

...

其中,fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb,tty(这个GuCuiwen文章中没有,但我觉得要加)等是必备的.

其它的hda,hda1,hdb等可以根据实际需要决定.但是上表中的选择是比较合理的,即能满足大部分的需要,

建立etc目录下的配置文件

busybox.conf group inittab motd passwd resolv.conf shadow-

fstab init.d issue mtab profile shadow

其中init.d是一个目录,从busybox-1.00源代码目录下拷贝过来.

#cp -R busybox-1.00/examples/bootflopyp/etc/init.d        rootfs/etc/

把init.d拷过来后要更改其中的文件rcS:

请确保这个文件是可执行的,否则请改成可执行的:

#chmod u+x rcS

用记事本打开rcS的内容:

#! /bin/sh

mount -o remount,rw /

/bin/mount -a

>/etc/mtab

echo

echo

echo

echo

echo -en "\t\tWelcom to lxh Linux\\033][0;39m\n"

hostname LxhLinux

echo后面跟的都是系统可以自己作相应的修改.

busybox.conf是一个空文件.

其他文件的内容如下:

fstab

/dev/fd0 / ext2 defaults 0 0

none /proc proc defaults 0 0

/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0

/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0

group

root:0:root

inittab

::sysinit:/etc/init.d/rcS

::askfirst:/bin/sh

tty2::respawn:/bin/getty 38400 tty2

tty3::respawn:/bin/getty 38400 tty3

tty4::respawn:/bin/getty 38400 tty4

# Stuff to do when restarting the init process

::restart:/bin/init

# Stuff to do before rebooting

::ctrlaltdel:/bin/reboot

::shutdown:/bin/umount -a -r

::shutdown:/bin/swapoff -a

issue

Baby Linux release 0.1

motd

mtab

passwd

root::0:0:root:/root:/bin/ash

profile

# /etc/profile: system-wide .profile file for the Bourne shells

echo

echo

export PS1="[\u@\h \w]\$"

echo "Done"

alias ll='ls -l'

alias du='du -h'

alias df='df -h'

alias rm='rm -i'

echo

resolv.conf

nameserver 192.168.1.12

shadow

root1$$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:::

shadow-

root1$DWU.tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7:::

六.制作img映象文件

把上面的文件系统做成img映像文件,以便内核把它载入ram中

linux下有很多ram,我们用ram1,首先把ram1格式化成ext2文件系统

[root@gucuiwen babylinux]# mkfs.ext2 -m0 /dev/ram1

mke2fs 1.32 (09-Nov-2002)

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

1024 inodes, 4096 blocks

0 blocks (0.00%) reserved for the super user

First data block=1

1 block group

8192 blocks per group, 8192 fragments per group

1024 inodes per group

Writing inode tables: done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.

将ram1挂装到文件系统中:

先建立一个挂装点:

#mkdir /mnt/ram

挂上ram1:

#mount /dev/ram1 /mnt/ram

将先前做好的rootfs根文件系统拷贝到ram1上.

#cp –R rootfs/* /mnt/ram

拷贝好根文件系统后卸载ram1:

#umount /dev/ram1

再用dd把这个ram1以映象方式取出来:

[root@gucuiwen babylinux]# dd if=/dev/ram1 of=initrd.img

读入了 8192+0 个块输出了 8192+0 个块

把生成的initrd.img拷到一个地方备用

七.          制作grub启动光盘

首先下载grub安装文件,我下的是0。96版的grub。

tar zxvf grub-0.95.tar.gz        //解开grub

cd grub-0.95

./configure

make

make install

好了,grub安装完成。安装完成后得到了最重要的stage2_eltorito 我们把它拷出来备用。

现在开始制作启动光盘:

mkdir iso        建立iso文件夹,我们把所要的文件拷进这个文件夹

mkdir -p iso/boot/grub

cp /stage2_eltorito所在的路径/stage2_eltorito iso/boot/grub 把stage2_eltorito文件拷入grub文件夹中

cp /boot/grub/menu.lst iso/boot/grub

cp /boot/grub/grub.conf iso/boot/grub

把grub所用的启动文件grub.conf,menu.lst 拷入grub文件夹

下面我们更改menu.lst中的内容

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You do not have a /boot partition. This means that

#            all kernel and initrd paths are relative to /, eg.

#            root (hd0,0)

#            kernel /boot/vmlinuz-version ro root=/dev/hda1

#            initrd /boot/initrd-version.img

#boot=/dev/hda

default=1

timeout=10

title I love lxh ^_^        //显示在选项上的标题

root (cd)

kernel /boot/grub/vmlinuz-2.6.20 ro root=/dev/ram0

initrd /boot/grub/initrd.img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值