嵌入式Linux初始化硬件RTC,嵌入式Linux系統中的快速啟動技術研究

嵌入式Linux系統主要特點在于使用Bootloader替代了桌面系統的BIOS,同時對系統進行了規模上的裁剪,但硬件上的劣勢往往導致系統啟動速度較慢,而嵌入式產品使用者又對系統的開機速度比較敏感,樣就產生了對于提高嵌入式Linux系統啟動速度的需求。本文對系統啟動時執行哪些階段的操作CONTROL ENGINEERING China版權所有,以及縮短這些操作時間的方法進行了探討。

1 嵌入式Linux系統啟動時序

目前,嵌入式系統的硬件平臺和應用方向區別很大,但總體啟動流程一致的。這里的系統啟動是指從用戶執行上電/復位操作,到系統開始提供用戶可接收的服務水平所需要的過程。典型的上電/復位時序如表1所列。

表1 嵌入式Linux系統啟動時序

2 Linux快速啟動方法

目前,一些Linux的發行版本已經對啟動速度進行了優化。如果利用標準Linux進行開發,則啟動速度的提高主要是通過內核配置和各種補丁包來實現的。下面分析快速啟動的一些關鍵技術。

2.1 Firmware和Bootloader階段

目標板一旦確定,Firmware運行的時間就無法改變了,Flash和RAM的讀寫速度也就隨之確定了。但如果復位時能夠繞過Firmware和Bootloader,即允許運行中的內核加載以及運行另一個內核,可以縮短啟動的時間。典型的實現有Kexec,它有2個組件,即用戶空間組件kexectools和內核補丁。另外一種辦法是在內核命令行中加入reboot=soft數www.cechina.cn,同樣可以跳過Firmware,但是缺點在于無法從用戶空間調用。

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

2.2 內核階段

內核初始化時要對RealTime Clock (RTC)進行同步。此過程要占用1s的時間www.cechina.cn,可去掉以節約時間,但這樣CPU會與正確的時間有1s的偏差,如果關機時CPU時鐘又要保存在RTC中,偏差就會不斷累積。但對于使用外部時鐘源進行同步的系統,則可安全地跳過這個階段。

Preset LPJ可以用來縮短每次啟動時調用calibrate_delay()來校準loops_per_jiffy消耗的時間。這個時間開銷與CPU頻率無關,在典型的嵌入式硬件環境下會消耗300ms左右。LPJ值對于固定硬件平臺應該是一致的,可以只計算一次,在后續的啟動中就可以在啟動參數中強制指定LPJ值,而跳過實際的計算過程。具體方法是:在正常啟動后記錄下內核啟動信息中的"Calibrating Delay"數值,在啟動參數中以"lpj=xxxxxx"的形式強制指定。

啟動過程默認打開控制臺輸出啟動消息,但是控制臺尤其是基于幀緩沖的控制臺會減慢啟動速度。因此在嵌入式Linux產品中,將啟動過程中的控制臺設為靜默狀態,方法是在內核啟動參數中加入"quiet"。

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

2.3 用戶空間階段

傳統Linux的初始化腳本是由bash執行的,在內核引導后啟動init進程(/sbin/init)。它使用一個ASCII文件(/etc/inittab)來改變運行級別控制工程網版權所有,這個文件中又會調用RCSript,由RCSript查找/etc/rc.d/rc5.d/并啟動相應鏈接指向的系統服務。

消費電子類Linux系統需要啟用圖形界面等必要的服務,未經優化的系統在這個過程中會默認啟動很多根本用不到或者當前用不到的系統服務,這一部分會花去較大的時間開銷。最簡單的優化辦法就是根據實際需要,通過改寫服務配置文件定制系統服務。另外控制工程網版權所有,init腳本的執行是串行的,在腳本量大時會導致引導過程非常,因此可以考慮并行運行各種服務以加快啟動的速度。現在已經出現了一些初始化程序來替代init進程,下面介紹initng和upstart。

