在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

YY3568多核異構(gòu)(Linux+RT-Thread)--啟動(dòng)流程

Rice嵌入式開發(fā)技術(shù)分享 ? 來源:Rice嵌入式開發(fā)技術(shù)分享 ? 作者:Rice嵌入式開發(fā)技術(shù) ? 2024-03-07 08:41 ? 次閱讀

概要

上一篇文章,介紹了多核異構(gòu)的方案,RPmsg-lite多核通信框架的內(nèi)容。--《多核異構(gòu)通信框架(RPMsg-Lite)》

本篇文章我們主要來講講RK3568上的多核加載流程,實(shí)驗(yàn)的板子:風(fēng)火輪科技的YY3568開發(fā)板。

7989081c-dc1b-11ee-b759-92fbcf53809c.jpg

YY3568主板基于 Rockchip RK3568 芯片平臺(tái),四核 64位 Cortex-A55 核,主頻最高達(dá) 2GHz,集成雙核心架構(gòu)GPU以及高效能NPU,芯片性能優(yōu)異。開發(fā)板功能接口豐富,多媒體性能強(qiáng)悍、可在物聯(lián)網(wǎng)、工業(yè)控制、智慧交通、輕量級(jí)人工智能等領(lǐng)域發(fā)揮獨(dú)特優(yōu)勢。

板載有 2路DSI、1路HDMI 和 1路edp顯示接口。支持雙屏異顯輸出和4K分辨率。強(qiáng)大的顯示性能,并且適配了自研的7寸mipi屏和edp屏。在多屏廣告機(jī)、電子站牌、自助服務(wù)機(jī)、工業(yè)HMI等領(lǐng)域可發(fā)揮強(qiáng)大優(yōu)勢以及更低的成本。

板載 2 路千兆 以太網(wǎng),可通過雙網(wǎng)口訪問和傳輸內(nèi)外網(wǎng)的數(shù)據(jù)。擁有WIFI/BT,PCIE 3.0接口及 SIM 座,可接 4G 通信模塊,提高網(wǎng)絡(luò)傳輸效率。滿足NVR、工業(yè)網(wǎng)關(guān)等多網(wǎng)口產(chǎn)品需求。

板載 5路 串口,能夠大大降低通信成本。2 路IIC,可接多個(gè)IIC設(shè)備。1路CAN,能夠滿足汽車電子領(lǐng)域需求。

板載PCIE3.0和SATA接口,支持固態(tài)硬盤M.2,SATA硬盤,可擴(kuò)展大容量硬盤。

YY3568多核啟動(dòng)方案

瑞芯微官方提供了4種多核軟件方案。但是啟動(dòng)流程的大致方案是一致的。其方案為:

方案 說明
3kernel + 1hal 0~2核心:Linux(SMP),3核心:裸機(jī)
3kernel + 1RT-Thread 0~2核心:Linux(SMP),3核心:RT-Thread(RTOS)
1kernel + 3hal 0核心:Linux,1~3核心:裸機(jī)(每一個(gè)核心跑一個(gè)裸機(jī))
2kernel + 3RT-Thread 0核心:Linux,1~3核心:RT-Thread(每一個(gè)核心跑一個(gè)RTOS)

YY3568多核啟動(dòng)分析

我們在風(fēng)火輪科技的YY3568開發(fā)板上驗(yàn)證的方案:3kernel(SMP) + 1RT-Thread。

啟動(dòng)配置

多核啟動(dòng)配置文件路徑:device/rockchip/rk3568/rk3568_amp_linux.its。

rk3568_amp_linux.its配置文件格式,其以設(shè)備樹的格式存在。所以操作其內(nèi)容的方法可以通過操作設(shè)備樹一樣。

多核啟動(dòng)主要分為兩個(gè)核心節(jié)點(diǎn):

①conf節(jié)點(diǎn)描述:描述需要啟動(dòng)那些子核心(節(jié)點(diǎn):loadables),linux內(nèi)核啟動(dòng)參數(shù)(節(jié)點(diǎn):linux)。

②images節(jié)點(diǎn)描述:描述需要啟動(dòng)子核心的參數(shù),如:架構(gòu),指令集,分區(qū)首地址,核啟動(dòng)延遲等。

