女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > 智能硬件 > 半導(dǎo)體
[導(dǎo)讀] 嵌入式Linux系統(tǒng)主要特點(diǎn)在于使用Bootloader替代了桌面系統(tǒng)的BIOS,同時(shí)對(duì)系統(tǒng)進(jìn)行了規(guī)模上的裁剪,但硬件上的劣勢(shì)往往導(dǎo)致系統(tǒng)啟動(dòng)速度較慢,而嵌入式產(chǎn)品使用者又對(duì)系統(tǒng)的開(kāi)機(jī)速度比較敏感,樣就產(chǎn)生了對(duì)于提

嵌入式Linux系統(tǒng)主要特點(diǎn)在于使用Bootloader替代了桌面系統(tǒng)的BIOS,同時(shí)對(duì)系統(tǒng)進(jìn)行了規(guī)模上的裁剪,但硬件上的劣勢(shì)往往導(dǎo)致系統(tǒng)啟動(dòng)速度較慢,而嵌入式產(chǎn)品使用者又對(duì)系統(tǒng)的開(kāi)機(jī)速度比較敏感,樣就產(chǎn)生了對(duì)于提高嵌入式Linux系統(tǒng)啟動(dòng)速度的需求。本文對(duì)系統(tǒng)啟動(dòng)時(shí)執(zhí)行哪些階段的操作,以及縮短這些操作時(shí)間的方法進(jìn)行了探討。

1 嵌入式Linux系統(tǒng)啟動(dòng)時(shí)序

目前,嵌入式系統(tǒng)的硬件平臺(tái)和應(yīng)用方向區(qū)別很大,但總體啟動(dòng)流程一致的。這里的系統(tǒng)啟動(dòng)是指從用戶執(zhí)行上電/復(fù)位操作,到系統(tǒng)開(kāi)始提供用戶可接收的服務(wù)水平所需要的過(guò)程。典型的上電/復(fù)位時(shí)序如表1所列。

表1 嵌入式Linux系統(tǒng)啟動(dòng)時(shí)序

2 Linux快速啟動(dòng)方法

目前,一些Linux的發(fā)行版本已經(jīng)對(duì)啟動(dòng)速度進(jìn)行了優(yōu)化。如果利用標(biāo)準(zhǔn)Linux進(jìn)行開(kāi)發(fā),則啟動(dòng)速度的提高主要是通過(guò)內(nèi)核配置和各種補(bǔ)丁包來(lái)實(shí)現(xiàn)的。下面分析快速啟動(dòng)的一些關(guān)鍵技術(shù)。

2.1 Firmware和Bootloader階段

目標(biāo)板一旦確定,F(xiàn)irmware運(yùn)行的時(shí)間就無(wú)法改變了,F(xiàn)lash和RAM的讀寫(xiě)速度也就隨之確定了。但

如果復(fù)位時(shí)能夠繞過(guò)Firmware和Bootloader,即允許運(yùn)行中的內(nèi)核加載以及運(yùn)行另一個(gè)內(nèi)核,可以縮短啟動(dòng)的時(shí)間。典型的實(shí)現(xiàn)有Kexec,它有2個(gè)組件,即用戶空間組件kexectools和內(nèi)核補(bǔ)丁。另外一種辦法是在內(nèi)核命令行中加入reboot=soft數(shù),同樣可以跳過(guò) Firmware,但是缺點(diǎn)在于無(wú)法從用戶空間調(diào)用。

對(duì)于正常啟動(dòng),可以選擇速度比較快的Bootloader,并對(duì)內(nèi)核進(jìn)行小型化處理;還可以使用高速的映像復(fù)制技術(shù)(如DMA2RAM),從而縮短復(fù)制的時(shí)間。為了縮短解壓消耗的時(shí)間,可尋求比較高效的壓縮算法。但一般情況下,壓縮比越高,算法越復(fù)雜,解壓速度就越慢,從而造成復(fù)制時(shí)間(與壓縮比成反比)和解壓時(shí)間(一般與壓縮比成正比)之間的矛盾。

2.2 內(nèi)核階段

內(nèi)核初始化時(shí)要對(duì)RealTime Clock (RTC)進(jìn)行同步。此過(guò)程要占用1s的時(shí)間,可去掉以節(jié)約時(shí)間,但這樣CPU會(huì)與正確的時(shí)間有1s的偏差,如果關(guān)機(jī)時(shí)CPU時(shí)鐘又要保存在RTC中,偏差就會(huì)不斷累積。但對(duì)于使用外部時(shí)鐘源進(jìn)行同步的系統(tǒng),則可安全地跳過(guò)這個(gè)階段。

