国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

YY3568多核異構(Linux+RT-Thread)--啟動流程

Rice嵌入式開發技術分享 ? 來源:Rice嵌入式開發技術分享 ? 作者:Rice嵌入式開發技術 ? 2024-03-07 08:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概要

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

本篇文章我們主要來講講RK3568上的多核加載流程,實驗的板子:風火輪科技的YY3568開發板。

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

YY3568主板基于 Rockchip RK3568 芯片平臺,四核 64位 Cortex-A55 核,主頻最高達 2GHz,集成雙核心架構GPU以及高效能NPU,芯片性能優異。開發板功能接口豐富,多媒體性能強悍、可在物聯網工業控制、智慧交通、輕量級人工智能等領域發揮獨特優勢。

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

板載 2 路千兆 以太網,可通過雙網口訪問和傳輸內外網的數據。擁有WIFI/BT,PCIE 3.0接口及 SIM 座,可接 4G 通信模塊,提高網絡傳輸效率。滿足NVR、工業網關等多網口產品需求。

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

板載PCIE3.0和SATA接口,支持固態硬盤M.2,SATA硬盤,可擴展大容量硬盤。

YY3568多核啟動方案

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

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

YY3568多核啟動分析

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

啟動配置

多核啟動配置文件路徑:device/rockchip/rk3568/rk3568_amp_linux.its。

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

多核啟動主要分為兩個核心節點:

①conf節點描述:描述需要啟動那些子核心(節點:loadables),linux內核啟動參數(節點:linux)。

②images節點描述:描述需要啟動子核心的參數,如:架構,指令集,分區首地址,核啟動延遲等。

/{ description="FITsourcefileforrockchipAMP"; #address-cells=<1>; images{ amp3{ description="bare-mental-core3"; data=/incbin/("cpu3.bin");//打包前的固件位置,一般不需要 type="firmware"; compression="none"; arch="arm";//固件的指令架構,當前只支持arm cpu=<0x300>;//mpidr thumb=<0>;//0:armorthumb2;1:thumb hyp=<0>;//0:el1/svc;1:el2/hyp load=<0x02800000>;//內存分區起始地址 udelay=<10000>;//啟動下一個核心的延遲時間 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>; }; }; }; };

內存分區

描述了每個核心的內存起始地址以及內存分區大小。

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

# Linux + HAL/RTT形式的內存資源分區示例: 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固件,其包含的內容:啟動配置信息(rk3568_amp_linux.its) + 從核的代碼。

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

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

0xe00:它是its在固件的大小,如果its文件大小不足對應大小,則補0。

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

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

源碼分析

內核啟動流程--準備工作

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

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

多核啟動的函數入口:int amp_cpus_on(void)。

啟動核心的程序,需要提前準備4個動作:

獲取設備的啟動設備,我們YY3568目前采用的是EMMC,所以這里描述的就是EMMC設備;然后從啟動設備獲取AMP分區。

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

申請固件的內存,從AMP分區獲取從核心的內容。

通過頭部信息,解析可加載項。然后調用brought_up_all_amp()啟動所有核心。

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

內核啟動流程--加載項獲取

核心啟動分為兩部分:Linux內核啟動部分 + 非Linux內核(RT-Thread)啟動部分。

Linux內核啟動部分:從rk3568_amp_linux.its配置中獲取Linux節點。然后調用brought_up_amp()啟動內核。

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

非Linux內核(RT-Thread)啟動部分:從rk3568_amp_linux.its配置中獲取loadables節點,遍歷節點成員,獲取對應的加載項的配置信息,然后調用調用brought_up_amp()啟動內核。

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

內核啟動流程--核心配置參數獲取

我們獲取了加載項節點之后,從節點中獲取其加載參數,獲取方式跟設備樹樹獲取一致。

通過smc_cpu_on()啟動核心

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; }

內核啟動流程--內核啟動

檢測pe狀態,如果目標pe狀態是默認的arch狀態,則直接給cpu通電

