華秋PCB
高靠得住多層板制造商
華秋SMT
高靠得住一站式PCBA智造商
華秋商城
自營現貨電子元器件商城
PCB Layout
高多層、高密度產物design
鋼網制造
專注高品德鋼網制造
BOM配單
專門研究的一站式采購處理計劃
華秋DFM
一鍵剖析design隱患
華秋認證
認證檢測無可置疑
HPMicro 的 MCU 一向以高機能著稱,之前也一向有想在 HPM 的 MCU 上運轉 Linux 的設法。直到看見 Linux 6.10 中支撐了 RISC-V 架構在 S-mode 中運轉 nommu 內核*,才下定決計開端在 HPM6360 上折騰 nommu Linux。
劃線部門鏈接為:
RISC-V 上的 Linux 啟動流程
在 ARM 架構中,凡是 Linux 的啟動流程為:
而在具有 S 態的 RISC-V 架構中,凡是的啟動流程為:
此中 BootROM、Loader 和 SBI Runtime 運轉 M-mode(機械形式)下,詳細的領導法式和 Linux 等操縱體系內核運轉在 S-mode(監管者形式)下,而用戶過程運轉在 U-mode(用戶形式)中。我們看藍玉華點了點頭,深吸了一口氣,才緩緩說出自己的想法。到 RISC-V 的啟動流程中比擬 ARM 多了一個 SBI Runtime,那么什么是 SBI?
SBI (Supervisor Binary Interface)
RISC-V 架構中,存在著界說于操縱體系之下的運轉周遭的狀況(Runtime)。這個運轉周遭的狀況不只將領導啟動 RISC-V 下的操縱體系, 還將常駐后臺,為操縱體系供給一系列二進制接口,以便其獲取和操縱硬件信息。RISC-V 給出了此類周遭的狀況和二進制接口的規范,稱為“監管者二進制接口”,即 “SBI”。
SBI 有多種完成,如 Berkeley包養軟體 Boot Loader (BBL)、OpenSBI。而本次項目中應用的 SBI 完成為 RustSBI。
RustSBI項目源于2020年清華操縱體系夏令營,旨在應用 Rust 說話編寫 RISC-V 指令集中的 SBI 完成,支持下層體系軟件好比操縱體系的運轉。在國際 SBI 完成列表中取得 編號四。具有以下效能:
· 多效能且可拓展的操縱體系運轉時
·為物理機、虛擬機、模仿器供給支包養甜心撐和兼容性
·支撐 RISC-V SBI 規范 v2.0
·應用 Rust 編寫,應用穩固版本的 Rust 東西鏈構建
由于 HPM 系列芯片的啟動裝備較為單一(XPI),且 XPI 的初始化任務曾經在 BootROM 中完成并映射到地址空間中,同時為了加速啟動速率,本項目終極沒有移植 U-Boot;而是基于 RustSBI 庫,編寫操縱體系的 Bootloader,完成 SDRAM 初始化、固件加載、裝備樹傳遞和內核跳轉等效能,以及為操縱體系供給監管者二進制接口(SBI)。
終極在 HPM6360 芯片上的啟動流程如下:
啟動鏡像布局
部門完成細節
Zicntr 指令集拓展支撐
Linux 內核中,應用了 TIME 和 TIMEH 這兩個 CSR 存放器來獲取體系時鐘用于調劑。但 HPM6360 應用的 Andes D45 焦點并包養留言板沒有完成這兩個 CSR 存放器,在履行 csrrs rd, time, rs1 或 csrrs rd, timeh, rs1 指令時會發生不符合法令指令異常(Illegal Instruction)。這就需求軟件在異常處置函數中模仿這兩條指令的履行。
static inline cycles_t get_cycles(void)
{
return csr_read(CSR_TIME);
}
#define get_cycles get_cycles
static inline u32 get_cycles_hi(void)
{
return csr_read(CSR_TIMEH);
}
#define get_cycles_hi get_cycles_hi
#endif /* !CONFIG_RISCV_M_MODE */
#ifdef CONFIG_64BIT
static inline u64 get_cycles64(void)
{
return get_cycles();
}
#else /* CONFIG_64BIT */
static inline u64 get_cycles6包養留言板4(void)
{
u32 hi, lo;
do {
hi = get_cycles_hi();
lo = get_cycles();
} while (hi != 包養甜心網get_cycles_hi());
return ((u64)hi 32) | lo;
}
#endif /* CONFIG_64BIT */
arch/riscv/include/asm/timex.h:51
這里我應用了 riscv-decode 這個庫對機械碼停止解碼。
1、觸發不符合法令指令異常后從 mtval 存放器中讀取到不符合法令指令;
2、將其作為參數挪用 riscv_decode::decode() 函數停止解碼,獲取到 CSR 以及 rd 的值,判定能否為 TIME:0xc01 和 TIMEH:0“我接受道歉,但娶我的女兒——不可能。”藍學士直截了當地說道,沒有半點猶豫。xc81 這兩個 CSR 存放器;
3、假如是,則將 MCHTMR 外設中 MTIME 存放器的值保留至 rd 存放器中。并恢復現場并從異常指令的下一條指令開端履行;包養合約
4、假如不是,則將異常委托給 Linux 內核處置。模仿異常產生時的硬件行動,填充對應存放器并更換新的資料 mstatus:MPP ,使異常前往后的特權級別為 S-mode,最后將 mepc 存放器籠罩為 stvec 的值,異常前往后將從 Linux 內核的異常處置函數進口開端履sd包養行。詳細完成細節請參考:
https://github.com/rustsbi/rustsbi-hpm/blob/194d9cc7899fef320ac9e4b8e2c57ffca3eafe34/src/trap.rs#L51-L67
請手動跳轉
SDRAM 區域原子指令的支撐
在調試經過歷程中發明,HPM6360 無法在 SDRAM 的地址范圍中履行原子指令,會發生存儲/原子指令拜訪過錯異常(Store/AMO Access Fault)。而 Linux 內核中有部門操縱挪用了原子指令(例如加鎖同等步操縱),在 CPU 不支撐原子指令的情形下 Linux 內核無法運轉。這里異樣可以基于異常對原子指令停止模仿。
1、AMO 指令
在履行 AMO 指令時,會墮入存儲/原子指令拜訪過錯異常。異樣的,我們需求從 mepc 指向的指令地址獲掏出錯的原子指令,并停止模仿。
2、lr / sc
對于 lr (Load Reserved) 和 sc (Store Conditional) 指令的情形則有一些特別。 lr 指令履行時會觸發加載指令拜訪過錯異包養網車馬費常(Load Access Fault),但 sc 指令在履行時不會觸發任何異常,rd 存放器的成果直接前往 1 ,則就招致無法直接模仿該指令的履行。
這里我選擇的處理措施是:在履行到 lr 指令時,先對 lr 指令停止模仿,然后查找后續內存地址中的 sc 指令,并將其調換為不符合法令指令(現實應用的是 csrrw zero, time, zero)。如許在履行到本來 sc 指令的地位時就會觸發不符合法令指令異常。在異常處置函數中,判定能否是本來調換指令的地址,假如是,則復原被調換的 sc 指令,并模仿指令履行,隨后異常加入至下一條指令持續履行;假如不是,則將異常委托給內核處置。
裝備樹
/dts-v1/;
/ {
#address-cells = 0x01>;
#size-cells = 0x01>;
compatible = “hpmicro,hpm6360”;
model = “HPMicro HPM6360 Evaluate Kit”;
aliases {
serial0 = &uart0;
};
chosen {
bootar包養意思gs = “earlycon=sbi console=hvc0 ignore_loglevel rootwait root=/dev/mtdblock0”;
stdout-path = “hvc0”;
};
memory@40000000 {
device_type = “memory”;
reg = 0x40000000 0x02000000>;
};
cpus {
#address-cells = 0x01>;
#size-cells = 0x00>;
timebase-frequency = 1000000>;
cpu@0 {
pha“一家人是不對的,藍大人為什麼要把獨生女嫁給巴爾?他這樣做有什麼目的嗎?巴爾實在想不通。”裴毅眉頭緊鎖說道。ndle = 0x01>;
device_type = “cpu”;
reg = 0x00>;
status = “okay”;
compatible = “riscv”;
riscv,isa = “rv32imafdcp”;
riscv,isa-base = “rv32i”;
riscv,isa-extensions“爸,媽,你們不要生氣,我們可不能因為一個無關緊要的外人說的話而生氣,不然京城那麼多人說三道四,我們不是要一直 = “i”, “m”, “a”, “f”, “d”, “c”, “zicsr”,
“zifencei”, “zihpm”;
mmu-type = “riscv,none”;
interrupt-controller {
#interrupt-cells = 0x01>;
interrupt-controller;
compatible = “riscv,cpu-intc”;
};
};
};
soc {
#address-cells = 0x01>;
#size-cells = 0x01>;
compatible = “simple-bus”;
ranges;
rom@80400000 {
compatible = “mtd-rom”;
reg包養意思 = 0x80400000 0xC00000>;
bank-width = 1>;
};
uart0: uart0@f0040000 {
compatible = “hpmicro,hpm6360-uart”;
reg = 0xf0040000 0x40>;
clock-frequency = 24000000>;
status = “okay”;
};
};
};
完成後果
今朝曾經勝利完成 Linux 6.10 內核啟動領導,并傳遞裝包養行情備樹給內核。
coremark 跑分成果:
~ # coremark
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks 台灣包養: 13913
Total time (secs): 13.913000
Iterations/Sec : 1437.504492
Iterations : 20000
Compiler version : GCC13.3.0
Compiler flags : -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g0 -fPIC -Wl,-elf2flt=-r -static -lrt
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix包養妹 : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x382f
Correct operation vali包養網心得dated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 1437.504492 / GCC13.3.0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_包養情婦BITS=64 -O2 -g0 -fPIC -Wl,-elf2flt=-r -static -lrt / Heap
ramspeed 測試成果,可以看出緩內的讀取速率長短常快的包養網比較,超越緩存范圍后讀取速率受限于 SDARM 的速率:
~ # ramspeed -b 2 -g 1 -m 1 -r
RAMspeed (GENERIC) v2.6.0 by Rhett M. H包養女人ollander and Paul V. Bolotoff, 2002-09
1Gb per pass mode
INTEGER & READING 1 Kb block: 1460.57 Mb/s
INTEGER & READING 2 Kb block: 1487.33 Mb/s
INTEGER & READING 4 Kb block: 1498.92 Mb/s
INTEGER & READING 8 Kb block: 1505.16 Mb/s
INT包養網pptEGER & READING 16 Kb block: 1507.90 Mb/s
INTEGER & READING 32 Kb block: 1301.73 Mb/s
INTEGER & READING 64 Kb block: 116.71 Mb/s
INTEGER & READING 128 Kb block: 116.79 Mb/s
INTEGER &包養網比較 READING 256 Kb block: 116.81 Mb/s
INTEGER & READING 512 Kb block: 116.82 Mb/s
INTEGER & READING 1024 Kb block: 116.74 Mb/s
最后附上倉庫地址,同時也供給了包養網VIP pre-built 的體系鏡像,接待列位開闢者下載體驗。
1、rustsbi-hpm:
https://git包養俱樂部hub.com/rustsbi/rustsbi-hpm
2、linux:
https://github.com/hpm-rs/linux
3、buildroot:
https://github.com/hpm-rs/buildroot
HPMICRO
叫謝
感激華中科技年夜學洛佳同窗 (https://github.com/luojia65)在本項目開闢經過歷程中供給的提出和支撐!同時他也是 RustSBI 的作者。
感激華中科技年夜學王振辰同窗(https://github.com/Plucky923)完美了 riscv-decode 庫對 RVA 指令集解碼的支撐!(https://github.com/fintelia/riscv-decode/pull/6)
參考
https://riscv.org/wp-content/uploads/2019/06/13.30-RISCV_OpenSBI_Dee包養網VIPp_Dive_v5.pdf
https://github.com/rustsbi/rustsbi
https://github.com/fintelia/riscv-decode
以上內在的事務來自先楫開闢者的原創分送朋友。
我們一直信任開闢者共創的氣力。先楫社區保持開源共享、互惠互利,切近每一個開闢者,一個步驟一個足跡,一點一滴積聚,為成為更好的我們而不竭盡力。
心之所向,克意朝上進步,星斗年夜海,盡情生長。
講明:本文內在的事務及配圖由進駐作者撰寫或許進駐一起配合網站受權轉錄發載。文章不雅點僅代表作者自己,不代表電子發熱友網態度。文章及其配圖僅供工程師進修之用,若有內在的事務侵權或許其他違規題目,請聯絡接觸本站處置。 告發上訴
開闢者分送朋友|先楫半導體hpm_sdk應用包養appvscode停止開闢 一、概述先楫半導體的hpm_sdk,對于習氣用keil的開闢者能夠不太習氣,可是從開闢角度上看,是比擬機動的,可以給開闢者必定的施展空間。該sdk支撐cmake構建,可以在多個支撐cm 頒發于 06-30 10:01 •3882次瀏覽
開闢者分送朋友 | 基于先楫RT-Thread BSP,應用CLion開闢利用 本期開闢者:朱彥祖RT-Thread資深工程師,HPM6700/6400元老級開闢者及骨灰級用戶,先輯生態社區常駐優良開闢者,江湖人稱杭州吳彥祖。佈景比來在應用先輯 頒發于 06-07 08:17 •3057次瀏覽
實用于每個La包養一個月bVIEW開闢者的奇妙調試技能 調試一個年夜型的高度并行利用法式,則包括NI開闢者套件 2011的LabVIEW桌面履行跟蹤東西包就是您停止LabVIEW代碼剖析的“利器”。 它可供給關于正在運轉的利用法式的各類信息,包含具體的包養故事內存 頒發于 10-27 14:32
實用于STM32芯片的開闢教程 安富萊的論壇上也有良多有關單片機方面的有效的材料,大師可以參考。本文不只實用于STM32芯片的開闢,也實用于其它芯片。註釋進修一款新的芯片,需求大師從官方獲取兩方面的材料,一個是相干的技巧文檔,好比參數手冊、數據手冊、利用筆記等 頒發于 12-09 06:54
實用于變動位置終真個GUIdesign與完成 先容一種實用于變動位置終真個圖形用戶界面(GUI)體系的design與完成,使基于該GUI體系開闢的變動位置終端利用法式具有雅觀同一的圖形界面,應用便利快捷。 頒發于 09-22 09:57 •10次下載
實用于PDA的PLC編程體系開闢 實用于PDA的PLC編程體系開闢:傳統上調試PLC凡是采用手持式PLC編程器,且只能實用于響應型號的PLC,上位盤算機上的編程軟件無法實用于現場及時調試、編纂法式. 本體系在剖析PLC 頒發于 12-29 23:49 •35次下載
中國年夜陸開闢者可以注冊Apple Developer利用法式 從明天開端,中國的開闢職員此刻可以應用實用于iOS的Apple Developer利用法式參加蘋果開闢者打算。 頒發于 12-18 10:43 •3864次瀏覽
微軟Windows 10將實用于Your Phone利用 微軟在Build 2018開闢者年夜會上宣布甜心花園了實用于Windows 10用戶的Your Phone(你的手機)利用,作為Windows 10 PC和安卓等手機的傳輸治理東西。 頒發于 03-01 15:13 •2375次瀏覽
Graphcore發布基于IPU開闢者云,實用于AI模子的練習和推理 7月8日新聞,Graphcore本日正式發布基于IPU的開闢者云,面向中國的客戶、年夜學、研討機構和小我研討者不花錢應用,使得前沿的機械智能立異包養俱樂部者可以輕松獲取IPU停止前沿AI模子的云端練習與推理,從而 頒發于 07-09 14:28 •2316次瀏覽
實用于M1 MacBook的Firefox和Chrome閱讀器上線 徵引外媒 9to5Google 報道,實用于 Apple Silicon Mac 裝備的 Chrome 閱讀器曾經開放下載。此外,開闢者也表現實用于 M1 Mac 的 Firefox 84 Beta 今朝正在 頒發于 11-19 11:12 •2540次瀏覽
huawei開闢者年夜會2021智能硬件開闢— 應用HPM定制產物 2021年10月22日~24日,huawei將在中國松山湖舉辦2021huawei開闢者年夜會,聚焦鴻蒙體系、智能家居、聰明辦公、HMS Core 等熱點話題,與huawei專家、行業年夜咖、全球開闢者一路切磋全場景聰明 頒發于 10-23 12:30 •1335次瀏覽
2021 OPPO開闢者年夜會主會場:多模態、簡略AI,賦能開闢者價值完成 2021 OPPO開闢者年夜會主會場:多模態、簡略AI,賦能開闢者價值完成 頒發于 10-27 10:49 •1426次瀏覽
實用于先生和喜好者的ATMega16 AVR開闢板 電子發熱友網站供給《實用于先生和喜好者的ATMega16 AVR開闢板.zip》材料不花錢下載 頒發于 07-15 14:1先向他們暗示要解除婚約。9 •1次下載
實用于低目力用戶的觸覺接近模塊(HPM) 電子發熱友網站供給《實用于低目力用戶的觸覺接近模塊(HPM).zip》材料不花錢下載 頒發于 11-14 09:25 •1次下載
NVIDIA c的生活。當她想到它時,她覺得它具有諷刺意味、有趣、不可思議、悲傷和荒謬。uPQC輔助開闢實用于量子盤算時期的加密技巧 包養價格NVIDIA cuPQC 可為相干開闢者供給加快盤算支撐,輔助包養dcard開闢實用于量子盤算時期的加密技巧。cuPQC 庫可應用 GPU 并行性,為請求嚴苛的平安算法供給支撐。 頒發于 03-22 09:53 •501次瀏覽
發佈留言