這篇文章給大家分享的是有關(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
然后進(jìn)入到工程目錄/bsp/raspi2。這里需要修改的是rtconfig.py文件中的GCC路徑。
這里需要改成自己的gcc路徑。
然后打開vscode上的Terminal --> new Terminal可以看到控制臺窗口的出現(xiàn)。
輸入scons進(jìn)行編譯。現(xiàn)象如下則表示成功。
QEMU運(yùn)行
如果此時電腦上已經(jīng)裝了qemu,那么直接啟動腳本即可正常運(yùn)行了。
此時表示系統(tǒng)正常運(yùn)行成功。
樹莓派2硬件運(yùn)行
連接樹莓派用USB轉(zhuǎn)TTL模塊。然后將剛才編譯好的文件放到SD卡目錄中。
SD卡文件只留下這三個文件就可以了,其中kernel7.img就是我們剛才用scons編譯出來的rtthread固件。
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)