0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用于單片機(jī)的uCLinux和Linux有什么區(qū)別?

strongerHuang ? 來(lái)源:strongerHuang ? 2023-05-17 10:45 ? 次閱讀

uCLinux:micro-Control linux,即“針對(duì)微控制器領(lǐng)域中的Linux系統(tǒng)”。

uCLinux主要是針對(duì)目標(biāo)處理器沒(méi)有存儲(chǔ)管理單元MMU(Memory Management Unit)的嵌入式系統(tǒng)而設(shè)計(jì)的。它已經(jīng)被成功地移植到了很多平臺(tái)上。由于沒(méi)有MMU,其多任務(wù)的實(shí)現(xiàn)需要一定技巧。 ---來(lái)自百度百度

分享正文之前,給大家推薦一些嵌入式相關(guān)的招聘信息。

uClinux是針對(duì)控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來(lái),沿襲了主流Linux的絕大部分特性。適合不具備內(nèi)存管理單元(MMU)的微處理器/微控制器,沒(méi)有MMU支持是 uClinux與主流Linux的基本差異。

有無(wú)MMU區(qū)別

如果處理器沒(méi)有MMU,或者有MMU但沒(méi)有啟用,CPU執(zhí)行單元發(fā)出的內(nèi)存地址將直接傳到芯片引腳上,被內(nèi)存芯片接收,這稱為物理地址(Physical Address),如下圖:

ce83bb08-f45b-11ed-90ce-dac502259ad0.png

未使用MMU 如果處理器啟用了MMU,CPU執(zhí)行單元發(fā)出的內(nèi)存地址將被MMU截獲,從CPU到MMU的地址稱為虛擬地址(Virtual Address),而MMU將這個(gè)地址翻譯成另一個(gè)地址發(fā)到CPU芯片的外部地址引腳上,也就是將虛擬地址映射成物理地址,如下圖:

ce890676-f45b-11ed-90ce-dac502259ad0.png

使用了MMU 對(duì)uCLinux 來(lái)說(shuō),其設(shè)計(jì)針對(duì)沒(méi)有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù)。uCLinux仍然采用存儲(chǔ)器的分頁(yè)管理,系統(tǒng)在啟動(dòng)時(shí)把實(shí)際存儲(chǔ)器進(jìn)行分頁(yè)。在加載應(yīng)用程序時(shí)程序分頁(yè)加載。但是由于沒(méi)有MMU管理,所以實(shí)際上uCLinux采用實(shí)存儲(chǔ)器管理策略。 uCLinux系統(tǒng)對(duì)于內(nèi)存的訪問(wèn)是直接的,所有程序中訪問(wèn)的地址都是實(shí)際的物理地址。操作系統(tǒng)對(duì)內(nèi)存空間沒(méi)有保護(hù),各個(gè)進(jìn)程實(shí)際上共享一個(gè)運(yùn)行空間。一個(gè)進(jìn)程在執(zhí)行前,系統(tǒng)必須為進(jìn)程分配足夠的連續(xù)地址空間,然后全部載入主存儲(chǔ)器的連續(xù)空間中。

uCLinux與Linux幾點(diǎn)區(qū)別

uCLinux與Linux相比,MMU是最基礎(chǔ)的區(qū)別,其實(shí)還有很多區(qū)別。 1.沒(méi)有內(nèi)存保護(hù)沒(méi)有內(nèi)存保護(hù)的操作會(huì)導(dǎo)致這樣的結(jié)果: 即使由無(wú)特權(quán)的進(jìn)程來(lái)調(diào)用一個(gè)無(wú)效指針,也會(huì)觸發(fā)一個(gè)地址錯(cuò)誤,并潛在地引起程序崩潰,甚至導(dǎo)致系統(tǒng)的掛起。顯然,在這樣的系統(tǒng)上運(yùn)行的代碼必須仔細(xì)編程,并深入測(cè)試來(lái)確保健壯性和安全。 對(duì)于普通的Linux來(lái)說(shuō),需要運(yùn)行不同的用戶程序,如果沒(méi)有內(nèi)存保護(hù)將大大降低系統(tǒng)的安全性和可靠性;然而對(duì)于嵌入式uClinux系統(tǒng)而言,由于所運(yùn)行的程序往往是在出廠前已經(jīng)固化的,不存在危害系統(tǒng)安全的程序侵入的隱患,因此只要應(yīng)用程序經(jīng)過(guò)較完整的測(cè)試,出現(xiàn)問(wèn)題的概率就可以控制在有限的范圍內(nèi)。 2.沒(méi)有自動(dòng)生長(zhǎng)的堆棧uCLinux沒(méi)有自動(dòng)生長(zhǎng)的堆棧,也沒(méi)有brk()函數(shù),這樣,用戶空間的程序必須使用mmap() 命令來(lái)分配內(nèi)存。為了方便,在uclinux的C語(yǔ)言庫(kù)中所實(shí)現(xiàn)的malloc()實(shí)質(zhì)上就是一個(gè)mmap()。在編譯時(shí),可以指定程序的堆棧大小。 3.通用架構(gòu)的內(nèi)核不同在uCLinux的發(fā)布中,/linux/mmnommu目錄取代了/linux/mm目錄.前者是修改后的內(nèi)存管理子系統(tǒng) 被修改,去除了MMU的硬件依賴,并在內(nèi)核軟件自身提供基本的內(nèi)存管理函數(shù)。 更多區(qū)別,大家可以進(jìn)一步研究。 四、uCLinux和STM32uCLinux主要用于MCU和MPU,對(duì)于市面上常見(jiàn)的STM32也是做了很好的支持。

