色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于MMU 32位嵌入式操作系統的模塊動態加載的設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:楊偉,羅蕾 ? 2020-09-28 09:54 ? 次閱讀

提出一種適用于嵌入式系統的模塊動態加載技術,設計實現簡單,占用資源少,開銷小,并且成功運用于DeltaOS.可提高系統的靈活性和擴屬性。介招加載與動態鏈接的原理和應用情況,解釋相關術語,描述基本設計思路:詳細說明該技術的核心。即模塊聲明、調用庫、兩級重定位表,最后給出結論。

隨著電子技術的飛速發展,嵌人式設備應用越來越廣泛,復雜度也越來越高。這使得硬件和軟件設計比例發生了很大變化,軟件開發的比重越來越大。然而傳統嵌入式開發過程中需要將應用與操作系統編譯鏈接成一個整體,然后下載到目標機上運行。如果在調試過程中發現問題,需要重新編鏈接然后重復下載運行的過程。這樣的開發流程周期長而且繁瑣,已經越來越不適應快速市場化的需要。

為了適應多樣化的嵌入式應用和加快嵌入式系統的開發過程,除了需要可靠的基礎平臺軟件的支持,如帶有文件系統、網絡協議棧的RTOS和配套的集成開發環境,更重要的是需要可以動態擴展的系統平臺。近年來,新一代的嵌入式操作系統已經開始使用動態擴展技術:將基本系統(包括操作系統以及其他共享功能調用庫)和應用程序開發分開處理,支持模塊更新和動態加載技術。很多主流的傳統嵌入式操作系統廠商,如windRiver、Green HilIs、Lynxworks,都推出了面向航空航天、基礎通信設備等領域的高可靠、高性能的RTOS版本,支持應用和系統組件的動態加載和更新;而在消費電子領域,相關的操作系統廠商,如symbian、Palm、Microsoft,更是積極推出了具有相應功能的操作系統,在新一代移動設備上得到了廣泛應用。

為了成為可動態擴展系統平臺,大部分嵌入式操作系統需要使用動態加載技術。總的來說,動態加載是指應用或者系統在運行過程中需要使用某模塊的服務,于是通過一系列預定的動作將指定模塊加載到系統中,讓調用者繼續順利工作。它實現的關鍵就是加載與動態鏈接技術。因為加載和動態鏈接互相依賴,關系緊密,所以將兩者放在一起進行討論。

1 加載與動態鏈接機制

加載主要負責將模塊程序從二級存儲設備(比如硬盤或者Flash)搬移到指定內存空間,并且將模塊交由系統加載器統一管理。

程序鏈接分為靜態鏈接、加載時鏈接和運行時鏈接。靜態鏈接就是將程序和它運行所需的全部庫鏈接成一個執行文件。它的優點是可以獨立運行、速度快,但是它鏈接生成的代碼尺寸比較大。加載時鏈接是指程序在編譯鏈接時不會把它用到的庫鏈接到執行程序中,而是在它被加載器加載時才解析執行文件,依次把用到的庫裝載到系統中讓其運行。它的優點是程序本身代碼量減小,但運行時程序占的內存并沒有減小,同時增加了加載器的工作量。動態鏈接是加載時鏈接的進一步發展,它是指將庫的加載過程延遲到程序運行時執行。這種方式不會給程序引入額外的代碼,也不會增加加載器的開銷,只有當應用真正使用某庫時才會加載該庫,減少了不必要的空間占用。它的缺點是可能會有一些運行開銷。

嵌入式系統中動態加載和普通的動態鏈接概念類似,但是嵌入式系統中的加載鏈接器有其自身的特點:它是交叉加載,主機端做一部分工作,比如程序的重定位,執行文件的解析等等;而目標機端相對簡單,主要做模塊搜索定位和空間分配,以及指定物理地址或者映射虛擬地址讓其運行。一部分嵌入式系統不支持虛擬內存,應用和內核共享存儲空間。當系統加載了多個應用到系統中時,一般需要使用overlap技術來解決內存空間有限的問題,即是當多個應用的運行地址空間沖突時,加載器會凍結當前暫時不運行的應用,讓新加載的應用使用指定的地址空間,PairnOS中就采用了這樣的設計。對于支持虛擬內存的嵌入式系統,加載器的工作被大大簡化,每個應用都有可以運行在同樣的虛擬的空間,不需要加載器為其重定位或使用overlap技術,因此提高了工作效率。Vxworks6.O,WinCE都使用了這種設計。兩種方式在不同的領域都有比較多的應用。

