• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 全面系統移植Linux

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    現在, Linux系統 已廣泛地應用于科技和商業領域。在中高端領域,Linux系統除了支持包括文件、電郵、 網絡 服務器 在內的企業架構外,還支持諸如防火墻、VPN服務器、路由器和網關等業務單元架構;在低端領域,Linux通常用于 嵌入式 系統中,例如進程控制系統
     現在,Linux系統已廣泛地應用于科技和商業領域。在中高端領域,Linux系統除了支持包括文件、電郵、網絡服務器在內的企業架構外,還支持諸如防火墻、VPN服務器、路由器和網關等業務單元架構;在低端領域,Linux通常用于嵌入式系統中,例如進程控制系統、PDA、家用網關和機頂盒等。

    在系統啟動和管理方面,Linux系統在企業中的應用與桌面應用十分類似,它們使用同樣的啟動機制。這一點在下文中將予以介紹。

    由于嵌入式系統需要迅速啟動,因此它所啟動的進程數量有限,操作的資源也有限。用于嵌入式系統的存儲設備和小型硬件限制了系統的存儲空間。有限的存儲空間決定了嵌入式系統必須采用專門的文件系統和硬件解決方案,例如磨損持平技術(Wear-Leveling)。該系統并不適用于普通系統,只可在一些以特定存儲設備為目標的文件系統中實施。這些存儲設備的寫入次數是特定的,因為磨損持平技術的目標就是確保所有的目標存儲器的寫入次數大體相同。


    嵌入式系統核心構件

    所有Linux套件都包含同樣的核心構件:一個內核和一個根文件系統。后者包含著系統使用的軟件和庫,以及所有用來為用戶提供支持架構和用戶使用的應用軟件。在標準的開發系統中,根文件系統中的許多應用軟件都是編譯軟件和用于應用軟件開發的相關軟件(習慣上被稱為工具鏈)。

    嵌入式 Linux系統通常也包括同樣的核心構件,只是它們有一些特殊之處。由于嵌入式系統的開發通常是在桌面系統環境下完成的,并且它的目標是特定的嵌入式開發主板。諸如TimeSys Linux之類的嵌入式Linux套件為嵌入式主板提供了特殊的內核、根文件系統和多套工具鏈。其中一套工具鏈集成在文件系統的內部,另一套則安裝在桌面系統的文件系統中。后者被稱為交叉編譯程序,可以產生可以在嵌入式主板上執行的二進制命令。TimeSys Linux還包括第三套工具鏈,可以在Windows系統中運行,并產生運行于嵌入式主板的二進制命令。

    宿主系統和目標系統對于大多數嵌入式系統開發是十分重要的概念。交叉編譯程序經常用于嵌入式系統開發的原因是嵌入式主板一般沒有對應用軟件進行編譯和優化所需要的資源。同樣,它們也沒有足夠的空間進行全面開發或糾錯。常用的解決方案是使用諸如NFS (網絡文件系統)之類的技術,獲取實際上存儲于桌面開發系統的文件系統。因為桌面系統可以提供交叉編譯程序和用于開發的存儲空間,該系統環境被稱為宿主系統。由于嵌入式系統開發主板是應用程序最終的存儲和運行場所,因此它又被稱為目標系統。

    總之,宿主系統用來建立最終用于嵌入式系統的文件系統。對于大多數嵌入式系統來說,它包括一些壓縮的、存儲于內存中的文件系統,通常被稱為初始RAM磁盤,以及其它存儲于閃存中的壓縮文件系統鏡像。這些可以加載到內存中,也可直接調用。

    與嵌入式Linux套件相關的各類工具鏈和文件系統組件增加了嵌入式系統移植的復雜程度。例如,為了給嵌入式主板編譯2.6內核,必須先升級用戶使用的交叉編譯程序。但是,在此之前用戶也許還要先升級用來開發交叉編譯程序的桌面系統編譯程序。

    升級嵌入式系統

    如果用戶安裝了一個與TimeSys Linux 2.6一樣的商業Linux套件,那么它能提供一整套已經過驗證、可以共同工作的核心Linux組件。然而,即使是在這種情況下,用戶在已有系統上所做的改動也無法全部自動移植給新的SDK(系統設計成套工具)。通常情況下向基于2.6內核進行系統移植包括以下過程:
    ◆升級所有強制性套裝軟件以適應編譯程序,在與嵌入式系統相關聯的任意桌面系統上建立系統環境。
    ◆升級所有強制性套裝軟件以適應為目標系統開發應用軟件的所有交叉編譯程序。
    ◆ 將已定制的內核設置移植到2.6內核下。
    ◆ 將所有硬件驅動程序修改為2.6內核下可用的驅動程序。
    ◆升級所有強制性套裝軟件,以便與用于現有根文件系統或初始RAM磁盤的應用軟件和工具軟件相適應。
    ◆ 將所有系統管理和設置變化由現有根文件系統移植到2.6內核下的新根文件系統中。
    ◆ 將已定制的應用軟件由現有根文件系統移植到2.6內核下的新根文件系統中。

    初始RAM磁盤和根文件系統

    文件系統是供系統讀寫數據的存儲媒介所在的區域。Linux系統使用文件系統的目的多種多樣,即包括存儲系統、用戶文件和文件目錄,也包括作為用來支持虛擬內存的對換空間。Linux系統中最主要的文件系統是根文件系統,用戶可以通過“/ ”目錄安裝。

    將內核加載入內存的第一步是Linux系統的啟動。許多Linux系統在啟動時,內核都會使用一個已存入內存的文件系統——初始RAM磁盤。初始RAM磁盤未經任何壓縮,可直接加載入內存,并且在啟動過程中可作為一個暫時的根文件系統使用。通過初始RAM磁盤用戶可以執行命令,也可以在用戶使用系統硬件前,預先加載后續步驟所需的模塊。在桌面系統中,初始RAM磁盤幾乎是一個通用的過度過程。在內存充足的嵌入式Linux系統中,初始RAM磁盤是Linux 系統運行中實際使用根文件系統。

    TimeSys的Target Configurator工具軟件作為TimeStorm Linux開發套件中的一員,可以大大簡化初始RAM磁盤的創建過程,Target Configurator創建的初始RAM磁盤包含有啟動時間和運行時間所需的所有系統軟件。Target Configurator還可以簡化向用作根文件系統的初始RAM磁盤和諸如JFFS 2或ext 3等用于不同類型存儲設備的文件系統增加應用軟件的過程。

    TimeSys Linux 2.6 Reference Distributions包含有預先匯編的、用于所有支持平臺和架構的初始RAM磁盤。大多數Linux套件可提供一些小型程序(如用于Red Hat Linux的mkinitrd),以便用戶建立自己的初始RAM磁盤。然而,如果用戶正在向基于2.6的內核移植,并且想繼續使用用戶已編制好的初始 RAM磁盤,那么用戶需要對它的內容進行檢驗以便與新內核兼容。

    用戶可以將初始RAM磁盤作為一個Linux系統中的回送硬件進行安裝,從而對它進行檢驗。雖然回送硬件是一種虛擬硬件,但是Linux系統可以像訪問真實硬件一樣訪問它。在安裝初始RAM磁盤前,用戶必須確定當前的內核支持回送硬件設備。對于2.6內核來說,用戶可以通過內核設置編譯程序中的Device Drivers→Block Devices→Loopback device support選項為回送硬件提供支持。在2.4內核下,該選項在Block Devices→Loopback device support。

    在使用GRUB引導程序的桌面Linux系統中,系統的初始 RAM磁盤通常作為一個分離的內核外部文件而存儲。該文件一般在/boot目錄下,且可以在GRUB設置文件(/etc/grub.conf)中進行識別。在大多數的嵌入式系統中,初始RAM磁盤是作為內核外部文件創建的,但是卻作為內核搭建的最后一步與內核捆綁在一起。圖1是用Target Configurator創建初始RAM磁盤的屏幕顯示畫面。Target Configurator可以簡化不同類型的根文件系統的創建及維護過程。

    圖1 創建初始RAM磁盤

    桌面Linux系統通常使用在初始RAM磁盤中使用ext 2文件系統,而大多數嵌入式Linux系統作用更小、更簡單的文件系統,例如CRAMFS、ROMFS或Minix。無論初始RAM磁盤中包含的是什么類型的文件系統,初始RAM磁盤通常使用gzip對文件進行壓縮,以便節省更多的空間。Linux初始RAM磁盤加載程序可以對壓縮后的文件進行識別,并在安裝前自動對其進行解壓縮。

    如果用戶已有一個初始RAM磁盤并希望將它移植到2.6內核下,那么用戶需要解壓縮、安裝并對其進行檢測。因為初始RAM磁盤通常都是處于壓縮狀態的,所以用戶需要對文件進行重命名才能成功解壓。初始RAM磁盤常用的解壓縮和安裝命令如下:

    # gunzip initrd.img.gz
    # mount -t ext2 -o loop initrd.img /mnt/initrd



    為了完成文件系統的安裝,用戶使用的目錄必須已作為一個安裝點(例如/mnt/initrd)而存在。安裝命令的-t選項用來確定文件系統的類型,除非用戶的初始RAM磁盤不是ext 2格式的,否則這一選項是可以選擇的。一旦初始RAM磁盤安裝完畢,它便會在磁盤列表中顯示出來。顯示如下:

    Filesystem 1K-blocks Used Available Use% Mounted on
    /tmp/initrd.img 2948 510 2288 19% /mnt/initrd



    同時,初始RAM磁盤也可以像其它文件系統一樣被展開、進行研究分析,示例如下:

    # cd /mnt/initrd
    # ls -al
    total 13
    drwxr-xr-x   9 root   root     1024 Feb 16 13:31 .
    drwxr-xr-x   16 root   root     4096 Mar 3 08:58 ..
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 bin
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 dev
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 etc
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 lib
    -rwxr-xr-x   1 root   root     340 Feb 16 13:31 linuxrc
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 loopfs
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 proc
    lrwxrwxrwx   1 root   root       3 Feb 16 13:31 sbin -> bin
    drwxr-xr-x   2 root   root     1024 Feb 16 13:31 sysroot


      Linux啟動順序

    內核加載完成后,傳統的Unix和Linux系統會執行一個系統應用軟件作為初始化進程。該應用軟件在系統的/sbin/init目錄下。一般情況下,初始化進程是所有進程的第一步,是系統所有進程的鋪路石,用戶可以使用“ps”命令調出進程狀態列表。初始化進程可以對/etc/inittab文件進行讀取,從而識別系統啟動、進程和程序列表的方法。

    使用初始RAM磁盤啟動

    如果用戶系統使用初始RAM磁盤作為根文件系統,系統的啟動程序便多了一步。系統的第一步不是執行初始進程,而是對初始RAM磁盤進行解壓并安裝,并執行/linuxrc文件。該文件必須是可以執行的,可以作為一個提供其它可執行命令列表的命令文件。另外該文件還必須是一個像BusyBox一樣的復調用二進制命令,或者作為一個連接復調用二進制命令或/sbin/init進程自身的符號鏈接。

    /linuxrc文件執行完畢便可進入初始RAM磁盤的安裝進程。這一進程由內核源代碼文件init/do_mounts_initrd.c來指定。/linuxrc文件實際上是一個命令程序,其形式如下(出自無devfs 文件系統或udev的Red Hat 9.0):

    #!/bin/nash
    echo Mounting /proc filesystem
    mount -t proc /proc /proc
    echo Creating block devices
    mkdevices /dev
    echo Creating root device
    mkrootdev /dev/root
    echo 0x0100 > /proc/sys/kernel/real-root-dev
    echo Mounting root filesystem
    mount -o defaults --ro -t ext3 /dev/root /sysroot
    pivot_root /sysroot /sysroot/initrd
    umount /initrd/proc



    由此可見,使用初始RAM磁盤的Red Hat系統中的缺省/linuxrc文件可執行一系列系統初始化命令。

    如果用戶正在對一個擁有本地存儲器的Linux系統進行移植,并且該系統并不局限于初始RAM磁盤,那么命令文件中的最后一組命令可將根文件系統安裝到存儲設備中,并使用“pivot_root”命令改變“/”目錄下的系統主旨。linux-utils套件中的“pivot_root”命令可以將系統的根目錄由初始RAM磁盤改為可提供長期存儲器的硬件設備。如果用戶正在使用GRUB,該硬件可以通過系統中的根參數root=value進行識別。

    在升級使用初始RAM磁盤的定制Linux系統時,用戶需要完成下列工作:

    安裝并檢驗初始RAM磁盤,檢查它是如何使用/linuxrc文件的。如果/linuxrc文件是一個命令程序,用戶需要檢驗它所執行的命令,從而確定這些命令與2.6內核相適應。如果它特別引用了一些諸如“modprobe”或“insmod”之類的命令,那么用戶必須確定已經在初始RAM磁盤和其它文件系統中安裝了這些工具軟件與2.6內核相兼容的版本。用戶的初始RAM磁盤必須包括一些為2.6內核搭建的內核模塊,并且遵循2.6內核使用的命名規則,即使用.ko擴展名,而不是.o擴展名。

    如果/linuxrc文件是一個連接/sbin/init程序的符號鏈接或硬鏈接,那么用戶需要確定初始程序使用的命令文件不是2.4內核專用的。用戶同樣要遵循上述原則進行檢測和重名命。

    假設用戶的系統可以正確地執行/linuxrc文件,系統通??梢詫⑾到y文件的根改變到一個新的“/”目錄下,或者手動執行/sbin/init進程。Linux內核為了尋找初始進程而執行一次順序搜索。較舊版本的內核需要用戶來確定作為啟動進程的一部分而執行的文件名稱,方法是使用啟動加載程序中的initrd=value參數。如果用戶使用初始RAM磁盤或/linuxrc文件中的“exec”命令,可自動啟動初始化進程而不需要以上步驟。

    標準的Linux初始化次序

    在桌面Linux系統或較大的Linux系統中,大多數系統使用一整套的應用軟件(SysVInit套裝軟件)和一套相關的小程序(initscripts套裝軟件)對系統啟動進程和啟動次序進行識別。

    大多數桌面Linux系統使用“運行級別”這一概念識別系統執行的應用程序和執行順序。不同的運行級別是定義系統使用模塊所對應的某組應用軟件的簡單方法。例如,運行級1通常被稱為單一用戶模式,主要用來對系統進行維護。當系統處于第一運行級時,處理運行狀態的只有系統管理員用來與系統進行交互和維護所需的核心應用程序。

    同時使用SysVInit和initscripts套裝軟件的系統啟動過程是:當內核加載完畢并開始運行時,它會調用初始化進程進行工作。該進程將讀取/etc/inittab文件,并識別該命令文件啟動的基本進程和程序。

    在/etc/inittab文件中,缺省的運行級由包含“initdefault”字符串的命令行來識別,例如 id:2:initdefault:。

    在此例中,缺省的運行級是2。/etc/inittab文件中的額外入口將對初始化系統所運行的命令程序進行識別,例如 si::sysinit:/etc/rc.d/rc.sysinit。

    系統初始化程序運行后,使用SysVInit和initscripts的Linux套件將對系統進入某一特定運行級時發生的事件進行定義。例如,用戶在 /etc/inittab文件結尾部分的一些命令行中,可能會看到有關運行級2的額外信息,例如 l2:2:wait:/etc/init.d/rc 2。

    此命令行指明,當系統進入運行級2時,/etc/init.d/rc命令將隨參數“2”一起被執行。結果導致“rc”命令執行所有在/etc/rc2.d目錄下的適當文件。此目錄下的文件名都為S+NN+名稱或K+NN+名稱,且這些文件都是可執行的外殼程序。這些程序中還包含有其它系統命令的列表。當系統進入某一特定的運行級時,名稱以“S”打頭的文件便會被執行。系統離開某一特定運行級時,名稱以“K”打頭的入口命令便會被執行。命令的執行次序依照NN所代表的兩位數字的大小進行排列。至于名稱則由用戶自己定義,但一般應能夠被文件啟動的程序和子系統調用。

    對啟動次序中的定制進行檢查

    在向2.6內核進行移植過程中,用戶要確定進行如下修改:
    ◆ 用戶必須將所有強制可加載內核模塊復制到用戶所使用的初始RAM磁盤中。為了能與2.6內核一起工作,這些模塊必須使用新的.ko命令規則。
    ◆ 初始RAM磁盤中的/linuxrc文件或正常啟動次序中的其它文件不能包含任何使用舊模塊命名規則的模塊加載索引信息。

    Target Configurator工具的一大優勢就是它可以自動建立一個初始RAM磁盤和一個適應2.6內核的根文件系統。如果用戶手工建立根文件系統或初始RAM磁盤,那么用戶需要先確定根文件系統中包含有適當的初始化命令。

    如果用戶正在將一個基于2.4內核的TimeSys Linux系統移植到一個2.6內核下,而且用戶已經對系統的啟動次序或所需執行的應用軟件進行了定制,那么用戶必須同時對2.6內核下的系統啟動次序做同樣的定制。正如上文提到的,如果用戶的2.4系統為特定的驅動程序或子系統加載了內核模塊,那么用戶必須確定已安裝了這些工具軟件適用于2.6內核的版本。用戶的初始RAM磁盤和文件系統必須包含有為2.6內核建立的內核模塊,并且以2.6內核的命名規則進行命名。

    如果用戶的2.6 系統使用的是devfs文件系統,而不是標準的Linux文件系統或udev,那么用戶也許還需要對硬件或文件系統索引進行升級。例如,如果用戶正在使用 2.4內核下標準的dev文件系統,并且要升級到適用于2.6內核的devfs文件系統,那么用戶需要升級硬件的索引,例如將dev文件系統中的硬件名/dev/md0改為devfs文件系統中的硬件名/dev/md/0。

    2.4和2.6內核之間的另一個重要區別是,在2.6內核下,許多應用程序由于升級已無法支持GLIBC或uClibc庫。在這種情況下,用戶還需要確定用戶的初始RAM磁盤或根文件系統中還包含有應用程序所需的新版共享庫。如果用戶正在創建新的初始RAM磁盤或根文件系統,那么就不必擔心這一問題了。但是如果用戶是對已有的初始RAM 磁盤或根文件系統進行升級,那么這一點十分重要。

    小結

    不同內核下的Linux系統啟動過程并未發生變化,但是值得注意的是,在進行內核移植過程中,用戶必須了解系統是如何初始化的。盡管啟動過程本身沒發生變化,但是一些與內核模塊相關的規則發生了變化。因此明確現在啟動命令是否還能正確運行是十分重要的。用戶還必須了解系統啟動時所執行的文件和應用程序,以便決定哪兒需要做相應的修改??傊?,只要用戶了解系統的啟動次序并仔細檢驗系統啟動進程中執行的文件,移植任何定制Linux系統的實施方案都是可行的

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>