• <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>
            隨筆-20  評論-12  文章-0  trackbacks-0

            1.基礎知識

            一個操作系統可以簡單的抽象為,引導程序 內核 文件系統。

             

            vmlinuz是Linux 內核的鏡像文件,可以被引導程序加載,從而啟動Linux系統。

             

            initrd的全稱是boot loader initialized RAM disk,它是系統啟動時所使用的根文件系統映像文件,這個文件系統中包含幾個驅動模塊,用來裝載實際的根文件系統,比如一個IDE或SCSI硬盤的驅動 模塊,內核裝入這個模塊之后用它來驅動硬盤,掛接硬盤到ramdisk的某個子目錄,然后再用其中的pivot_root命令,將硬盤文件系統變成根文件 系統,并開始執行init進程,此時init ram disk被umount,壽終正寢。

             

            由此可見,我們可以用vmlinuz initrd.img做一個文件系同長駐內存的迷你Linux。

             

            現在進入正題了:

             

            2.編譯內核

            cd /usr/src/....----進入內核源代碼目錄,沒有的話去官方網站,隨便下

            make menuconfig-----配置編譯選項請注意一定加入RAM disk support 和initial RAM disk

            (initrd) support 的支持(在block device中)。另外最好將ext3文件系統編入內核,不要編成模塊。配置完畢后保存為.config(默認)

            make bzImage----編譯

             

            在許多內核編譯參考中還有

            make modules

            make modules_install兩步

            但我們這里沒有加入對modules的支持,所以不需要。生成的bzImage文件在 usr/src/linux/arch/.../boot中,省略的根據你的機器架構決定,make過程中會有提示,比如我的是x86_64. 注意這個文件非常重要,其實就是我們最終的vmlinuz.

             

            3.busybox

            busybox是一個集成了一百多個最常用linux命令和工具的軟件,它甚至還集成了一個 http服務器和一個telnet服務器,而所有這一切功能卻只有區區1M左右的大小.我們平時用的那些linux命令就好比是分力式的電子元件,而 busybox就好比是一個集成電路,把常用的工具和命令集成壓縮在一個可執行文件里,功能基本不變,而大小卻小很多倍,在嵌入式linux應用 中,busybox有非常廣的應用,另外,大多數linux發行版的安裝程序中都有busybox的身影,安裝linux的時候案ctrl alt F2就能得到一個控制臺,而這個控制臺中的所有命令都是指向busybox的鏈接.在我們的迷你Linux中,需要的也正是busybox的命令和工具。

             

            下載 http://busybox.net/downloads/

            使用過程中許多高版本都出現編譯錯誤,所以用了一個最原始的版本busybox-1.00

            #cp busybox-1.00.tar.gz /tmp/bunny

            #cd /tmp/bunny

            #tar xvfz busybox-1.00.tar.gz

            #cd busybox-1.00

            #make menuconfig ----編譯配置

             

            下面是需要編譯進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基本命令選項,自己需要哪些命令就編譯進去,一般用默認的就可以了.

            配置好后退出并保存.config.

            make

            make install

            編譯好后在busybox目錄下生成子目錄_install,里面的內容:

            bin

            linuxrc -> bin/busybox

            sbin

            其中可執行文件busybox在bin目錄下,其他的都是指向他的符號鏈接.

             

            4.制作自己的root fs

            1)目錄結構

            mkdir /tmp/myOS/rootfs

            cd /tmp/myOS/rootfs

            mkdir etc usr var tmp proc home root dev

            其中etc,proc和dev是一定要建的,bin和sbin不用建,因為busybox中已經有了.

            其他的可以象征性的建幾個就可以了.

            拷貝busybox

            #cp -R /tmp/bunny/busybox-1.00/_install/* /tmp/myOS/rootfs/

             

            2)設備文件

            我是直接從FC系統/dev目錄里cp的,方法如下:

            #cp -R /dev/console /tmp/myOS/rootfs/dev/

            #cp -R /dev/null /tmp/myOS/rootfs/dev/

            #cp -R /dev/zero /tmp/myOS/rootfs/dev/

            你認為需要的都cp過來

            有的參考文獻說fd0,hda,ram,ram1,tty1,loop1,fb0,fb,tty等是必備的,但是好像有些文件并沒有

             

            3)建立etc目錄下的配置文件

            我是直接拷貝busybox自帶的例子

            cp -R tmp/bunny/busybox-1.00/examples/bootfloppy/etc/* /tmp/myOS/rootfs/etc

             

            4)制作initrd.img映象文件

            cd /tmp/myOS/

            dd if=/dev/zero of=/tmp/disk bs=1M count=32 ------初始化32M內存空間

            mkfs.ext3 -m0 /tmp/disk ------格式化為ext3

            mkdir /mnt/ram

            mount -o loop /tmp/disk /mnt/ram ------掛載到/mnt/ram

            cp -R rootfs/* /mnt/ram ------把rootfs寫入內存

            umount /mnt/ram

            dd if=/tmp/disk of=/tmp/myOS/initrd.img ------把內存中的內容以映象方式取出

            ok,這個initrd.img就是我們的rootfs

            有的文獻使用ram0,也就是將上述過程的/tmp/disk改為/dev/ram0,雖然制作過程沒有問題,但是它存在大小限制

             

            5.整合,啟動

            1)kernel

            cp /usr/src/linux/arch/x86_64/bzImage /boot/vmlinuz

            2)rootfs 一般命名為initrd.img

            cp /tmp/myOS/initrd.img /boot

            3)有了上述兩個文件,已經可以通過網絡dhcp, tftp服務器啟動,tftp服務器中添加啟動腳本如下

            DEFAULT linux

            PROMPT 0

            LABEL linux

            KERNEL vmlinuz

            append initrd=initrd.img devfs=nomount ramdisk_size=52000

             

            問題:理論上這個小Linux也應該可以從grub引導。

            posted on 2009-02-26 14:36 宋振華 閱讀(790) 評論(0)  編輯 收藏 引用
            99久久成人18免费网站| 久久影院久久香蕉国产线看观看| 久久国产欧美日韩精品| 亚洲av伊人久久综合密臀性色| 97久久超碰国产精品2021| 精品一久久香蕉国产线看播放| 久久人人爽人人爽人人片AV东京热| 久久人妻少妇嫩草AV无码专区| 亚洲国产成人久久精品影视| 一级做a爰片久久毛片毛片| 精品久久久久久久无码| 亚洲精品国产综合久久一线| 久久狠狠色狠狠色综合| 三级三级久久三级久久| 久久99精品久久久久久野外| 亚洲AV无码久久精品狠狠爱浪潮| 国产精品99久久精品爆乳| 日日躁夜夜躁狠狠久久AV| 国内精品久久久久久久涩爱| 久久久久99精品成人片试看| 亚洲国产成人久久一区WWW| 免费国产99久久久香蕉| 久久久久亚洲AV无码专区体验| 久久婷婷色香五月综合激情| 丰满少妇人妻久久久久久4| 国产精品99久久免费观看| 亚洲综合日韩久久成人AV| 久久综合九色综合久99| 久久久艹| 人妻中文久久久久| 久久久久成人精品无码| 久久综合精品国产一区二区三区| 国产69精品久久久久9999| 青青国产成人久久91网| 狠狠色丁香婷婷久久综合不卡| 久久精品亚洲精品国产色婷| 伊人久久精品无码av一区| 久久综合狠狠综合久久| 久久精品亚洲一区二区三区浴池 | 婷婷久久综合| 开心久久婷婷综合中文字幕|