色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

【RA8D1試用活動】RA8D1B-CPKCOR開發板移植linux

RA生態工作室 ? 2024-11-16 01:02 ? 次閱讀

作者: xhackerustc@21ic

國慶前有一塊RA生態工作室出品的RA8D1B-CPKCOR開發板到了,主控瑞薩RA8D1B MCU,基于Arm Cortex-M85,支持Helium 和 TrustZone,CPU頻率高達480MHZ。似乎是世界第一款使用Cortex-M85的MCU?RA8D1集成2MB flash和1MB的SRAM,I/D-cache 32KB。集成一堆豐富外設主控,比如usb、eth、i2c、i3c、spi、sdhci、ospi、canfd、MIPI-DSI、CEU攝像頭、2D圖形、TFT顯示控制等等,MCU功能已經非常強大。更有意思的是RA8D1B-CPKCOR板載了32MB SDRAM,16MB的QSPI flash,看到這些尤其是32MB的SDRAM筆者覺得這板子足夠跑linux系統了,雖然Cortex-M85無MMU,但主線linux早已經支持NOMMU了。要說生態沒有哪個RTOS能和linux比生態,在不要求硬實時的應用場景中利用linux系統的豐富生態能大大降低軟件工作量。一個復雜MCU平臺的軟件工作量非常大,特別是集成M7、M85這樣高性能的core(M7 coremark/MHZ超過A7)的MCU,外設通常也是比較豐富的,大多數系統還板載了SDRAM或PSRAM,如果再以裸機思維去做軟件,軟件復雜度大到不可想象。

那咱們就開始RA8D1B移植linux的旅程了:

wKgaomc6sn6AK5HnAAAUT40d1Rs491.png

初始化sdram,其實RA生態工作室其實做好了,直接把他們的board_sdram.c和board_sdram.h拷貝過來即可。這一步最好做下內存讀寫的壓力測試,我沒用他們的測試code,自己寫了一份,為啥呢:linux下讀寫內存1字節、2字節、4字節都可能的,我想都測到,測試代碼如下:

#define SDRAM_BASE_ADDRESS (0x68000000U) static void sdram_test(void) { int i; uint32_t addr; uint32_t t1; uint8_t testbuf[64]; void *p = (void *)SDRAM_BASE_ADDRESS; APP_PRINT("Writing SDRAM...\n"); printf("Writing SDRAM...\n"); for (addr = 0; addr < 32 * 1024 * 1024; ++addr) { uint8_t data = addr & 0xff; *(uint8_t *)(p + addr) = data; } APP_PRINT("Reading SDRAM...\n"); printf("Reading SDRAM...\n"); for (addr = 0; addr < 32 * 1024 * 1024; ++addr) { uint8_t data, expected; expected = addr & 0xff; data = *(uint8_t *)(p + addr); if (data != expected) APP_PRINT("SDRAM 8bit read failed at %lx (%x != %x)\n", addr, data, expected); } APP_PRINT("SDRAM 8bit read pass.\n"); printf("SDRAM 8bit read pass.\n"); for (addr = 0; addr < 32 * 1024 * 1024; addr += 2) { uint16_t data, expected; expected = (((addr + 1) & 0xff) << 8) | (addr & 0xff); data = *(uint16_t *)(p + addr); if (data != expected) APP_PRINT("SDRAM 16bit read failed at %lx (%x != %x)\n", addr, data, expected); } APP_PRINT("SDRAM 16bit read pass.\n"); printf("SDRAM 16bit read pass.\n"); for (addr = 0; addr < 32 * 1024 * 1024; addr += 4) { uint32_t data, expected; expected = (((addr + 3) & 0xff) << 24) | (((addr + 2) & 0xff) << 16) | (((addr + 1) & 0xff) << 8) | (addr & 0xff); data = *(uint32_t *)(p + addr); if (data != expected) APP_PRINT("SDRAM 32bit read failed at %lx (%lx != %lx)\n", addr, data, expected); } APP_PRINT("SDRAM 32bit read pass.\n"); printf("SDRAM 32bit read pass.\n"); memset(testbuf, 0x5a, sizeof(testbuf)); DWT_init(); t1 = DWT_get_count(); for (i = 0; i < 10000; ++i) { memcpy(p, testbuf, 64); } t1 = DWT_get_count() - t1; t1 = DWT_count_to_us(t1); t1 /= 1000; APP_PRINT("SDRAM write speed: %ld B/s.\n", 64 * 10000 * 1000 / t1); printf("SDRAM write speed: %ld B/s.\n", 64 * 10000 * 1000 / t1); t1 = DWT_get_count(); for (i = 0; i < 10000; ++i) { memcpy(testbuf, p, 64); } t1 = DWT_get_count() - t1; t1 = DWT_count_to_us(t1); t1 /= 1000; APP_PRINT("SDRAM read speed: %ld B/s.\n", 64 * 10000 * 1000 / t1); printf("SDRAM read speed: %ld B/s.\n", 64 * 10000 * 1000 / t1); for (;;) { APP_PRINT("SDRAM test done\n"); printf("SDRAM test done\n"); __WFI(); } }

