<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 教你輕松控制uClinux 嵌入式開(kāi)發(fā)過(guò)程

教你輕松控制uClinux 嵌入式開(kāi)發(fā)過(guò)程

作者: 時(shí)間:2012-04-19 來(lái)源:網(wǎng)絡(luò ) 收藏

  是目前比較普及的嵌入式Linux版本之一,它的功能很多,并且隨著(zhù)低成本、可運行的32位CPU的激增,以及 首次成為L(cháng)inux 2.6內核的一部分,uClinux將更加流行(如圖1)。下面討論一下開(kāi)發(fā)者使用uClinux時(shí)如何控制開(kāi)發(fā)過(guò)程,以及將會(huì )遇到的與普通Linux的不同之處。

  圖1 uClinux運行在Palm上

  應用無(wú)內存管理

  uClinux與普通Linux系統的主要區別就是它沒(méi)有內存管理。在普通Linux下,通過(guò)使用虛擬內存(VM)來(lái)實(shí)現內存管理。虛擬內存一般是通過(guò)內存管理單元(Memory Management Unit,簡(jiǎn)稱(chēng)MMU)來(lái)實(shí)現,而在uClinux的世界里,經(jīng)??梢钥吹健癗OMMU”這個(gè)詞。

  在有虛擬內存的情況下,所有的進(jìn)程都在相同的地址空間運行,由虛擬內存系統處理虛擬內存到物理內存的映射。因此,即使進(jìn)程看到的虛擬內存是連續的,它所占的物理內存也可能是分散的,有的甚至被交換到了硬盤(pán)。因為物理內存能映射到進(jìn)程地址空間的任何位置,所以這種環(huán)境下能夠向正在運行的進(jìn)程添加內存。

  在沒(méi)有虛擬內存的情況下,每個(gè)進(jìn)程必須被分配到固定的內存位置。由于一個(gè)進(jìn)程的上、下(內存位置)都可能有別的進(jìn)程在運行,所以它通常不能動(dòng)態(tài)擴展內存。這就是說(shuō),在uClinux下運行的進(jìn)程不能在運行過(guò)程中動(dòng)態(tài)增加可用內存,這與傳統Linux下的情況有所不同。

  對于uClinux開(kāi)發(fā)者來(lái)說(shuō),分配內存是一個(gè)棘手的問(wèn)題,并且由于沒(méi)有任何形式的內存保護,任何應用程序或內核都可能破壞系統。更為糟糕的是,無(wú)意識的誤操作不會(huì )引人注意,造成要跟蹤隨機的、進(jìn)程間的破壞非常困難。但是這些缺陷對于uClinux來(lái)說(shuō)幾乎不算問(wèn)題,這是因為使用 uClinux的系統一般沒(méi)有硬盤(pán)驅動(dòng)器和足夠的內存,完全沒(méi)有必要做復雜的管理和交換。

 做足內存映射

  對于內核開(kāi)發(fā)者,uClinux與普通Linux區別很小。惟一真正會(huì )遇到的問(wèn)題是uClinux內核開(kāi)發(fā)者不能利用MMU提供的分頁(yè)支持,比如,依賴(lài)虛擬內存的tmpfs文件系統在uClinux下就不起作用。類(lèi)似的,普通Linux下的標準可執行文件格式 uClinux都不支持,因為它們都要利用虛擬內存的特性。uClinux需要一種新的格式——Flat,它是一種壓縮的可執行文件格式,只保存可執行的代碼和數據,以及將可執行程序裝載到內存時(shí)所需要的重定位信息。

  理解uClinux內核中內存映射的實(shí)現方式也是很有必要的,因為有些方式在uClinux系統上行不通,理解內存映射的實(shí)現后可以避免使用這些方式。uClinux要求內存映射能夠直接在文件系統中指到文件,從而保證它是順序的和連續的,否則就必須事先為文件分配好內存,并把數據拷貝到分配給它的內存塊上。

  因此,uClinux下有效內存映射的用法要素非常明確:首先,當前惟一能夠保證文件連續存儲的文件系統是ROM文件系統(Romfs),所以必須使用Romfs來(lái)避免傳統內存分配;其次,只有只讀的內存映射能夠被共享,也就是說(shuō),為了避免傳統內存分配,映射必須是只讀的。由于這些原因,uClinux下的開(kāi)發(fā)者不能利用“Copy-on- Write”特性。

  要將設備驅動(dòng)程序移植到uClinux環(huán)境,需要做一些修改,這并不是因為內核上的區別,而是由于與硬件細節相關(guān)部分有所不同造成的。比如,普通Linux下,SMC網(wǎng)絡(luò )驅動(dòng)程序可以支持ISA SMC卡。該驅動(dòng)程序是16位的,并且一般都分配到0x3ff以下的I/O地址空間。

  但是用來(lái)支持SMC卡的非ISA嵌入式版本,驅動(dòng)程序要求運行在8位、16位或32位模式下都是可能的,并且在滿(mǎn)32位的I/O地址中,中斷號一般要高于ISA的最大值16。所以,與硬件細節相關(guān)的部分可能還是要做一些移植工作。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: uClinux 嵌入式開(kāi)發(fā)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>