如果非Linux系統則跳轉到finish下,直接啟動啟動內核。

如果是Linux系統需要設置啟動參數,然后再啟動內核。

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; }

多核啟動效果

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

我們需要準備兩個串口,一個為Linux端的終端信息打印(UART2),一個為RT-Thread端的終端信息打印(UART4)

YY3568已經將所有的串口引出,所以我們調試很方便,接線圖如下:

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

運行效果:

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

5. 視頻演示

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11746

    瀏覽量

    218830
  • RT-Thread
    +關注

    關注

    32

    文章

    1602

    瀏覽量

    44651
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    拆解RK3568啟動日志:Debian12+Linux6.1下的調試密碼,初學者也能看懂

    在嵌入式開發中,啟動日志(Boot Log) 是硬件調試、驅動開發、系統優化的“第一手資料”。尤其是基于瑞芯微 RK3568(四核 A55,主打邊緣計算、物聯網設備)的方案,搭配 Debian12 系統與 Linux6.1 內核
    的頭像 發表于 02-06 16:52 ?2809次閱讀
    拆解RK<b class='flag-5'>3568</b><b class='flag-5'>啟動</b>日志:Debian12+<b class='flag-5'>Linux</b>6.1下的調試密碼,初學者也能看懂

    基于RT-Thread的RPMsg-Lite異構多核通信原理分析 | 技術集結

    RT-Thread(運行于Cortex-M85核)和裸機程序(運行于Cortex-M33核)之間使用rpmsg-lite進行通信,并采用MCMGR組件替代rpmsg
    的頭像 發表于 12-19 17:16 ?7825次閱讀
    基于<b class='flag-5'>RT-Thread</b>的RPMsg-Lite<b class='flag-5'>異構</b><b class='flag-5'>多核</b>通信原理分析 | 技術集結

    全方位解析:什么是異構開發板?為什么選GM-3568JHF?

    。GM-3568JHF作為國產異構開發平臺,搭載RK3568與Logos-2 FPGA,算力與定制能力強,且支持鴻蒙與Linux雙系統,接口豐富,適用于工業自動化、邊緣計算
    的頭像 發表于 12-19 15:04 ?6708次閱讀
    全方位解析:什么是<b class='flag-5'>異構</b>開發板?為什么選GM-<b class='flag-5'>3568</b>JHF?

    2025年RT-Thread開發者巡回培訓報名正式啟動

    親愛的RT-Thread社區成員們:新程再啟,共赴熱愛!2025年RT-Thread開發者巡回培訓正式啟動報名!今年,我們選擇了西安、武漢、北京、杭州、深圳、上海、成都這7座城市,為大家帶來
    的頭像 發表于 09-27 10:39 ?1826次閱讀
    2025年<b class='flag-5'>RT-Thread</b>開發者巡回培訓報名正式<b class='flag-5'>啟動</b>!

    9.20上海見!RT-Thread睿賽德將亮相具身智能上海開發者Meetup,解讀異構通信與虛擬化技術|活動預告

    負責人葉昌將作為核心分享嘉賓,帶來“從異構通信到虛擬化技術:RT-thread助力機器人敏捷、可持續開發”主題演講,為開發者深度拆解技術落地路徑。本次分享中,葉昌將
    的頭像 發表于 09-16 22:12 ?748次閱讀
    9.20上海見!<b class='flag-5'>RT-Thread</b>睿賽德將亮相具身智能上海開發者Meetup,解讀<b class='flag-5'>異構</b>通信與虛擬化技術|活動預告

    RK3506開發板Linux開發板極致性價比之選

    RK3506開發板Linux開發板極致性價比之選瑞芯微RK3506開發板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux+RT-Thread系統支持,128MB超大
    的頭像 發表于 09-11 16:26 ?3396次閱讀
    RK3506開發板<b class='flag-5'>Linux</b>開發板極致性價比之選

    【老法師】多核異構處理器中M核程序的啟動、編寫和仿真

    有很多研究單片機的小伙伴在面對多核異構處理器時,可能會對多核啟動流程感到困惑——因為不熟悉GCC編程和GDB調試,所以也無法確定
    的頭像 發表于 08-13 09:05 ?3939次閱讀
    【老法師】<b class='flag-5'>多核</b><b class='flag-5'>異構</b>處理器中M核程序的<b class='flag-5'>啟動</b>、編寫和仿真

    【HZ-RK3568開發板免費體驗】3、開啟Linux Kernel RT功能

    rockchip_linux_docker.config rockchip_rt.config make -C /home/hzhy/HZHY/RK3568/HZ-EVM-RK3568
    發表于 07-22 14:03

    用SPI玩轉WiFi,RT-Thread ESP-Hosted驅動深度適配指南 | 技術集結

    還在為MCU的WiFi連接方案發愁?RT-Thread社區開源ESP-Hosted驅動,通過標準SPI接口即可實現,并且該倉庫已整理成RT-Thread軟件包。RT
    的頭像 發表于 07-09 19:03 ?1600次閱讀
    用SPI玩轉WiFi,<b class='flag-5'>RT-Thread</b> ESP-Hosted驅動深度適配指南 | 技術集結

    深度剖析 RT-Thread 線程調度流程

    RT-Thread調度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數,主要負責板級驅動,調度器,系統線程初始化,啟動調度的工作
    的頭像 發表于 06-25 18:24 ?1729次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> 線程調度<b class='flag-5'>流程</b>

    Linux修改uboot啟動延時方法詳細攻略,觸覺智能RK3568開發板演示

    本文介紹Linux系統修改uboot啟動延時方法,使用觸覺智能EVB3568鴻蒙開發板演示,搭載瑞芯微RK3568,四核A55處理器,主頻2.0Ghz,1T算力NPU;支持開源鴻蒙
    的頭像 發表于 06-06 18:07 ?906次閱讀
    <b class='flag-5'>Linux</b>修改uboot<b class='flag-5'>啟動</b>延時方法詳細攻略,觸覺智能RK<b class='flag-5'>3568</b>開發板演示

    人形機器人敏捷開發新路徑:RT-Thread以軟件底座破解復雜系統難題 | 新聞速遞

    機器人行業解決方案負責人郭占鑫發表《從異構通信到虛擬化技術:RT-Thread助力機器人敏捷、可持續開發》主題演講,系統闡述了RT-Thread操作系統在機器人領
    的頭像 發表于 06-04 14:03 ?1264次閱讀
    人形機器人敏捷開發新路徑:<b class='flag-5'>RT-Thread</b>以軟件底座破解復雜系統難題 | 新聞速遞

    2025 RT-Thread全球技術大會議程正式發布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術大會)是聚焦基礎軟件技術創新與實踐的嵌入式技術盛會,持續推動技術價值轉化
    的頭像 發表于 05-27 19:28 ?1302次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術大會議程正式發布!

    RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

    的開源實時操作系統,正持續優化社區協作流程,現面向全球開發者招募審核團(ReviewTeam)成員,共同維護代碼質量,推動RT-Thread生態繁榮發展!什么是RT
    的頭像 發表于 05-21 18:02 ?1215次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

    RT-Thread睿賽德攜“程翧整車基礎軟件OS”亮相車展,多核虛擬化跨域驅動智能汽車發展

    ,攜RT-Thread“程翧整車基礎軟件OS”首發亮相,并系統性闡述睿賽德在多核MCU虛擬化技術領域的突破性成果。RT-Thread睿賽德創始人兼CEO熊譜翔攜整車
    的頭像 發表于 04-25 20:53 ?1330次閱讀
    <b class='flag-5'>RT-Thread</b>睿賽德攜“程翧整車基礎軟件OS”亮相車展,<b class='flag-5'>多核</b>虛擬化跨域驅動智能汽車發展