1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 一種實現嵌入式Linux的新法子

        時間:2023-03-23 07:54:22 計算機畢業論文 我要投稿
        • 相關推薦

        一種實現嵌入式Linux的新法子

        摘要 在Linux中會遇到由于文件系統 毀壞,需要 人工修復而導致系統 無法正常啟動的現象。本文采納 Linux初始化內存盤(INITRD)技巧,并把內存的一部分作為Linux的根目錄,每次啟動把完整 的文件系統 解壓到這里,避免了系統 從毀壞的文件系統 啟動。這不僅使系統 能正常啟動,而且進步了系統 性能。

        要害詞 Linux 嵌入式 INITRD ramdisk

        【Abstract】In course of building embedded Linux, the system will not start because of the bad filesystem . The paper describes a new method, which adopts INITial Ramdisk Disk and assigns part of memories as root directory of Linux. It avoids startup from a bad filesystem because it uncompresses integral filesystem to ramdisk every time. With this method, the system can not only start normally, but also it’s performance is very good.

        【Keyword】Linux embedded INITRD ramdisk

        引言
        在Linux操作系統 中,有一項特別的功效 ——初始化內存盤INITRD(INITial Ram Disk)技巧,而且內核支撐收縮的文件系統 映像。有了這兩項功效,我們可以讓Linux系統 從小的初始化內存盤啟動,并把系統 內存的一部分作為根文件系統 掛載,而且不應用交換 分區(如果不運行X Windows這是完整可以的),即把Linux系統 完整嵌入到內存中,而不依附于任何其他硬盤。現在PC機內存至少128M,而根文件系統 所用的只有30M,因此不僅不會使整機性能降落,反而有很大的進步。
        由于系統 不工作在硬盤上,所以系統 打消了由于機械驅動而導致的問題;因為系統 運行于內存中,根文件系統 和操作完整在CPU/RAM環境下,系統 性能在速度和可靠性方面非常好;它不會由于非法關機而毀壞文件系統 ,因為我們每一次啟動是把收縮的文件系統 解壓至內存盤中作為根文件系統 掛載。
        1 硬件請求
        對于這樣一個系統 ,硬件不需要 特別 的設計,只是通過普通的PC機上的組件實現。值得一提是系統 的內存的大小,它至少該當有64M。因為30M作為Ramdisk應用,剩下30多兆作為系統 運行,才干保證系統 的正常工作,我們現在的盤算機內存一般為128M,這個條件都能滿足。唯一特別 的是一個flash盤 ,它相當于一個IDE接口的硬盤,大小為20M,首要用它作為啟動LILO和放置根文件系統 收縮包。
        2 Ramdisk的應用
        Ramdisk就是將內存的一部分分配為一個分區并作為硬盤來應用。對于系統 運行時不斷應用的程序,將它們放在Ramdisk中將加快盤算機的操作,如大數據量的網絡服務器、無盤工作站等。為了能夠應用 Ramdisk,我們在編譯內核時須將block device中的Ramdisk支撐選上,它下面還有兩個選項,一個是設定Ramdisk的大小,默認是4096k;另一個是initrd的支撐。它既可以直接編譯進內核,也可以編譯成模塊,在需要 的時候加載。我們由于在啟動時就用它,所以必須 將它直接編譯進內核。
        如果對Ramdisk的支撐已經編譯進內核,我們就可以應用它了。首先在/mnt目錄下創立目錄ram,運行mkdir /mnt/ram;然后對/dev/ram0創立文件系統 ,運行mke2fs /dev/ram;最后掛載上/dev/ram,運行mount /dev/ram /mnt/ram,就可以象對普通硬盤一樣對它進行操作了。值得注意的是,在創立文件系統 的時候,在屏幕上輸出1024 inodes ,4096 blocks,即ramdisk大小為4M=4096個塊,但是我們掛載上之后,用命令df –k /dev/ram查看時,顯示出來ramdisk大小只有3963K,這是由于文件系統 本身占用了一些空間。
        我們能根據 需要 轉變 ramdisk地大小。如我們要把默認的4M增大到10M,當ramdisk是直接編譯進內核的情況 下,可在LILO配置文件lilo.conf中參加一行:append=“ramdis_size=10000”,運行LILO后,重啟盤算機后,ramdisk大小變為10M,或者在啟動是作為啟動行參數ramdis_size=10000;當ramdisk是作為可加載模塊編譯時,需要 在模塊加載配置文件/etc/modules.conf中參加一行:options rd rd_size=10000,或者在加載rd模塊是在后面加上闡明 ,即insmod rd rd_size=10000.
        3 實現歷程
        3.1創立收縮的文件系統
           我們的實現歷程是依附于存在的Linux系統 。首先啟動一般的Linux系統 ,在這個系統 中根據 自己的需要 ,創立一個適宜功效的文件系統 。例如我們要實現Apache網絡服務器,那么只要把完成系統 啟動和根基掩護需要 的一些命令、腳本、配置文件和庫函數留下,再加上實現Apache服務器所需要 的。具體歷程為:
        在Linux下建立 目錄/minlinux,我們在此目錄下創立的文件系統 。系統 的所有靜態鏈接庫,贊助 手冊(man pages),信息頁(info pages),頭文件,內核源碼對于系統 運行是完整無用的,所以不需要 它們。在目錄bin下放系統 掩護的一些根基工具,如ls、mv、grep、chown、chmod、chgrp、ln、rm等;在sbin下是系統 啟動歷程通常需要 的命令,如bash、e2fsck、mke2fs、fdisk、insmod、rmmod、depmod、modprobe、lsmod、shutdown、reboot、login、init、getty、mount、umount、等;usr/bin下放置Apache利用程序http和其他一些特別工具。然后根據 這些可履行文件需要 的動態鏈接庫來斷定 lib目錄下的內容。當然目錄etc下的配置文件,dev下的設備 文件需要 的都必須 要有,它們都是和可履行文件對應的,因為許多可履行文件履行時,一般是打開設備 ,根據 配置文件來運行。有一個特別的目錄proc該當設置,在內核編譯選項文件系統 選擇中,我們選擇對文件系統 proc的支撐,那么在系統 運行之后它下面有許多內容,這些內容是實時、不斷跟蹤系統 內核和正在運行的歷程的狀態 而產生 的,但不占用任何磁盤空間,而是駐留在內存中。在某些情況 下,可以通過它來系統 設置,許多工具從這里獲取信息,如dmesg、ps、top等。
        文件系統 制作 完成,大小該當在20M左右。
        接下來把文件系統 拷貝至ramdisk為生成ramdisk映像文件做籌辦。我們把系統 的ramdisk 轉變到30M,重啟盤算機后,履行下列操作:
        dd if=/dev/zero of=/dev/ram bs=1k count=30000 把ramdisk調劑到零,以便后面有更高的收縮率;
        mke2fs –m0 /dev/ram 30000 在ramdisk上建立 30M的ext2文件系統 ;
        mount /dev/ram /mnt/ram 將已款式化的ramdisk掛載至目錄/mnt/ram;
        cp –av /minlinux/*  /mnt/ram 將文件結構 拷貝至ramdisk。
        然后我們對/mnt/ram/etc目錄下的文件進行修正。首要的文件是fstab,它負責在系統 啟動時把系統 要掛載的文件系統 信息傳遞給啟動歷程,我們應用 ramdisk作為根文件系統 ,且不需要 交換 分區,所以此文件配置 
        /dev/ram      /       ext2          defaults    1    1
        none          /proc   proc          defaults    0    0
        即可。一般來說系統 啟動時都要激活交換 分區,即在啟動腳本中有swapon –a 命令,但我們不需要 交換 分區,因此要把這一項移除,否則啟動時會打印差錯信息然后收場啟動。
        最后我們要拷貝ramdisk的映像并將其收縮。首要步驟如下:
        運行df ,注意1024-blocks一欄中/dev/ram的數值,在我的機上為25600;
        卸載/dev/ram,運行cd /root切換至root目錄并運行umount /dev/ram;
        將ramdisk寫成映象文件,運行dd if=/dev/ram of=ram30.img bs=1k count=25600
        收縮,并在/root目錄下產生 一個收縮的映象文件ram30.img.gz,運行gzip –9v ram30.img
        3.2創立 initrd ramdisk 映像
        首先我們在/dev/ram0中創立一個適宜大小的ext2文件系統 ,法子 同上,只是大小只有2048K,因為initrd ramdisk是用來指示(bootstrap)30M的ramdisk,并將它掛載至/mnt/ram。
        然后在/dev/ram0中建立 映像需要 的目錄和文件。創立目錄bin、dev、etc、lib、mnt和可履行腳本文件linuxrc,linuxrc的內容為:
           #!/bin/bash
           mount –o –ro /dev/hda1/ /mnt             # 以只讀法子 將flash盤掛載在/mnt下
           zcat /mnt/boot/ram30.img.gz > /dev/ram     # 將根文件系統 映像解壓至ram
           umount /dev/hda1                           # 卸載flash盤
        bin下面為linuxrc中用到的命令;lib為這些命令需要 的動態鏈接庫;etc下為配置文件ld.so.conf,定義命令運行時尋找所需動態鏈接庫的路徑,運行命令ldconfig –r /mnt/ram產生 文件ld.so.cach,在命令和動態鏈接庫之間建立 對應關系;dev下根基終端設備 和linuxrc中用到的設備 :console、ram、null、systty、tty1、tty2和hda1;mnt為hda1的掛載點。
            最后創立收縮的initrd ramdisk映像。
        運行df 看看/dev/ram0的字節數,在我的盤算機上1684K;
        轉換當前目錄至/root并卸載/dev/ram0 umount /dev/ram0;
        拷貝/dev/ram0成映像文件 dd if=/dev/ram0 of=initrd.img bs=1k count=1684;
        產生 收縮的映像文件initrd.img.gz,運行gzip -9v initrd.img。
        3.3啟動
            系統 的啟動需要 依賴flash盤,通過LILO把系統 啟動信息寫入flash盤主指示區。
        將flash盤作為第一主盤hda,而將裝有普通Linux的硬盤作為第一從盤hdb并從它啟動。在flash硬盤上創立 ext2文件系統 ,將它掛載至/mnt/flash目錄。在flash盤上建立 boot目錄,將收縮的文件系統 和initrd映像拷貝至boot目錄下,同時將Linux內核、指示區記載 boot.b、指示區映射map拷貝至其下。在普通Linux系統 中建立 LILO配置文件ramlilo.conf,配置文件如下:             
         boot=/dev/hda
                      map=/mnt/flash/boot/map
                              install=/mnt/flash/boot/boot.b
                      prompt
                      timeout=50

                      image=/mnt/flash/boot/vmlinuz
                             append= “ramdisk_size=30000”
                             label=embedded
                             root=/dev/ram
                             initrd=/mnt/flash/boot/initrd.img.gz
        運行命令lilo –C ramlilo.conf ,將啟動信息寫入flash的主指示區MBR。
        重新啟動盤算機,登陸后運行mount,我們看到如下兩項:
                 /dev/ram on / ext2 (rw)
                 none on /proc type proc (rw)
        這顯示只有ramdisk被掛載,制作 成功 。
        4 結論
        在我們制作 的嵌入式Linux中進行各種操作,速度非?,而且系統 很穩固。沒有出現因為根文件系統 毀壞而導致系統 進入手工掩護界面的現象。用它作為HTTP網絡服務器、網絡監督器、寬帶通信 設備 管理器或者其他需要 長光陰不停運行的機器,都有很高的利用價值。

        參考文獻
        1.鄒思鐵 嵌入式Linux設計與利用 清華大學出版社 2002 北京
        2.黃敦 如何結構嵌入式Linux系統 dunn@163.net 2001
        3.Tom Fawcett The Linux Bootdisk HOWTO Bootdisk-HOWTO@linuxdoc.org 200
        4.Paul Moody miniHOWTO Embedded Linux 1.1b paulmoody@bigpond.com 1998

        【一種實現嵌入式Linux的新法子】相關文章:

        一個嵌入式系統的Petri網模型與CPLD實現05-29

        類哲學:一種新的哲學視野03-01

        ARM Linux啟動過程分析06-17

        都市頻道制作網的設計與實現05-29

        基于minigui的網真機界面的實現08-05

        基于Gene8310的嵌入式家庭服務機器人05-11

        嵌入式實時網絡通信技術淺析論文(精選7篇)07-26

        城市旅游網站的設計與實現論文(精選6篇)05-07

        構筑企業數據中心 實現理性分析決策06-04

        用Verilog HDL實現I2C總線功能06-01

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>