引言
Embedded Linux技術基于開放源碼的資源,并且已經是當今zui重要的嵌入式應用技術之一。Embedded Linux是燒錄在目標裝置上的系統,1個Embedded Linux系統包含Linux kernel與 root filesystem 2大部分,Embedded Linux系統到底包含哪些組成要素構成,本文將由概念的層面進行解析。
本文
前面介紹了與2.6內核相關的變化,解釋了新硬件驅動程序的編譯進程,并討論了2.6內核的新功能對于已有硬件驅動程序的影響。這里將主要闡述將已有驅動程序、開發系統、應用軟件和定制Linux配置移植到2.6內核的方法步驟。
因為2.6內核增加了許多新功能,特別是在硬件驅動程序和系統軟件級方面,所以需要對管理工具進行相應的改變。基于2.6內核的系統需要新的啟動程序。該程序必須能識別新的模塊命名規則,使用新的設置文件和新的2.6內核功能。例如sysfs文件系統,該文件系統是一個虛擬的文件系統。它可以產生一個包括所有系統硬件的層級視圖,與提供進程和狀態信息的proc文件系統十分類似。sysfs文件系統主要供Linux系統內部使用。2.6內核已開始為存儲用戶信息的新型文件系統提供集成支持。諸如JSF與XFS之類的新日志文件系統和OpenAFS之類的新網絡文件系統,都需要的針對具體文件系統的工具。
用戶只需要安裝與2.6內核新功能相關的工具,不需要的可以暫時略去。例如,如果用戶使用的不是JFS文件系統,那么可以通過禁止JFS支持而縮減內核占用的空間。同樣,也可以通過清除與JFS相關的工具,減少根文件系統占用的空間。如果用戶使用的不是基于2.6內核的Linux系統,那么需要確定所安裝的Linux系統套裝軟件內是否擁有所有2.6內核所需的特性。
對重要的套裝軟件進行驗證和升級
所謂套裝軟件就是滿足不同需求的一系列工具軟件的集合。這些軟件可以一起作為一個整體安裝到系統中。不同的Linux系統所提供的套裝軟件和從屬管理軟件,首先要檢測系統中是否安裝了它們依賴的其它軟件,而且這些軟件的版本必須足夠新。這些套裝軟件的管理器常常會對全系統范圍的數據庫進行維護。該數據庫存儲所有已安裝應用軟件名稱和版本。zui普通的套裝軟件格式是RPM(Red Hat Package Manager,也用于Fedora、Mandrake、SuSE和TurboLinux套件)和DEB(Debian Linux,也用于Knoppix和Xandros套件)格式。其它的套裝軟件格式有標準壓縮程序文件TGZ格式,主要應用于Slackware Linux,自身不包括從屬信息。
[ 相關貼圖 ]
表1列出了不同的Linux套裝軟件。這些套件大多存在于基于2.4內核的Linux系統,而且可安裝在所有用于軟件開發的桌面Linux系統中。諸如嵌入式計算領域的專門系統也許并非缺一不可。然而如果用戶正在升級某一專門系統,那么了解這些套裝軟件需要在哪里升級是一件非常重要的事。
如果用戶正在將一個桌面Linux系統升級到2.6內核,那么對表1中的套裝軟件進行升級和驗證的惟一場所就是用戶的桌面系統。如果用戶正在移植一個諸如嵌入式Linux系統之類的專門系統,那么必須首先要升級所有的交叉編譯程序和正在使用的相關軟件,以便為嵌入式系統生產軟件。然后,才能升級嵌入式系統的文件系統中使用的所有套裝軟件。
當準備在現有的系統中使用2.6內核時,必須對所有安裝在原系統且在表1中列出的套裝軟件的版本進行驗證。如果版本低于表中的zui低版本限制,那么必須對它們進行升級。用戶只要執行第三欄中的命令,就可以查到套裝軟件的版本了。
如果用戶計劃使用某一特定的文件系統、硬件設備或管理體制,那么除了表1中列出的套裝軟件外,也許還需要升級其它的套裝軟件。
升級內置模塊的特殊處理
如果想實現2.6/2.4雙內核啟動,那么還需要對表1列出的內置模塊工具套裝軟件進行特殊處理。內置模塊工具的套裝軟件可為系統應用軟件提供模塊加載(insmod和 modprobe)、卸載(rmmod)、列表(lsmod)和從屬關系分析(depmod)功能。由于新內核的模塊命名和加載規則發生了變化,所以不能簡單地對這些工具的現有版本進行覆蓋,否則將無法正常管理2.4內核模塊。因此,內置模塊工具的套裝軟件的升級過程首先包括對2.4內核下的工具軟件重新命名,例如utility.old。這樣可以保留2.4內核需要的套裝軟件版本。如果內置模塊工具的套裝軟件經編譯后支持向下兼容,那么套件中的工具軟件可以自動執行這些工具的舊版本。這樣用戶可以不加任何修改,就實現雙內核啟動的目標。
如果用戶使用諸如DEB或RPM事先建立的套件升級內置模塊工具的套裝軟件,而且仍然需要雙內核啟動,那么在安裝新版本前,應該先檢查套件中是否包含一個預裝的小程序。該程序可以對已有相關模塊的二進制命令進行重命名。更簡單的方法是,從源代碼中為用戶的系統建立內置模塊工具的套裝軟件,此時“make”命令的目標之一是moveold,它可以復制已有相關模塊的二進制命令,以便它們在新版本安裝時不會丟失。這里給出對內置模塊工具的套裝軟件進行設置、組建和安裝的過程如下:
#./configure --prefix=/
#make moveold
#make
#make install
上面代碼中,*行命令對內置模塊工具的套裝軟件進行設置,以便它與原套件安裝在同一位置。第二行命令對現有的二進制命令進行重命名。第三行命令在內置模塊工具的套裝軟件中建立應用軟件。第四行命令對這些軟件進行安裝。
當然,從源代碼建立并安裝這些套裝軟件不會升級任何已安裝應用軟件的數據庫。這些數據庫通常由套件管理器進行維護。
安裝新版內置模塊工具的套裝軟件的zui后一步是運行一個外殼軟件。該軟件可以將2.4內核使用的模塊設置文件登錄口,轉換成為同等的2.6內核的(/etc/modprobe.conf)。該外殼軟件名為generate-modprobe.conf程序,只有一個參數,就是已有modules.conf文件的路徑名。運行完畢后,用戶還需檢查新文件,并根據兩個版本下硬件名稱變化,對它進行適當的升級。
需要升級的其它套裝軟件
[ 相關貼圖 ]
除了表1列出的套裝軟件外,如果用戶使用的功能恰巧由另外一些套裝軟件支持,那么用戶也許還需要升級其它的套件。表2列出了一些可能需要升級的套裝軟件。這些套裝軟件并非在所有Linux套件中都缺省存在,它們對于一些子系統或驅動程序具有特殊的意義。例如ISDN、PCMCIA卡、內核輪廓分析、配額文件系統、特殊的網絡或日志文件系統(nfs-utils、jfsutils、reiserfsprogs和 xfsprogs)。
應用Linux聲音架構
如果用戶使用的系統音頻功能不于內置的揚聲器和相關的發聲裝置,那么2.6內核的一個主要變化就是它采用了Linux聲音架構(ALSA)。ALSA目前是播放并管理音頻錄制和回放的缺省數字音頻架構。ALSA很早以前就代替開放聲音系統(OSS)應用于Linux平臺。盡管在2.6內核下,ALSA可提供一種OSS模擬模式對舊的應用軟件提供支持,但是升級系統使用ALSA才是長久之計。
TimeSys公司發現在升級內核前便采用ALSA是十分明智的。這樣,在用戶升級內核時可以減少多個不確定因素,并確保ALSA與硬件一起工作正常。此外,用戶還能避免一些內核升級過程中遇到的困難,并確保ALSA模塊設置命令已經存在于/etc/modules.conf文件中。
ALSA升級步驟如下:
◆ 從預先準備好的套裝軟件中獲取版本的ALSA驅動程序、庫和工具。雖然,2.6內核源代碼中有ALSA驅動程序,但用戶事先準備好ALSA套件。這樣用戶就可以在升級內核前,將系統升級到ALSA。如果用戶想使用ALSA的OSS模擬模式,那么也需要用戶獲取它的源代碼并安裝ALSA套件。
◆ 配置、編譯并組建ALSA套件,或者在系統中安裝二進制命令。
◆ 使用Alsaconf應用軟件對ALSA軟件進行配置。該軟件可搜索用戶安裝的聲音軟件,生成當前模塊加載信息,并選擇性地升級/etc/modules.conf文件。
◆ 使用alsamixer應用軟件激活ALSA。該軟件可開啟ALSA的設置(ALSAzui初是關閉著的)。
◆ 將/etc/rc.d/init.d/alsasound啟動文件與系統啟動時執行的命令文件連接起來。
◆ 執行generate-modprobe.conf程序,從而將ALSA模塊設置移植到/etc/modprobe.conf文件。它可與2.6內核需要的模塊工具一起工作。
ALSA與OSS相比有許多優勢。ALSA可以支持更多的音頻端口、聲卡和模塊化的驅動程序。由于內核和用戶空間是分開的,這樣可以簡化編寫、維護驅動程序和音頻應用軟件的過程。
升級系統設置文件
除了升級套裝軟件外,用戶通常需要手工升級一些系統啟動和設置程序,以便安裝使用新的文件系統,并支持2.6內核使用的模塊命名規則。
在升級內核時,用戶必須在/etc/fstab目錄下,為sysfs文件系統添加一行指令,建立一個入口。該入口指令的形式如下:
none /sys sysfs noauto 0 0
該入口可以為用戶的系統提供識別安裝sysfs文件系統的相關信息。如果用戶只想從2.6內核啟動,那么用戶只需defaults安裝選項,而不需noauto。這樣,無論何時當用戶執行“mount -a”命令時,系統就會自動安裝sysfs文件系統。
如果系統既能以2.4內核啟動,也可以2.6內核啟動,那么當以2.4內核啟動時,noauto安裝選項將禁止用戶的系統自動安裝sysfs文件系統。
升級系統啟動和關閉程序
正如上文提到的,與2.6內核相關的變化,諸如不同的文件名、模塊名和新功能,使得用戶在增加2.6內核啟動選項時需要對系統的啟動程序進行升級。
用戶需要改變的文件依賴于用戶的系統啟動順序和系統執行的啟動和關閉程序。不同的Linux套件在啟動過程中使用的具體文件不同,盡管大多數基于SysVinit和initscripts套裝軟件。可以同時應付2.4內核和2.6內核啟動過程的增強版套裝軟件可以直接由支持Linux系統的生產商提供。如果無法獲得此類套裝軟件,那么下面將告訴用戶需要做哪些改變。
如果用戶要建立一個雙內核啟動系統,但是Linux生產商無法提供升級后的啟動和關閉程序,那么根據用戶選擇的啟動內核為啟動程序設置條件是一個不錯的解決方案。zui簡單的方法是,在識別運行內核的基礎上,設置一個環境變量,示例如下:
#VERSION=`uname -a | sed -e 's;.* (2.6).*;1;'`
接下來用戶可以檢查這一變量的值,并執行與內核版本相適應的命令,例如:
if [ "x$VERSION" = "x" ] then
VERSION="2.4"
fi
if [ "x$VERSION" = "x2.6" ] then
action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
fi
使用2.6內核時,用戶需要對啟動程序所做的*個修改便是添加安裝sysfs文件系統的命令行。用戶的系統啟動程序之一,也許是/etc/rc.sysint或是 /etc/rc.d/rc.sysinit,包含著一個安裝proc系統的入口。這個入口可以在系統啟動時在/proc目錄下安裝Proc文件系統。
用戶還需要在安裝點/sys(用戶可以使用“mkdir /sys”命令建立)下為sysfs文件系統的安裝添加一個類似的入口。該入口在文件中的位置與/proc文件系統的安裝位置十分類似。
同樣,在2.6內核下,proc文件系統中包含內核符號信息的文件名也發生了變化。為了保證啟動程序可以找到內核符號,用戶需要將系統啟動文件中/proc/ksyms的所有示例變成/proc/kallsyms,后者的文件名可以被Linux2.6內核使用。
為了迎合2.6內核的特點,proc文件系統中的一些用于2.4內核的文件已移植到sysfs文件系統中。例如,USB硬件列表在2.4內核下存儲在/proc/bus/usb/devices文件中,而在2.6內核下則存儲在/sys/bus/usb/devices文件中。
此外,用戶還要對系統關閉過程中調用的所有程序進行相應的修改。例如,在Red Hat系統中,關閉進程會調用/etc/init.d/halt程序。該程序引用的是proc文件系統,而不是同等的sysfs文件系統。
內核編譯的簡便方法
在前面*篇文章中,曾詳細介紹了Linux 2.6內核的設置。如果用戶正在為一個已有的系統安裝2.6內核,并且自己對內核進行設置,那么zui簡單的方法是重新使用現有系統中的內核設置文件。用戶可以通過“make oldconfig”命令來設置目標。它是一個基于文本的接口,可以調出已有的設置文件并對所有從內核源代碼中找到的設置變量進行排序。
要想順利地將現有系統移植到2.6內核,還應注意在同一時間應盡可能少地修改。前文已經介紹了對套裝軟件、系統設置文件和啟動程序的修改。然而,如果用戶還要為系統增加ALSA支持,并按上文建議的在移植到2.6內核前便將系統升級至ALSA,那么用戶在確定2.6內核系統工作正常前,不要改變ALSA支持作為一個可加載內核模塊的特性。這樣,即使內核無法正常工作,用戶仍然可以在集成ALSA支持的基礎上對內核進行重新設置。
如果用戶要將一個商業Linux套件移植到2.6內核,那么也許不必為系統硬件的細節擔心。諸如Red Hat和SuSE等商業Linux套件的優勢之一就是它們擁有眾多集成或可加載內核模塊,可以為各種各樣的PC或嵌入式硬件設備提供支持。
如果正在移植一個商業Linux系統,而且擁有它的源代碼和內核設置文件,那么可以先按照上文的指示將設置文件移植到2.6內核下,并可激活用戶感興趣的各種功能和支持,例如ALSA。然后,便可以安裝設置2.6內核和各種相關模塊,重啟并測試系統。如果用戶沒有系統的設置文件,那么可以通過執行2.6內核源代碼目錄下的“make defconfig”命令,建立一個缺省的設置文件。不同的系統架構和不同的處理器擁有不同的內核設置變量。用戶可以通過在命令行目標的方式,看到不同架構下的設置變量。以PowerPC (PPC)系統為例,命令如下:
#make defconfig ARCH=ppc
生成缺省的2.6內核設置文件后,用戶必須對內核進行設置,以便提供系統硬件所需要的驅動程序。
這里無法介紹所有平臺的硬件識別方案,但是在大多數Linux套件中,硬件識別zui常用的兩個工具是Lspci和Lsusb。Lspci工具可以顯示所有PCI總線信息,并列出與它們相連的硬件設備。Lspci對于集成聲卡和顯卡的X86主板尤其有用,因為它可以識別使用在主板PCI電路中的確切芯片。Lsusb工具可提供USB總線和連接設備的同類信息。
在建立內核設置文件的過程中,用戶需要的其它硬件信息還包括CPU的型號。用戶可以使用xconfig設置編譯程序中的Processor或Processor type and features面板設置這些信息。
用戶也可以從/proc/cpuinfo文件中找到有關處理器型號的信息,只要執行“cat /proc/cpuinfo”命令就可以了。
zui后,還需要根據系統定制的內核功能,對新內核設置文件進行一些修改。例如,用戶要查看內核支持或使用的文件系統。執行“cat /proc/filesystems”命令,從/proc/filesystems文件中獲得有關文件系統類型的信息。例如,SuSE Linux系統作用的根文件系統是Reiserfs文件系統,但是Reiserfs文件系統在2.6內核下的缺省狀態是未被激活的。同樣,在2.6內核下,缺省狀態下無法使用初始RAM,也不支持訪問SMB和CIFS文件系統。這些都需要事*行設置。
小結
如果用戶已經按照這里介紹的方法移植或建立了內核設置文件,并對它進行了設置,那么就可以著手搭建并安裝內核和需要的模塊了。內核的搭建可以通過*內核源代碼目錄下的“make”命令來完成。“make”命令成功執行后,如何安裝內核和模塊需要看系統的類型了。如果要升級的是一個桌面x86系統,那么可以使用“make install”和“make modules_install”命令安裝內核和相關模塊。如果用戶正在為一個嵌入式系統交叉編譯2.6內核,那么“make”命令的目標要根據內核二進制命令的安裝位置和方式來確定。
上一篇:嵌入式Linux開發簡介
下一篇:鑄造鋁合金化學成分表
免責聲明
- 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
- 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
- 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
- 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
2025長三角國際智能儀表/線纜產業博覽會
展會城市:滁州市展會時間:2025-11-11