文中提出的模塊動態加載技術是基于支持MMU(Memory Management Unit)的32位嵌入式操作系統,采用了加載與動態鏈接技術。使用該技術構建的嵌人式系統面向高端市場,特別是對系統可靠性、安全性要求很高的領域。在DeltaOS新一代高可靠的版本HAR(High Available Reliable system)的研發過程中,即成功地實現了基于該設計的加載器LambdaLoader,達到了預期的性能要求。

2 模塊動態加載的設計

2.1 設計思路

首先定義一些概念:模塊、目標程序、接口函數地址表和調用庫(call Library)。

①模塊,主要是指加載器加載的一個單位,并且這里模塊的概念主要是強調它是為應用或者系統提供一系列服務的提供者。

②目標程序,是指模塊的使用者。它可以是應用,也可以是另一個模塊。

③接口函數地址表(文中也稱之為模塊重定位表),指在模塊中有一個數組表,該數組表的內容是該模塊對外提供的函數接口的地址。

④調用庫,是供模塊調用者鏈接使用的專有庫。它與相關模塊一一對應,將封裝了的模塊接口供目標程序使用。除此以外,它還有一個運行時才確定的模塊重定位表地址指針和模塊動態查找定位的代碼。

如果在系統中要實現動態加載,首先需要一種模塊定位機制,使得調用者能夠在系統中動態定位需要的模塊,其次是要能讓模塊與目標程序動態的關聯在一起,協調工作。為了解決這些問題,需要一系列相關的設計:規定模塊的聲明方式;簡化目標機端模塊地址空間定位的工作;重定位表的機制等等。基于這樣的設計,系統可以比較順利地實現動態加載。模塊動態加載的工作流程如圖l所示。這里描述的主要是目標機端的工作。

基于MMU 32位嵌入式操作系統的模塊動態加載的設計

2.2 模塊的聲明

模塊首先要定義它的相關屬性。這里使用模塊聲明文件來完成這個工作。模塊聲明文件中需要定義:模塊名字、版本、對外提供的API接口。在系統編譯模塊程序后,會調用一系列的script代碼。這些script會根據模塊名字查找模塊對應的模塊聲明文件,并根據該文件生成供模塊調用者使用的調用庫和與模塊一起鏈接的附加庫。

附加庫包含系統后臺通過調用script生成的接口函數地址表和模塊注冊函數。在每個模塊的初始化函數中,會調用一個模塊的注冊函數(該函數主要工作是向系統注冊模塊的名字和接口函數地址表地址)。當模塊被加載時,初始化函數會被系統調用,向系統注冊模塊信息,此后模塊交由加載器統一管理。

2.3 調用庫

每個模塊在提供一個模塊重定位表的同時,必須提供一個與之對應的模塊調用庫。別的目標程序必須并且只能通過調用庫來使用這個模塊提供的服務。每個調用庫都有一個存儲本模塊重定位表的地址指針變量。該變量在模塊被目標程序第一次使用時會被初始化為相應模塊重定位表地址。

在模塊第一次被目標程序使用即開始動態加載過程時,首先運行的是調用庫的庫初始化代碼(Library initialcode),它通過指定的系統調用來初始化庫中的模塊重定位表基地址指針。此后每次目標程序使用模塊提供的函數接口時,都通過以下公式得到該接口的實際地址:模塊接口實際地址=模塊重定位表基地址+函數index%26;#215;4

在該公式中,函數index是指對應函數在模塊重定位表中的數組下標值。因為根據模塊聲明文件生成的調用庫中已經包含了每個函數的索引信息(index),同時在32位系統中需要乘以4得到準確的偏移量,所以當調用庫中重定位表地址被初始化后,可以通過這樣一個簡單計算得到指定接口實際地址,完成函數調用。

