Linux作業系統下如何製作Image映像檔案

來源:互聯網
上載者:User
文章目錄
  • Linux作業系統下如何製作Image映像檔案
Linux作業系統下如何製作Image映像檔案http://os.51cto.com  2007-09-04 10:50  metallica  賽迪網  我要評論(0)
  • 摘要:我一直想做一個屬於自己的小型的linux,但從網上搜尋所得結果都是打造放在磁碟片中的linux,而且都是用lilo啟動。很不幸,本人的筆記本沒有軟碟機,所以這些也不適合自己。乾脆自己做一個可從光碟片啟動並啟動並執行linux。
  • 標籤:Linux  Image  映像檔案  dd

◆一.為什麼要做這樣一個Linux

我一直想做一個屬於自己的小型的linux,但從網上搜尋所得結果都是打造放在磁碟片中的linux,而且都是用lilo啟動。很不幸,本人的筆記本沒有軟碟機,所以這些也不適合自己。乾脆自己做一個可從光碟片啟動並啟動並執行linux。

看你想將rh_linux.img做成什麼樣子。如果是檔案系統的話,那麼你需要這麼作:

dd if=/dev/zero of=rh_linux.img count=CONTS

參數count表示需要建立的檔案大小(以塊為單位,每塊大小為512位元組,如果rh_linux.img大小為1M,則CONTS=2000).

建立完成rh_linux.img以後,需要使用檔案系統工具(mkfs.ext2、mkfs.ext3、mkfs.jffs2等)格式化它(例如: mkfs.ext3 rh_linux.img);接下來使用:mount -o loop MDIR rh_linux.img將鏡象檔案掛載到目錄MDIR下,將boot.bin拷貝進去就可以了。

◆二.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/shmount -o remount,rw //bin/mount -a>/etc/mtabechoechoechoechoecho -en "\t\tWelcom to lxh Linux\\033][0;39m\n"hostname LxhLinux

echo後面跟的都是系統可以自己作相應的修改.

busybox.conf是一個空檔案.

其他檔案的內容如下:

fstab/dev/fd0 / ext2 defaults 0 0none /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 0grouproot:0:rootinittab::sysinit:/etc/init.d/rcS::askfirst:/bin/shtty2::respawn:/bin/getty 38400 tty2tty3::respawn:/bin/getty 38400 tty3tty4::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 -aissueBaby Linux release 0.1motdmtabpasswdroot::0:0:root:/root:/bin/ashprofile# /etc/profile: system-wide .profile file for the Bourne shellsechoechoexport PS1="[\u@\h \w]\$"echo "Done"alias ll='ls -l'alias du='du -h'alias df='df -h'alias rm='rm -i'echoresolv.confnameserver 192.168.1.12shadowroot1$$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

要更改的內容我用紅色表示了,cd表示從光碟機啟動,/boot/grub/vmlinuz-2.6.20表示核心檔案vmlinuz-2.6.20在光碟片上存放的路徑,/dev/ram0表示根檔案目錄的位置,由於我們是從光碟片啟動,啟動時所有檔案系統都拷入了ram,所以這裡我們從ram0啟動。 /boot/grub/initrd.img是我們上一步我們做的鏡像檔案存放在光碟片的位置

◆八,整合,燒錄

下面我們把所製作的檔案全部整合在一起

iso-》boot -》grub -》grub.conf

iso-》boot -》grub -》menu.lst

iso-》boot -》grub -》stage2_eltorito

iso-》boot -》grub -》vmlinuz-2.6.20

iso-》boot -》grub -》initrd.img

vmlinuz-2.6.20,和 initrd.img可以不放在這裡,若更改了存放路徑則grub.conf中也要更改。

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso

////這步的意思是把iso檔案夾中的內容做成一個鏡像,-b參數是表示做一個啟動盤 ,其他的東西我也不太明白,如果哪位高手知道-no-emul-boot -boot-load-size 4 -boot-info-table是什麼意思希望mail我。

好了,現在grub.iso就是你所需要的鏡像了,我們可以先放到虛擬機器的光碟機中看看它是不是能夠引導系統。如果不能仔細檢查沒一步。注意 grub.iso不能用winiso製作,原因好像是winiso做的iso檔案缺少了光碟片資訊。但我們可以用demotools載入grub.iso檔案,然後用全盤複製的方式燒錄一張光碟片linux。

◆九,這裡我們用grub來引導,用lilo是一樣的,只是設定檔不同而已,網上關於lilo的文章很多。

◆十:關於ram

製作過程中關於ram我很迷惑,現在我的理解是電腦把一部分記憶體類比成磁碟,所以我們可以對這部分記憶體進行格式化。這個格式化一個真正的磁碟是一樣的,但是由於這畢竟是虛擬,所以其中的資料掉電後就會消失。這部分記憶體就叫ram。

【責任編輯:絕對無奈 TEL:(010)68476606-8003】
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.