這一步其實還有用FSP配置并生成項目工程,本人因習慣于Linux下開發,所以生成的是CMake工程。這一步網上測評很多鋪天蓋地,且FSP使用并非本次主目標,這里不再贅述。

wKgaomc6spuAGB8FAAAa8vJoVmU014.png

加載內核image、dtb等可以從sd卡加載也可以從flash上加載,但bootloader不是本次主目標,能否偷懶呢?不要忘記板載的jlink,完全可以用jlink把內核image和dtb加載到SDRAM指定位置,jlink加載命令語法如下:

loadfile FILE address noreset

比如

loadfile /tmp/Image.bin 0x68008000 noreset

noreset意思是只加載后不要reset目標板,jlink loadfile默認是reset的。

加載解決了,跳轉內核入口呢?easy,使用jlink的wreg命令即可,語法如下:

wreg rN value

建議segger這里做下簡單更新,方便用戶,畢竟打雙引號再空格再括號相當繁瑣。

wKgZomc6sryAODAhAAATxu779-U999.png

32位arm對每款cpu都有一個所謂proc_info的結構體,成員包含cpu setup函數,cache操作函數,hwcaps變量等等,cortex-m85呢筆者做這個事情的時候主線linux中還沒有這個結構體。經閱讀cortex-m85 TRM可以知道就上述操作函數等來講它和cortex-m55是兼容的,所以筆者打了個補丁如下:

--- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S @[url=home.php?mod=space&uid=72445]@[/url] -194,6 +194,16 @[url=home.php?mod=space&uid=72445]@[/url] ENDPROC(__v7m_setup) .long \cache_fns .endm + /* + * Match ARM Cortex-M85 processor. + */ + .type __v7m_cm85_proc_info, #object +__v7m_cm85_proc_info: + .long 0x410fd230 /* ARM Cortex-M85 0xD23 */ + .long 0xff0ffff0 /* Mask off revision, patch release */ + __v7m_proc __v7m_cm85_proc_info, __v7m_cm7_setup, hwcaps = HWCAP_EDSP, cache_fns = v7m_cache_fns, proc_fns = cm7_processor_functions + .size __v7m_cm85_proc_info, . - __v7m_cm85_proc_info + /* * Match ARM Cortex-M55 processor. */

wKgaoWc6sueAeyMrAAAN8WDWNK4424.png

+++ b/arch/arm/include/asm/v7m.h @[url=home.php?mod=space&uid=72445]@[/url] -51,6 +51,7 @@ */ #define EXC_RET_STACK_MASK 0x00000004 #define EXC_RET_THREADMODE_PROCESSSTACK (3 << 2) +#define EXC_RET_FTYPE (1 << 4) /* Cache related definitions */ diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index ed7781c84341..fdae077d2654 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S @[url=home.php?mod=space&uid=72445]@[/url] -138,6 +138,7 @[url=home.php?mod=space&uid=72445]@[/url] __v7m_setup_cont: 1: cpsid i /* Calculate exc_ret */ orr r10, lr, #EXC_RET_THREADMODE_PROCESSSTACK + orr r10, #EXC_RET_FTYPE ldmia sp, {r0-r3, r12} str r5, [r12, #11 * 4] @ restore the original SVC vector entry mov lr, r6 @ restore LR

