溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在樹莓派2上移植rt-thread操作系統(tǒng)

發(fā)布時間:2021-11-20 10:05:59 來源:億速云 閱讀:264 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關怎么在樹莓派2上移植rt-thread操作系統(tǒng)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1.準備工作

硬件

1.樹莓派2開發(fā)板(如果沒有,可以直接用qemu替代)。

軟件

1.window上可以采用rt-thread提供的env工具。

2.Ubuntu上需要裝scons,因為rt-thread操作系統(tǒng)是通過scons組織的。

3.git工具,進行代碼管理

4.qemu,模擬開發(fā)板

5.arm gcc版本gcc-arm-none-eabi-5_4-2016q3

以下文章的實驗都是在Ubuntu16.04下進行,用qemu仿真樹莓派2。實際硬件也進行過測試,效果一樣。

2.移植思路

樹莓派2的啟動上電流程是先啟動gpu,從sd卡中讀取kernel固件。所以如果要自己實現(xiàn)kernel,也需要做類似的處理,編譯一個kernel7.img的固件放在sd卡中。如果直接用qemu操作,那么就不需要這么多復雜的操作,直接本地模擬就可以了。

如果要實現(xiàn)移植rt-thread操作系統(tǒng)到樹莓派上,要點是什么?

2.1.啟動代碼

當樹莓派的gpu加載kernel7.img到sdram開始執(zhí)行的時候,首先需要做必要的初始化工作。所以鏈接地址0x00008000需要正確的給予。初始化必要的設備,由于前期沒有分配棧,只能使用匯編進行初始化。簡而言之,進行必要的操作。那么這些必要的操作有那些?由于樹莓派2的芯片采用bcm2835,里面有4個核在工作,所以只能讓一個核工作,其他三個核睡眠。然后關閉mmu,分配??臻g,清除bss段。此時可以跳轉(zhuǎn)到C語言去執(zhí)行相關的邏輯操作了。畢竟C語言的操作比匯編看起來讓人清晰。

2.2.中斷向量初始化

這里需要指定中斷向量表,指定中斷函數(shù)的處理函數(shù)。根據(jù)armv7的體系架構,整理中斷向量表的偏移。然后初始化rt-thread中斷向量表的初始化。當然,這些已經(jīng)在操作系統(tǒng)里面完成了。

2.3.tick

rt-thread操作系統(tǒng)需要有時鐘tick,也就是定時中斷。對于這部分來說,需要自己實現(xiàn)一個timer中斷。在實體硬件上,我們可以采用的是樹莓派內(nèi)部自帶的一個名為SP802的時鐘模塊產(chǎn)生的中斷,但是qemu并沒有實現(xiàn),只實現(xiàn)gtimer。所以為了保證硬件和qemu都能運行,實驗中采用的是gtimer。

2.4.上下文切換

如果要實現(xiàn)中斷現(xiàn)場的返回和線程切換現(xiàn)場的返回,少不了上下文切換的邏輯,也就是context。這部分主要完成的是切換上下文前保存狀態(tài)寄存器,切換完成后恢復寄存器的內(nèi)容。這樣就能夠恢復上次的現(xiàn)場了。

2.5.uart

如果要調(diào)試rt-thread程序,當然少不了串口打印,rt-thread操作系統(tǒng)的一大特色就是支持shell??梢酝ㄟ^命令來操作系統(tǒng),查看信息。樹莓派有兩個串口,一個是直接通過內(nèi)部時鐘驅(qū)動的mini uart。另外一個是pl011串口模塊,兩者操作的寄存器地址不一樣。

以上5點也是整個最小系統(tǒng)移植關鍵?,F(xiàn)在筆者已經(jīng)將這個樹莓派rt-thread最小系統(tǒng)移植上去了。有興趣的自己可以玩一下。

https://github.com/bigmagic123/raspi-littlevgl。

這個項目的是為了在樹莓派上移植littlevgl。初代版本就是最小系統(tǒng)。

3.操作步驟

首先需要將代碼clone下來。

git@github.com:bigmagic123/raspi-littlevgl.git

怎么在樹莓派2上移植rt-thread操作系統(tǒng)

然后進入到工程目錄/bsp/raspi2。這里需要修改的是rtconfig.py文件中的GCC路徑。

怎么在樹莓派2上移植rt-thread操作系統(tǒng)  

這里需要改成自己的gcc路徑。

然后打開vscode上的Terminal --> new  Terminal可以看到控制臺窗口的出現(xiàn)。

怎么在樹莓派2上移植rt-thread操作系統(tǒng)

輸入scons進行編譯。現(xiàn)象如下則表示成功。


怎么在樹莓派2上移植rt-thread操作系統(tǒng)  

QEMU運行

如果此時電腦上已經(jīng)裝了qemu,那么直接啟動腳本即可正常運行了。


怎么在樹莓派2上移植rt-thread操作系統(tǒng)  

此時表示系統(tǒng)正常運行成功。

樹莓派2硬件運行


怎么在樹莓派2上移植rt-thread操作系統(tǒng)  

連接樹莓派用USB轉(zhuǎn)TTL模塊。然后將剛才編譯好的文件放到SD卡目錄中。

SD卡文件只留下這三個文件就可以了,其中kernel7.img就是我們剛才用scons編譯出來的rtthread固件。


怎么在樹莓派2上移植rt-thread操作系統(tǒng)  

4.代碼分析

相關的內(nèi)核代碼可以在rt-thread的官方網(wǎng)站上進行下載。筆者只是改了一些bsp文件。

CPU相關

與cpu相關的在bsp/raspi2/cpu目錄下。

啟動從start_gcc.S開始。上下文切換在context_gcc.S文件中。

外設相關

外設相關的代碼在driver目錄下。目前只有實現(xiàn)uart和tick。

用戶操作代碼

用戶操作代碼在applications文件中,其中啟動的第一個線程就是在main函數(shù)中

int main(int argc, char** argv)
{
   rt_kprintf("Hello RT-Thread!\n");
   while(1)
   {
       rt_kprintf("cur tick is %d\n",rt_tick_get());
       rt_thread_delay(1000);
   }
   return 0;
}

感謝各位的閱讀!關于“怎么在樹莓派2上移植rt-thread操作系統(tǒng)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI