成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

創(chuàng)新互聯(lián)專注于石阡企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,購物商城網(wǎng)站建設(shè)。石阡網(wǎng)站建設(shè)公司,為石阡等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

1.準(zhǔn)備工作

硬件

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

軟件

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

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

3.git工具,進(jìn)行代碼管理

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

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

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

2.移植思路

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

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

2.1.啟動代碼

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

2.2.中斷向量初始化

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

2.3.tick

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

2.4.上下文切換

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

2.5.uart

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

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

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

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

3.操作步驟

首先需要將代碼clone下來。

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

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

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

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

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

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

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

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

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

QEMU運(yùn)行

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

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

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

樹莓派2硬件運(yùn)行

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

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

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

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

4.代碼分析

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

CPU相關(guān)

與cpu相關(guān)的在bsp/raspi2/cpu目錄下。

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

外設(shè)相關(guān)

外設(shè)相關(guān)的代碼在driver目錄下。目前只有實(shí)現(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;
}

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

網(wǎng)站欄目:怎么在樹莓派2上移植rt-thread操作系統(tǒng)
網(wǎng)址分享:http://jinyejixie.com/article32/psippc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、標(biāo)簽優(yōu)化網(wǎng)站導(dǎo)航、虛擬主機(jī)、商城網(wǎng)站、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
萨迦县| 永定县| 昌宁县| 德保县| 长阳| 徐汇区| 通许县| 平果县| 璧山县| 滨州市| 郎溪县| 栾城县| 尼勒克县| 买车| 炉霍县| 启东市| 页游| 新田县| 镇宁| 楚雄市| 元氏县| 株洲县| 娱乐| 睢宁县| 重庆市| 特克斯县| 阳江市| 同心县| 玛多县| 东丰县| 余姚市| 青州市| 余姚市| 三门峡市| 客服| 浮山县| 屏东县| 崇礼县| 格尔木市| 同德县| 中江县|