wKgZoWc6swCALo-ZAAAQeGtzjR4104.png

linux系統必有至少一個clockevent提供心跳中斷,一個clocksource提供計時。其中clockevent必須的,clocksource可以由內核的jiffies代替,詳細筆者就不贅述了,因為前前后后講清楚它們可以長篇大論寫兩三篇大文章,linux內核這塊其實還蠻復雜的,但對clockevent和clocksource驅動要提供的接口來說變簡單了,以后有機會再寫吧。對應到MCU來說,其實就是timer嘛,RA8D1B里集成的timer多的是,各種口味的都有。對著RA8D1B的手冊寫clockevent/clocksource驅動難度不大,但是,筆者這次想換個**,咱能不能利用arm自由的資源呢?我們知道arm M類cpu都有一個systick且支持中斷,所以理論上可以把它抽象成一個clockevent的。目前linux內核主線中把這個systick當clocksource用的,不支持clockevent,它的代碼在drivers /clocksource /armv7m _ systick.c。咱給它改造改造整個容,經筆者整容之后的armv7m _ systick.c眉清目秀,盤亮條順。

wKgaomc6sw6AGrUsAAAI5zHbN_c602.png

要看基本linux啟動成功可用,最簡單的還是一個tty console。console用uart做比較簡單,這個RA8D1B里也有好幾個uart,而且特性豐富功能強大,而且似乎內核中有一個同出一門眾芯片的串口驅動drivers/tty/serial/sh-sci.c,但似乎寄存器不是太一致,所以接下來咱就對著手冊改寫串口驅動嗎?NoNoNo,一般來說特性豐富功能強大就暗示著還是蠻復雜的,不信你去讀一讀sh-sci.c,咱能否粗糙猛方式搞定linux呢?咱又看上jlink了,它不是有個RTT (Real Time Terminal)么,既然號稱Real Time Terminal,代替個串口做console那是小菜一碟阿。但是Segger的RTT代碼不能直接用,因為SDRAM有32MB,這么大空間都搜一遍么?而且別忘記Cortex-M85是可以帶有D-cache的,恰好RA8D1B里的這個M85就配置了D-Cache, linux肯定開啟cache了,RTT代碼注釋和文檔里對使能了cache這塊其實有很多的說明。筆者這>里換了一個思路,不要用SDRAM而是SRAM阿或者DTCM一部分來做RTT控制塊,DTCM是不經cache的。另外為了通用性,咱們這里還需要使用DT(Device Tree)技術而不是hardcoding來設置RTT控制塊的地址,然后通過如下命令告訴jlink到哪里去找RTT控制塊:

exec SetRTTAddr 0x20000000

wKgaomc6sy6AeZT8AAAD6KAqjTU791.png

最后根據MCU和板級具體情況做個簡單的dts,主要就是告訴SDRAM起始地址阿大小阿什么的,還有上面說的rtt的設備節點。

至此,linux內核層的事情搞定了,咱來搞定linux用戶層。

wKgZomc6sziAJC_NAAAZAjD3Z4I514.png

buildroot對NOMMU Linux支持得非常好,基本是拿來就用,buildroot使用方法網上也是很多的,前后>講完也是很費時的,這里筆者也不多著筆墨了,因為linux userspace也不是主要目標。這個步驟的輸>出是一個用busybox做的簡單rootfs,可以在內核編譯時builtin進去省去加載initrd/rootfs的過程。

wKgaomc6s0OAQR_9AAAODHmBc9w563.png

