




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、linux操作系統(tǒng)版本,基于x86的小型內(nèi)存linux*作系統(tǒng)日期:2010-3-25 13:20:0 發(fā)布:admin 發(fā)所屬類別:系統(tǒng)錯誤 瀏覽次數(shù):8 摘要: X86、LiveCD、LiveUSB 由于工作需要,最近花了點(diǎn)時間真正研究了一下如何純*工制作一個Linux系統(tǒng)。雖然以前也曾用gentoo、lfs等成功制作過Linux系統(tǒng),但那都是觀著別人的教程一步步完成的,雖然成功了,但自己總覺得東西還是別人的,沒有真正變成自己的知識。其次,像gentoo與lfs都是教你如何制作一個通用的Linux*作系統(tǒng),此系統(tǒng)過于龐大,對于一個專用系統(tǒng)來說,不需要如此龐大的系統(tǒng),特別是要求系統(tǒng)要完全運(yùn)行
2、于內(nèi)存中時,更不能過于龐大。鑒于此,通過*工完全制作一個Linux系統(tǒng)是唯一的方法。好比在ARM、MIPS、POWERPC等平臺下的嵌滲入滲出式Linux一樣?,F(xiàn)在我需要做的是一個類似的,X86小型專用化的Linux。 早就想做一個這樣的系統(tǒng),但網(wǎng)上一直沒有找到*的教程,所以我也沒有方向,也就沒有動*做。但今天到了必需要用的時候了,我只能硬著頭皮上,從零開始,自己制作。但也不是完全的沒有參考,在網(wǎng)上找到些資料,關(guān)于用busybos做LiveCD與熟悉initramfs的文章都寫的非常好,謝謝這些輩們的積累。在這里,我把這篇文章獻(xiàn)給跟我面對同樣問題的朋友和想對Linux*作有更深滲透了解的朋友。
3、 這里我們來點(diǎn)知識預(yù)習(xí),以下內(nèi)容部分來自于網(wǎng)絡(luò)。 1 熟悉ramfs、initramfs、ramdisk 講到內(nèi)存Linux系統(tǒng),那就離不開ramfs、initramfs、ramdisk,為了選擇更好的方式,我們首先來認(rèn)識這三種文件系統(tǒng)的不同與相同之處。 1.1了解ramfs ramfs直接利用了內(nèi)核的磁盤高速緩存機(jī)制。所有的文件的讀寫數(shù)據(jù)都會在內(nèi)存中做高速緩存(cache,當(dāng)系統(tǒng)再次使用文件數(shù)據(jù)時,可以直接從內(nèi)存中讀寫,以提供系統(tǒng)的I/O性能。高速緩存中的寫滲入滲出數(shù)據(jù)會在適當(dāng)?shù)臅r候回寫到對應(yīng)的文件系統(tǒng)設(shè)備(如磁盤等中,這時它的狀態(tài)就標(biāo)識為clean,這樣系統(tǒng)在必要時可以釋放掉這些內(nèi)存。ra
4、mfs沒有對應(yīng)文件系統(tǒng)設(shè)備,所以它的數(shù)據(jù)永遙都不會回寫往返去,也就不會標(biāo)識為clean,因此系統(tǒng)也永遙不會釋放ramfs所占用的內(nèi)存。 1.2 了解initramfs Initramfs是ramfs的一種,在2.6版本之后的linux內(nèi)核中,都包*一個壓縮過的cpio格式的打包文件。當(dāng)內(nèi)核啟動時,會從這個打包文件中導(dǎo)出文件到內(nèi)核的rootfs文件系統(tǒng),然后內(nèi)核檢查rootfs中是否包*有init文件,如果有則執(zhí)行它,作為PID為1的第一個*。這個init*負(fù)責(zé)啟動系統(tǒng)后續(xù)的工作,包括定位、掛載“真正的”根文件系統(tǒng)設(shè)備(如果有的話。如果內(nèi)核沒有在rootfs中找到init文件,則內(nèi)核會按以前版本
5、的方式定位、掛載根分 區(qū),然后執(zhí)行/sbin/init程序完成系統(tǒng)的后續(xù)初始化工作。 這個壓縮過的cpio格式的打包文件就是init ramfs。編譯2.6版本的linux內(nèi)核時,編譯系統(tǒng)總會創(chuàng)建init ramfs,然后把它與編譯好的內(nèi)核連接在一起。內(nèi)核源代碼樹中的usr目錄就是專門用于構(gòu)建內(nèi)核中的init ramfs的,其中的ini tramfs_data.cpio.gz文件就是init ramfs。缺省情況下,init ramfs是空的,X86架構(gòu)下的文件大小是134個字節(jié)。 1.3 了解ramdisk RamDisk也就是內(nèi)存盤的意思。所謂的RAM驅(qū)動器是在一塊內(nèi)存區(qū)域中創(chuàng)建的塊設(shè)備,
6、用于存放文件系統(tǒng)。ramdisk的容量是創(chuàng)建的時候就固定的。ramdisk需要內(nèi)核的文件系統(tǒng)驅(qū)動程序(如ext2來*作其上的數(shù)據(jù)。對于*作系統(tǒng)來講內(nèi)存的存取速度遠(yuǎn)遙大于機(jī)械磁盤,所以RAM驅(qū)動器肯定要比機(jī)械的硬盤快得多。你可以把整個應(yīng)用程序都安裝在RamDisk的驅(qū)動器中,然后用內(nèi)存的速度運(yùn)行它。 2 了解Linux*作系統(tǒng)夠成 簡單地說,Linux是一套免費(fèi)使用和*傳播的類Unix*作系統(tǒng),這個系統(tǒng)是由世界各地的成千上萬的程序員設(shè)計和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能*使用的Unix兼容產(chǎn)品。 平常我們所說的Linux系統(tǒng)只是指的系統(tǒng)的內(nèi)核,用內(nèi)核代表了整個Lin
7、ux*作系統(tǒng),嚴(yán)格的來說,所有能供計算機(jī)使用的Linux*作系統(tǒng)應(yīng)該鳴GNU/Linux。這是為什么呢?因?yàn)?作系統(tǒng)軟主要分為三大塊(啟動引導(dǎo)器、內(nèi)核、根文件系統(tǒng)),缺少任何一塊都是無法正常使用的。而這每一部分所使用的軟件,都是世界上無數(shù)開源愛好者們花了無數(shù)心血*出來的。 2.1 什么是啟動引導(dǎo)器 所謂啟動引導(dǎo)器是指計算機(jī)加電后,完成了CMOS自檢,然后運(yùn)行的第一個程序。此程序是保存在磁盤等物理介質(zhì)的MBR上。該程序用來引導(dǎo)真正的*作系統(tǒng)的啟動。比如現(xiàn)在最常使用的grub、lilo、uboot、syslinux等都是啟動引導(dǎo)器。 2.2 內(nèi)核 每一個*作系統(tǒng)必有一個內(nèi)核,平常所說的Linux嚴(yán)
8、格的是指內(nèi)核,現(xiàn)在最新版本的內(nèi)核已經(jīng)發(fā)展到2.6.31了,相信大家對Linux內(nèi)核應(yīng)該很認(rèn)識了,不認(rèn)識的話,可以觀觀相關(guān)書,在這里我就不多說了。 2.3 根文件系統(tǒng) 根文件系統(tǒng)顧名思義就是Linux*作系統(tǒng)的根,若要運(yùn)行一個Linux*作系統(tǒng),除了需要內(nèi)核以外,還需要另外一個重要的部分根文件系統(tǒng)。根文件系統(tǒng)是一個存放系統(tǒng)運(yùn)行時必需文件(例如系統(tǒng)配置文件、設(shè)備文件、應(yīng)用程序等)和存儲數(shù)據(jù)文件的外部設(shè)備。系統(tǒng)引導(dǎo)完成后,就會啟動根文件系統(tǒng)里存放的用戶態(tài)程序(如init是內(nèi)核啟動完成后運(yùn)行的第一個用戶態(tài)程序),接著把*作權(quán)交給用戶態(tài),來*用戶的各種應(yīng)用。 根文件系統(tǒng)可以在磁盤 上,也可以在內(nèi)存里運(yùn)行
9、。 3 開始*工制作Linux*作系統(tǒng) 我們將分以下幾步來講解此小巧的內(nèi)存Linux*作系統(tǒng)的制作: 1)完全在內(nèi)存中運(yùn)行的小型Linux系統(tǒng),根文件系統(tǒng)存放在硬盤里,運(yùn)行在內(nèi)存。 2)光盤啟動的Linux*作系統(tǒng),俗稱LiveCD,根文件系統(tǒng)及內(nèi)核存于光盤,運(yùn)行在內(nèi)存。 3)USB啟動的Linux*作系統(tǒng),根文件系統(tǒng)及內(nèi)核存于U盤,運(yùn)行在內(nèi)存。 3.1 啟動引導(dǎo)器 在這里,我們在一臺已經(jīng)安裝好GRUB啟動引導(dǎo)器的PC機(jī)上做實(shí)驗(yàn),稍后章節(jié)我將繼續(xù)講解如何使用及安裝其它引導(dǎo)器來引導(dǎo)Linux內(nèi)核。如做LiveCD用isolinux來引導(dǎo),做USBLinux就用syslinux和extlinux來
10、引導(dǎo)(這兩個引導(dǎo)器的區(qū)別稍后再講)。 注:在完成后續(xù)內(nèi)容前需要有GRUB的使用基礎(chǔ),若GRUB的基本使用都還沒有認(rèn)識的話,我建議先認(rèn)識Linux基礎(chǔ)知識,然后再學(xué)習(xí)*動制作Linux,最好要有成功完過LFS的*,朋友,學(xué)習(xí)東西不要心急,萬丈高樓平地起啊萬事都是先易后難。 若有一定基礎(chǔ),并且又對Linux*動制作不認(rèn)識的話,請往后看,接著我將為你*Linux系統(tǒng)制作的神秘面紗。 3.2 磁盤* 預(yù)做Linux系統(tǒng),最好獨(dú)立一個磁盤分區(qū)用來存放制作的東西。這僅僅是個建議,比較認(rèn)識的朋友,可以不需要這個獨(dú)立分區(qū)。但新*我還是建議搞個獨(dú)立分區(qū)較*。 先使用fdisk來分一個可用的分區(qū),大小要求不高,4
11、GB的空間足夠了。 -rootlocalhost -# fdisk l 如上圖示,我在這里采用/dev/sdb6作為我的新系統(tǒng)的工作區(qū)。我用的是vmware虛擬機(jī)平臺,宿主機(jī)*作系統(tǒng)是Debian502,在該虛擬機(jī)下,我添加了兩塊虛擬磁盤,一塊sdb專門用來做系統(tǒng)制作之用。 格式化分區(qū),以下命令將sdb6分區(qū)格式成ext3文件系統(tǒng): -rootlocalhost -# mke2fs -j /dev/sdb6 掛載分區(qū): -rootlocalhost -# cd /mnt/ -rootlocalhost mnt-# mkdir sdab6 -rootlocalhost mnt-# mount -
12、vt ext3 /dev/sdb6 sdb6 /dev/sdb6 on /mnt/sdb6 type ext3 (rw -rootlocalhost mnt-# cd sdab6 好了,到目前為止,前期*工作已經(jīng)完成,下面將正式*主題。我們*第一步:運(yùn)行于磁盤的小型Linux系統(tǒng)。 3.3 從磁盤啟動的小型內(nèi)存Linux系統(tǒng) 在本文中我主要講解采用ramdisk的根文件系統(tǒng)方式來舉例講解制作小型內(nèi)存系統(tǒng)。 1.3.1 建立ramdisk鏡像文件 命令 -rootlocalhost sdb6-# dd if=/dev/zero of=initrd.img bs=1M count=96 此命令用來
13、創(chuàng)建大小為96M的鏡像文件。 關(guān)于dd命令的用法,請查閱相關(guān)*冊,Linux的dd命令提供了強(qiáng)大的文件、磁盤備份等功能,當(dāng)然不僅限于此。 我所建立的initrd.img文件相當(dāng)于一個塊設(shè)備的鏡像文件,我們可以對它入行格式化,建立文件系統(tǒng),像*作磁盤一樣*作它。 3.3.2格式化此鏡 像文件 -rootlocalhost sdb6-# mke2fs -F initrd.img 上述命令是將在此文件中創(chuàng)建ext2文件系統(tǒng)。 *掛載該文件系統(tǒng)像像 -rootlocalhost sdb6-# mkdir initrd boot -rootlocalhost sdb6-# mount -o loop i
14、nitrd.img initrd -rootlocalhost sdb6-# cd initrd/ -rootlocalhost initrd-# ls lost found 我們觀到,已經(jīng)成功掛載了此文件系統(tǒng)鏡像。 3.3.3建立根文件系統(tǒng)目錄樹 Linux根文件系統(tǒng)目錄樹有一個標(biāo)準(zhǔn),在此我就不按標(biāo)準(zhǔn)建立了,因?yàn)槲乙龅腖inux*作系統(tǒng)是一個小型化的X86嵌滲入滲出式Linux系統(tǒng),精簡了多余對目錄,感*的朋友可以去網(wǎng)上找相關(guān)Linux根文件系統(tǒng)的目錄樹標(biāo)準(zhǔn)的文檔來閱讀。 -rootlocalhost initrd-# mkdir -pv bin dev etc home mnt proc
15、 root sbin sys tmp -rootlocalhost initrd-# mkdir -pv lib/modules usr/lib,bin,sbin var boot -rootlocalhost initrd-# ls bin dev etc home lib mnt proc root sbin sys tmp usr var boot 在此就不再講解目錄樹各目錄的*義了,有*的朋友可以在網(wǎng)上查,資料很多。 3.3.4 Linux內(nèi)核* 我在這里是使用的Linux-2.6.24版本的內(nèi)核,可以在上下載此內(nèi)核的源代碼。 入行內(nèi)核樹目錄:
16、-rootlocalhost -# cd /usr/src/linux-source-2.6.24/ 先入行一下清理 -rootlocalhost linux-source-2.6.24-# make clean 配置內(nèi)核 -rootlocalhost linux-source-2.6.24-# make menuconfig 按照你的需要,入行內(nèi)核的配置,在此我就不多說,關(guān)于Linux配置方面的知識,可以寫成一大本書羅。在此我只強(qiáng)調(diào)一點(diǎn),磁盤支持(根文件系統(tǒng)運(yùn)行于硬盤的時候需要此選項(xiàng)的支持,在內(nèi)存中運(yùn)行不需要)與文件系統(tǒng)(如ext2、ext3、jfs等)支持最好配置成編譯成內(nèi)核。這樣在后面的
17、步驟中才不會遇到麻煩。 注:在此需要的基礎(chǔ)知識是對Linux內(nèi)核的編譯與裁剪要較認(rèn)識,否則可能會碰到很多想不到的問題。 配置完成后,即開始編譯: -rootlocalhost linux-source-2.6.24-# make 2.6內(nèi)核編譯比較簡單,只需要輸滲入滲出make就可以自動完成所有編譯工作。 一個漫*的等待啊.機(jī)器性能強(qiáng)點(diǎn)的及配置選擇少的,可能編譯的會快很多,否則需要一個多小時時間來編譯。休息一會兒! 好了,內(nèi)核終于編譯完了,復(fù)制必需的文件到我們的目標(biāo)文件系統(tǒng)中。 -rootlocalhost linux-source-2.6.24-# mkdir ./modules_tmp -
18、rootlocalhost linux-source-2.6.24-# make INSTALL_MOD_PATH=/usr/src/modules_tmp/ modules_install -rootlocalhost linux-source-2.6.24-# cd ./modules_tmp/ -rootlocalhost modules_tmp-# cd lib/modules/ 俺滴內(nèi)核小版本定的是MiniLinux-12。 復(fù)制內(nèi)核模塊到指定目錄 -rootlocalhost modules-# cp -Rfva 2.6.24-MiniLinux-12 /mnt/sdb6/init
19、rd/lib/modules/ *到內(nèi)核目錄樹,復(fù)制內(nèi)核鏡像文件到指定目錄 -rootlocalhost linux-source-2.6.24- # cp -v arch/x86/boot/bzImage /mnt/sdb6/boot/ 好了,到此為止,內(nèi)核已經(jīng)*好了,接下來需要做根文件系統(tǒng)了。 3.3.5根文件系統(tǒng)制作 因?yàn)槭侵谱餍⌒突腖inux系統(tǒng),所以在此,我采用busybox來制作根文件系統(tǒng)。因?yàn)樗浅5男∏伞? 什么是busybox busybox號稱是嵌入式Linux中的瑞士軍刀小巧、功能齊全。它把許多常用的Linux命令都集成到一個單一的可執(zhí)行程序中,只用這一個
20、可執(zhí)行程序(即busybox加上Linux內(nèi)核就可以構(gòu)建一個基本的Linux系統(tǒng)。busybox程序非常小巧,包*全部命令可執(zhí)行文件大小也只有幾百K。busybox是完全模塊化的,可以很容易地在編譯時*、刪除其中包*的命令。 由于busybox的這些特點(diǎn),它廣泛應(yīng)用于LiveCD、應(yīng)急修復(fù)盤、安裝盤等系統(tǒng)中。我們也是以它為基礎(chǔ),小型X86嵌滲透式Linux系統(tǒng)。 busybox的官方最新*版本是1.15.2,基于俺滴習(xí)慣,我一般不會采用最新版本的來使用。所以我選擇1.15.1版本。 從官方網(wǎng)站上 編譯busybox 解壓軟件包 -rootlocalhost build-# ta
21、r -xjvf ./source/busybox-1.15.1.tar.bz2 -rootlocalhost build-# cd busybox-1.15.1/ -rootlocalhost busybox-1.15.1-# make menuconfig 配置安裝目錄: Busybox Settings -> Installation Options -> -*- Don-t use /usr 選中此選項(xiàng)。 (./_install BusyBox installation prefix 此選項(xiàng)說明安裝的目錄。 其它的配置安你的個人需要而定,但一定要選擇init及shell的支持
22、,其實(shí)用默認(rèn)配置完全可以。 配置完成之后即開始編譯: -rootlocalhost busybox-1.15.1-# make 大概幾分鐘后就可以編譯完成,我個人是比較佩服busybox的作者的,他為我們提供了一個這么好的東西,真是太好了。 編譯完成之后,即可以安裝了,這個安裝只是一個虛擬安裝,會安裝在當(dāng)前目錄下的_install目錄里,你只需要把這里面的文件復(fù)制到你需要的地方即可。 -rootlocalhost busybox-1.15.1-# make install -rootlocalhost busybox-1.15.1-# cd _install 觀觀,它的東西真是少,也非常的小巧
23、,僅占660K的空間。 復(fù)制所需要的文件 -rootlocalhost _install-# cp -Rfva bin/* /mnt/sdb6/initrd/bin/ -rootlocalhost _install-# cp -Rfva sbin/* /mnt/sdb6/initrd/sbin/ -rootlocalhost _install-# cd /mnt/sdb6/initrd/bin 查觀busybox需要的動態(tài)鏈接庫 -rootlocalhost bin-# ldd busybox linux-gate.so.1 => (0xffffe000 libm.so.6 =>
24、/lib/i686/cmov/libm.so.6 (0xb7f55000 libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dfa000 /lib/ld-linux.so.2 (0xb7f82000 通過此命令可以觀到,busybox需要以上幾個庫libm.so.6、libc.so.6、ld-linux.so.2 復(fù)制此庫文件到指定目錄 -rootlocalhost bin-# cp -v /lib/libm.so.6 ./lib/ -rootlocalhost bin-# cp -v /lib/l ibc.so.6 ./lib/ -rootlocal
25、host bin-# cp -v /lib/ld-linux.so.2 ./lib/ -rootlocalhost bin-# cd . 必要/etc目錄文件配置 在根文件系統(tǒng)里的/etc目錄是有幾個文件是必不可少的: fstab、mtab、passwd、shadow、group、hostname、inittab、passwd、profile 有些文件可以借用宿主機(jī)的 -rootlocalhost initrd-# cd etc -rootlocalhost etc-# cp -v /etc/passwd* . -rootlocalhost etc-# cp -v /etc/g
26、roup* . -rootlocalhost etc-# cp -v /etc/shadow* . 創(chuàng)建fstab文件 -rootlocalhost etc-# vi fstab 在此文件中寫滲透如下內(nèi)容: proc /proc proc defaults 0 0 devfs /dev tmpfs defaults,size=512K 0 0 sysfs /sys sysfs defaults,size=1M 0 0 寫滲入滲出完成后,保存并退出。 創(chuàng)建profile文件 -rootlocalhost etc-# vi profile 寫滲入滲出以下內(nèi)容: if - "id -u&q
27、uot; -eq 0 -; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/us r/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin" fi u=whoami if - "$PS1" -; then if - "$BASH" -; then PS1=-$uh W-$ - else if - "id -u" -eq 0 -; then PS1=-# - else PS1=-$
28、- fi fi fi export PATH alias ll=-ls -l- alias la=-ls -A- alias l=-ls -CF- umask 022 創(chuàng)建hostname文件 -rootlocalhost etc-# touch hostname -rootlocalhost etc-# echo “l(fā)ocalhost” > hostname 創(chuàng)建重要文件:啟動腳本inittab Linux內(nèi)核的初始化完成之后,運(yùn)行的用戶態(tài)第一個程序就是/sbin/init,而init程序即會按照/etc/inittab的配置來依次執(zhí)行。以下我會創(chuàng)建此文件,并對此文件進(jìn)行簡單講解。 -
29、rootlocalhost etc-# vi inittab 寫滲入滲出如下內(nèi)容: :sysinit:/etc/init.d/rcS #指定系統(tǒng)初始化腳本 tty1:respawn:/sbin/getty 38400 tty1 #激活終tty1登錄,采用getty方式 tty2:respawn:/sbin/getty 38400 tty2 #激活終tty2登錄 :ctrlaltdel:/bin/umount -a r #按下Ctrl Shift Del鍵發(fā)生的* busybox的inittab文件格式說明: 要寫自己的inittab,需要理解busybox的inittab文件格式。 busyb
30、ox的inittab文件與通常的inittab不同,它沒有runlevel的概念,語句功能上也有限制。inittab語句的標(biāo)準(zhǔn)格式是 : 各字段的*義如下 : id字段與通常的inittab中的*義不同,它代表的是這個語句中process執(zhí)行所在的tty設(shè)備,內(nèi)容就是/dev目錄中tty設(shè)備的文件名。由于是運(yùn)行process的tty設(shè)備的文件名,所以也不能象通常的inittab那樣要求每條語句id的值唯一。 : busybox不支持runlevel,所以此字段完全被忽略。 : 為下列這些值之一: sysinit, respawn, askfirst, wait,once, restart, c
31、trlaltdel, shutdown 其*義與通常的inittab的定義相同。特別提一下askfirst,它的*義與respawn相同,只是在運(yùn)行process前,會打出一句話“please press Enter to active this console”,然后等用戶在終端上敲滲入滲出來回車鍵后才運(yùn)行process 。 : 指定要運(yùn)行的process的命令行。 創(chuàng)建重要文件:啟動腳本rcS -rootlocalhost etc-# mkdir init.d/ -rootlocalhost etc-# cd init.d/ -rootlocalhost init.d-# vi rcS 寫
32、入以下幾行: #! /bin/sh /bin/mount -a #按照/etc/fstab的配置來掛載文件系統(tǒng) /sbin/mdev -s #建立設(shè)備文件,以后會講采用udev來入行設(shè)備創(chuàng)建及管理 /bin/hostname -F /etc/hostname #獲取主機(jī)名 文件創(chuàng)建完畢后別忘了對rcS加上可執(zhí)行文件的權(quán)限。 -rootlocalhost init.d-# chmod 755 rcS OK,到目前為止,/etc目錄的主要文件配置完成。是不是很簡單? 接著要創(chuàng)建必需的幾個設(shè)備文件了。 創(chuàng)建必要設(shè)備文件 我們可以通過從宿主機(jī)復(fù)制幾個重要設(shè)備文件。 -rootlocal
33、host etc-# cd ./dev/ -rootlocalhost dev-# cp -Rfva /dev/null . -rootlocalhost dev-# cp -Rfva /dev/console . -rootlocalhost dev-# cp -Rfva /dev/zero . -rootlocalhost dev-# cp -Rfva /dev/ram0.5 . 好了,到此為止,基本上萬事具備,只欠東風(fēng)了。但測試之前,還需要做一件事情,我們更換busybox里的shell程序,busybox里的shell功能太少了。在此,我們采用bash bash的統(tǒng)計安
34、裝 從/software/bash/這個網(wǎng)站上下載源碼包, /gnu/bash/bash-3.2.48.tar.gz 解壓編譯: -rootlocalhost bash-3.2.48-# ./configure -prefix=/tmp/bash -rootlocalhost bash-3.2.48-# make -rootlocalhost bash-3.2.48-# make install -rootlocalhost bash-3.2.48-# cd /tmp/bash/bin -rootlocalhost bash-
35、# rm -rf /mnt/sdb6/initrd/bin/bash -rootlocalhost bash-# cp -v bash /mnt/sdb6/initrd/bin/ -rootlocalhost bash-# cd /mnt/sdb6/initrd/bin/ -rootlocalhost bin-# ls -l bash 查觀bash需要哪些動態(tài)鏈接庫文件: -rootlocalhost bin-# ldd bash linux-gate.so.1 => (0xffffe000 libncurses.so.5 => /lib/libncurses.so.5 (0xb7
36、f5c000 libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7f58000 libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dfc000 /lib/ld-linux.so.2 (0xb7f95000 需要libncurses.so.5、libdl.so.2、libc.so.6、ld-linux.so.2文件?;緇ibc.so.6、ld-linux.so.2兩個庫文件之前已經(jīng)有了,現(xiàn)在只需要復(fù)制libncurses.so.5、libdl.so.2兩個文件即可。 -rootlocalhost bin-#
37、cp -v /lib/libncurses.so.5 ./lib/ -rootlocalhost bin-# cp -v /lib/libdl.so.2 ./lib/ 建立sh文件鏈接 -rootlocalhost bin-# rm -rf sh -rootlocalhost bin-# ln -s bash sh -rootlocalhost bin-# ls -l sh lrwxrwxrwx 1 root root 4 2009-10-23 10:21 sh -> bash -rootlocalhost bin-# cd . 若發(fā)現(xiàn)bash很大,可以用strip來去掉無用的東西來縮小
38、它。 -rootlocalhost initrd-# strip bash 好了,到目前為止,具備啟動使用的工作都做好了,我們?nèi)胄幸幌潞唵蔚臏y試。 -rootlocalhost initrd-# chroot . 如上圖示,我們chroot新的文件系統(tǒng)了。 bash-3.2# source etc/profile 然后 就變成了 出現(xiàn)下圖,說明文件系統(tǒng)工作正常 OK,測試成功,現(xiàn)在我們可以入行啟動測試了。 -rootlocalhost /-# exit -rootlocalhost initrd-# cd . 卸載initrd.img的掛載。 -rootlocalhost sdb6-# umo
39、unt initrd/ 生成gzip的壓縮鏡像。 -rootlocalhost sdb6-# gzip -9 initrd.img 復(fù)制根文件系統(tǒng)到啟動目錄: -rootlocalhost sdb6-# cp initrd.img.gz boot/initrd.gz 現(xiàn)在boot目錄的東西如下圖所示: 好了,辛勞了這么久,激動人心的時刻到了,下面就是檢驗(yàn)我們成功與否一步了系統(tǒng)引導(dǎo)啟動測試。 3.3.6系統(tǒng)引導(dǎo)啟動 重新啟動當(dāng)前的虛擬機(jī): -rootlocalhost boot-# reboot 虛擬機(jī)停到如圖所示的位置后,鍵盤上按下“c”,*到GRUB的交互式*,如下圖示: 輸滲透命令: gr
40、ub> root (hd1,5 grub> kernel /boot/bzImage root=/dev/ram0 ramdisk_size=1048576 ro grub> initrd /boot/initrd.gz grub> boot 太高興了,如上圖所示,系統(tǒng)正常啟動了。相信大家跟我一樣*激動萬分哦。趕快登錄入去*一把。 OK,很正常哦。這表明我們的第一步成功了。此系統(tǒng)是完全運(yùn)行在內(nèi)存中的,內(nèi)核鏡像與根文件系統(tǒng)鏡像是存在硬盤里的,系統(tǒng)也就是啟動的時候需要讀一次硬盤,其它時候完全可以不使用硬盤。達(dá)到我們的目的了,這種方式就可以聯(lián)想到:只要有存放鏡像文件的介質(zhì),從
41、哪里啟動該Linux系統(tǒng)都無所謂,剛好引出了后續(xù)章節(jié)要講的LiveCD和U盤Linux制作方法。別急,后面會一一講來。休息一會吧。順便說一句,有*的朋友,可以把很多應(yīng)用都可以放到這個小系統(tǒng)里跑,如httpd、PHP、MySQL、SSH等。我所在的公司就有這種需要哦。畢竟我們不是學(xué)校實(shí)驗(yàn)室,辛勞做個東西是要有實(shí)際用處的。 1.3 制作U盤啟動的小型內(nèi)存Linux系統(tǒng) 前面已經(jīng)完成了磁盤引導(dǎo)的內(nèi)存Linux系統(tǒng),就像造車一樣,核心部件基本都完成了,只需要入行不同的改裝,即可完成不同的任務(wù)。下面我就講解如何讓這個小系統(tǒng)從U盤上入行引導(dǎo)啟動。 進(jìn)行系統(tǒng)引導(dǎo)有很多種方式,常用的引導(dǎo)程序GRUB、LILO
42、等也可以用來引導(dǎo)U盤系統(tǒng)的啟動,但我個人看點(diǎn),這些引導(dǎo)程序還是有點(diǎn)過大,不夠小巧,并且我做過實(shí)驗(yàn),我采用GRUB入行U盤系統(tǒng)的引導(dǎo)沒有成功,我看網(wǎng)上有的朋友成功過。在此,我采用syslinux入行U盤系統(tǒng)的引導(dǎo)。 1.3.1 syslinux家族介紹 syslinux是一個輕量級的啟動裝載器,如果玩過Linux,一定知道lilo和grub,是的,所謂輕量級我想就是跟grub們相比而言的,尤其是grub2。 syslinux有很多變種(都是官方的)適用于各種媒質(zhì),如syslinux用于從微軟的文件系統(tǒng)fat 16/32引導(dǎo),isolinux用于從光盤引導(dǎo),pexlinux用于從網(wǎng)絡(luò)引導(dǎo),extl
43、inux用于從ext2/3文件系統(tǒng)引 導(dǎo)。 從這也可以觀出,syslinux對于各種設(shè)備的兼容做的很細(xì)致,據(jù)grub4dos的人說,用于兼容性方面的代碼甚至超過了程序主要功能的實(shí)現(xiàn)代碼。 考慮到我們通常使用的U盤是采用的FAT格式的文件系統(tǒng),所以在此我們使用syslinux作為U盤Linux系統(tǒng)的引導(dǎo)程序。 下載syslinux到宿主機(jī)上編譯安裝。 *入U盤,在Linux下查觀U盤的情況: -rootlocalhost -# fdisk -l 上圖是俺的系統(tǒng)下的U盤的情況,sdc1即為俺滴U盤的分區(qū)。 但此分區(qū)還不是引導(dǎo)分區(qū),用fdisk給此分區(qū)加上引導(dǎo)標(biāo)志。 -rootlocalhost -
44、# fdisk /dev/sdc 在fdisk的命令行里輸入a 再輸入1 則給sdc1加上的啟動的標(biāo)志,如下圖示: 再輸滲透w 則保存修改并退出。 -rootlocalhost -# cd /mnt/ -rootlocalhost mnt-# mkdir sdc1 掛載sdc1分區(qū) -rootlocalhost mnt-# mount -vt vfat /dev/sdc1 sdc1 -rootlocalhost mnt-# cd sdc1 -rootlocalhost mnt-# mkdir boot 復(fù)制上一節(jié)制作好的Linux內(nèi)核鏡像與根文件系統(tǒng)鏡像到sdc1上: -rootlocalhost sdc1-# cp -v /mnt/sdb6/boot/* boot/ 建立syslinux目錄 -rootlocalhost sdc1-# mkdir s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年五年級下冊數(shù)學(xué)《露在外面的面》(教案)
- 《定風(fēng)波 莫聽穿林打葉聲》歷年中考古詩欣賞試題匯編(截至2022年)
- 2024年作物收獲機(jī)械項(xiàng)目資金籌措計劃書代可行性研究報告
- 2024年歌舞廳娛樂服務(wù)項(xiàng)目資金需求報告
- 2025年湖南工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案
- 2024年注射用骨肽投資申請報告代可行性研究報告
- 深圳高級中學(xué)(集團(tuán))2025屆高三第三次診斷考數(shù)學(xué)試題+答案
- 2025年鶴壁職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫完美版
- 二零二五年度精裝修公寓轉(zhuǎn)租合同電子版
- 2025年度工傷事故責(zé)任劃分與賠償方案合同
- 個人合伙開店合同范本
- 生而為贏自燃成陽-開學(xué)第一課發(fā)言稿
- 2024年設(shè)備監(jiān)理師考試題庫及答案參考
- 公司外派學(xué)習(xí)合同范例
- 安徽省合肥市包河區(qū) 2024-2025學(xué)年九年級上學(xué)期期末道德與法治試卷(含答案)
- 廣州電視塔鋼結(jié)構(gòu)施工方案
- 2024年湖南鐵路科技職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 《梅大高速茶陽路段“5·1”塌方災(zāi)害調(diào)查評估報告》專題警示學(xué)習(xí)
- 2024年06月江蘇昆山鹿城村鎮(zhèn)銀行校園招考筆試歷年參考題庫附帶答案詳解
- 小學(xué)二年級100以內(nèi)進(jìn)退位加減法800道題
- 3ds Max動畫制作實(shí)戰(zhàn)訓(xùn)練(第3版)教學(xué)教案
評論
0/150
提交評論