<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è) > 嵌入式系統 > 設計應用 > 如何在16位單片機上移植linux

如何在16位單片機上移植linux

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
一、一些想法
一直以來(lái),linux被認為是個(gè)32位的“現代化”操作系統,一般也沒(méi)有人在8位、16位單片機上面去移植linux。但是,從原理上來(lái)講,從任意位數的單片機,都是可以運行linux的——本質(zhì)上就是個(gè)操作系統么,既然ucos可以,為什么linux不行?
于是,我的畢業(yè)設計打算做這個(gè)選題。當然,雖然從原理上來(lái)講是可行的,但是在實(shí)際中遇到了一個(gè)非常大的困難,那就是底層的代碼量改動(dòng)非常大。并且linux體系中涉及到很多32位的東西,比如MMU。
后來(lái)就萌發(fā)了另外一個(gè)思路:作為uclinux而言,本身是為了不支持MMU的單片機而設計的,可以考慮移植uclinux到16位單片機上面。同時(shí),linux的早期版本,對ram和flash的要求都比較小,因此考慮移植早期版本的uclinux。
二、新的思路及其價(jià)值
但是今天又在google上面搜索,突然見(jiàn)到了如下的文章:
http://dmitry.co/index.php?p=./04.Thoughts/07.%20Linux%20on%208bit
這篇文章是用8位單片機來(lái)啟動(dòng)ubuntu,并且發(fā)表時(shí)間也比較新(代碼最后修改是在3.22號,最近的網(wǎng)站更新是在4.3號)。其參考價(jià)值在于,作者并沒(méi)有采用傳統的“移植”的方法,來(lái)將linux的內核直接搬到8位的單片機上面,而是通過(guò)加入了一個(gè)中間層的方法——首先,作者在8位單片機上面實(shí)現了一個(gè)ARM模擬器,模擬出來(lái)一個(gè)ARM環(huán)境;其次,將linux內核在模擬的ARM環(huán)境中進(jìn)行了運行。其巧妙之處在于,避開(kāi)了復雜的移植過(guò)程(以及16位和32位的兼容性問(wèn)題),將工作主要集中在如何在8位單片機上模擬32位的單片機(并且模擬了諸如MMU、DMA等系統模塊,以及UART等外設)。那么這樣的工作還有另外一個(gè)重要的價(jià)值:在要求不高的情況下,我們可以采用更廉價(jià)、更低端的單片機(16位單片機、廉價(jià)的32位單片機)來(lái)模擬高端的單片機(ARM9系列等等)。
三、新思路的具體實(shí)現方案
實(shí)際上從原理上來(lái)講,這種思路的實(shí)現也很簡(jiǎn)單。不考慮外設(當然部分外設也可以模擬,比如模擬IIC,模擬SPI)的情況下,實(shí)際上單片機內部就是①指令集②寄存器。
首先來(lái)說(shuō)寄存器。實(shí)際上32位的單片機,其寄存器都是32位的。同時(shí),每個(gè)單片機的核心寄存器就那么幾個(gè)(比如8086,就是AX BX CX DX,還有DS SS SP等等)。既然是寄存器,那么對于8位單片機來(lái)說(shuō),32位的寄存器不就是4個(gè)寄存器連接起來(lái)么?不就相當于一個(gè)結構體(或者是數組)么?因此,我們的模擬器可以考慮用一系列的結構體來(lái)模擬32位單片機的內部寄存器。
再來(lái)說(shuō)指令集。不同單片機之間的指令集是不同的,這個(gè)道理顯而易見(jiàn)(同時(shí),這個(gè)也是阻礙linux或者其他操作系統移植的最大的因素,因為移植linux的話(huà)最難的部分就在于底層匯編的編寫(xiě))。但是,匯編語(yǔ)言的本質(zhì)是什么?實(shí)際上就是機器語(yǔ)言的一種表現形式。那么機器語(yǔ)言是什么?不就是0和1么。話(huà)又說(shuō)回來(lái),所有的C語(yǔ)言的程序,最終都需要轉化成機器語(yǔ)言才能夠執行——也就是說(shuō),C語(yǔ)言和機器語(yǔ)言是對應的。那么,如果我手頭有一個(gè)ARM編譯出來(lái)的程序,那么肯定全部是機器語(yǔ)言,由0和1組成。如果我知道ARM系列每個(gè)機器語(yǔ)言的含義,并且對這個(gè)編譯出來(lái)的程序進(jìn)行解碼,那么就能得到對應的每一句的匯編語(yǔ)言(這也就是所謂的反編譯)。那么,如果我們在8位單片機的程序中,首先讀出ARM編譯出來(lái)的程序中每一句機器指令,然后加以解析,并且將這個(gè)機器指令對應的操作進(jìn)行實(shí)現——那么我們不就通過(guò)程序,來(lái)完成了ARM單片機中CPU的功能么?那么,這樣我們實(shí)際上就通過(guò)8位單片機上面的程序,完成了32位命令的解析,也就完成了一個(gè)ARM模擬器的工作的大部分。
當然,除了上述兩項,還有就是linux運行畢竟還是需要一定量的RAM和外設,因此我們還要再加入一些外部RAM和FLASH,這些方案沒(méi)有什么難度,就只是工作量的問(wèn)題啦。
四、一點(diǎn)展望

剛才那篇文檔的作者,已經(jīng)實(shí)現了ARMv5TE指令集的模擬,也就是ARM9單片機的內核,但是他是啟動(dòng)的ubuntu系統,比較復雜,而且內核啟動(dòng)也比較麻煩(模塊較多)。事實(shí)上,我們完全可以通過(guò)這樣一個(gè)系統來(lái)啟動(dòng)我們嵌入式的內核,大小在幾M級別而已,如果精簡(jiǎn)一下的話(huà),啟動(dòng)會(huì )更迅速,也會(huì )更具有實(shí)用價(jià)值。


關(guān)鍵詞: 16位單片機移植linu

評論


技術(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>