上述dts編譯成一個dtb,重命名為dtb.bin,內核(帶rootfs builtin)編譯成一個Image,重命名為Image.bin。

wKgaomc6s02AXDjwAAAITggVwxg595.png

板子上電,燒錄前面講的bootloader,重啟板子,運行jlink掛上去,運行如下命令:

halt exec SetRTTAddr 0x20000000 loadfile /tmp/Image.bin 0x68008000 noreset loadfile /tmp/dtb.bin 0x68004000 noreset wreg "R15 (PC)" 0x68008001 wreg r0 0 wreg r2 0x68004000 go

第一個命令停止cpu,第二個命令是告訴jlink RTT控制塊地址,后面是加載內核Image和跳轉內核入口,至于為啥這么設置請參考arm linux內核啟動協議,網上很多,筆者不再贅述了。

再起一個shell運行如下命令獲得RA8D1B的linux shell

telnet 127.0.0.1 19021

最后運行NOMMU Linux的視頻供參考:

wKgaomc6tDCAPdtQAAAPwOQ8768648.png

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

    關注

    146

    文章

    17123

    瀏覽量

    350983
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209326
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
收藏 人收藏

    評論

    相關推薦

    RA8D1加密引擎功能體驗和實踐

    本次實踐完成了RA8D1芯片AES密鑰封裝和芯片上加解密功能驗證
    的頭像 發表于 11-23 01:01 ?316次閱讀
    <b class='flag-5'>RA8D1</b>加密引擎功能體驗和實踐

    有獎試用!!RA-Eco-RA4E2-64PIN-V1.0開發板試用活動開始報名

    有獎試用!!RA-Eco-RA4E2-64PIN-V1.0開發板試用活動開始報名
    的頭像 發表于 11-09 01:02 ?236次閱讀
    有獎<b class='flag-5'>試用</b>!!<b class='flag-5'>RA-Eco-RA</b>4E2-64PIN-V1.0<b class='flag-5'>開發板</b><b class='flag-5'>試用活動</b>開始報名

    【瑞薩RA8D1 CPK開發板RA8D1移植ThreadX操作系統

    CPKCOR-RA8D1B核心 是瑞薩電子為中國市場設計的模塊化開發板, 使用瑞薩RA8D1MCU,支持MIPI-DSI顯示輸出接口。核心
    發表于 10-20 20:22

    【瑞薩RA8D1 CPK開發板試用】開箱與點燈

    一、前言 瑞薩RA8D1 CPK開發板是業界首款基于Arm Cortex-M85內核的32位圖形微控制器,板載資源豐富,性能優越。運行在480MHz的主頻下可實現超過3000 CoreMark分數
    發表于 10-08 01:04

    試用活動 | 100套!!瑞薩RA6E2/RA4E2開發板評測活動

    活動簡介: 瑞薩RA6E2/RA4E2開發板評測活動是一個針對瑞薩電子推出的通用微控制器(MCU)RA
    的頭像 發表于 09-10 11:18 ?587次閱讀
    <b class='flag-5'>試用活動</b> | 100套!!瑞薩<b class='flag-5'>RA</b>6E2/<b class='flag-5'>RA</b>4E2<b class='flag-5'>開發板</b>評測<b class='flag-5'>活動</b>

    基于瑞薩電子RA系列的野火耀陽RA8D1開發板產品簡介

    野火耀陽RA8D1開發板是一款功能強大的開發板,適用于各種嵌入式應用開發。它采用瑞薩電子的RA系列R7FA
    的頭像 發表于 05-29 14:19 ?822次閱讀
    基于瑞薩電子<b class='flag-5'>RA</b>系列的野火耀陽<b class='flag-5'>RA8D1</b><b class='flag-5'>開發板</b>產品簡介

    RA8D1 Vision Board開發實踐指南》上線啦

    ),希望能夠給大家提供一些支持。《RA8VisionBoard開發實踐指南》詳細列出了各個內容板塊及其貢獻者。在此,衷心感謝所有小伙伴的支持與貢獻!《RA8D1Vis
    的頭像 發表于 05-24 08:35 ?658次閱讀
    《<b class='flag-5'>RA8D1</b> Vision Board<b class='flag-5'>開發</b>實踐指南》上線啦

    【Vision Board創客營連載體驗】RA8D1 Vision Board Camera 初體驗

    開發環境: RT-Thread Studio:v2.2.7 開發板RA8D1 Vision Board開發板 MCU:R7FA8D1BHE
    發表于 04-27 08:50

    【Vision Board創客營連載體驗】RA8D1 Vision Board初體驗

    1 RA8D1 Vision Board簡介 Vision-Board 開發板是 RT-Thread 推出基于瑞薩 Cortex-M85 架構 RA8D1 芯片,擁有Helium和Tr
    發表于 04-23 21:53

    RA8D1 Vision Board上的SPI loopback測試

    一、簡介 Vision-Board 開發板是 RT-Thread 推出基于瑞薩 Cortex-M85 架構 RA8D1 芯片,為工程師們提供了一個靈活、全面的開發平臺,助力開發者在機器
    的頭像 發表于 04-23 00:00 ?940次閱讀
    <b class='flag-5'>RA8D1</b> Vision Board上的SPI loopback測試

    RA8D1_Datasheet.pdf

    *附件:RA8D1_Datasheet.pdf
    發表于 03-20 14:19

    RA8D1_User’s Manual

    RA8D1_User’s Manual
    發表于 03-20 09:56 ?1次下載

    RA8D1_數據手冊

    RA8D1_數據手冊
    發表于 03-19 17:43 ?1次下載

    瑞薩RA8D1 CEU介紹與使用說明

    RA8D1 MCU集成了高性能CM85內核和大內存,以及豐富的外設集,包括帶并行RGB和MIPI-DSI接口的高分辨率TFT-LCD控制器、2D繪圖引擎、16位攝像頭接口和多個外部內存接口,經過優化可滿足各種圖形和視覺AI應用的需求。
    的頭像 發表于 02-20 12:15 ?2430次閱讀
    瑞薩<b class='flag-5'>RA8D1</b> CEU介紹與使用說明

    RA8D1微控制器組評估套件快速入門指南

    電子發燒友網站提供《RA8D1微控制器組評估套件快速入門指南.pdf》資料免費下載
    發表于 01-31 10:15 ?1次下載
    <b class='flag-5'>RA8D1</b>微控制器組評估套件快速入門指南
    主站蜘蛛池模板: 午夜AV亚洲一码二中文字幕青青| 高中生被C到爽哭视频免费| 午夜福利视频极品国产83| 女人高潮特级毛片| 两个洞一起插哦!好刺激| 国产揄拍国产精品| 国产三级在线免费观看| 高清国产在线播放成人| bt成人社区| a级毛片黄免费a级毛片| 9久久99久久久精品齐齐综合色圆 9久高清在线不卡免费无吗视频 | 男生在床上脱美女 胸| 恋夜影院支持安卓视频美女| 狠狠色欧美亚洲狠狠色www| 国产原创剧情麻豆在线| 国产在线播放KKK| 久草在线在线精品观看| 久久国产av偷拍在线| 久久综合色一综合色88| 美国女孩毛片| 破苞流血哭泣 magnet| 三级黄色在线视频中文| 无码国产伦一区二区三区视频| 台湾佬综合娱乐网| 亚洲精品tv久久久久久久久久| 亚洲精品国产自在在线观看| 亚洲欧美日韩国产精品26u| 中文字幕福利视频在线一区| 97在线视频免费播放| YELLOW日本动漫高清免费| 国产精品大全国产精品| 精品爽爽久久久久久蜜臀| 免费国产成人高清在线看软件| 人妻兽虐曲| 亚洲理论片在线中文字幕| 98久久无码一区人妻A片蜜 | 天天干夜夜叭| 中文字幕偷乱免费视频在线| 持田香织abc| 久久偷拍国2017| 我把寡妇日出水好爽|