initng(init nextgerneration)能夠并行啟動服務從而快速完成初始化工作。initng認為滿足了依賴關系的服務就可以啟動。在從外存加載一個腳本或等待硬件設備啟動的同時,可以運行另一個腳本來啟動別的服務,使系統在CPU 和 I/O 之間實現較好的平衡。作為一個基于依賴關系的解決方案,initng使用自己的初始化腳本集,它

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ajax總結

Ajax的核心技術是XMLHttpRequest對象,它可以在不向服務器提交整個頁面的情況下,實現局部更新網頁。通過這個對象,Ajax可以像桌面應用程序那樣只與服務器進行數據層的交換,而不必每次都刷新界面,也不必每次將數據處理的工作都交給服…

SpringMVC訪問靜態資源的三種方式

如何你的DispatcherServlet攔截 *.do這樣的URL,就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截“/”,攔截了所有的請求,同時對*.js,*.jpg的訪問也就被攔截了。 目的:可以正常訪問靜態文件,不要找不到…

電腦如何進入bios模式_華碩筆記本電腦開機自動進入BIOS界面怎么辦?

最近很多人的華碩牌子筆記本有問題,說自己開機就直接進入BIOS了。對于這些小白來說,一臉懵逼啊,不知道怎么解決,其實大家也不要著急,堅哥來簡單幫大家分析一下。第一、可能系統的文件被更改,從而導致無法啟…

springmvc在controller和視圖之間傳遞參數

從視圖向controller傳遞值&#xff0c; controller <--- 視圖 1&#xff09;簡單類型&#xff0c;如int, String, 應在變量名前加RequestParam注解&#xff0c;例如&#xff1a; RequestMapping("hello3")public String hello3( RequestParam("name" …

蘋果手機怎么清理聽筒灰塵_怎么清理手機聽筒的灰塵?

作為一個專業的強迫癥從業者&#xff0c;我已經看不慣手機聽筒的灰塵很久了&#xff0c;在經歷無數次失敗之后&#xff08;針&#xff0c;牙刷&#xff0c;牙簽&#xff0c;吸塵器等等&#xff09;。我必須要來分享一個超級實用的方法清理手機聽筒的灰塵。那就是&#xff0c;起…

linux mrtg 命令,linux服務器之流量監控(MRTG)

本系列文章原則&#xff1a;灰常詳細&#xff0c;灰常簡單&#xff0c;新手包學包會&#xff01;因其簡單&#xff0c;故未涉及安全性方面的考慮呵&#xff01;本實驗服務器為rhel-5-server-i386&#xff0c;客戶端為windows xp。本實驗所用軟件包均在rhel-5-server-i386-dvd.i…

搭建網站必不可少的知識14

安全組配置 “操作”-“安全組配置” 單擊“內網入方向”&#xff0c;“添加安全組規則”默認配置即可“確定”。在公網入方向和公網出方向都這樣添加上。&#xff08;如果存在就先刪除后在添加&#xff09;。現在應該能登錄了。 輸入密碼&#xff0c;點擊“確定” 登錄后只有一…

8代cpu能跑linux,Intel公布6/7/8代桌面CPU打漏洞補丁性能結果:影響很小

今天&#xff0c;Intel執行副總裁數據、數據中心事業部總經理Navin Shenoy(孫納頤)發布了第二篇性能測試文章&#xff0c;針對客戶端也就是桌面平臺用戶在打上修復“Spectre”和“Meltdown”漏洞補丁之后的實際情況。對于大部分普通電腦用戶來說&#xff0c;性能的影響并不顯著…

Spring mvc interceptor配置攔截器

原文&#xff1a;http://blog.csdn.net/liyisong2008/article/details/42915715 -------------------------------------------------------------------------- xml代碼&#xff1a; [java] view plaincopy <?xml version"1.0" encoding"UTF-8"?>…