/{ description="FITsourcefileforrockchipAMP"; #address-cells=<1>; images{ amp3{ description="bare-mental-core3"; data=/incbin/("cpu3.bin");//打包前的固件位置,一般不需要 type="firmware"; compression="none"; arch="arm";//固件的指令架構(gòu),當(dāng)前只支持arm cpu=<0x300>;//mpidr thumb=<0>;//0:armorthumb2;1:thumb hyp=<0>;//0:el1/svc;1:el2/hyp load=<0x02800000>;//內(nèi)存分區(qū)起始地址 udelay=<10000>;//啟動(dòng)下一個(gè)核心的延遲時(shí)間 hash{ algo="sha256"; }; }; }; configurations{ default="conf"; conf{ description="RockchipAMPimages"; rollback-index=<0x0>; loadables="amp3"; signature{ algo="sha256,rsa2048"; padding="pss"; key-name-hint="dev"; sign-images="loadables"; }; /*-runlinuxoncpu0 *-itisbroughtupbyamp(thatrunonU-Boot) *-itisbootentrydependsonU-Boot */ linux{ description="linux-os"; arch="arm64"; cpu=<0x000>; thumb=<0>; hyp=<0>; udelay=<0>; }; }; }; };

內(nèi)存分區(qū)

描述了每個(gè)核心的內(nèi)存起始地址以及內(nèi)存分區(qū)大小。

我們采用的方案:3kernel(SMP) + 1RT-Thread,所以RT-Thread的內(nèi)存位置為:CPU3_MEM_BASE=0x02800000。

# Linux + HAL/RTT形式的內(nèi)存資源分區(qū)示例: CPU0_MEM_BASE=0x03000000 CPU1_MEM_BASE=0x01800000 CPU2_MEM_BASE=0x02000000 CPU3_MEM_BASE=0x02800000 CPU0_MEM_SIZE=0x00800000 CPU1_MEM_SIZE=0x00800000 CPU2_MEM_SIZE=0x00800000 CPU3_MEM_SIZE=0x00800000

amp固件打包

RK3568的amp固件,其包含的內(nèi)容:啟動(dòng)配置信息(rk3568_amp_linux.its) + 從核的代碼。

它是通過mkimage將兩者打包一起的,工具路徑:device/rockchip/common/mkimage。

打包命令:mkimage -f amp.its -E -p 0xe00 amp.img,其中:

0xe00:它是its在固件的大小,如果its文件大小不足對應(yīng)大小,則補(bǔ)0。

從核的代碼追加在其后面。

79983cce-dc1b-11ee-b759-92fbcf53809c.png

源碼分析

內(nèi)核啟動(dòng)流程--準(zhǔn)備工作

RK3568的多核啟動(dòng)是由uboot來管理的,所以我們主要剖析uboot的源碼。

多核啟動(dòng)流程的代碼路徑:uboot/drivers/cpu/rockchip_amp.c。

多核啟動(dòng)的函數(shù)入口:int amp_cpus_on(void)。

啟動(dòng)核心的程序,需要提前準(zhǔn)備4個(gè)動(dòng)作:

獲取設(shè)備的啟動(dòng)設(shè)備,我們YY3568目前采用的是EMMC,所以這里描述的就是EMMC設(shè)備;然后從啟動(dòng)設(shè)備獲取AMP分區(qū)。

申請存放頭信息的空間,從AMP分區(qū)中獲取頭信息(即多核啟動(dòng)配置信息:rk3568_amp_linux.its);檢測its的合法性,并獲取其大小。

申請固件的內(nèi)存,從AMP分區(qū)獲取從核心的內(nèi)容。

通過頭部信息,解析可加載項(xiàng)。然后調(diào)用brought_up_all_amp()啟動(dòng)所有核心。

intamp_cpus_on(void) { ....省略 dev_desc=rockchip_get_bootdev(); ....省略 if(part_get_info_by_name(dev_desc,AMP_PART,&part)

內(nèi)核啟動(dòng)流程--加載項(xiàng)獲取

核心啟動(dòng)分為兩部分:Linux內(nèi)核啟動(dòng)部分 + 非Linux內(nèi)核(RT-Thread)啟動(dòng)部分。

Linux內(nèi)核啟動(dòng)部分:從rk3568_amp_linux.its配置中獲取Linux節(jié)點(diǎn)。然后調(diào)用brought_up_amp()啟動(dòng)內(nèi)核。

79a39182-dc1b-11ee-b759-92fbcf53809c.jpg

非Linux內(nèi)核(RT-Thread)啟動(dòng)部分:從rk3568_amp_linux.its配置中獲取loadables節(jié)點(diǎn),遍歷節(jié)點(diǎn)成員,獲取對應(yīng)的加載項(xiàng)的配置信息,然后調(diào)用調(diào)用brought_up_amp()啟動(dòng)內(nèi)核。

79b0c384-dc1b-11ee-b759-92fbcf53809c.jpg

staticintbrought_up_all_amp(void*fit,constchar*fit_uname_cfg) { ....省略 g_bootcpu.boot_on=1; linux_noffset=fdt_subnode_offset(fit,conf_noffset,"linux");//① if(linux_noffset>0){ ret=brought_up_amp(fit,linux_noffset,&g_bootcpu,1); if(ret) returnret; } for(loadables_index=0;//② uname=fdt_stringlist_get(fit,conf_noffset, FIT_LOADABLE_PROP,loadables_index,NULL),uname; loadables_index++){ cpu_noffset=fit_image_get_node(fit,uname); if(cpu_noffset

內(nèi)核啟動(dòng)流程--核心配置參數(shù)獲取

我們獲取了加載項(xiàng)節(jié)點(diǎn)之后,從節(jié)點(diǎn)中獲取其加載參數(shù),獲取方式跟設(shè)備樹樹獲取一致。

通過smc_cpu_on()啟動(dòng)核心

staticintbrought_up_amp(void*fit,intnoffset, boot_cpu_t*bootcpu,intis_linux) { ....省略 desc=fdt_getprop(fit,noffset,"description",NULL); cpu=fit_get_u32_default(fit,noffset,"cpu",-ENODATA); hyp=fit_get_u32_default(fit,noffset,"hyp",0); thumb=fit_get_u32_default(fit,noffset,"thumb",0); entry=load=fit_get_u32_default(fit,noffset,"load",-ENODATA); us=fit_get_u32_default(fit,noffset,"udelay",0); boot_on=fit_get_u32_default(fit,noffset,"boot-on",1); fit_image_get_arch(fit,noffset,&arch); fit_image_get_type(fit,noffset,&type); fit_image_get_data_size(fit,noffset,&data_size); memset(&args,0,sizeof(args)); ....省略 /*bootnow*/ ret=smc_cpu_on(cpu,pe_state,entry,&args,is_linux); if(ret) returnret; exit: if(us) udelay(us); return0; }

內(nèi)核啟動(dòng)流程--內(nèi)核啟動(dòng)

檢測pe狀態(tài),如果目標(biāo)pe狀態(tài)是默認(rèn)的arch狀態(tài),則直接給cpu通電

如果非Linux系統(tǒng)則跳轉(zhuǎn)到finish下,直接啟動(dòng)啟動(dòng)內(nèi)核。

如果是Linux系統(tǒng)需要設(shè)置啟動(dòng)參數(shù),然后再啟動(dòng)內(nèi)核。

staticintsmc_cpu_on(u32cpu,u32pe_state,u32entry, boot_args_t*args,boolis_linux) { ....省略 /*iftargetpestateisdefaultarchstate,powerupcpudirectly*/ if(is_default_pe_state(pe_state)) gotofinish; ret=sip_smc_amp_cfg(AMP_PE_STATE,cpu,pe_state,0); if(ret){ AMP_E("smcpe-state,ret=%dn",ret); returnret; } /*onlylinuxneedsbootargs*/ if(!is_linux) gotofinish; ret=sip_smc_amp_cfg(AMP_BOOT_ARG01,cpu,args->arg0,args->arg1); if(ret){ AMP_E("smcbootarg01,ret=%dn",ret); returnret; } ret=sip_smc_amp_cfg(AMP_BOOT_ARG23,cpu,args->arg2,args->arg3); if(ret){ AMP_E("smcbootarg23,ret=%dn",ret); returnret; } finish: ret=psci_cpu_on(cpu,entry); if(ret){ printf("cpuupfailed,ret=%dn",ret); returnret; } printf("OKn"); return0; }

多核啟動(dòng)效果

我們多核的方案:3kernel(SMP) + 1RT-Thread,

我們需要準(zhǔn)備兩個(gè)串口,一個(gè)為Linux端的終端信息打印(UART2),一個(gè)為RT-Thread端的終端信息打?。║ART4)

YY3568已經(jīng)將所有的串口引出,所以我們調(diào)試很方便,接線圖如下:

79b52b9a-dc1b-11ee-b759-92fbcf53809c.png

運(yùn)行效果:

79b9ba48-dc1b-11ee-b759-92fbcf53809c.jpg

5. 視頻演示

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11420

    瀏覽量

    212308
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1348

    瀏覽量

    41362
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread睿賽德攜“程翧整車基礎(chǔ)軟件OS”亮相車展,多核虛擬化跨域驅(qū)動(dòng)智能汽車發(fā)展

    ,攜RT-Thread“程翧整車基礎(chǔ)軟件OS”首發(fā)亮相,并系統(tǒng)性闡述睿賽德在多核MCU虛擬化技術(shù)領(lǐng)域的突破性成果。RT-Thread睿賽德創(chuàng)始人兼CEO熊譜翔攜整車
    的頭像 發(fā)表于 04-25 20:53 ?352次閱讀
    <b class='flag-5'>RT-Thread</b>睿賽德攜“程翧整車基礎(chǔ)軟件OS”亮相車展,<b class='flag-5'>多核</b>虛擬化跨域驅(qū)動(dòng)智能汽車發(fā)展

    RK3568內(nèi)置MCU開發(fā)介紹之一

    A55(下文簡稱AP)和1個(gè)RISCV(下文簡稱MCU)。 硬件準(zhǔn)備 首先介紹一下硬件。主板為風(fēng)火輪科技的YY3568開發(fā)板,主控RK3568。此開發(fā)板的相關(guān)介紹可以參考 https
    的頭像 發(fā)表于 12-01 16:09 ?1380次閱讀
    RK<b class='flag-5'>3568</b>內(nèi)置MCU開發(fā)介紹之一

    RT-Thread上CAN實(shí)踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進(jìn)行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅(qū)動(dòng)移植,并正常啟動(dòng)
    的頭像 發(fā)表于 11-13 01:03 ?1772次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實(shí)踐

    混合部署 | 在迅為RK3568上同時(shí)部署RT-ThreadLinux系統(tǒng)

    系統(tǒng)和RT-Thread系統(tǒng)已經(jīng)同時(shí)運(yùn)行了,其中CPU0、CPU1、CPU2運(yùn)行Linux系統(tǒng),CPU3運(yùn)行RT-Thread系統(tǒng),如下圖所示: 通過支持 AMP 以及 RT-Thread
    發(fā)表于 11-01 10:31

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會(huì)報(bào)名啟動(dòng)

    親愛的RT-Thread開發(fā)者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發(fā)者大會(huì))正式啟動(dòng)報(bào)名!2024
    的頭像 發(fā)表于 10-29 08:06 ?799次閱讀
    開源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會(huì)報(bào)名<b class='flag-5'>啟動(dòng)</b>!

    Nordic-RT-Thread5.1.0移植筆記

    Nordic-RT-Thread5.1.0移植筆記
    的頭像 發(fā)表于 10-16 08:09 ?993次閱讀
    Nordic-<b class='flag-5'>RT-Thread</b>5.1.0移植筆記

    混合部署 | 在迅為RK3568上同時(shí)部署RT-ThreadLinux系統(tǒng)

    RT-Thread系統(tǒng)已經(jīng)同時(shí)運(yùn)行了,其中CPU0、CPU1、CPU2運(yùn)行Linux系統(tǒng),CPU3運(yùn)行RT-Thread系統(tǒng),如下圖所示: 通過支持 AMP 以及 RT-Thread
    發(fā)表于 09-18 10:54

    混合部署 | 在RK3568上同時(shí)部署RT-ThreadLinux系統(tǒng)-迅為電子

    混合部署 | 在RK3568上同時(shí)部署RT-ThreadLinux系統(tǒng)-迅為電子
    的頭像 發(fā)表于 09-06 15:32 ?650次閱讀
    混合部署 | 在RK<b class='flag-5'>3568</b>上同時(shí)部署<b class='flag-5'>RT-Thread</b>和<b class='flag-5'>Linux</b>系統(tǒng)-迅為電子

    2024 RT-Thread全球巡回 線下培訓(xùn)火熱來襲!

    親愛的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開發(fā)者線下培訓(xùn)即將拉開帷幕!24年全球巡回培訓(xùn)將覆蓋超10座城市及國家,為開發(fā)者提供一個(gè)深入學(xué)習(xí)RT-Thread嵌入式開發(fā)的絕佳機(jī)會(huì)。
    的頭像 發(fā)表于 08-07 08:35 ?2120次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓(xùn)火熱來襲!

    3568F-基于Linux + RT-Thread、Baremetal的AMP開發(fā)案例

    Cortex-A55處理器 + 紫光同創(chuàng)Logos-2 PG2L50H/PG2L100H FPGA設(shè)計(jì)的異構(gòu)多核國產(chǎn)工業(yè)評(píng)估板,由核心板和評(píng)估底板組成,ARM Cortex-A55處理單元主頻高達(dá)1.8GHz
    發(fā)表于 07-25 15:08

    3568F-Linux-RT系統(tǒng)測試手冊

    Cortex-A55處理器 + 紫光同創(chuàng)Logos-2 PG2L50H/PG2L100H FPGA設(shè)計(jì)的異構(gòu)多核國產(chǎn)工業(yè)評(píng)估板,由核心板和評(píng)估底板組成,ARM Cortex-A55處理單元主頻高達(dá)1.8GHz
    發(fā)表于 07-25 14:41

    杭州站RT-Thread混合部署Workshop圓滿落幕!

    參與。非常感謝睿賽德科技工程師張康帶來精彩的技術(shù)講解,并與大家深入探討了在瑞芯微RK3568平臺(tái)上實(shí)現(xiàn)RT-ThreadLinux的高效混合運(yùn)行方法。本次Wor
    的頭像 發(fā)表于 06-08 08:35 ?598次閱讀
    杭州站<b class='flag-5'>RT-Thread</b>混合部署Workshop圓滿落幕!

    杭州站!實(shí)踐上手瑞芯微RK3568混合部署

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Threadlinux,本次workshop邀請到
    的頭像 發(fā)表于 06-05 08:35 ?701次閱讀
    杭州站!實(shí)踐上手瑞芯微RK<b class='flag-5'>3568</b>混合部署

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Threadlinux,本次workshop邀請到
    的頭像 發(fā)表于 05-28 08:35 ?585次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    Linux啟動(dòng)流程基本分析

    Linux啟動(dòng)流程總的來說可以分成三個(gè)階段 Linux啟動(dòng)流程圖 ? 第一步:上電 ?在 x86
    的頭像 發(fā)表于 05-11 08:49 ?1043次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>啟動(dòng)</b><b class='flag-5'>流程</b>基本分析
    主站蜘蛛池模板: 亚洲大黑香蕉在线观看75 | 久久怡红院国产精品 | 717影院理论午夜伦八戒 | 天堂资源8中文最新版在线 天堂资源地址在线 | 老湿成人影院 | 99久久久久国产精品免费 | 美女自熨出白浆视频在线播放 | 国产图片区 | 在线播放国产不卡免费视频 | 欧美激情综合色综合啪啪五月 | 久久免费公开视频 | 免费一级毛片在级播放 | 天天操夜夜摸 | 日韩免费观看的一级毛片 | 黄视频在线免费看 | 亚洲天堂999 | ww7788色淫网站女女免费 | 天天操天天透 | 色y情视频免费看 | 日本人zzzwww色视频 | 久久国产午夜精品理论篇小说 | 忘忧草爱网| 99久久国产免费 - 99久久国产免费 | 色福利网站 | 日本特黄特色大片免费看 | 天堂中文最新版www 天堂资源8中文最新版在线 | 不卡免费在线视频 | 在线观看视频你懂得 | 殴美aⅴ| 国产一级特黄aa大片爽爽 | 国产成年美女毛片80s | 性欧美成人依依影院 | 日本三级免费看 | 一级骚片超级骚在线观看 | 色哟永久免费 | 在线播放视频网站 | 天天躁夜夜躁狠狠躁2018a | 中文天堂资源在线www | 国产精品视频你懂的 | 日产毛片 | 四虎免费在线播放 |