• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長(zhǎng)修遠(yuǎn),我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評(píng)論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            關(guān)于Linux裁剪(轉(zhuǎn)載老鴇在Linuxsir發(fā)布的文章)

            項(xiàng)目基本結(jié)束,這個(gè)是其中系統(tǒng)裁減的一個(gè)總結(jié)文檔,不知道有沒有人感興趣:)

            =============================================

            前言:
            為了完成用戶的需求,需制作一個(gè)完整的環(huán)境供AP運(yùn)行,且存在一些約束條件。

            關(guān)鍵字:
            DOM Kernel Busybox X-Window Window-Manager Interbase nvidia cutdown

            目標(biāo)說(shuō)明:
            在一個(gè)64M的DOM(Disk on module)上建立可以運(yùn)行完整的AP的環(huán)境

            約束條件:
            1、可利用的總空間為64M,由DOM提供,但實(shí)際可用空間只有53-59M,原因可能與設(shè)備文件和DOM本身有關(guān),未確定
            2、顯卡為nvidia系列
            3、kernel選用2.4.20,沒有使用redhat自帶的版本。采集卡的Driver目前還只能在2.4.20的kernel下編譯,由于其移植性較差,已經(jīng)開始考慮重新整理成可適合kernelversion大于2.4.25的所有kernel,參考bttv的最新實(shí)現(xiàn)
            4、數(shù)據(jù)庫(kù)選用interbase系列,目前使用的為firebird-1.5(firebird為interbase的開源實(shí)現(xiàn),接口和interbase基本相同)。
            5、其他附屬的功能要求,在后面的文檔中會(huì)有說(shuō)明

            制作流程:
            某些部分的原理和實(shí)現(xiàn)沒有辦法寫的很全面,但基本上會(huì)提供一些url的連接,供相關(guān)人員參考。基本上按照制作流程來(lái)寫,前后相互牽連的部分不做特別說(shuō)明。

            一、Kernel的選擇和編譯:
            由于driver的緣故,只能使用2.4.20的kernel。2.4.20和2.4.25都有對(duì)Driver做過(guò)嘗試,其他版本的kernel沒有試過(guò),應(yīng)該是可以的,尚未確認(rèn)。在2.6的kernel上無(wú)法編譯,目前確定的原因是makefile有問題,估計(jì)做一些相應(yīng)的修改還是可以的,可參考bttv的makefile(http://linux.bytesex.org/v4l2/bttv.html)。
            回到kernel上來(lái),基本上的編譯原則是盡量減去不需要的部分,以及除了一些需要臨時(shí)加載的Driver盡量不要出現(xiàn)module。由于上面所說(shuō)的理由,DOM中使用的kernel為原始的2.4.20,可以從http://www.kernel.org下載,本文檔的附加文件里也可以找到。
            另外,由于需求的定義,系統(tǒng)啟動(dòng)時(shí)需要顯示splash畫面,所以kernel還需要加入bootsplash功能,這個(gè)功能是第三方提供的,作為補(bǔ)丁加入kernel。作法如下:

            1、打內(nèi)核補(bǔ)丁并編譯內(nèi)核
            假設(shè)內(nèi)核源文件安裝在/usr/src/linux/。下載bootsplash 3.07(地址:ftp://ftp.suse.com),然后:

            yourbox:~ # cd /usr/src/linux
            yourbox:/usr/src/linux # patch -p1 < /path/to/bootsplash-3.0.7-2.4.20-vanilla.diff
            yourbox:/usr/src/linux #

            配置內(nèi)核,如make menuconfig或make xconfig,在”Console drivers” -> “Frame-Buffer support” 選擇 “VESA VGA graphics console” 或其他與你的顯卡相應(yīng)的驅(qū)動(dòng)。打開 “Use splash screen instead of boot logo”. 在 “Block Devices”中打開”Initial Ramdisk support”,保存配置并編譯內(nèi)核,將生成的內(nèi)核拷到/boot 下,并修改lilo或grub的配置文件以使用新的內(nèi)核來(lái)啟動(dòng)。

            2、加入圖片
            下載并安裝splash工具:ftp://ftp.suse.com/pub/people/

            # cd ~/splash
            # tar xvjf splashutils.tar.bz2
            splashutils/
            splashutils/Makefile
            splashutils/splash.c
            [..]
            splashutils/ChangeLog
            splashutils/COPYING
            # cd splashutils
            # make splash
            gcc -Os -Wall -c -o splash.o splash.c gcc -Os -Wall -o splash splash.o
            strip splash
            # cp splash /sbin/
            # cd ..

            將圖片及相關(guān)的信息加入到initrd中去:
            /sbin/splash -s -f /etc/bootsplash/themes/yourtheme/config/bootsplash-1024x768.cfg >> /boot/initrd.splash

            圖片在附件文件中

            3、運(yùn)行l(wèi)ilo更新配置文件(grub就不用更新了),重新啟動(dòng),如果一切正常,就可以看到啟動(dòng)畫面了。同時(shí)會(huì)有這樣一些信息:

            vesafb: framebuffer at 0xf0000000, mapped to 0xdc816000, size 65472k vesafb: mode is 1024x768x16, linelength=2048, pages=41 vesafb: protected mode interface info at c000:5137 vesafb: scrolling: redraw
            vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0 Looking for splash picture.... silenjpeg size 11165 bytes, found (1024x768, 4912 bytes, v3) Got silent jpeg.

            kernel的config文件比較大,在附件中有,這里就不列舉了。

            編譯過(guò)程:
            1、獲取2.4.20的原始kernel壓縮包(linux-2.4.20.tar.bz2)
            2、tar xvjpf linux-2.4.20.tar.bz2
            3、cp config-2.4.20 (kernelsource)/.config #拷貝config-2.4.20到kernel source所在目錄中并以.config為新的文件名
            4、cd (kernelsource)
            5、make menuconfig #不需要做任何改動(dòng),直接退出
            6、make dep && make bzImage && make modules && make modules_install && make install
            7、如果沒有問題,繼續(xù)下一步,如果有問題,請(qǐng)檢查編譯環(huán)境是否正確,并重復(fù)step 6
            8、此時(shí)kernel已經(jīng)編譯完畢,需要做兩件事情,一是保存將來(lái)放入DOM的文件,二是將當(dāng)前的發(fā)行版的kernel換成2.4.20,以便后面的nvidia顯卡dirver的正確編譯。
            9、創(chuàng)建一個(gè)保存目錄,比如~/kernelbackup
            10、cp (kernelsource)/arch/i386/boot/bzImage ~/kernelbackup # 保存kernel
            11、cp /lib/modules/2.4.20 ~/kernelbackup/ -arf # 保存編譯出的所有modules
            12、如果當(dāng)前的發(fā)行版使用的是grub,則修改/boot/grub/grub.conf(如果沒有這個(gè)文件可以修改/boot/grub/menu.lst,都是一樣的),如果是lilo,修改/etc/lilo.conf。下面是grub的修改說(shuō)明,lilo的修改辦法可以參考相關(guān)文檔:

            # add below to your grub.conf
            title new kernel(2.4.20) # title just, u can modify it anywhere
            root (hd0,0) # root setup
            kernel (hd0,0)/boot/bzImage-2.4.20 ro root=/dev/hda1 vga=791 splash=silent # just.....
            initrd (hd0,0)/boot/initrd.splash # splash that show when booting of OS

            13、reboot
            14、選擇新的啟動(dòng)選項(xiàng),檢查是否正確

            二、Shell的選擇和編譯:
            到目前為止,kernel的裁減基本上結(jié)束,下面是shell的選擇和編譯。 對(duì)于linux而言,kernel只是提供系統(tǒng)調(diào)用接口,本身無(wú)法直接使用,需要外部shell的支持。一般shell有幾種選擇,如bash、ash、busybox等,由于busybox相對(duì)尺寸最小,而且提供了基本完整的功能,所以選擇busybox做為系統(tǒng)的shell。詳細(xì)信息參閱www.busybox.net,附件中有目前使用的busybox版本。busybox的流程主要是編譯和安裝,從而聯(lián)合kernel組成一個(gè)基本系統(tǒng)。 busybox的配置文件在附件中有,這里就不列舉了。

            編譯過(guò)程:
            和kernel基本相似
            1、解壓busybox
            2、復(fù)制config到busybox源碼目錄下
            3、make menuconfig #不做改動(dòng)即可退出
            4、make dep && make

            三、基本系統(tǒng)的安裝:
            到此時(shí),busybox和kernel都已經(jīng)準(zhǔn)備完畢,接下來(lái)需要一個(gè)分區(qū)來(lái)安裝他們。 不管是使用一個(gè)單獨(dú)的分區(qū)還是完整的DOM都可以,但總歸需要一個(gè)完整的目標(biāo)分區(qū)供使用。假設(shè)目標(biāo)分區(qū)為/dev/hdc1,下面的說(shuō)明會(huì)以此為基準(zhǔn)。 需要說(shuō)明的一點(diǎn)是,一開始盡量不要用DOM直接調(diào)試,因?yàn)槠渌俣群腿萘慷际值牟缓茫瑫?huì)造成調(diào)試的困難,直到調(diào)試后期再使用是個(gè)比較不錯(cuò)的主意。

            現(xiàn)在進(jìn)入基本系統(tǒng)的組裝:
            # fdisk /dev/hdc1 and format it with ext2 or ext3. My suggest is ext3.
            Mount /dev/hdc1 /mnt/dom # mount目標(biāo)分區(qū)
            mkdir /mnt/dom/boot
            mkdir /mnt/dom/boot/grub
            cp (kernelbackup)/bzImage /mnt/dom/boot # copy kernel to dom
            cp (kernelbackup)/initrd.splash /mnt/dom/boot # copy initrd splash to dom
            mkdir /mnt/dom/lib
            mkdir /mnt/dom/lib/modules
            cp (kernelbackup)/2.4.20 /mnt/dom/lib/modules -arf # copy all modules to dom cd (busyboxpath)
            make PREFIX=/mnt/dom install # install busybox to dom
            現(xiàn)在,一個(gè)基本系統(tǒng)基本安裝完畢,接下來(lái)是配置問題:
            mkdir /mnt/dom/etc # all config here
            mkdir /mnt/dom/dev # device file
            mkdir /mnt/dom/mnt
            mkdir /mnt/dom/proc
            mkdir /mnt/dom/tmp
            mkdir /mnt/dom/var
            mkdir /mnt/dom/lib
            mkdir /mnt/dom/root # home of root
            mkdir /mnt/dom/usr # X window-manager lib, etc
            cp (busyboxpath)/examples/bootfloppy/etc/* /mnt/dom/etc -arf # base config
            cp /dev/* /mnt/dom/dev -arf # device file. Will cutdown part of all

            下面是加入必需的連接庫(kù):
            1、ldd busybox
            2、查看busybox使用了哪些連接庫(kù),拷貝至目標(biāo)分區(qū)中同樣的路徑下,一般為/lib
            3、再用ldd查看連接庫(kù)是否還有需要的庫(kù)文件,如果有同樣拷貝到目標(biāo)分區(qū)中
            4、重復(fù)第三步
            5、cp /dev/* /mnt/dom/dev/ -arf # 后期還會(huì)做一些裁減
            Grub配置:
            # add below to your grub.conf
            title new kernel(2.4.20) # title just, u can modify it anywhere
            root (hd0,0) # root setup
            kernel (hd0,0)/boot/bzImage-2.4.20 ro root=/dev/hda1 vga=791 splash=silent # just.....
            initrd (hd0,0)/boot/initrd.splash # splash that show when booting of OS

            現(xiàn)在可以做一些測(cè)試,看看基本系統(tǒng)是否工作正常。執(zhí)行下面的命令
            cd /mnt
            mkdir dom
            mount /dev/hdc1 dom # mount it
            chroot /mnt/dom /bin/sh
            如果你看到登陸成功的信息就表示基本系統(tǒng)沒有什么問題了。

            重新啟動(dòng)機(jī)器,并選擇新的啟動(dòng)選項(xiàng),看看基本系統(tǒng)是否正常,如果有問題,重新檢查前面的步驟是否做的有問題。如果啟動(dòng)正常,那么,基本系統(tǒng)就基本完備,可以繼續(xù)后面的步驟了。

            四、Xfree86的裁減和安裝:
            基本系統(tǒng)已經(jīng)正常工作,接下來(lái)就是xfree86的裁減和安裝,首先切換到目標(biāo)分區(qū)并確定系統(tǒng)處于正常工作狀態(tài)。
            在這里需要說(shuō)明一下Linux的目錄分布和作用情況。首先通過(guò)“ls /”列舉一下根分區(qū),大致會(huì)有以下目錄:
            bin boot dev etc home lib mnt opt proc root sbin tmp usr var
            下面逐一說(shuō)明:
            bin: shell的工作目錄,比如sh、bash、mount等命令
            boot: kernel、ramdisk文件以及grub(lilo)的存放目錄,有的發(fā)行版會(huì)為此目錄單獨(dú)創(chuàng)建一個(gè)分區(qū),以防止系統(tǒng)崩潰的影響。在DOM中是不考慮的。
            dev: 所有的設(shè)備文件都存放在這里,比如/dev/video0、/dev/hda等。全部設(shè)備文件大概要占用400K左右的空間,但似乎全部拷貝過(guò)來(lái)的話,DOM總是會(huì)報(bào)空間不足,但實(shí)際還是有空間的,原因不明。目前的做法是對(duì)設(shè)備文件做了一些調(diào)整,去除了不需要的部分,參考后面的文件列表。
            etc: Ap配置以及系統(tǒng)配置存放目錄
            home:普通用戶的工作目錄根
            lib:基本庫(kù)存放目錄
            mnt:mount
            opt:看情形,目前是用做存放firebird
            proc:系統(tǒng)工作所需的目錄
            root:一般為root的工作目錄,可以調(diào)換
            sbin:常規(guī)命令存放目錄
            tmp:一般為臨時(shí)目錄
            usr:所有擴(kuò)展命令和xfree86,以及window-manager所在目錄,是系統(tǒng)最大的一個(gè)目錄,包含內(nèi)容最多。對(duì)于DOM來(lái)說(shuō),主要是存放連接庫(kù)、xfree86、字體、window-manager等。
            Var:臨時(shí)目錄,一般在發(fā)行版中為存放website文件、安裝文件以及一些log信息等,在DOM中只作為臨時(shí)目錄使用

            大致的分布情況說(shuō)明完畢,接下來(lái)就是具體的裁減工作了。 實(shí)際上,xfree86有一些替代實(shí)現(xiàn),比如freedesktop、fb等,甚至framebuffer也是一個(gè)可以考慮的方向,但是由于AP使用了nvidia顯卡提供的opengl 1.3接口,導(dǎo)致目前的唯一選擇就是xfree86。也許有其他更小的實(shí)現(xiàn),希望能在以后改進(jìn)。 進(jìn)入正題,xfree86的主程序?qū)嶋H上就是一個(gè)XFree86,位于/usr/X11R6/bin,有的發(fā)行版下X是一個(gè)指向XFree86的連接,有的卻是一個(gè)完整的程序,但不管怎么樣,Xfree86就是最主要的程序。現(xiàn)在,在目標(biāo)分區(qū)上mount發(fā)行版,以便可以拷貝我們所需要的:
            cd /mnt
            mkdir dist # create mount path of distribute
            mount /dev/hda1 dist # /dev/hda1 is root partition of your distribute. Check it.
            現(xiàn)在/mnt/dist就是發(fā)行版所在的位置。

            mkdir /usr/X11R6
            mkdir /usr/X11R6/bin
            mkdir /usr/lib
            mkdir /usr/X11R6/lib
            創(chuàng)建一些需要的目錄。

            cp /mnt/dist/usr/X11R6/bin/XFree86 /usr/X11R6/bin -arf 拷貝xfree86的主程序。
            cp /mnt/dist/usr/bin/ldd /sbin # copy ldd that is used to cutdown
            ldd是用來(lái)在DOM的環(huán)境中做裁減工作的,直接輸入ldd看看是否可以運(yùn)行,如果執(zhí)行有問題,一般是相關(guān)的連接庫(kù)不全,按照之前的方法復(fù)制過(guò)來(lái)就可以了。

            現(xiàn)在,要查看XFree86需要哪些連接庫(kù)和配置文件,以保證其可以運(yùn)行起來(lái)。
            cd /usr/X11R6/bin
            ldd Xfree86
            此時(shí)會(huì)看到很多的連接庫(kù),那么就需要把這些庫(kù)全部從發(fā)行版上復(fù)制過(guò)來(lái),可以直接復(fù)制到相對(duì)應(yīng)的目錄下,比如/usr/lib/或者/usr/X11R6/lib/下,需要注意的一點(diǎn)是,有些庫(kù)本身還會(huì)需要其他的庫(kù),可以一層層的ldd出來(lái),網(wǎng)絡(luò)中有人做過(guò)自動(dòng)工作的工具,但還是手動(dòng)裁減比較可靠。全部的庫(kù)導(dǎo)入完畢后,嘗試運(yùn)行/usr/X11R6/bin/XFree86,會(huì)看到一些出錯(cuò)信息,提示/etc/X11/XF86Config不存在,那么就將發(fā)行版中的/etc/X11目錄全部復(fù)制到目標(biāo)分區(qū)中:
            cp /mnt/dist/etc/X11 /etc -arf
            實(shí)際上這個(gè)目錄中不是全部都需要的,某些部分是可以刪除的,但我沒有具體實(shí)驗(yàn),而且尺寸并不是很大,就全部使用了。
            現(xiàn)在再執(zhí)行/usr/X11R6/bin/XFree86,會(huì)提示一些庫(kù)沒有找到,但實(shí)際上之前已經(jīng)全部復(fù)制過(guò)來(lái)了,原因是從shell執(zhí)行一條命令的時(shí)候,命令所需要的庫(kù)是從以下的途徑得到的:
            1、搜索/lib
            2、搜索/etc/ld.so.cache
            之前所復(fù)制的庫(kù)文件大半是放在/usr/lib和/usr/X11R6/lib下的,而且現(xiàn)在的/etc下還沒有l(wèi)d.so.cache文件,要生成這個(gè)文件就需要ldconfig這個(gè)命令:
            cp /mnt/dist/sbin/ldconfig /sbin -arf
            現(xiàn)在ldconfig是有了,但還需要與之有關(guān)的配置文件/etc/ld.so.conf,所以:
            vi /etc/ld.so.conf
            /usr/lib
            /usr/X11R6/lib
            現(xiàn)在執(zhí)行l(wèi)dconfig,就會(huì)在/etc/下出現(xiàn)一個(gè)ld.so.cache。以后如果有新加入的庫(kù)文件,而且不是存放在/lib/下的,都按照這個(gè)步驟來(lái)導(dǎo)入。現(xiàn)在,執(zhí)行/usr/X11R6/bin/XFree86,出現(xiàn)的錯(cuò)誤提示為無(wú)法打開/var/kdb和/var/log。
            這里需要說(shuō)明配置上的一個(gè)修改,cat /etc/fstab,會(huì)看到現(xiàn)在的fstab只有一句話:
            none /proc proc defaults 0 0
            現(xiàn)在要加入一些新的配置,新的fstab如下:
            proc /proc proc defaults 0 0
            none /var tmpfs defaults 0 0
            none /tmp tmpfs defaults 0 0
            none /dev/pts devpts gid=5,mode=620 0 0
            none /data tmpfs defaults 0 0
            現(xiàn)在/var、/tmp和/data都是在內(nèi)存中了,其中/data是將來(lái)mount磁盤的地方,需要手動(dòng)mkdir出來(lái):
            mkdir /data
            現(xiàn)在修改/etc/init.d/rcS:
            #! /bin/sh

            /bin/mount -a

            mkdir /var/log
            mkdir /var/lib
            mkdir /var/lib/xkb

            重啟DOM,現(xiàn)在應(yīng)該存在/var/log、/var/lib、/var/xkb目錄了,當(dāng)然這些目錄只是存放在內(nèi)存中,所以需要每次啟動(dòng)時(shí)臨時(shí)創(chuàng)建。
            再運(yùn)行XFree86,應(yīng)該會(huì)看到一個(gè)錯(cuò)誤的提示,說(shuō)明還需要opengl的一些連接庫(kù),從發(fā)行版中復(fù)制出來(lái)就可以了。
            嘗試在目標(biāo)分區(qū)中執(zhí)行/usr/X11R6/bin/XFree86,如果沒有進(jìn)入X界面,需要檢查之前的步驟是否有沒有做對(duì)的地方。

            五、Window-Manager的選擇安裝:
            到目前為止,X已經(jīng)完全移植到DOM中了,但一個(gè)包含基本系統(tǒng)和X的系統(tǒng)還不能滿足AP的要求,接下來(lái)是Window-manager的選擇和安裝。
            kde和gnome是無(wú)法安裝到DOM中的,尺寸太大,可能的選擇包括twm、fluxbox、windowmaker、icewm等,但需要滿足以下幾個(gè)條件:
            1、有caption,而且Modal dialog不能被切到后臺(tái),以符合用戶的操作習(xí)慣
            2、X上不能有任何多余的部分,即除了AP,不存在任何UI,如taskbar之類
            3、尺寸要小
            4、最好不要有system menu和system buttons

            經(jīng)過(guò)挑選,最終選擇了fluxbox作為DOM的window-manager,尺寸相對(duì)其他window manager要大一些(10M),但是較好的滿足了以上條件。

            安裝過(guò)程:
            1、下載fluxbox
            2、./configure
            3、make
            4、make install
            5、復(fù)制相關(guān)文件到DOM的相同目錄中
            6、測(cè)試,如果有問題,重復(fù)第一步
            等window manager安裝完畢后,一個(gè)包含基本系統(tǒng)和window的環(huán)境就創(chuàng)建成功了。接下來(lái)就是一些附屬部件的裁減和安裝了。

            六、其他部件的裁減和安裝:
            先切換到發(fā)行版。最后定義的數(shù)據(jù)庫(kù)引擎為Firebird 1.5,所以先下載firebird 1.5(http://prdownloads.sourceforge.net/f...-0.i686.tar.gz),然后在發(fā)行版上先安裝。firebird會(huì)安裝在/opt目錄下,將/opt/firebird復(fù)制到目標(biāo)分區(qū)中:
            cp /opt/firebird /mnt/dom/opt -arf

            然后修改配置文件:
            vi /mnt/dom/etc/init.d/rcS
            #! /bin/sh

            /bin/mount -a

            mkdir /var/log
            mkdir /var/lib
            mkdir /var/lib/xkb

            /opt/firebird/bin/fb_lock_mgr &
            /opt/firebird/bin/fb_inet_server &

            現(xiàn)在切換到目標(biāo)分區(qū)中,會(huì)看到進(jìn)程列表中有一個(gè)fb_lock_mgr,這說(shuō)明firebird已經(jīng)安裝成功。

            由于實(shí)際的裁減過(guò)程中會(huì)遇到各種各樣的問題,有些方面牽涉太廣,以至沒有辦法單獨(dú)說(shuō)明,所以接下來(lái)是一些可能會(huì)遇到的問題說(shuō)明:
            1、nvidia的驅(qū)動(dòng)需要先在發(fā)行版上解開,再執(zhí)行make && make install > install,然后修改install中的目標(biāo)路徑以將相關(guān)文件安裝到DOM上,比如cp libGL.so /usr/lib改為cp libGL.so /mnt/dom/usr/lib。具體操作就不列舉了。
            2、busybox的mount有問題,不能mount -o loop,所以cramfs的文件需要用發(fā)行版的mount,所以在dom的/mnt/cramfs目錄下有一個(gè)mount,而/bin也有一個(gè)mount
            3、為了便于調(diào)試,在dom中加入了telnet server和ftp client,分別使用的是utelnetd和cmdftp,出處可以通過(guò)google搜索
            4、grub的安裝使用grub-install即可
            5、由于firebird等模塊至少需要一個(gè)root用戶,而busybox缺省是沒有用戶的,所以需要在/etc下復(fù)制兩個(gè)文件:shadow和passwd
            6、dhcp client使用的是udhcpc
            7、字體主要和以下目錄有關(guān):/usr/lib/gconv、/usr/lib/locale、/usr/X11R6/lib/X11/font和/usr/X11R6/lib/X11/locale(限于redhat,其他發(fā)行版會(huì)有一些差異,但具體內(nèi)容是一樣的)
            8、硬件自檢使用的是hwsetup,并對(duì)源代碼做過(guò)一些修改,只保留了audio和network card的檢測(cè),在附件里有原始和修改過(guò)的兩個(gè)版本,可以對(duì)比參考
            9、web site功能是用kylix自己實(shí)現(xiàn)的,沒有使用apache
            10、由于dom的空間不足以攤平所有文件,所以/usr下面的文件全部都是以一個(gè)cramfs文件的格式出現(xiàn)的,參看后面的文件列表。

            七、DOM的最后安裝和打包:
            cramfs文件的創(chuàng)建:
            1、確定目標(biāo)分區(qū)的可運(yùn)行
            2、確定/mnt/dom/usr/目錄下的文件完整性
            3、mkcramfs /mnt/usr.cramfs /mnt/dom/usr # make a cramfs file of usr path
            4、保存/mnt/dom下的完整列表,以備將來(lái)的修改
            5、rm /mnt/dom/usr/* -rf
            6、mkdir /mnt/dom/mnt/cramfs
            7、cp /mnt/usr.cramfs /mnt/dom/mnt/cramfs
            8、cp /bin/mount /mnt/dom/mnt/cramfs -arf
            9、add /mnt/dom/etc/init.d/rcS:/mnt/cramfs/mount -o loop -t cramfs /mnt/cramfs/usr.cramfs /usr

            現(xiàn)在,/mnt/dom目錄下就已經(jīng)是一個(gè)除了grub全部都是完整的DOM鏡像了。那么最后要將這個(gè)鏡像導(dǎo)入真實(shí)的DOM之中:
            mkdir /mnt/realdom
            mount /dev/hdc1 /mnt/realdom # assume /dev/hdc1 is real dom
            cp /mnt/dom/* /mnt/realdom/ -arf
            sync
            此時(shí)DOM中已經(jīng)有了一個(gè)完整的鏡像,但還沒有g(shù)rub,那么執(zhí)行:
            grub-install /dev/hdc1
            重新啟動(dòng),并在BOIS中選擇真正的DOM,確認(rèn)DOM的啟動(dòng)沒有問題。重新切換到發(fā)行版,開始做DOM的鏡像文件:
            dd if=/dev/hdc of=domfs # domfs is image of dom
            保存好這個(gè)名字為domfs的鏡像文件,這就是一個(gè)可安裝的包,安裝到其他DOM中時(shí),輸入:
            dd if=domfs of=/dev/hdc
            到目前為止,所有的流程都走了一遍,剩下的就是不斷的實(shí)踐和驗(yàn)證了。

            后記:
            經(jīng)過(guò)一次完整的裁減過(guò)程,很自然的對(duì)Linux的整體結(jié)構(gòu)和方式有了很清晰的了解,雖然不能對(duì)kernel有深入了解,但是起碼為以后kernel方面的學(xué)習(xí)打下了很好的基礎(chǔ)。由于牽涉方面比較多和雜,有些部分只能是實(shí)踐過(guò)后才能知道其中的訣竅,當(dāng)然大體的過(guò)程是一樣的。

            2004-06-01
            cyantree



            附錄:
            DOM文件列表:

            posted on 2007-11-09 11:32 Khan 閱讀(3961) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 周邊技術(shù)

            久久青青草原精品国产| 久久久久国色AV免费观看| 精品熟女少妇a∨免费久久| 色综合久久最新中文字幕| 日韩中文久久| 好属妞这里只有精品久久| 欧美久久综合九色综合| 国产精品免费看久久久| 伊人久久大香线蕉AV一区二区| 久久99国产综合精品女同| 久久久精品久久久久特色影视| 久久久久久毛片免费播放| 久久久久无码中| 久久亚洲国产中v天仙www| 国产精品99久久久精品无码 | 中文精品99久久国产| 国产精品久久影院| 色综合久久综合中文综合网| 久久精品99无色码中文字幕| 久久国产高清字幕中文| 久久无码人妻一区二区三区午夜| 亚洲精品成人网久久久久久| 久久高清一级毛片| 亚洲午夜久久久精品影院| 日本欧美久久久久免费播放网| 久久亚洲国产成人影院网站| 久久夜色tv网站| 久久久久久综合一区中文字幕| 久久精品人人做人人爽97 | 久久夜色精品国产| 国产99久久久久久免费看| 国产精品美女久久久| 99久久久精品免费观看国产| 精品久久8x国产免费观看| 久久婷婷成人综合色综合| 久久香蕉国产线看观看精品yw| 亚洲av成人无码久久精品| 久久无码人妻一区二区三区| 国产精品对白刺激久久久| www.久久热| 久久国产视频网|