當一個目標程序使用了模塊,并正確動態加載后,其關系如圖2所示。目標程序中鏈接了調用庫,包含了函數跳轉表和指向模塊重定位表基地址的指針(ModuleBase);模塊中則鏈接了附加庫,包含了函數接口地址表(模塊重定位表)。調用模塊函數時,經過動態加載模塊的過程以后,目標程序的模塊重定位表基址指針指向了對應模塊的函數接口表,然后函數調用就可以順利進行了。

基于MMU 32位嵌入式操作系統的模塊動態加載的設計

2.4 兩級重定位表

在嵌入式領域,為了降低性能開銷和增加確定性,目標機端加載器不會做程序重定位,而將相關工作在主機端完成,所以目標機端加載的所有程序都是絕對定位后的程序.為了實現系統動態擴展,必須使各個模塊能夠單獨鏈接生成執行程序,并且運行時不用關心彼此的定位,這樣即使一個模塊被動態替換后也能同其他程序一起協調運行。這里通過兩級重定位表機制來完成這個協調性的工作。

對于內核、操作系統組件模塊或提供服務給其他目標程序使用的模塊,要維護一張本模塊提供的接口函數地址表(即模塊重定位表,這里稱之為二級重定位表)。為了保證本模塊的向后兼容性,模塊必須保證其接口函數在模塊重定位表中的相對位置固定。即使今后不能提供這個接口函數,也需要將其保留,以保證同以前版本的二進制兼容性。

在模塊的初始化代碼中,模塊通過系統調用向加載器注冊這個模塊重定位表的地址,注冊時需提供模塊名和模塊重定位表的地址。加載器中管理著一個稱為一級重定向表的表格。這個表的表項是“模塊名”到“模塊重定位表地址”的映射。因為這只是一個映射關系,所以各個模塊對應的表項在一級表中的具體位置是可以改變的。

二級重定位表如圖3所示。

基于MMU 32位嵌入式操作系統的模塊動態加載的設計

使用兩級重定位表的規則如下:

①模塊可通過模塊重定位表向其他目標程序提供接口函數;

②目標程序要使用別的模塊提供的接口函數必須通過對應模塊的調用庫來實現;

③目標程序在使用別的模塊提供的接口函數之前,必須通過加載器提供的系統調用服務獲取對應模塊重定位表來基地址初始化對方的調用庫。

結 語

該設計實現了在嵌入式系統中的模塊動態加載與更新,使得在嵌入式軟件開發過程中,開發人員可以更有效的設計系統,共享資源,達到提高效率、產品快速市場化的目的。在基于DeltaOS的實現中,可以完成應用的任意加載卸載,系統組件的動態更新;多個應用可以共享一個全局的模塊;一個應用可以同時使用多個模塊等等。整個系統擴展性和靈活性大大提高,較好地滿足了實際需要。但是設計中對容錯性、健壯性的考慮還不夠,在應用與模塊的間接調用處理上還有優化的空間,所以在這些方面還需要進一步改進。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304816
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3587

    瀏覽量

    129436
  • 硬盤
    +關注

    關注

    3

    文章

    1308

    瀏覽量

    57282
  • 操作系統
    +關注

    關注

    37

    文章

    6801

    瀏覽量

    123285
  • Delta
    +關注

    關注

    1

    文章

    28

    瀏覽量

    12235