rm: 無法刪除swap: 不允許的操作_safe-rm老板再也不用擔心我刪庫跑路啦[視頻]

saferm 老板再不怕我刪庫跑路https://www.zhihu.com/video/1177717527541731328在 linux 上&#xff0c;使用 rm 是一件非常危險的事情(最近又有朋友遇到了我才想起了寫這篇文章)&#xff0c;如果不幸手殘執行了 rm -rf 刪除了重要文件&#xff0c;建議你準備收拾包袱跑路吧。既…

視頻通信基礎知識之采集

在之前的文章里&#xff0c;我們說了不少關于音視頻相關的內容&#xff0c;但是一直沒有系統的來介紹視頻通信&#xff0c;接下來我們將出一個系列關于視頻通信的文章。幫助大家對視頻通信有一個更全面的認識。系列文大綱如下&#xff1a;視頻通信采集視頻通信處理視頻通信編碼…

Spring MVC 流程圖

Spring工作流程描述1. 用戶向服務器發送請求&#xff0c;請求被Spring 前端控制Servelt DispatcherServlet捕獲&#xff1b;2. DispatcherServlet對請求URL進行解析&#xff0c;得到請求資源標識符&#xff08;URI&#xff09;。然后根據該URI&#xff0c;調用HandlerMapping獲…

kafka maven沒有下載_Kafka 系列(三)——Kafka 生產者詳解

首先介紹一下 Kafka 生產者發送消息的過程&#xff1a;Kafka 會將發送消息包裝為 ProducerRecord 對象&#xff0c; ProducerRecord 對象包含了目標主題和要發送的內容&#xff0c;同時還可以指定鍵和分區。在發送 ProducerRecord 對象前&#xff0c;生產者會先把鍵和值對象序列…

linux 硬盤繁忙,icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)

icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)下載地址&#xff1a;https://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Iostat-Updated/details對腳本進行修改(默認為$12&#xff0c;12為w_await值&#xff0c;14為%util值)UTI…

centos7安裝kubernetes1.9集群

節點規劃 本次選用一個master節點&#xff0c;三個node節點來安裝k8s集群。   節點IPM010.xx.xx.xxN010.xx.xx.xxN110.xx.xx.xxN210.xx.xx.xx集群啟動前的準備(請用root用戶執行) 節點準備工作(在每臺機器上執行) 包括修改主機名&#xff0c;關閉防火墻等操作。  k8s集群會…

oracle中查詢某張表的大小

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_nametable_name;--注&#xff0c;僅表數據的大小&#xff0c;不含索引、分區、LOB類型 select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segm…

python圖像分割算法_OpenCV-Python 圖像分割與Watershed算法 | 三十四

目標 在本章中&#xff0c; 我們將學習使用分水嶺算法實現基于標記的圖像分割 我們將看到&#xff1a;cv.watershed() 理論 任何灰度圖像都可以看作是一個地形表面&#xff0c;其中高強度表示山峰&#xff0c;低強度表示山谷。你開始用不同顏色的水(標簽)填充每個孤立的山谷(局…

linux dns 問題嗎,Linux下DNS的問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:37:06 BJ-linux system-config-network[4031]: - //etc/…

NEO從源碼分析看共識協議

2019獨角獸企業重金招聘Python工程師標準>>> 0x00 概論 不同于比特幣使用的工作量證明&#xff08;PoW&#xff09;來實現共識&#xff0c;NEO提出了DBFT共識算法。DBFT改良自股權證明算法&#xff08;PoS&#xff09;&#xff0c;我沒有具體分析過PoS的源碼&#x…

oracle實現id自增和設置主鍵

1、關于主鍵&#xff1a;在建表時指定primary key字句即可&#xff1a; create table test( id number(6) primary key, name varchar2(30) ); 如果是對于已經建好的表&#xff0c;想增加主鍵約束&#xff0c;則類似語法&#xff1a; alter table test add constraint p…