Preset LPJ可以用來(lái)縮短每次啟動(dòng)時(shí)調(diào)用calibrate_delay()來(lái)校準(zhǔn)loops_per_jiffy消耗的時(shí)間。這個(gè)時(shí)間開(kāi)銷與CPU頻率無(wú)關(guān),在典型的嵌入式硬件環(huán)境下會(huì)消耗300ms左右。LPJ值對(duì)于固定硬件平臺(tái)應(yīng)該是一致的,可以只計(jì)算一次,在后續(xù)的啟動(dòng)中就可以在啟動(dòng)參數(shù)中強(qiáng)制指定LPJ值,而跳過(guò)實(shí)際的計(jì)算過(guò)程。具體方法是:在正常啟動(dòng)后記錄下內(nèi)核啟動(dòng)信息中的"Calibrating Delay"數(shù)值,在啟動(dòng)參數(shù)中以"lpj=xxxxxx"的形式強(qiáng)制指定。

啟動(dòng)過(guò)程默認(rèn)打開(kāi)控制臺(tái)輸出啟動(dòng)消息,但是控制臺(tái)尤其是基于幀緩沖的控制臺(tái)會(huì)減慢啟動(dòng)速度。因此在嵌入式Linux產(chǎn)品中,將啟動(dòng)過(guò)程中的控制臺(tái)設(shè)為靜默狀態(tài),方法是在內(nèi)核啟動(dòng)參數(shù)中加入"quiet"。

設(shè)備搜索和驅(qū)動(dòng)安裝是比較耗時(shí)的操作,因此要在編譯內(nèi)核時(shí)確定需要安裝哪些驅(qū)動(dòng)模塊,以免系統(tǒng)搜索那些根本不存在的設(shè)備,尤其是多余的IDE設(shè)備。對(duì)于啟動(dòng)時(shí)暫時(shí)不用安裝的設(shè)備,盡量將驅(qū)動(dòng)編譯成模塊,在以后空閑時(shí)或者使用設(shè)備時(shí)加載,而不是全部放在啟動(dòng)階段。

2.3 用戶空間階段

傳統(tǒng)Linux的初始化腳本是由bash執(zhí)行的,在內(nèi)核引導(dǎo)后啟動(dòng)init進(jìn)程(/sbin/init)。它使用一個(gè)ASCII文件(/etc/inittab)來(lái)改變運(yùn)行級(jí)別,這個(gè)文件中又會(huì)調(diào)用RCSript,由RCSript查找/etc/rc.d/rc5.d/并啟動(dòng)相應(yīng)鏈接指向的系統(tǒng)服務(wù)。

消費(fèi)電子類Linux系統(tǒng)需要啟用圖形界面等必要的服務(wù),未經(jīng)優(yōu)化的系統(tǒng)在這個(gè)過(guò)程中會(huì)默認(rèn)啟動(dòng)很多根本用不到或者當(dāng)前用不到的系統(tǒng)服務(wù),這一部分會(huì)花去較大的時(shí)間開(kāi)銷。最簡(jiǎn)單的優(yōu)化辦法就是根據(jù)實(shí)際需要,通過(guò)改寫(xiě)服務(wù)配置文件定制系統(tǒng)服務(wù)。另外,init腳本的執(zhí)行是串行的,在腳本量大時(shí)會(huì)導(dǎo)致引導(dǎo)過(guò)程非常,因此可以考慮并行運(yùn)行各種服務(wù)以加快啟動(dòng)的速度?,F(xiàn)在已經(jīng)出現(xiàn)了一些初始化程序來(lái)替代init進(jìn)程,下面介紹initng和upstart。

initng(init nextgerneration)能夠并行啟動(dòng)服務(wù)從而快速完成初始化工作。initng認(rèn)為滿足了依賴關(guān)系的服務(wù)就可以啟動(dòng)。在從外存加載一個(gè)腳本或等待硬件設(shè)備啟動(dòng)的同時(shí),可以運(yùn)行另一個(gè)腳本來(lái)啟動(dòng)別的服務(wù),使系統(tǒng)在CPU 和 I/O 之間實(shí)現(xiàn)較好的平衡。作為一個(gè)基于依賴關(guān)系的解決方案,initng使用自己的初始化腳本集,它們對(duì)服務(wù)和守護(hù)進(jìn)程的依賴性進(jìn)行了編碼。如果某個(gè)服務(wù)依賴(使用 need關(guān)鍵字定義)于其他服務(wù),則要保證啟動(dòng)時(shí)它所依賴的所有服務(wù)均可用。無(wú)依賴關(guān)系的服務(wù)立即并行啟動(dòng),具有依賴關(guān)系的服務(wù)則要等待以安全啟動(dòng)。