ce9089d2-f45b-11ed-90ce-dac502259ad0.jpg

關(guān)于uCLinux如何應(yīng)用在STM32上,這里不詳細(xì)講述,感興趣的可以自行網(wǎng)上了解,有很多相關(guān)資料。

ce96f344-f45b-11ed-90ce-dac502259ad0.jpg

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7458

    瀏覽量

    150858
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44491

    瀏覽量

    632005
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    用于單片機(jī)uCLinuxLinux什么區(qū)別?

    uCLinux: micro-Control linux,即“針對(duì)微控制器領(lǐng)域中的Linux系統(tǒng)”。
    發(fā)表于 05-17 10:45 ?549次閱讀
    <b class='flag-5'>用于</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>uCLinux</b>和<b class='flag-5'>Linux</b><b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>?

    ARM和單片機(jī)什么區(qū)別

    ARM和單片機(jī)什么區(qū)別
    發(fā)表于 03-12 06:58

    單片機(jī)學(xué)習(xí)與基于ARM+Linux裸機(jī)學(xué)習(xí)什么區(qū)別?

    單片機(jī)學(xué)習(xí)與基于ARM+Linux裸機(jī)學(xué)習(xí)什么區(qū)別?
    發(fā)表于 01-19 07:44

    FPGA和單片機(jī)什么區(qū)別?

    FPGA和單片機(jī)什么區(qū)別?好像性能參數(shù)上也差不了太多。
    發(fā)表于 11-02 07:34

    FPGA和單片機(jī)什么區(qū)別呢?

    到底FPGA和單片機(jī)什么區(qū)別呢?根據(jù)我的經(jīng)驗(yàn),可以用下面進(jìn)行概述。
    發(fā)表于 02-11 08:00 ?4.3w次閱讀

    單片機(jī)通信uart和modbus什么區(qū)別

    單片機(jī)通信uart和modbus什么區(qū)別,modbus是一個(gè)應(yīng)用層的協(xié)議,他是構(gòu)建在串口,網(wǎng)線等底層傳輸基礎(chǔ)上的。uart只是串口協(xié)議而已。
    的頭像 發(fā)表于 04-11 17:02 ?2w次閱讀

    瑞薩單片機(jī)和51單片機(jī)什么區(qū)別

    瑞薩單片機(jī)和51單片機(jī)什么區(qū)別? 瑞薩單片機(jī)8位32位
    發(fā)表于 10-10 08:00 ?45次下載

    DSP與單片機(jī)到底什么區(qū)別

    什么區(qū)別看到某論壇一篇關(guān)于DSP和單片機(jī)區(qū)別的帖子,經(jīng)過(guò)仔細(xì)整理,現(xiàn)在再次介紹DSP與單片機(jī)區(qū)別,同時(shí)讓自己重溫一下 DSP與
    發(fā)表于 09-24 17:18 ?6次下載
    DSP與<b class='flag-5'>單片機(jī)</b>到底<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>

    單片機(jī)中C51的關(guān)系與&&和位&的什么區(qū)別

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)中C51的關(guān)系與&&和位&的什么區(qū)別
    發(fā)表于 07-09 17:40 ?1次下載
    <b class='flag-5'>單片機(jī)</b>中C51的關(guān)系與&&和位&的<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>

    51單片機(jī)中變量的存儲(chǔ)類型什么區(qū)別

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)中變量的存儲(chǔ)類型什么區(qū)別。
    發(fā)表于 07-03 17:41 ?0次下載
    51<b class='flag-5'>單片機(jī)</b>中變量的存儲(chǔ)類型<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>

    單片機(jī)中斷與CPU的輪詢什么區(qū)別

    單片機(jī)編程過(guò)程中,經(jīng)常會(huì)使用到中斷。那么,什么是單片機(jī)中斷,它與CPU的輪詢什么區(qū)別?在本文中,單片機(jī)開(kāi)發(fā)工程師將對(duì)
    發(fā)表于 06-29 11:30 ?3586次閱讀

    單片機(jī)和plc什么區(qū)別

    單片機(jī)和plc之間什么區(qū)別?首先單片機(jī)是芯片,不能獨(dú)立使用。而PLC是由單片機(jī)組成的通用控制器,可以直接使用。
    發(fā)表于 07-20 09:47 ?9545次閱讀

    單片機(jī)和PLC什么區(qū)別?

    單片機(jī)和PLC什么區(qū)別?
    發(fā)表于 11-13 19:21 ?11次下載
    <b class='flag-5'>單片機(jī)</b>和PLC<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>?

    單片機(jī)和PLC什么區(qū)別?

    單片機(jī)和PLC什么區(qū)別?
    發(fā)表于 11-23 16:21 ?79次下載
    <b class='flag-5'>單片機(jī)</b>和PLC<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b>?

    Linux基礎(chǔ)入門:單片機(jī)Linux什么不同嗎

    我發(fā)現(xiàn)很多初學(xué)者只有單片機(jī)基礎(chǔ),甚至沒(méi)有單片機(jī)基礎(chǔ)。在學(xué)習(xí)Linux時(shí),對(duì)很多概念比較陌生,導(dǎo)致不知道學(xué)什么,也不知道學(xué)了之后有什么用。所以小編在此分享此文。第1章 單片機(jī)
    發(fā)表于 12-07 17:36 ?4次下載
    <b class='flag-5'>Linux</b>基礎(chǔ)入門:<b class='flag-5'>單片機(jī)</b>和<b class='flag-5'>Linux</b><b class='flag-5'>有</b>什么不同嗎