收藏 人收藏

    評論

    相關推薦

    嵌入式操作系統怎么實現網絡加載

    在復雜的應用系統中通常都需要嵌入式操作系統的支持,這樣嵌入式操作系統鏡像文件的尺寸往往就會變得比較大。可以選擇通過網絡將
    發表于 03-18 08:20

    嵌入式操作系統怎么選擇?

    嵌入式操作系統是ARM CPU的軟件基礎,從8/16單片機發展到以arm CPU核為代表的32嵌入
    發表于 04-07 07:13

    適合STM32的三大嵌入式操作系統

    ,μC/OS-II的移植相對比較簡單,只需要修改與處理器相關的代碼就可以。綜上可知,μC/OS-II是一個結構簡單、功能完備和實時性很強的嵌入式操作系統內核,針對于沒有MMU功能的CPU,它是非常合適
    發表于 06-29 11:32

    如何實現嵌入式操作系統的網絡加載

    如何實現嵌入式操作系統的網絡加載
    發表于 04-28 06:42

    嵌入式操作系統有哪些分類

    嵌入式操作系統分類操作系統有兩種 用MMU的 和 不用MMU的用MMU的是Windows Mac
    發表于 12-22 08:12

    嵌入式實時操作系統教程

    嵌入式實時操作系統教程:以VRTX為對象詳細介紹了嵌入式實時操作系統的原理和應用,特別是第一部分關于嵌入式實時
    發表于 04-19 21:55 ?44次下載
    <b class='flag-5'>嵌入式</b>實時<b class='flag-5'>操作系統</b>教程

    嵌入式操作系統的網絡加載實現

      在復雜的應用系統中通常都需要嵌入式操作系統的支持,這樣嵌入式操作系統鏡像文件的尺寸往往就會變得比較大。可以選擇通過網絡將
    發表于 08-25 14:02 ?1263次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>的網絡<b class='flag-5'>加載</b>實現

    嵌入式操作系統-李春杰

    主要內容: 嵌入式操作系統概述 典型嵌入式操作系統介紹 嵌入式操作系統選型
    發表于 01-04 18:30 ?0次下載

    嵌入式操作系統是什么_嵌入式操作系統有哪些

    驅動接口、通信協議、圖形界面、標準化瀏覽器等。嵌入式操作系統負責嵌入式系統的全部軟、硬件資源的分配、任務調度,控制、協調并發活動。它必須體現其所在
    發表于 04-08 14:36 ?2.1w次閱讀

    嵌入式系統中的模塊動態加載技術

    功能調用庫)和 應用程序開發分開處理,支持模塊更新和動態加載技術。很多主流的傳統嵌入式操作系統廠商,如windRiver、Green Hil
    發表于 04-02 14:38 ?760次閱讀

    嵌入式操作系統如何應用_嵌入式操作系統的組成

    本文首先介紹了入操作系統的特點,其次闡述了嵌入式操作系統的應用,最后介紹了嵌入式操作系統的組成
    發表于 09-01 16:36 ?3607次閱讀

    嵌入式操作系統

    參考:[1] 《嵌入式系統軟件及操作系統》1、嵌入式操作系統的功能在嵌入式
    發表于 10-21 11:21 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>

    嵌入式Linux操作系統引導加載程序BootLoarder

    嵌入式Linux操作系統引導加載程序BootLoarderBootLoarder是什么Linux操作系統分層BootLoarderBootLoader
    發表于 11-01 17:05 ?8次下載
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>操作系統</b>引導<b class='flag-5'>加載</b>程序BootLoarder

    嵌入式操作系統

    嵌入式操作系統一、嵌入式操作系統概述1.1 嵌入式操作系統的特點1.2
    發表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>

    什么是嵌入式操作系統

    嵌入式操作系統是一種專門的操作系統(OS),旨在為非計算機的設備執行特定任務。嵌入式操作系統的主要工作是運行允許設備完成其工作的代碼。
    的頭像 發表于 12-23 15:33 ?7767次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>?
    主站蜘蛛池模板: 色婷婷综合激情中文在线| 乡村教师电影版| 午夜理论片日本中文在线| 亚洲性无码AV久久成人| av56788成 人影院| 国产普通话精品久久| 美女脱18以下禁止看免费| 色裕插插插影视| 永久免费观看视频| 抽插性奴中出乳精内射| 久久国产精品无码视欧美| 日本久久网站| 影888午夜理论不卡| 国产69精品久久久久人妻刘玥| 久久久精品成人免费看| 色戒西瓜视频| 最新国产在线视频| 国产网站免费观看| 欧美日韩黄色| 伊人久久大香线蕉综合高清| 成人五级毛片免费播放| 久久青青草原综合伊人| 洗濯屋H纯肉动漫在线观看| 99精品影院| 九九热在线免费观看| 少妇无码吹潮久久精品AV| 在线成年av动漫电影| 国产区在线不卡视频观看| 清冷受被CAO的合不拢| 在线日本v二区不卡| 国产免费福利在线视频| 欧美最猛12teevideos欧美| 又黄又粗又爽免费观看| 国产日韩久久久精品影院首页 | 黄色网址在线看| 日日摸夜添夜夜夜添高潮| 91av影院| 久久精品一卡二卡三卡四卡视频版| 小蝌蚪视频在线观看免费观看WWW| YELLOW在线观看高清视频免费| 久久综合中文字幕无码|