upstart與 initng的區(qū)別在于: upstart基于事件,任務(wù)/服務(wù)的啟動(dòng)/停止都取決于它所等待的事件是否發(fā)生。upstart對(duì)事件的定義非常靈活,分為3類:edge (simple) events, level (value) events和temporal events。使用start/stop、事件名以及它所期待的值(可選)組成條目對(duì)觸發(fā)事件進(jìn)行描述。事件依賴有兩種辦法:一種是任務(wù)自身導(dǎo)致事件發(fā)生,不管任務(wù)何時(shí)啟動(dòng)/結(jié)束都會(huì)有事件發(fā)生,對(duì)于啟動(dòng)時(shí)要執(zhí)行的基本任務(wù),這種辦法比較有效;而對(duì)于較復(fù)雜的依賴關(guān)系,則可使用任務(wù)的Shell腳本工具。

2.4 預(yù)讀取和預(yù)鏈接

預(yù)讀取(Readahead)可以將文件(程序和庫(kù)文件)在使用之前預(yù)先加載到RAM緩存中,這樣就不用在使用時(shí)為讀取這個(gè)文件而訪問(wèn)I/O。如果知道下一步操作要訪問(wèn)哪些文件,就可以提前將它們?nèi)?/p>

/部分讀取到緩沖區(qū),從而加快執(zhí)行速度。嵌入式系統(tǒng)很多場(chǎng)合下對(duì)于下一步操作都是可預(yù)測(cè)的,比如系統(tǒng)啟動(dòng)時(shí)總是以同樣的順序訪問(wèn)同樣的可執(zhí)行/數(shù)據(jù)文件,文件塊的訪問(wèn)往往是順序的,應(yīng)用程序啟動(dòng)時(shí)總是訪問(wèn)同樣的程序文件段、共享庫(kù)、資源或者輸入文件。這樣使用預(yù)讀取有很強(qiáng)的針對(duì)性,從而提高程序執(zhí)行速度。[!--empirenews.page--]

ELF(Excutable and Linkable File)是目前Linux中的標(biāo)準(zhǔn)二進(jìn)制格式,其啟動(dòng)需要以下步驟:將共享庫(kù)映射到虛擬地址空間;解析符號(hào)引用;初始化每個(gè)ELF文件。由于共享庫(kù)是位置無(wú)關(guān)的,要在運(yùn)行時(shí)完成部分重定位處理和符號(hào)查找的工作,才能跳到程序的入口點(diǎn),因此在帶來(lái)靈活性的同時(shí),也造成ELF文件的啟動(dòng)速度緩慢,尤其是解析符號(hào)引用要消耗大量的時(shí)間,對(duì)于使用多個(gè)共享庫(kù)的大型程序更是如此。但在很多嵌入式系統(tǒng)中,可執(zhí)行文件和共享庫(kù)極少變化,而且每次程序運(yùn)行時(shí)鏈接工作完全相同。

預(yù)鏈接(Prelink)利用這一點(diǎn),修改ELF共享庫(kù)和二進(jìn)制文件,將鏈接信息加入到可執(zhí)行文件中以簡(jiǎn)化動(dòng)態(tài)鏈接重定位,從而使程序啟動(dòng)加快。預(yù)鏈接首先搜集要預(yù)鏈接的ELF二進(jìn)制文件及其所依賴的共享庫(kù),為每個(gè)庫(kù)分配唯一的虛擬空間位置,并將共享庫(kù)重新鏈接到這個(gè)基準(zhǔn)位置(動(dòng)態(tài)鏈接器要加載這個(gè)庫(kù)時(shí),只要虛擬空間地址未被占用,它就會(huì)將庫(kù)映射到指定位置);然后預(yù)鏈接解析二進(jìn)制或者庫(kù)中的所有重定位,并將重定位信息存放到ELF對(duì)象,還要將所有依賴庫(kù)的列表及校驗(yàn)和添加到二進(jìn)制文件或庫(kù)中。對(duì)于二進(jìn)制文件,還需列出所有的沖突(在共享庫(kù)的自然搜索范圍內(nèi)對(duì)符號(hào)的解析不相同)。在運(yùn)行時(shí),動(dòng)態(tài)鏈接器先檢查是否所有依賴的庫(kù)都已經(jīng)映射到指定的位置,而且?guī)煳募](méi)有變化,只考慮沖突而不用處理每個(gè)庫(kù)的重定位,這樣大大提高了程序啟動(dòng)的速度。使用時(shí)要注意的是,若共享庫(kù)發(fā)生了改變,則使用它的所有程序都要重新鏈接,否則程序仍要進(jìn)行耗時(shí)的正常重定位。

12 責(zé)任編輯:Dav來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 分享到:
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