diff --git a/404.html b/404.html index 71193be4..1e2ba2b8 100644 --- a/404.html +++ b/404.html @@ -8,14 +8,14 @@ - +
- + \ No newline at end of file diff --git a/assets/RuyiSDK.Cr9Gr74Z.png b/assets/RuyiSDK.Cr9Gr74Z.png new file mode 100644 index 00000000..463dc75a Binary files /dev/null and b/assets/RuyiSDK.Cr9Gr74Z.png differ diff --git a/assets/Structure-RuyiSDK.DpdJ4nSb.png b/assets/Structure-RuyiSDK.DpdJ4nSb.png new file mode 100644 index 00000000..80db4184 Binary files /dev/null and b/assets/Structure-RuyiSDK.DpdJ4nSb.png differ diff --git a/assets/app.B_1fCo6w.js b/assets/app.CJKPz7OV.js similarity index 95% rename from assets/app.B_1fCo6w.js rename to assets/app.CJKPz7OV.js index ef3c3721..8e65a0ae 100644 --- a/assets/app.B_1fCo6w.js +++ b/assets/app.CJKPz7OV.js @@ -1 +1 @@ -import{U as o,a4 as p,a5 as u,a6 as l,a7 as c,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as P,u as v,y,x as C,ae as b,af as w,ag as E,ah as R}from"./chunks/framework.BKLMYXYM.js";import{t as S}from"./chunks/theme.BUxsoWON.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),_=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),s.setup&&s.setup(),()=>R(s.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(_)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{U as o,a4 as p,a5 as u,a6 as l,a7 as c,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as P,u as v,y,x as C,ae as b,af as w,ag as E,ah as R}from"./chunks/framework.BKLMYXYM.js";import{t as S}from"./chunks/theme.CHBAehbQ.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),_=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),s.setup&&s.setup(),()=>R(s.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(_)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/chunks/@localSearchIndexroot.Btvlp7ZV.js b/assets/chunks/@localSearchIndexroot.Btvlp7ZV.js new file mode 100644 index 00000000..8be8cad4 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.Btvlp7ZV.js @@ -0,0 +1 @@ +const t='{"documentCount":198,"nextId":198,"documentIds":{"0":"/docs/old/devices/#ruyisdk集成的risc-v设备","1":"/docs/old/devices/#支持的risc-v设备","2":"/docs/old/devices/#从ruyisdk开始使用设备","3":"/docs/old/devices/#获取并安装os","4":"/docs/old/introduction/#hello-ruyi","5":"/docs/old/introduction/#介绍","6":"/docs/old/introduction/#背景","7":"/docs/old/introduction/#功能","8":"/docs/old/introduction/#ruyi-包管理器","9":"/docs/old/introduction/#ruyi-ide","10":"/docs/old/introduction/#community","11":"/docs/old/introduction/#支持的设备","12":"/docs/old/introduction/#ruyisdk-架构示意图","13":"/docs/old/introduction/#让我们开始吧","14":"/docs/old/introduction/#获取并安装os","15":"/docs/old/introduction/requirement.html#介绍","16":"/docs/old/introduction/requirement.html#ruyisdk-的目标","17":"/docs/old/introduction/requirement.html#ruyisdk-架构示意图","18":"/docs/old/introduction/requirement.html#ruyisdk-模块需求说明","19":"/docs/old/introduction/requirement.html#ruyi-包管理器","20":"/docs/old/introduction/requirement.html#ruyi在线软件源-ruyi-repo","21":"/docs/old/introduction/requirement.html#ruyi包管理工具-ruyi","22":"/docs/old/introduction/requirement.html#ruyi-ide","23":"/docs/old/introduction/requirement.html#开发者社区","24":"/docs/old/plan/#版本规划路线图","25":"/docs/old/plan/#ruyisdk-版本计划","26":"/docs/old/plan/#里程碑版本","27":"/docs/old/plan/#敏捷开发版本计划","28":"/docs/old/plan/#ruyisdk-规划","29":"/docs/old/plan/#_2024目标","30":"/docs/old/plan/#敏捷开发版本排期","31":"/docs/old/ruyi/getstarted/#开始","32":"/docs/old/ruyi/getstarted/#安装依赖软件","33":"/docs/old/ruyi/getstarted/#安装-ruyi-包管理器","34":"/docs/old/ruyi/getstarted/#刷新软件包缓存","35":"/docs/old/ruyi/getstarted/#查询包管理器更新内容","36":"/docs/old/ruyi/getstarted/#查询可用软件包","37":"/docs/old/ruyi/getstarted/#查询可用编译环境","38":"/docs/old/ruyi/getstarted/#安装软件包","39":"/docs/old/ruyi/getstarted/#安装源码包","40":"/docs/old/ruyi/getstarted/#搭建编译环境","41":"/docs/old/ruyi/getstarted/#卸载软件包","42":"/docs/old/ruyi/getstarted/#卸载-ruyi-包管理器","43":"/docs/old/ruyi/getstarted/#镜像信息的维护与下载、开发板系统的安装引导","44":"/docs/old/ruyi/#ruyi-包管理器","45":"/docs/old/ruyi/#支持的发行版平台","46":"/docs/old/ruyi/#命令","47":"/docs/old/ruyi/#附-外部链接","48":"/docs/old/ruyi/updates/0.10.0.html#v0-10-0-版本新增特性","49":"/docs/old/ruyi/updates/0.10.0.html#安装-v0-10-0","50":"/docs/old/ruyi/updates/0.10.0.html#i18n-支持","51":"/docs/old/ruyi/updates/0.10.0.html#板卡镜像刷写","52":"/docs/old/ruyi/updates/0.11.0.html#v0-11-0-版本新增特性","53":"/docs/old/ruyi/updates/0.11.0.html#安装-v0-11-0","54":"/docs/old/ruyi/updates/0.11.0.html#板卡镜像刷写","55":"/docs/old/ruyi/updates/0.12.0.html#v0-12-0-版本新增特性","56":"/docs/old/ruyi/updates/0.12.0.html#安装-v0-12-0","57":"/docs/old/ruyi/updates/0.13.0.html#v0-13-0-版本新增特性","58":"/docs/old/ruyi/updates/0.13.0.html#安装-v0-13-0","59":"/docs/old/ruyi/updates/0.3.0.html#v0-3-0-版本新增特性","60":"/docs/old/ruyi/updates/0.3.0.html#安装-v0-3-0","61":"/docs/old/ruyi/updates/0.3.0.html#ruyi-新闻","62":"/docs/old/ruyi/updates/0.3.0.html#板卡镜像刷写","63":"/docs/old/ruyi/updates/0.4.0.html#v0-4-0-版本新增特性","64":"/docs/old/ruyi/updates/0.4.0.html#安装-v0-4-0","65":"/docs/old/ruyi/updates/0.4.0.html#板卡镜像刷写","66":"/docs/old/ruyi/updates/0.5.0.html#v0-5-0-版本新增特性","67":"/docs/old/ruyi/updates/0.5.0.html#安装-v0-5-0","68":"/docs/old/ruyi/updates/0.5.0.html#板卡镜像刷写","69":"/docs/old/ruyi/updates/0.5.0.html#镜像源换源支持","70":"/docs/old/ruyi/updates/0.6.0.html#v0-6-0-版本新增特性","71":"/docs/old/ruyi/updates/0.6.0.html#安装-v0-6-0","72":"/docs/old/ruyi/updates/0.6.0.html#依赖变化","73":"/docs/old/ruyi/updates/0.6.0.html#板卡镜像刷写","74":"/docs/old/ruyi/updates/0.7.0.html#v0-7-0-版本新增特性","75":"/docs/old/ruyi/updates/0.7.0.html#安装-v0-7-0","76":"/docs/old/ruyi/updates/0.7.0.html#板卡镜像刷写","77":"/docs/old/ruyi/updates/0.8.1.html#v0-8-1-版本新增特性","78":"/docs/old/ruyi/updates/0.8.1.html#安装-v0-8-1","79":"/docs/old/ruyi/updates/0.8.1.html#板卡镜像刷写","80":"/docs/old/ruyi/updates/0.9.0.html#v0-9-0-版本新增特性","81":"/docs/old/ruyi/updates/0.9.0.html#安装-v0-9-0","82":"/docs/old/ruyi/updates/0.9.0.html#板卡镜像刷写","83":"/docs/old/sdk/gnu/#ruyisdk-gcc-工具链介绍","84":"/docs/old/sdk/gnu/#模块介绍","85":"/docs/old/sdk/gnu/#gcc-gnu-compiler-collection","86":"/docs/old/sdk/gnu/#gnu-binutils","87":"/docs/old/sdk/gnu/#gdb-gnu-debugger","88":"/docs/old/sdk/gnu/#glibc-gnu-c-library","89":"/docs/old/sdk/gnu/#newlib","90":"/docs/old/sdk/gnu/#libgcc","91":"/docs/old/sdk/gnu/#使用说明","92":"/docs/old/sdk/gnu/#扩展支持","93":"/docs/old/sdk/llvm/#ruyisdk-llvm-工具链介绍","94":"/docs/old/usecase/#ruyisdk使用示例","95":"/docs/old/usecase/rvbook/#使用示例","96":"/docs/old/usecase/rvbook/#环境说明","97":"/docs/old/usecase/rvbook/#ruyi工具的安装","98":"/docs/old/usecase/rvbook/#使用ruyi工具部署开发环境","99":"/docs/old/usecase/rvbook/#交叉编译coremark","100":"/docs/old/usecase/rvbook/#运行验证","101":"/docs/old/usecase/setupos/#为risc-v开发板安装操作系统","102":"/docs/old/usecase/setupos/#环境说明","103":"/docs/old/usecase/setupos/#安装操作系统","104":"/docs/old/usecase/x86pc/#使用示例","105":"/docs/old/usecase/x86pc/#环境说明","106":"/docs/old/usecase/x86pc/#ruyi工具的安装","107":"/docs/old/usecase/x86pc/#使用ruyi工具部署开发环境","108":"/docs/old/usecase/x86pc/#交叉编译coremark","109":"/docs/old/usecase/x86pc/#qemu-user-模式下运行-riscv64-coremark-可执行程序","110":"/docs/old/usedirection/developmentside/environments/#ruyi-编译环境","111":"/docs/old/usedirection/developmentside/environments/#工具链与预置配置组合","112":"/docs/old/usedirection/developmentside/environments/#创建虚拟环境","113":"/docs/old/usedirection/developmentside/environments/#在虚拟环境下编译","114":"/docs/old/usedirection/developmentside/environments/#模拟运行","115":"/docs/old/usedirection/developmentside/#准备risc-v开发环境","116":"/docs/old/usedirection/developmentside/#安装-ruyi-包管理工具","117":"/docs/old/usedirection/developmentside/#安装编译工具链","118":"/docs/old/usedirection/developmentside/#准备代码","119":"/docs/old/usedirection/developmentside/#编译","120":"/docs/old/usedirection/developmentside/#模拟运行","121":"/docs/old/usedirection/developmentside/#调试","122":"/docs/old/usedirection/developmentside/sources/coremark/#使用编译环境进行-coremark-构建","123":"/docs/old/usedirection/developmentside/sources/coremark/#在最新的-milkv-duo-镜像上运行","124":"/docs/old/usedirection/developmentside/typeselection/#ruyisdk中编译工具链类型简介","125":"/docs/old/usedirection/#使用ruyisdk","126":"/docs/old/usedirection/operationside/#准备risc-v运行环境","127":"/docs/old/usedirection/operationside/#为risc-v开发板安装操作系统","128":"/docs/old/usedirection/operationside/#运行risc-v目标程序","129":"/docs/zh/Community/About-us.html#关于我们","130":"/docs/zh/Community/About-us.html#简介","131":"/docs/zh/Community/About-us.html#联系","132":"/docs/zh/Community/Rules.html#贡献者公约","133":"/docs/zh/Community/Rules.html#我们的承诺","134":"/docs/zh/Community/Rules.html#我们的准则","135":"/docs/zh/Community/Rules.html#责任和权力","136":"/docs/zh/Community/Rules.html#适用范围","137":"/docs/zh/Community/Rules.html#监督","138":"/docs/zh/Community/Rules.html#处理方针","139":"/docs/zh/Community/Rules.html#_1-纠正","140":"/docs/zh/Community/Rules.html#_2-警告","141":"/docs/zh/Community/Rules.html#_3-临时封禁","142":"/docs/zh/Community/Rules.html#_4-永久封禁","143":"/docs/zh/Community/Rules.html#参见","144":"/docs/zh/Other/GNU-type.html#ruyisdk-编译工具","145":"/docs/zh/Other/GNU-type.html#ruyisdk-提供的编译工具链","146":"/docs/zh/Other/GNU-type.html#编译工具链的多样性","147":"/docs/zh/Package-Manager/Complie.html#编译工具链安装","148":"/docs/zh/Package-Manager/Complie.html#其他说明","149":"/docs/zh/Package-Manager/Complie.html#编译","150":"/docs/zh/Package-Manager/Complie.html#代码准备","151":"/docs/zh/Package-Manager/Complie.html#模拟运行","152":"/docs/zh/Package-Manager/Complie.html#调试","153":"/docs/zh/Package-Manager/Enviroment.html#ruyi-编译环境","154":"/docs/zh/Package-Manager/Enviroment.html#工具链与预置配置组合","155":"/docs/zh/Package-Manager/Enviroment.html#创建虚拟环境","156":"/docs/zh/Package-Manager/Enviroment.html#在虚拟环境下编译","157":"/docs/zh/Package-Manager/Enviroment.html#模拟运行","158":"/docs/zh/Package-Manager/#ruyi-包管理器功能说明","159":"/docs/zh/Package-Manager/#命令查询","160":"/docs/zh/Package-Manager/#刷新软件包缓存","161":"/docs/zh/Package-Manager/#查询包管理器更新内容","162":"/docs/zh/Package-Manager/#查询可用软件包","163":"/docs/zh/Package-Manager/#查询可用编译环境","164":"/docs/zh/Package-Manager/#安装软件包","165":"/docs/zh/Package-Manager/#安装源码包","166":"/docs/zh/Package-Manager/#搭建编译环境","167":"/docs/zh/Package-Manager/#卸载软件包","168":"/docs/zh/Package-Manager/#卸载-ruyi-包管理器","169":"/docs/zh/Package-Manager/#镜像信息的维护与下载、开发板系统的安装引导","170":"/docs/zh/Package-Manager/installation.html#ruyi-包管理器安装","171":"/docs/zh/Package-Manager/installation.html#获取-ruyi-包管理器","172":"/docs/zh/Package-Manager/installation.html#amd64-架构示例","173":"/docs/zh/Package-Manager/installation.html#其他说明","174":"/docs/zh/Package-Manager/installation.html#总结","175":"/docs/zh/Package-Manager/installation.html#使用案例","176":"/docs/zh/RuyiSDK/case1.html#使用编译环境进行-coremark-构建","177":"/docs/zh/RuyiSDK/case1.html#在最新的-milkv-duo-镜像上运行","178":"/docs/zh/RuyiSDK/case2.html#为-risc-v-开发板安装操作系统","179":"/docs/zh/RuyiSDK/case2.html#环境","180":"/docs/zh/RuyiSDK/case2.html#其他说明","181":"/docs/zh/RuyiSDK/case2.html#安装操作系统","182":"/docs/zh/RuyiSDK/case2.html#其他说明-1","183":"/docs/zh/RuyiSDK/case3.html#使用示例","184":"/docs/zh/RuyiSDK/case3.html#环境说明","185":"/docs/zh/RuyiSDK/case3.html#ruyi-包管理器的安装","186":"/docs/zh/RuyiSDK/case3.html#使用-ruyi-包管理器部署开发环境","187":"/docs/zh/RuyiSDK/case3.html#交叉编译-coremark","188":"/docs/zh/RuyiSDK/case3.html#运行验证","189":"/docs/zh/introduction/#hello-ruyi","190":"/docs/zh/introduction/#介绍","191":"/docs/zh/introduction/#背景","192":"/docs/zh/introduction/#功能","193":"/docs/zh/introduction/#支持的设备","194":"/docs/zh/introduction/#ruyisdk-架构示意图","195":"/docs/zh/introduction/#让我们开始吧","196":"/docs/zh/introduction/#获取并安装-ruyi","197":"/docs/zh/introduction/#获取并安装-os"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,22],"1":[2,2,36],"2":[1,2,1],"3":[1,3,8],"4":[2,1,11],"5":[1,1,30],"6":[1,1,23],"7":[1,1,3],"8":[2,1,22],"9":[2,1,15],"10":[1,1,37],"11":[1,1,54],"12":[2,1,1],"13":[2,1,4],"14":[1,2,12],"15":[1,1,11],"16":[2,1,36],"17":[2,1,76],"18":[2,1,5],"19":[2,2,1],"20":[4,4,40],"21":[3,4,38],"22":[2,2,278],"23":[1,2,84],"24":[1,1,11],"25":[2,1,1],"26":[1,3,17],"27":[1,3,26],"28":[2,1,1],"29":[1,3,10],"30":[1,3,51],"31":[1,1,1],"32":[1,1,29],"33":[3,1,124],"34":[1,1,20],"35":[1,1,21],"36":[1,1,60],"37":[1,1,24],"38":[1,1,44],"39":[1,1,16],"40":[1,1,33],"41":[1,1,12],"42":[3,1,29],"43":[2,1,7],"44":[2,1,22],"45":[1,2,24],"46":[1,2,35],"47":[2,2,13],"48":[4,1,8],"49":[4,4,82],"50":[2,4,11],"51":[1,4,182],"52":[4,1,17],"53":[4,4,82],"54":[1,4,185],"55":[4,1,28],"56":[4,4,82],"57":[4,1,7],"58":[4,4,82],"59":[4,1,7],"60":[4,4,53],"61":[2,4,87],"62":[1,4,118],"63":[4,1,4],"64":[4,4,57],"65":[1,4,70],"66":[4,1,5],"67":[4,4,53],"68":[1,4,83],"69":[1,4,58],"70":[4,1,12],"71":[4,4,56],"72":[1,4,12],"73":[1,4,81],"74":[4,1,11],"75":[4,4,52],"76":[1,4,96],"77":[4,1,17],"78":[4,4,83],"79":[1,4,103],"80":[4,1,17],"81":[4,4,82],"82":[1,4,124],"83":[3,1,15],"84":[1,3,1],"85":[5,4,34],"86":[2,4,27],"87":[4,4,7],"88":[5,4,10],"89":[1,4,14],"90":[1,4,27],"91":[1,3,94],"92":[1,3,118],"93":[3,1,2],"94":[1,1,24],"95":[1,1,16],"96":[1,1,11],"97":[1,1,43],"98":[2,1,70],"99":[1,1,32],"100":[1,1,6],"101":[2,1,6],"102":[1,2,13],"103":[1,2,171],"104":[1,1,18],"105":[1,1,8],"106":[1,1,41],"107":[2,1,51],"108":[1,1,32],"109":[6,1,9],"110":[2,1,24],"111":[1,2,27],"112":[1,2,103],"113":[1,2,121],"114":[1,2,100],"115":[2,1,1],"116":[3,2,49],"117":[1,2,15],"118":[1,2,15],"119":[1,2,70],"120":[1,2,18],"121":[1,2,12],"122":[3,1,147],"123":[4,3,153],"124":[1,1,73],"125":[1,1,38],"126":[2,1,1],"127":[2,2,8],"128":[2,2,7],"129":[1,1,1],"130":[1,1,11],"131":[1,1,14],"132":[1,1,1],"133":[1,1,25],"134":[1,1,20],"135":[1,1,18],"136":[1,1,5],"137":[1,1,7],"138":[1,1,2],"139":[2,2,8],"140":[2,2,10],"141":[2,2,11],"142":[2,2,7],"143":[1,1,27],"144":[2,1,1],"145":[2,2,38],"146":[1,2,29],"147":[1,1,24],"148":[1,1,3],"149":[1,1,1],"150":[1,2,92],"151":[1,2,24],"152":[1,2,2],"153":[2,1,24],"154":[1,2,27],"155":[1,2,105],"156":[1,2,121],"157":[1,2,100],"158":[2,1,3],"159":[1,2,94],"160":[1,2,20],"161":[1,2,21],"162":[1,2,60],"163":[1,2,24],"164":[1,2,44],"165":[1,2,15],"166":[1,2,32],"167":[1,2,12],"168":[3,2,30],"169":[2,2,7],"170":[2,1,4],"171":[3,2,26],"172":[2,2,110],"173":[1,4,22],"174":[1,2,13],"175":[1,3,3],"176":[3,1,146],"177":[4,3,153],"178":[4,1,5],"179":[1,4,10],"180":[1,5,18],"181":[1,4,176],"182":[1,4,2],"183":[1,1,17],"184":[1,1,12],"185":[2,1,49],"186":[4,1,75],"187":[2,1,36],"188":[1,1,7],"189":[2,1,18],"190":[1,2,29],"191":[1,2,23],"192":[1,2,3],"193":[1,2,96],"194":[2,2,1],"195":[2,2,4],"196":[2,4,2],"197":[2,4,13]},"averageFieldLength":[1.8232323232323238,1.9898989898989894,38.69191919191919],"storedFields":{"0":{"title":"RuyiSDK集成的RISC-V设备","titles":[]},"1":{"title":"支持的RISC-V设备","titles":["RuyiSDK集成的RISC-V设备"]},"2":{"title":"从RuyiSDK开始使用设备","titles":["RuyiSDK集成的RISC-V设备"]},"3":{"title":"获取并安装OS","titles":["RuyiSDK集成的RISC-V设备","从RuyiSDK开始使用设备"]},"4":{"title":"Hello Ruyi","titles":[]},"5":{"title":"介绍","titles":[]},"6":{"title":"背景","titles":[]},"7":{"title":"功能","titles":[]},"8":{"title":"Ruyi 包管理器","titles":["功能"]},"9":{"title":"Ruyi IDE","titles":["功能"]},"10":{"title":"Community","titles":["功能"]},"11":{"title":"支持的设备","titles":[]},"12":{"title":"RuyiSDK-架构示意图","titles":[]},"13":{"title":"让我们开始吧!","titles":[]},"14":{"title":"获取并安装OS","titles":["让我们开始吧!"]},"15":{"title":"介绍","titles":[]},"16":{"title":"RuyiSDK 的目标","titles":[]},"17":{"title":"RuyiSDK 架构示意图","titles":[]},"18":{"title":"RuyiSDK 模块需求说明","titles":[]},"19":{"title":"RUYI 包管理器","titles":["RuyiSDK 模块需求说明"]},"20":{"title":"RUYI在线软件源(Ruyi Repo)","titles":["RuyiSDK 模块需求说明","RUYI 包管理器"]},"21":{"title":"RUYI包管理工具(ruyi)","titles":["RuyiSDK 模块需求说明","RUYI 包管理器"]},"22":{"title":"Ruyi IDE","titles":["RuyiSDK 模块需求说明"]},"23":{"title":"开发者社区","titles":["RuyiSDK 模块需求说明"]},"24":{"title":"版本规划路线图","titles":[]},"25":{"title":"RUYISDK 版本计划","titles":["版本规划路线图"]},"26":{"title":"里程碑版本","titles":["版本规划路线图","RUYISDK 版本计划"]},"27":{"title":"敏捷开发版本计划","titles":["版本规划路线图","RUYISDK 版本计划"]},"28":{"title":"RUYISDK 规划","titles":["版本规划路线图"]},"29":{"title":"2024目标","titles":["版本规划路线图","RUYISDK 规划"]},"30":{"title":"敏捷开发版本排期","titles":["版本规划路线图","RUYISDK 规划"]},"31":{"title":"开始","titles":[]},"32":{"title":"安装依赖软件","titles":["开始"]},"33":{"title":"安装 RUYI 包管理器","titles":["开始"]},"34":{"title":"刷新软件包缓存","titles":["开始"]},"35":{"title":"查询包管理器更新内容","titles":["开始"]},"36":{"title":"查询可用软件包","titles":["开始"]},"37":{"title":"查询可用编译环境","titles":["开始"]},"38":{"title":"安装软件包","titles":["开始"]},"39":{"title":"安装源码包","titles":["开始"]},"40":{"title":"搭建编译环境","titles":["开始"]},"41":{"title":"卸载软件包","titles":["开始"]},"42":{"title":"卸载 RUYI 包管理器","titles":["开始"]},"43":{"title":"镜像信息的维护与下载、开发板系统的安装引导","titles":["开始"]},"44":{"title":"RUYI 包管理器","titles":[]},"45":{"title":"支持的发行版平台","titles":["RUYI 包管理器"]},"46":{"title":"命令","titles":["RUYI 包管理器"]},"47":{"title":"附:外部链接","titles":["RUYI 包管理器"]},"48":{"title":"v0.10.0 版本新增特性","titles":[]},"49":{"title":"安装 v0.10.0","titles":["v0.10.0 版本新增特性"]},"50":{"title":"i18n 支持","titles":["v0.10.0 版本新增特性"]},"51":{"title":"板卡镜像刷写","titles":["v0.10.0 版本新增特性"]},"52":{"title":"v0.11.0 版本新增特性","titles":[]},"53":{"title":"安装 v0.11.0","titles":["v0.11.0 版本新增特性"]},"54":{"title":"板卡镜像刷写","titles":["v0.11.0 版本新增特性"]},"55":{"title":"v0.12.0 版本新增特性","titles":[]},"56":{"title":"安装 v0.12.0","titles":["v0.12.0 版本新增特性"]},"57":{"title":"v0.13.0 版本新增特性","titles":[]},"58":{"title":"安装 v0.13.0","titles":["v0.13.0 版本新增特性"]},"59":{"title":"v0.3.0 版本新增特性","titles":[]},"60":{"title":"安装 v0.3.0","titles":["v0.3.0 版本新增特性"]},"61":{"title":"RUYI 新闻","titles":["v0.3.0 版本新增特性"]},"62":{"title":"板卡镜像刷写","titles":["v0.3.0 版本新增特性"]},"63":{"title":"v0.4.0 版本新增特性","titles":[]},"64":{"title":"安装 v0.4.0","titles":["v0.4.0 版本新增特性"]},"65":{"title":"板卡镜像刷写","titles":["v0.4.0 版本新增特性"]},"66":{"title":"v0.5.0 版本新增特性","titles":[]},"67":{"title":"安装 v0.5.0","titles":["v0.5.0 版本新增特性"]},"68":{"title":"板卡镜像刷写","titles":["v0.5.0 版本新增特性"]},"69":{"title":"镜像源换源支持","titles":["v0.5.0 版本新增特性"]},"70":{"title":"v0.6.0 版本新增特性","titles":[]},"71":{"title":"安装 v0.6.0","titles":["v0.6.0 版本新增特性"]},"72":{"title":"依赖变化","titles":["v0.6.0 版本新增特性"]},"73":{"title":"板卡镜像刷写","titles":["v0.6.0 版本新增特性"]},"74":{"title":"v0.7.0 版本新增特性","titles":[]},"75":{"title":"安装 v0.7.0","titles":["v0.7.0 版本新增特性"]},"76":{"title":"板卡镜像刷写","titles":["v0.7.0 版本新增特性"]},"77":{"title":"v0.8.1 版本新增特性","titles":[]},"78":{"title":"安装 v0.8.1","titles":["v0.8.1 版本新增特性"]},"79":{"title":"板卡镜像刷写","titles":["v0.8.1 版本新增特性"]},"80":{"title":"v0.9.0 版本新增特性","titles":[]},"81":{"title":"安装 v0.9.0","titles":["v0.9.0 版本新增特性"]},"82":{"title":"板卡镜像刷写","titles":["v0.9.0 版本新增特性"]},"83":{"title":"RuyiSDK GCC 工具链介绍","titles":[]},"84":{"title":"模块介绍","titles":["RuyiSDK GCC 工具链介绍"]},"85":{"title":"GCC(GNU Compiler Collection)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"86":{"title":"GNU Binutils","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"87":{"title":"GDB(GNU Debugger)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"88":{"title":"Glibc(GNU C Library)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"89":{"title":"Newlib","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"90":{"title":"Libgcc","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"91":{"title":"使用说明","titles":["RuyiSDK GCC 工具链介绍"]},"92":{"title":"扩展支持","titles":["RuyiSDK GCC 工具链介绍"]},"93":{"title":"RuyiSDK LLVM 工具链介绍","titles":[]},"94":{"title":"RuyiSDK使用示例","titles":[]},"95":{"title":"使用示例","titles":[]},"96":{"title":"环境说明","titles":["使用示例"]},"97":{"title":"ruyi工具的安装","titles":["使用示例"]},"98":{"title":"使用ruyi工具部署开发环境:","titles":["使用示例"]},"99":{"title":"交叉编译coremark","titles":["使用示例"]},"100":{"title":"运行验证","titles":["使用示例"]},"101":{"title":"为RISC-V开发板安装操作系统","titles":[]},"102":{"title":"环境说明","titles":["为RISC-V开发板安装操作系统"]},"103":{"title":"安装操作系统","titles":["为RISC-V开发板安装操作系统"]},"104":{"title":"使用示例","titles":[]},"105":{"title":"环境说明","titles":["使用示例"]},"106":{"title":"ruyi工具的安装","titles":["使用示例"]},"107":{"title":"使用ruyi工具部署开发环境:","titles":["使用示例"]},"108":{"title":"交叉编译coremark","titles":["使用示例"]},"109":{"title":"qemu-user 模式下运行 riscv64 coremark 可执行程序","titles":["使用示例"]},"110":{"title":"RUYI 编译环境","titles":[]},"111":{"title":"工具链与预置配置组合","titles":["RUYI 编译环境"]},"112":{"title":"创建虚拟环境","titles":["RUYI 编译环境"]},"113":{"title":"在虚拟环境下编译","titles":["RUYI 编译环境"]},"114":{"title":"模拟运行","titles":["RUYI 编译环境"]},"115":{"title":"准备RISC-V开发环境","titles":[]},"116":{"title":"安装 ruyi 包管理工具","titles":["准备RISC-V开发环境"]},"117":{"title":"安装编译工具链","titles":["准备RISC-V开发环境"]},"118":{"title":"准备代码","titles":["准备RISC-V开发环境"]},"119":{"title":"编译","titles":["准备RISC-V开发环境"]},"120":{"title":"模拟运行","titles":["准备RISC-V开发环境"]},"121":{"title":"调试","titles":["准备RISC-V开发环境"]},"122":{"title":"使用编译环境进行 Coremark 构建","titles":[]},"123":{"title":"在最新的 Milkv Duo 镜像上运行","titles":["使用编译环境进行 Coremark 构建"]},"124":{"title":"RuyiSDK中编译工具链类型简介","titles":[]},"125":{"title":"使用RuyiSDK","titles":[]},"126":{"title":"准备RISC-V运行环境","titles":[]},"127":{"title":"为RISC-V开发板安装操作系统","titles":["准备RISC-V运行环境"]},"128":{"title":"运行RISC-V目标程序","titles":["准备RISC-V运行环境"]},"129":{"title":"关于我们","titles":[]},"130":{"title":"简介","titles":["关于我们"]},"131":{"title":"联系","titles":["关于我们"]},"132":{"title":"贡献者公约","titles":[]},"133":{"title":"我们的承诺","titles":["贡献者公约"]},"134":{"title":"我们的准则","titles":["贡献者公约"]},"135":{"title":"责任和权力","titles":["贡献者公约"]},"136":{"title":"适用范围","titles":["贡献者公约"]},"137":{"title":"监督","titles":["贡献者公约"]},"138":{"title":"处理方针","titles":["贡献者公约"]},"139":{"title":"1. 纠正","titles":["贡献者公约","处理方针"]},"140":{"title":"2. 警告","titles":["贡献者公约","处理方针"]},"141":{"title":"3. 临时封禁","titles":["贡献者公约","处理方针"]},"142":{"title":"4. 永久封禁","titles":["贡献者公约","处理方针"]},"143":{"title":"参见","titles":["贡献者公约"]},"144":{"title":"RuyiSDK 编译工具","titles":[]},"145":{"title":"RuyiSDK 提供的编译工具链","titles":["RuyiSDK 编译工具"]},"146":{"title":"编译工具链的多样性","titles":["RuyiSDK 编译工具"]},"147":{"title":"编译工具链安装","titles":[]},"148":{"title":"其他说明","titles":["编译工具链安装"]},"149":{"title":"编译","titles":["编译工具链安装"]},"150":{"title":"代码准备","titles":["编译工具链安装","编译"]},"151":{"title":"模拟运行","titles":["编译工具链安装","编译"]},"152":{"title":"调试","titles":["编译工具链安装","编译"]},"153":{"title":"ruyi 编译环境","titles":[]},"154":{"title":"工具链与预置配置组合","titles":["ruyi 编译环境"]},"155":{"title":"创建虚拟环境","titles":["ruyi 编译环境"]},"156":{"title":"在虚拟环境下编译","titles":["ruyi 编译环境"]},"157":{"title":"模拟运行","titles":["ruyi 编译环境"]},"158":{"title":"ruyi 包管理器功能说明","titles":[]},"159":{"title":"命令查询","titles":["ruyi 包管理器功能说明"]},"160":{"title":"刷新软件包缓存","titles":["ruyi 包管理器功能说明"]},"161":{"title":"查询包管理器更新内容","titles":["ruyi 包管理器功能说明"]},"162":{"title":"查询可用软件包","titles":["ruyi 包管理器功能说明"]},"163":{"title":"查询可用编译环境","titles":["ruyi 包管理器功能说明"]},"164":{"title":"安装软件包","titles":["ruyi 包管理器功能说明"]},"165":{"title":"安装源码包","titles":["ruyi 包管理器功能说明"]},"166":{"title":"搭建编译环境","titles":["ruyi 包管理器功能说明"]},"167":{"title":"卸载软件包","titles":["ruyi 包管理器功能说明"]},"168":{"title":"卸载 RUYI 包管理器","titles":["ruyi 包管理器功能说明"]},"169":{"title":"镜像信息的维护与下载、开发板系统的安装引导","titles":["ruyi 包管理器功能说明"]},"170":{"title":"ruyi 包管理器安装","titles":[]},"171":{"title":"获取 ruyi 包管理器","titles":["ruyi 包管理器安装"]},"172":{"title":"amd64 架构示例","titles":["ruyi 包管理器安装"]},"173":{"title":"其他说明","titles":["ruyi 包管理器安装","amd64 架构示例"]},"174":{"title":"总结","titles":["ruyi 包管理器安装"]},"175":{"title":"使用案例","titles":["ruyi 包管理器安装","总结"]},"176":{"title":"使用编译环境进行 Coremark 构建","titles":[]},"177":{"title":"在最新的 Milkv Duo 镜像上运行","titles":["使用编译环境进行 Coremark 构建"]},"178":{"title":"为 RISC-V 开发板安装操作系统","titles":[]},"179":{"title":"环境","titles":["为 RISC-V 开发板安装操作系统"]},"180":{"title":"其他说明","titles":["为 RISC-V 开发板安装操作系统","环境"]},"181":{"title":"安装操作系统","titles":["为 RISC-V 开发板安装操作系统"]},"182":{"title":"其他说明","titles":["为 RISC-V 开发板安装操作系统"]},"183":{"title":"使用示例","titles":[]},"184":{"title":"环境说明","titles":["使用示例"]},"185":{"title":"ruyi 包管理器的安装","titles":["使用示例"]},"186":{"title":"使用 ruyi 包管理器部署开发环境:","titles":["使用示例"]},"187":{"title":"交叉编译 coremark","titles":["使用示例"]},"188":{"title":"运行验证","titles":["使用示例"]},"189":{"title":"Hello Ruyi","titles":[]},"190":{"title":"介绍","titles":["Hello Ruyi"]},"191":{"title":"背景","titles":["Hello Ruyi"]},"192":{"title":"功能","titles":["Hello Ruyi"]},"193":{"title":"支持的设备","titles":["Hello Ruyi"]},"194":{"title":"RuyiSDK-架构示意图","titles":["Hello Ruyi"]},"195":{"title":"让我们开始吧!","titles":["Hello Ruyi"]},"196":{"title":"获取并安装 ruyi","titles":["Hello Ruyi","让我们开始吧!"]},"197":{"title":"获取并安装 OS","titles":["Hello Ruyi","让我们开始吧!"]}},"dirtCount":0,"index":[["型号",{"2":{"193":1}}],["详细请见此处",{"2":{"185":1}}],["详细使用说明参考",{"2":{"85":1,"86":1}}],["验证",{"2":{"185":1}}],["验证ruyi可否使用",{"2":{"97":1,"106":1}}],["路径下",{"2":{"185":1}}],["路径下就可以开始了",{"2":{"116":1}}],["正常输出版本相关信息后",{"2":{"181":1}}],["卡通过读卡器接入",{"2":{"180":1}}],["连接线接入",{"2":{"180":1}}],["连接方式",{"2":{"180":1}}],["硬件",{"2":{"179":1}}],["硬件环境",{"2":{"96":1,"105":1,"184":1}}],["总结",{"0":{"174":1},"1":{"175":1}}],["总之",{"2":{"22":1}}],["备用仓库",{"2":{"173":1}}],["备注",{"2":{"30":1}}],["彻底卸载",{"2":{"159":1}}],["标记新闻为已读",{"2":{"159":1}}],["标准和规范的演进",{"2":{"124":1,"146":1}}],["标准和规范的演进以及特定应用需求等因素相互作用的结果",{"2":{"124":1}}],["标准",{"2":{"16":1,"145":1}}],["读取特定序号的新闻",{"2":{"159":1}}],["读取下一条新闻",{"2":{"35":1,"159":1,"161":1}}],["含义",{"2":{"159":1}}],["含适用的编译工具链",{"2":{"0":1,"10":1}}],["初步检验可执行程序是否",{"2":{"150":1}}],["初步检验可执行程序是否risc",{"2":{"119":1}}],["得到可执行程序",{"2":{"150":1,"187":1}}],["得到可执行程序coremark",{"2":{"99":1,"108":1,"119":1}}],["步骤如下",{"2":{"150":1}}],["保证开发过程的高效性",{"2":{"150":1}}],["保证了用户在同以开发环境中能够安装使用不同的编译工具链版本",{"2":{"150":1}}],["保证ruyi",{"2":{"116":1}}],["轻松的查看",{"2":{"147":1}}],["满足更加复杂的开发场景",{"2":{"146":1}}],["图像处理等",{"2":{"146":1}}],["图像处理等领域可能需要针对特定指令集的优化和定制",{"2":{"124":1}}],["稳定性以及兼容性",{"2":{"146":1}}],["稳定性或兼容性",{"2":{"124":1}}],["但不同版本的工具链在相同标准下也会体现出不同的性能",{"2":{"146":1}}],["但是一些高性能的risc",{"2":{"125":1}}],["但是并不保证建立成功的环境一定可用于构建",{"2":{"111":1,"154":1}}],["出现不同的版本",{"2":{"146":1}}],["原因有以下几点",{"2":{"146":1}}],["版",{"2":{"143":1}}],["版本工具链",{"2":{"186":1}}],["版本匹配格式应为",{"2":{"159":1}}],["版本除非指定",{"2":{"113":1,"156":1}}],["版本以及ruyisdk",{"2":{"90":1}}],["版本的",{"2":{"71":1,"185":1}}],["版本的稳定二进制为",{"2":{"60":1,"64":1,"67":1}}],["版本识别",{"2":{"57":1}}],["版本中",{"2":{"55":1}}],["版本会忽略",{"2":{"52":1}}],["版本",{"2":{"51":1,"54":1,"55":1,"65":2,"68":2,"73":2,"74":1,"76":2,"79":1,"82":1,"90":2}}],["版本新增特性",{"0":{"48":1,"52":1,"55":1,"57":1,"59":1,"63":1,"66":1,"70":1,"74":1,"77":1,"80":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"78":1,"79":1,"81":1,"82":1}}],["版本开始支持矽速",{"2":{"80":1}}],["版本开始新增板卡镜像刷写功能",{"2":{"62":1}}],["版本开始新增新闻功能",{"2":{"61":1}}],["版本开始",{"2":{"32":1,"50":1,"51":1,"54":1,"69":1,"72":1,"77":1,"79":1,"82":1}}],["版本计划",{"0":{"25":1},"1":{"26":1,"27":1}}],["版本规划路线图",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1}}],["版本控制集成",{"2":{"22":2}}],["版本信息",{"2":{"20":1}}],["永久禁止在社区内进行任何形式的公开互动",{"2":{"142":1}}],["永久封禁",{"0":{"142":1}}],["骚扰个人或攻击或贬低某个类别的个体",{"2":{"142":1}}],["骚扰或其他不可接受的行为可通过",{"2":{"137":1}}],["行为模式表现出违反社区准则",{"2":{"142":1}}],["违反这些条款可能会导致永久封禁",{"2":{"141":1}}],["违反这些条款可能会导致临时或永久封禁",{"2":{"140":1}}],["暂时禁止与社区进行任何形式的互动或公开交流",{"2":{"141":1}}],["暂时没有提供官方镜像下载",{"2":{"76":1}}],["严重违反社区准则",{"2":{"141":1}}],["临时封禁",{"0":{"141":1}}],["警告并对连续性行为进行处理",{"2":{"140":1}}],["警告",{"0":{"140":1}}],["明确说明违规行为的性质",{"2":{"139":1}}],["纠正",{"0":{"139":1}}],["处理意见",{"2":{"139":1,"140":1,"141":1,"142":1}}],["处理方针",{"0":{"138":1},"1":{"139":1,"140":1,"141":1,"142":1}}],["处理器架构在不断更新迭代的过程中会引进新的指令集扩展以满足不同的需求",{"2":{"146":1}}],["处理器架构发展",{"2":{"146":1}}],["处理器架构不断演进和改进",{"2":{"124":1}}],["处理器架构的发展",{"2":{"124":1}}],["所有社区领袖都有义务尊重任何事件报告者的隐私和安全",{"2":{"137":1}}],["所有投诉都将得到及时和公平的审查和调查",{"2":{"137":1}}],["所启动的开源项目",{"2":{"5":1,"190":1}}],["向负责监督的社区领袖报告",{"2":{"137":1}}],["向量扩展时",{"2":{"91":1}}],["插入联系方式",{"2":{"137":1}}],["插件和扩展",{"2":{"23":1}}],["辱骂",{"2":{"137":1}}],["监督",{"0":{"137":1}}],["议题",{"2":{"135":1}}],["维基",{"2":{"135":1}}],["冒犯或有害的任何行为采取纠正措施",{"2":{"135":1}}],["威胁",{"2":{"135":1}}],["责任和权力",{"0":{"135":1}}],["公布他人的私人信息",{"2":{"134":1}}],["公开或私下的骚扰行为",{"2":{"134":1}}],["未经他人明确许可",{"2":{"134":1}}],["未配置或配置为空时",{"2":{"69":3}}],["侮辱或诋毁性评论",{"2":{"134":1}}],["嘲弄",{"2":{"134":1}}],["及性引诱或挑逗",{"2":{"134":1}}],["注重社区共同诉求",{"2":{"134":1}}],["注意事项",{"2":{"159":1}}],["注意这整个过程如果在",{"2":{"122":1,"176":1}}],["注意在虚拟环境创建时",{"2":{"98":1,"186":1}}],["注意指定的",{"2":{"92":1}}],["注意指定对应的",{"2":{"92":1}}],["注意刷写镜像的操作需要调用",{"2":{"62":1}}],["注意",{"2":{"41":1,"52":1,"71":1,"76":1,"167":1}}],["注意二进制的文件名必须为",{"2":{"33":1,"172":1}}],["注意从",{"2":{"32":1}}],["承担责任并向受我们错误影响的人道歉",{"2":{"134":1}}],["观点和感受",{"2":{"134":1}}],["尊重不同的主张",{"2":{"134":1}}],["表现出对他人的同情和善意",{"2":{"134":1}}],["表示",{"2":{"113":1,"156":1}}],["宗教信仰",{"2":{"133":1}}],["肤色",{"2":{"133":1}}],["国内访问可能会产生不稳定等问题",{"2":{"173":1}}],["国籍",{"2":{"133":1}}],["国庆节",{"2":{"30":1}}],["社会与经济地位",{"2":{"133":1}}],["社区处理方针灵感来源于",{"2":{"143":1}}],["社区影响",{"2":{"139":1,"140":1,"141":1,"142":1}}],["社区领袖将遵循下列社区处理方针来明确他们所认定违反本行为准则的行为的处理方式",{"2":{"138":1}}],["社区领袖有责任解释和落实我们所认可的行为准则",{"2":{"135":1}}],["社区领导有权力和责任删除",{"2":{"135":1}}],["社区旨在建设一个开放",{"2":{"130":1}}],["社区可以设立积分和奖励机制",{"2":{"23":1}}],["社区可以提供就业和项目机会的发布平台",{"2":{"23":1}}],["社区可以组织定期的在线活动",{"2":{"23":1}}],["社区可能吸引一些risc",{"2":{"23":1}}],["社区可能提供详细的文档和教程",{"2":{"23":1}}],["教育程度",{"2":{"133":1}}],["教程",{"2":{"23":1}}],["教程和示例代码的集成",{"2":{"22":1}}],["教程视频",{"2":{"10":1}}],["经验水平",{"2":{"133":1}}],["性倾向或性取向如何",{"2":{"133":1}}],["性别认同和表达",{"2":{"133":1}}],["性征",{"2":{"133":1}}],["性能分析工具",{"2":{"86":1}}],["性能分析和内存分析等功能",{"2":{"22":1}}],["性能",{"2":{"22":1}}],["族裔",{"2":{"133":1}}],["体型",{"2":{"133":1}}],["贡献者和领袖",{"2":{"133":1}}],["贡献者公约",{"0":{"132":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1}}],["身为社区成员",{"2":{"133":1}}],["发送邮件至",{"2":{"131":1}}],["发布日期",{"2":{"30":1}}],["发布日期默认每双周周二发布",{"2":{"27":1}}],["发布日~下一次代码冻结日",{"2":{"27":1}}],["发布周期内遇3日以上节假日的",{"2":{"27":1}}],["发布厂商",{"2":{"20":1}}],["微信交流群",{"2":{"131":1}}],["关注微信公众号",{"2":{"131":1}}],["关于我们",{"0":{"129":1},"1":{"130":1,"131":1}}],["联系",{"0":{"131":1}}],["谢谢",{"2":{"130":1}}],["健康社区的方式行事和互动",{"2":{"133":1}}],["健康社区",{"2":{"130":1}}],["多样化",{"2":{"130":1,"133":1}}],["多语言支持",{"2":{"48":1}}],["友善",{"2":{"130":1,"133":1}}],["简介",{"0":{"130":1}}],["仓库自述文档",{"2":{"187":1}}],["仓库文章",{"2":{"145":1}}],["仓库文档在",{"2":{"116":1,"173":1}}],["仓库",{"2":{"124":1,"145":2,"173":1}}],["非通用工具链",{"2":{"124":1,"145":1}}],["机器学习",{"2":{"124":1,"146":1}}],["嵌入式系统",{"2":{"124":1}}],["嵌入式设备中为",{"2":{"91":1}}],["某些特定的应用领域可能对扩展指令集有特殊的需求",{"2":{"124":1}}],["某些扩展指令集是由标准和规范定义的",{"2":{"124":1}}],["特定应用需求",{"2":{"124":1,"146":1}}],["特性的开发者",{"2":{"90":1}}],["然而",{"2":{"124":1}}],["然后在文本编辑器中完成对代码的编辑",{"2":{"17":1}}],["针对自己的处理器架构实现了特定版本的编译工具链",{"2":{"124":1}}],["针对risc",{"2":{"22":2}}],["添加小助手",{"2":{"131":1}}],["添加特定的硬件加速器等方式",{"2":{"124":1}}],["添加自定义功能",{"2":{"22":1}}],["优化编译器生成的代码",{"2":{"124":1}}],["更多的功能和更好的能效",{"2":{"124":1}}],["更新最新的软件源索引",{"2":{"97":1,"185":1}}],["更新软件包缓存",{"2":{"34":1,"159":1,"160":1}}],["更新",{"2":{"21":1}}],["更新和管理软件包",{"2":{"17":1}}],["随着时间的推移",{"2":{"124":1}}],["随着版本的更新和发布",{"2":{"20":1}}],["厂商定制优化",{"2":{"146":1}}],["厂商定制和优化",{"2":{"124":2}}],["厂商定制扩展",{"2":{"16":1}}],["重新安装",{"2":{"159":1}}],["重新上传后运行",{"2":{"123":1,"177":1}}],["重构工具",{"2":{"22":1}}],["地址请按实际情况更改",{"2":{"123":1,"177":1}}],["传送",{"2":{"123":1,"177":1}}],["首先进入编译环境",{"2":{"122":1,"176":1}}],["首先创建项目",{"2":{"17":1}}],["构建",{"0":{"122":1,"176":1},"1":{"123":1,"177":1},"2":{"122":2,"176":2}}],["此外",{"2":{"121":1}}],["此部分没有统一规范",{"2":{"119":1,"150":1}}],["举例",{"2":{"119":1,"150":1}}],["前提",{"2":{"119":1,"120":1}}],["大致操作步骤如下",{"2":{"119":1}}],["允许用户在系统中创建独立的环境",{"2":{"119":1}}],["允许开发人员在",{"2":{"87":1}}],["准备代码",{"0":{"118":1},"2":{"125":1}}],["准备risc",{"0":{"115":1,"126":1},"1":{"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"127":1,"128":1},"2":{"125":1}}],["获取",{"0":{"171":1}}],["获取源码后",{"2":{"150":1}}],["获取最新缓存才能获取软件仓库最新的软件包资源",{"2":{"116":1}}],["获取并安装",{"0":{"196":1,"197":1}}],["获取并安装os",{"0":{"3":1,"14":1}}],["获取并查看更新信息",{"2":{"46":1}}],["三种架构在",{"2":{"171":1}}],["三种架构平台下的安装程序",{"2":{"116":1}}],["三架构支持",{"2":{"21":1,"22":1}}],["程序并使用",{"2":{"114":1,"157":1}}],["进而对编译工具链进行定制化",{"2":{"146":1}}],["进而有了不同版本的情况",{"2":{"146":1}}],["进入编译环境",{"2":{"114":1,"157":1}}],["进行进一步讨论",{"2":{"131":1}}],["进行代码的协作开发和团队协作",{"2":{"22":1}}],["进行例如图像识别应用程序的开发时",{"2":{"22":1}}],["实际操作中请注意将上述例子中的参数替换为正确的值",{"2":{"113":1,"156":1}}],["实现运行环境隔离的设计",{"2":{"98":1,"186":1}}],["实现",{"2":{"42":1,"168":1}}],["实现一套图形用户界面",{"2":{"21":1}}],["实现一套命令行接口",{"2":{"21":1}}],["实现开发环境和运行环境的文件传输",{"2":{"0":1,"10":1}}],["退出后环境将被还原",{"2":{"113":1,"156":1}}],["退出编译环境",{"2":{"113":1,"114":1,"156":1,"157":1}}],["退出虚拟环境",{"2":{"109":1,"120":1,"122":1,"151":1,"176":1}}],["调用工具链",{"2":{"113":1,"156":1}}],["调试技巧等方面的内容",{"2":{"23":1}}],["调试支持",{"2":{"22":1}}],["调试支持等功能",{"2":{"22":1}}],["调试支持等",{"2":{"16":1}}],["调试",{"0":{"121":1,"152":1},"2":{"17":1,"125":1}}],["调试工具等等",{"2":{"125":1}}],["调试工具和模拟器",{"2":{"9":1}}],["调试工具",{"2":{"8":1,"17":2,"20":1}}],["建立编译环境",{"2":{"113":1,"114":1,"156":1,"157":1}}],["建议使用最新版本",{"2":{"116":1}}],["建议使用",{"2":{"91":1}}],["无需确认彻底卸载",{"2":{"159":1}}],["无需确认直接执行",{"2":{"159":2}}],["无需确认直接卸载",{"2":{"159":1}}],["无论其年龄",{"2":{"133":1}}],["无",{"2":{"111":1,"154":1}}],["无浮点硬件中为",{"2":{"91":1}}],["预置配置",{"2":{"111":1,"154":1}}],["预期每",{"2":{"27":1}}],["展示在x86",{"2":{"104":1}}],["展示从",{"2":{"95":1,"183":1}}],["您只需要按照引导提示一步步执行即可",{"2":{"103":1,"181":1}}],["您可用",{"2":{"61":4}}],["直接运行",{"2":{"188":1}}],["直接运行即可",{"2":{"128":1}}],["直接运行riscv64",{"2":{"100":1}}],["直接使用环境变量指定的gcc编译",{"2":{"98":1,"186":1}}],["参阅",{"2":{"171":1}}],["参见",{"0":{"143":1},"2":{"143":2}}],["参考",{"2":{"173":1,"187":1}}],["参考上表代入具体的参数",{"2":{"112":1,"155":1}}],["参考coremark仓库自述文档",{"2":{"99":1,"108":1}}],["参数",{"2":{"38":1,"69":1,"164":1}}],["参数列表",{"2":{"22":2}}],["激活方式与",{"2":{"113":1,"156":1}}],["激活构建环境",{"2":{"113":1,"156":1}}],["激活后",{"2":{"98":1,"186":1}}],["激活虚拟环境",{"2":{"98":1,"107":1,"119":1,"150":1,"186":1}}],["激活和管理虚拟环境",{"2":{"22":1}}],["创建一个叫",{"2":{"150":1}}],["创建一个叫venv1的虚拟环境",{"2":{"119":1}}],["创建一个新的c",{"2":{"22":1}}],["创建虚拟环境",{"0":{"112":1,"155":1},"2":{"112":1,"155":1,"186":1}}],["创建虚拟环境venv",{"2":{"98":1}}],["清除当前已经安装的",{"2":{"97":1,"106":1,"185":1}}],["环境",{"0":{"179":1},"1":{"180":1}}],["环境则不是交叉编译",{"2":{"122":1,"176":1}}],["环境下使用平头哥工具链配置带",{"2":{"114":1,"157":1}}],["环境说明",{"0":{"96":1,"102":1,"105":1,"184":1}}],["环境变量被无视的问题",{"2":{"55":1}}],["环境变量被设置时",{"2":{"34":1,"160":1}}],["环境变量",{"2":{"52":1}}],["接入risc",{"2":{"94":1}}],["接着对项目进行编译构建获得risc",{"2":{"17":1}}],["案例三",{"2":{"94":1}}],["案例二",{"2":{"94":1}}],["案例一",{"2":{"94":1}}],["案例研究和实践经验",{"2":{"23":1}}],["希望通过一些小场景让大家更多的了解ruyisdk的使用",{"2":{"94":1}}],["额外支持",{"2":{"92":1}}],["手册",{"2":{"91":1}}],["有关本行为准则的常见问题的答案",{"2":{"143":1}}],["有助于为我们的社区创造积极环境的行为例子包括但不限于",{"2":{"134":1}}],["有特定优化",{"2":{"92":1}}],["有已知固定向量长度的",{"2":{"91":1}}],["有什么用",{"2":{"4":1,"189":1}}],["请继续以下操作",{"2":{"181":1}}],["请参阅使用案例栏目",{"2":{"175":1}}],["请确保已经安装了编译所需的编译工具链",{"2":{"151":1}}],["请先查阅社区守则以便更好的在社区内交流",{"2":{"130":1}}],["请注意关注版本信息",{"2":{"116":1}}],["请务必同时使用",{"2":{"91":1}}],["请使用更新的版本",{"2":{"71":1}}],["请使用",{"2":{"41":1,"147":1,"167":1}}],["控制不同扩展的使用",{"2":{"91":1}}],["输入",{"2":{"91":1}}],["zpsfoperand",{"2":{"92":1}}],["zpn",{"2":{"92":1}}],["ztso",{"2":{"92":1}}],["zc",{"2":{"92":1}}],["zcmt",{"2":{"92":1}}],["zcmp",{"2":{"92":1}}],["zcd",{"2":{"92":2}}],["zcf",{"2":{"92":1}}],["zce",{"2":{"92":1}}],["zcb",{"2":{"92":1}}],["zca",{"2":{"92":1}}],["zmmul",{"2":{"92":1}}],["zvkt",{"2":{"92":1}}],["zvksc",{"2":{"92":1}}],["zvksh",{"2":{"92":1}}],["zvksed",{"2":{"92":1}}],["zvknc",{"2":{"92":1}}],["zvknhb",{"2":{"92":1}}],["zvknha",{"2":{"92":1}}],["zvkned",{"2":{"92":1}}],["zvkg",{"2":{"92":1}}],["zvbc",{"2":{"92":1}}],["zvbb",{"2":{"92":1}}],["zvfhmin",{"2":{"92":1}}],["zvfh",{"2":{"92":1}}],["zfa",{"2":{"92":1}}],["zfhmin",{"2":{"92":1}}],["zfh",{"2":{"92":1}}],["zfinx",{"2":{"92":2}}],["zkt",{"2":{"92":1}}],["zksh",{"2":{"92":1}}],["zksed",{"2":{"92":1}}],["zkr",{"2":{"92":1}}],["zknh",{"2":{"92":1}}],["zkne",{"2":{"92":1}}],["zknd",{"2":{"92":1}}],["zhinxmin",{"2":{"92":1}}],["zhinx",{"2":{"92":1}}],["zdinx",{"2":{"92":1}}],["zawrs",{"2":{"92":1}}],["zihintpause",{"2":{"92":1}}],["zihintntl",{"2":{"92":1}}],["zicbop",{"2":{"92":1}}],["zicbom",{"2":{"92":1}}],["zicboz",{"2":{"92":1}}],["zicond",{"2":{"92":1}}],["zicsr",{"2":{"92":1}}],["zifencei",{"2":{"92":1}}],["zbpbo",{"2":{"92":1}}],["zbkx",{"2":{"92":1}}],["zbkc",{"2":{"92":1}}],["zbkb",{"2":{"92":1}}],["zbs",{"2":{"91":1,"92":1}}],["zbc",{"2":{"91":1,"92":1}}],["zbb",{"2":{"91":1,"92":1}}],["zba",{"2":{"91":1,"92":1}}],["zstd",{"2":{"32":2}}],["扩展指令集虽被规范化",{"2":{"146":1}}],["扩展指令集架构组合",{"2":{"16":1}}],["扩展不兼容",{"2":{"92":1}}],["扩展名称",{"2":{"92":1}}],["扩展支持",{"0":{"92":1}}],["扩展可以使用",{"2":{"91":2}}],["扩展",{"2":{"91":1}}],["选项",{"2":{"91":1}}],["选项主要控制工具链中所使用的寄存器组",{"2":{"91":1}}],["选项可以控制工具链开启的",{"2":{"91":1}}],["选择开发板后将返回所有支持指定开发板的操作系统",{"2":{"103":1,"181":1}}],["选择使用",{"2":{"89":1}}],["选择合适架构的预编译二进制下载",{"2":{"33":1}}],["下通过",{"2":{"116":1,"173":1}}],["下执行",{"2":{"102":1}}],["下面以任一个编译工具链在虚拟环境中编译程序一般的操作说明操作步骤",{"2":{"113":1,"156":1}}],["下面我们来介绍",{"2":{"91":1}}],["下面重点介绍",{"2":{"91":1}}],["下载解压",{"2":{"186":1}}],["下载解压coremark源码作为编译对象",{"2":{"98":1,"107":1}}],["下载所需系统镜像",{"2":{"159":1}}],["下载riscv64版本的ruyi",{"2":{"97":1}}],["下载",{"2":{"97":1,"106":1,"185":2}}],["下载并解包ruyisdk",{"2":{"159":1}}],["下载并解包指定的源码包",{"2":{"46":1}}],["下载并安装指定的软件包",{"2":{"46":1,"117":1}}],["下载地址",{"2":{"44":1}}],["下载链接",{"2":{"20":1}}],["尽可能的继承目前",{"2":{"90":1}}],["芯片的硬件",{"2":{"90":1}}],["芯片设计",{"2":{"6":1,"191":1}}],["系列",{"2":{"90":1}}],["系统下皆可完成下文操作",{"2":{"180":1}}],["系统下运行",{"2":{"171":1}}],["系统",{"2":{"89":1}}],["系统生成客户所需的操作系统",{"2":{"16":1}}],["系统获得硬件资料说明",{"2":{"16":1}}],["系统镜像",{"2":{"8":1}}],["器紧密相关的支持函数",{"2":{"90":1}}],["反汇编等操作",{"2":{"86":1}}],["链接器",{"2":{"86":1}}],["链接器等",{"2":{"83":1}}],["位工具链中为",{"2":{"91":4}}],["位",{"2":{"85":2}}],["位长的支持",{"2":{"85":1}}],["汇编器",{"2":{"83":1,"86":1}}],["它们可能通过改进指令执行流程",{"2":{"124":1}}],["它包括一系列工具",{"2":{"83":1}}],["它提供直观的用户界面",{"2":{"22":1}}],["它提供了一套命令行接口",{"2":{"17":1}}],["产品",{"2":{"80":1}}],["全线",{"2":{"80":1}}],["全家桶式的全功能开发环境",{"2":{"15":1,"24":1}}],["格式压缩文件的解包",{"2":{"80":1}}],["默认安装最新版本的",{"2":{"159":1}}],["默认最新",{"2":{"113":1,"156":1}}],["默认不允许以",{"2":{"77":1}}],["默认使用",{"2":{"69":1}}],["二进制的",{"2":{"123":1,"177":1}}],["二进制",{"2":{"112":2,"114":1,"155":2,"157":1}}],["二进制无法工作的问题",{"2":{"74":1}}],["二进制可能无法正常工作",{"2":{"71":1}}],["依赖变化",{"0":{"72":1}}],["依赖库版本到",{"2":{"55":1}}],["种姓",{"2":{"133":1}}],["种族",{"2":{"133":1}}],["种",{"2":{"70":1,"73":1}}],["替代对",{"2":{"70":1}}],["远端元数据仓库分支",{"2":{"69":1}}],["远端元数据仓库",{"2":{"69":1}}],["启用",{"2":{"69":1}}],["托管默认软件源",{"2":{"64":1}}],["除了",{"2":{"113":1,"156":1}}],["除了这里列举的环境外",{"2":{"94":1}}],["除了荔枝派",{"2":{"62":1}}],["除去继承开源软件的部分",{"2":{"22":1}}],["指定了编译工具链的类型和版本",{"2":{"113":1,"156":1}}],["指定新闻编号或",{"2":{"61":1}}],["指令集有所不同",{"2":{"90":1}}],["指令集扩展的支持",{"2":{"85":1}}],["指令执行效率更高",{"2":{"6":1,"191":1}}],["现已为以下板卡新增了镜像包",{"2":{"61":1}}],["感谢您对",{"2":{"61":4}}],["之后",{"2":{"61":3}}],["之中",{"2":{"17":1}}],["那么当您完成",{"2":{"61":3}}],["┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛",{"2":{"61":4}}],["┃",{"2":{"61":8}}],["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓",{"2":{"61":4}}],["阅读它们",{"2":{"61":3}}],["阅读所有未读新闻",{"2":{"61":1}}],["阅读新闻或将信息设置为已读",{"2":{"35":1,"161":1}}],["变量被设置时为",{"2":{"61":1}}],["文章",{"2":{"124":1}}],["文件配置",{"2":{"116":1,"173":1}}],["文件中",{"2":{"61":1}}],["文档支持增加到",{"2":{"48":1,"52":1}}],["文档和教程",{"2":{"23":1}}],["文档生成",{"2":{"22":1}}],["文档资源等各种信息",{"2":{"20":1}}],["文档可能更新不及时",{"2":{"11":1,"193":1}}],["文档",{"2":{"8":1,"17":1,"20":1}}],["───────────────────────────────────────────────────────────────",{"2":{"61":2}}],["新的处理器架构可能引入了新的指令集扩展",{"2":{"124":1}}],["新闻的阅读状态将保存在",{"2":{"61":1}}],["新闻",{"0":{"61":1},"2":{"59":1}}],["新增可执行程序coremark",{"2":{"99":1,"108":1,"187":1}}],["新增板卡支持",{"2":{"61":3}}],["新增",{"2":{"54":1,"77":1}}],["遗留的版本匹配问题",{"2":{"57":1}}],["修复",{"2":{"57":2,"74":1}}],["修复了",{"2":{"55":1}}],["修复了先前",{"2":{"55":1}}],["升级了",{"2":{"55":1}}],["升级版",{"2":{"11":1}}],["渲染相应的提示语",{"2":{"55":1}}],["规则",{"2":{"51":1,"54":1,"79":1,"82":1}}],["规划",{"0":{"28":1},"1":{"29":1,"30":1}}],["故此处只提供了文档链接而没有刷写支持",{"2":{"76":1}}],["故需要用户自行配置",{"2":{"51":1,"54":1,"79":1,"82":1}}],["故在需要升级",{"2":{"42":1,"168":1}}],["刷写工具根据板卡的不同依赖",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["刷写方式",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["刷新软件包缓存",{"0":{"34":1,"160":1}}],["单个或一系列违规行为",{"2":{"140":1}}],["单片机系列的文档支持",{"2":{"51":1}}],["单步执行代码",{"2":{"22":2}}],["本文基于以下环境进行操作",{"2":{"179":1}}],["本文使用",{"2":{"122":1,"176":1}}],["本行为准则改编自",{"2":{"143":1}}],["本行为准则适用于所有社区场合",{"2":{"136":1}}],["本操作在x86",{"2":{"102":1}}],["本地元数据路径",{"2":{"69":1}}],["本次主要增加了沁恒",{"2":{"51":1}}],["本身",{"2":{"42":1,"168":1}}],["本身的安装程序需要支持x86",{"2":{"22":1}}],["检查虚拟环境中编译工具的版本信息",{"2":{"107":1}}],["检查安装版本",{"2":{"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["检查代码的瓶颈并进行优化",{"2":{"22":1}}],["款",{"2":{"48":1,"51":1,"52":1,"54":1,"65":1,"66":1,"68":1,"74":1,"76":1,"77":1,"79":1,"80":1,"82":1}}],["板卡刷写",{"2":{"77":1}}],["板卡支持列表",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["板卡镜像刷写支持增加到",{"2":{"66":1,"74":1,"77":1,"80":1}}],["板卡镜像刷写功能所支持的板卡增加到",{"2":{"51":1,"54":1,"65":1,"68":1,"76":1,"79":1,"82":1}}],["板卡镜像刷写",{"0":{"51":1,"54":1,"62":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1},"2":{"48":1,"52":1,"59":1,"63":1}}],["板卡的新增适配等等",{"2":{"27":1}}],["虚拟环境类似",{"2":{"113":1,"156":1,"159":1}}],["虚拟环境可以理解成一个容器",{"2":{"98":1,"186":1}}],["虚拟环境venv1",{"2":{"107":1}}],["虚拟环境venv",{"2":{"98":1}}],["虚拟环境",{"2":{"46":1,"186":1}}],["由社区领袖发出非公开的书面警告",{"2":{"139":1}}],["由于目前软件包索引信息托管于",{"2":{"173":1}}],["由于使用的工具链为",{"2":{"122":1,"176":1}}],["由于软件包索引信息目前托管的github仓库国内访问的网络不稳定性",{"2":{"116":1}}],["由于ruyi滚动发版",{"2":{"116":1}}],["由指定的工具链",{"2":{"98":1,"107":1,"186":1}}],["由指定的工具链和配置建立",{"2":{"46":1}}],["由编译器自动配置选取合适的处理数量",{"2":{"91":1}}],["由",{"2":{"62":1}}],["由加州伯克利分校所发起的一个开源项目",{"2":{"6":1,"191":1}}],["外部链接",{"0":{"47":1},"2":{"45":1}}],["附",{"0":{"47":1},"2":{"45":1}}],["仅",{"2":{"92":1}}],["仅限验证过的",{"2":{"45":1}}],["仅列出未读新闻",{"2":{"35":1,"159":1,"161":1}}],["需求与问题",{"2":{"44":1}}],["需要指定正确的编译器版本和",{"2":{"186":1}}],["需要指定正确的编译器版本和sysroot类型",{"2":{"98":1}}],["需要更新和升级编译工具链",{"2":{"124":1}}],["需要编辑构建脚本",{"2":{"122":1,"176":1}}],["需要先安装运行时环境或语言虚拟机",{"2":{"128":1}}],["需要先",{"2":{"113":1,"156":1}}],["需要为其安装镜像",{"2":{"103":1,"181":1}}],["需要注意的是一些镜像的解包需要占用大量的磁盘空间",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["需要手动安装",{"2":{"32":1}}],["需要具备如下特点",{"2":{"22":1}}],["需要具备如下功能",{"2":{"22":1}}],["需要一一区别和定义",{"2":{"22":1}}],["官方仓库",{"2":{"44":1}}],["官方网站",{"2":{"23":1}}],["执行时连续报错",{"2":{"173":1}}],["执行交叉编译和构建",{"2":{"99":1,"108":1,"119":1,"150":1,"187":1}}],["执行汇编和链接",{"2":{"86":1}}],["执行如下命令并按照引导执行即可下载所需系统镜像",{"2":{"43":1,"169":1}}],["执行新特性的测试验证和基础功能回归测试",{"2":{"27":1}}],["镜像上运行",{"0":{"123":1,"177":1}}],["镜像支持增加到",{"2":{"70":1,"73":1}}],["镜像源",{"2":{"171":1}}],["镜像源下载体验",{"2":{"116":1}}],["镜像源下载最新的",{"2":{"185":1}}],["镜像源下载最新的ruyi工具",{"2":{"97":1,"106":1}}],["镜像源下载最新版本体验",{"2":{"44":1}}],["镜像源下载最新版本",{"2":{"33":1}}],["镜像源换源支持",{"0":{"69":1},"2":{"66":1}}],["镜像文件会被自动解压或符号链接到",{"2":{"61":1}}],["镜像无法下载的问题",{"2":{"55":1}}],["镜像",{"2":{"51":1,"54":2,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["镜像搭建工具",{"2":{"46":1}}],["镜像信息的维护与下载",{"0":{"43":1,"169":1},"2":{"46":1}}],["再使用",{"2":{"171":1}}],["再执行安装",{"2":{"42":1,"168":1}}],["再到开发应用的效率大幅降低",{"2":{"6":1,"191":1}}],["即使在同一个指令集标准下",{"2":{"124":1}}],["即首先卸载",{"2":{"42":1,"168":1}}],["即时检测代码中的语法错误",{"2":{"22":1}}],["同样的这个命令将会询问您以二次确认该操作",{"2":{"42":1,"168":1}}],["同时优化了命令逻辑",{"2":{"65":1}}],["同时",{"2":{"22":1,"150":1}}],["yuzukihd",{"2":{"193":1}}],["your",{"2":{"62":6,"103":8,"181":8}}],["you",{"2":{"49":1,"53":1,"56":1,"58":1,"61":1,"62":4,"78":1,"81":1,"103":6,"181":6}}],["y",{"2":{"42":2,"62":2,"103":3,"159":2,"168":2,"181":3}}],["若可以连接",{"2":{"180":1}}],["若出现网络不稳定的备用方案",{"2":{"174":1}}],["若出现",{"2":{"173":1}}],["若出现这样的错误",{"2":{"123":1,"177":1}}],["若还有其余相关问题可以访问",{"2":{"171":1}}],["若要安装特定的安装包",{"2":{"147":1}}],["若要开启其他扩展",{"2":{"91":1}}],["若您强制中断",{"2":{"41":1,"167":1}}],["若希望重装一个软件包",{"2":{"38":1,"164":1}}],["章节介绍",{"2":{"121":1}}],["章节",{"2":{"40":1,"45":1,"117":1,"166":1}}],["具有",{"2":{"40":1,"166":1}}],["具体请参考这里这里",{"2":{"197":1}}],["具体请参考这里",{"2":{"196":1}}],["具体操作",{"2":{"173":1}}],["具体操作参考",{"2":{"116":1}}],["具体的使用方法可通过",{"2":{"155":1}}],["具体的使用方法可通过help命令获得",{"2":{"112":1}}],["具体的使用可参考ruyi仓库文档",{"2":{"116":1}}],["具体可以查看",{"2":{"52":1}}],["具体使用参见",{"2":{"40":1,"166":1}}],["具体还需要结合技术可行性等进行进一步的调整",{"2":{"18":1}}],["配置环境变量",{"2":{"98":1,"186":1}}],["配置",{"2":{"40":1,"69":1,"159":1,"166":1}}],["已经提前安装了所需的编译工具链",{"2":{"120":1}}],["已经安装了所需的编译工具链",{"2":{"119":1}}],["已经安装的工具链与模拟器需要在",{"2":{"40":1,"166":1}}],["已经集成的risc",{"2":{"1":1}}],["搭建编译环境",{"0":{"40":1,"166":1}}],["=1548f6b30560e1ca6f3fa8ba3ef6aea4188feacf",{"2":{"123":1,"177":1}}],["=d9dbc7115d07d1953087dd2c1e5d46adc2ab0d4f",{"2":{"122":1,"176":1}}],["=",{"2":{"38":2,"51":2,"54":2,"69":5,"164":2}}],["==",{"2":{"38":1,"51":2,"54":2,"164":1}}],["==0",{"2":{"38":1,"124":1,"145":1,"159":1,"164":1}}],[">=",{"2":{"38":1,"164":1}}],[">",{"2":{"38":1,"69":1,"114":1,"157":1,"164":1}}],["`",{"2":{"38":2,"164":2}}],["上相关的编译器",{"2":{"147":1}}],["上运行",{"2":{"123":1,"177":1}}],["上运行的程序",{"2":{"88":1}}],["上",{"2":{"94":1}}],["上交叉编译并模拟运行",{"2":{"94":1}}],["上述原因使得编译工具链出现了多样化",{"2":{"146":1}}],["上述原因导致了编译工具链版本的多样性",{"2":{"124":1}}],["上述结合使用场景简单的介绍了",{"2":{"121":1}}],["上述操作系统链接参考本文文末的",{"2":{"45":1}}],["上述通过指定软件包名安装的方式默认会安装",{"2":{"38":1,"164":1}}],["上面的命令只是删除",{"2":{"42":1,"168":1}}],["上游工具链配置",{"2":{"112":2,"155":2}}],["上游工具链",{"2":{"38":1,"159":4,"164":1}}],["命令会询问确认操作",{"2":{"159":1}}],["命令查询",{"0":{"159":1}}],["命令查看",{"2":{"37":1,"110":1,"153":1,"163":1}}],["命令获得",{"2":{"155":1}}],["命令返回的数据最新",{"2":{"116":1}}],["命令回显信息显示了文件的架构相关信息",{"2":{"99":1,"108":1,"187":1}}],["命令将执行一个向导",{"2":{"62":1}}],["命令将默认显示未读新闻条目",{"2":{"61":1}}],["命令刷写镜像失败时",{"2":{"51":1,"54":1,"79":1,"82":1}}],["命令",{"0":{"46":1},"2":{"51":1,"54":1,"62":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"113":1,"156":1,"159":1}}],["命令实现的",{"2":{"40":1,"166":1}}],["命令下载一个源码包并解包到当前目录",{"2":{"39":1,"165":1}}],["命令安装软件包",{"2":{"38":1,"164":1}}],["命令应用配置到指定的工具链以建立编译环境",{"2":{"37":1,"110":1,"153":1,"163":1}}],["与",{"2":{"40":1,"92":2,"153":1,"159":1,"166":1}}],["与python",{"2":{"37":1,"110":1,"163":1}}],["与版本控制系统",{"2":{"22":1}}],["列出它们",{"2":{"61":3}}],["列出所有可用软件包",{"2":{"159":1}}],["列出所有新闻",{"2":{"61":1,"159":1}}],["列出所有软件包的详细信息",{"2":{"36":1,"159":1,"162":1}}],["列出已安装的配置",{"2":{"46":1}}],["列出帮助信息",{"2":{"33":1,"172":1}}],["则需要静态链接的二进制",{"2":{"123":1,"177":1}}],["则需利用该选项重新向工具链指定想要开启的扩展",{"2":{"91":1}}],["则只会使用当前普通用户",{"2":{"51":1,"54":1,"79":1,"82":1}}],["则可以加上",{"2":{"38":1,"164":1}}],["则可以通过指定版本来安装",{"2":{"38":1,"164":1}}],["则该软件包的当前版本不支持本机架构",{"2":{"36":1,"162":1}}],["则是一个专门用来开发能够运行在risc",{"2":{"17":1}}],["代表社区的情形包括使用官方电子邮件地址",{"2":{"136":1}}],["代表分析工具",{"2":{"36":1,"162":1}}],["代表开发板镜像",{"2":{"36":1,"162":1}}],["代表模拟器二进制包",{"2":{"36":1,"162":1}}],["代表工具链二进制包",{"2":{"36":1,"162":1}}],["代表软件源码包",{"2":{"36":1,"162":1}}],["代码准备",{"0":{"150":1}}],["代码冻结日期",{"2":{"30":1}}],["代码冻结日期在发布日期的上一周周四",{"2":{"27":1}}],["代码冻结日~发布日",{"2":{"27":1}}],["代码执行环境管理",{"2":{"22":1}}],["代码分析和优化",{"2":{"22":1}}],["代码片段管理",{"2":{"22":2}}],["代码导航",{"2":{"22":2}}],["代码自动完成",{"2":{"22":1}}],["代码编辑器常见功能详细说明",{"2":{"22":1}}],["代码编辑器",{"2":{"22":1}}],["代码",{"2":{"10":1,"17":1,"20":1,"135":1}}],["只需下载ruyi工具预构建的二进制文件",{"2":{"116":1}}],["只需要输入对应的序号",{"2":{"103":1,"181":1}}],["只标记为已读",{"2":{"35":1,"159":1,"161":1}}],["只是适用于当前开发语言及目标运行设备的risc",{"2":{"17":1}}],["不输出任何信息",{"2":{"159":1}}],["不输出任何东西",{"2":{"35":1,"159":1,"161":1}}],["不得与相关人员进行公开或私下互动",{"2":{"141":1}}],["不得与相关人员互动",{"2":{"140":1}}],["不当行为例子包括",{"2":{"134":1}}],["不创建虚拟环境也可以为",{"2":{"98":1,"186":1}}],["不支持",{"2":{"92":1}}],["不兼容",{"2":{"92":1}}],["不同的应用领域对扩展指令集有不同的需求",{"2":{"146":1}}],["不同的厂商会针对同一个指令集进行不同程度的定制化",{"2":{"146":1}}],["不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化",{"2":{"124":1}}],["不同的虚拟环境创建如下",{"2":{"112":1,"155":1}}],["不同linux发行版可能不同",{"2":{"116":1,"173":1}}],["不同型号的risc",{"2":{"101":1}}],["不同适用环境的软件包的搜索",{"2":{"21":1}}],["不同厂商",{"2":{"21":1}}],["不同版本编译工具链会针对特定领域进行优化",{"2":{"146":1}}],["不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持",{"2":{"124":1}}],["不同版本的编译工具链可以支持不同处理器架构的特定指令集",{"2":{"124":1}}],["不同版本的工具链也可能存在细微的差异和改进",{"2":{"124":1}}],["不同版本的软件资源需要进行管理",{"2":{"20":1}}],["不同版本支持的",{"2":{"90":1}}],["不同版本",{"2":{"21":1}}],["\\t",{"2":{"35":1,"161":1}}],["\\t\\t",{"2":{"35":2,"161":2}}],["questions",{"2":{"62":1,"103":1,"181":1}}],["quot",{"2":{"61":2}}],["quiet",{"2":{"35":1,"159":1,"161":1}}],["qemu模拟器",{"2":{"124":1}}],["qemu",{"0":{"109":1},"2":{"20":1,"36":2,"40":3,"104":1,"107":3,"109":2,"112":6,"114":19,"119":1,"120":2,"124":3,"145":4,"150":2,"151":4,"155":6,"157":19,"159":1,"162":2,"166":3}}],["查询",{"2":{"193":1}}],["查询可用编译环境",{"0":{"37":1,"163":1}}],["查询可用软件包",{"0":{"36":1,"162":1}}],["查询包管理器更新内容",{"0":{"35":1,"161":1}}],["查看最新支持的设备请通过指令",{"2":{"193":1}}],["查看最新支持的设备请通过指令ruyi",{"2":{"11":1}}],["查看当前虚拟环境下的",{"2":{"186":1}}],["查看当前虚拟环境下的gcc是否可用",{"2":{"98":1}}],["查看目前所支持的包",{"2":{"171":1}}],["查看预置的编译环境配置",{"2":{"159":1}}],["查看预置编译环境",{"2":{"98":1,"107":1,"186":1}}],["查看新闻阅读命令的帮助信息",{"2":{"159":1}}],["查看新闻命令的帮助信息",{"2":{"159":1}}],["查看如何使用",{"2":{"119":1,"150":1}}],["查看工具版本",{"2":{"116":1}}],["查看可用的二进制",{"2":{"114":1,"157":1}}],["查看可用的工具链二进制",{"2":{"113":1,"156":1}}],["查看可用的软件包",{"2":{"36":1,"162":1}}],["查看虚拟环境bin目录下已安装的工具链",{"2":{"107":1}}],["查看详细信息",{"2":{"107":1}}],["查看ruyi帮助",{"2":{"106":1}}],["查看rv64可执行程序文件属性信息",{"2":{"99":1,"108":1,"119":1}}],["查看编译环境中得工具",{"2":{"98":1,"186":1}}],["查看软件仓软件包索引信息",{"2":{"98":1,"107":1,"186":1}}],["查看",{"2":{"35":1,"46":1,"150":1,"161":1,"187":1}}],["查看变量的值等",{"2":{"22":1}}],["~$",{"2":{"98":1,"186":1}}],["~",{"2":{"34":1,"61":2,"69":3,"116":1,"123":3,"159":1,"160":1,"173":1,"177":3}}],["应当可以正常打印版本信息",{"2":{"33":1,"172":1}}],["应用框架等",{"2":{"16":1}}],["应用设计",{"2":{"11":1}}],["working",{"2":{"122":1,"176":1}}],["workstation",{"2":{"47":1}}],["warranty",{"2":{"113":1,"156":1}}],["want",{"2":{"103":1,"181":1}}],["we",{"2":{"103":1,"181":1}}],["website",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["wiki",{"2":{"135":1}}],["will",{"2":{"62":3,"103":3,"181":3}}],["wizard",{"2":{"62":3,"103":3,"181":3}}],["without",{"2":{"112":2,"155":2}}],["with",{"2":{"51":2,"54":2,"61":1,"62":1,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1,"112":2,"122":2,"123":2,"155":2,"176":2,"177":2,"181":1}}],["wch",{"2":{"51":105,"54":105}}],["where",{"2":{"38":1,"164":1}}],["www",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"143":3,"172":1}}],["wget",{"2":{"32":2,"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"172":1,"185":1}}],["+x",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1,"172":1,"185":1}}],["$path",{"2":{"116":1}}],["$xdg",{"2":{"34":1,"61":2,"69":2,"160":1}}],["$",{"2":{"33":3,"35":6,"38":1,"39":1,"49":6,"53":6,"56":6,"58":6,"60":4,"61":1,"64":4,"67":4,"69":1,"71":2,"75":6,"78":6,"81":6,"112":7,"113":5,"114":7,"122":9,"123":2,"155":7,"156":5,"157":7,"161":6,"164":1,"165":1,"172":3,"176":9,"177":2}}],["当正确获取了编译工具链后",{"2":{"150":1}}],["当前支持的其他设备镜像均需要用户手动指定目标刷写设备以执行",{"2":{"62":1}}],["当前",{"2":{"33":1,"45":1}}],["当使用",{"2":{"22":1}}],["作为替代方案",{"2":{"32":1,"72":1}}],["端午节",{"2":{"30":1}}],["劳动节",{"2":{"30":1}}],["937496",{"2":{"123":2,"177":2}}],["911000",{"2":{"123":1,"177":1}}],["9",{"0":{"80":1,"81":1},"1":{"81":1,"82":1},"2":{"30":1,"66":1,"68":1,"80":1,"81":4,"82":1,"103":3,"181":3}}],["跳过一次",{"2":{"30":1}}],["跳转到变量的引用处",{"2":{"22":1}}],["跳转到函数调用等",{"2":{"22":1}}],["跳转到引用处",{"2":{"22":1}}],["春节",{"2":{"30":1}}],["滚动发行版本号",{"2":{"30":1}}],["服务≥10000名注册开发者",{"2":{"29":1}}],["将其放到",{"2":{"185":1}}],["将其放到path路径下",{"2":{"97":1}}],["将",{"2":{"180":1}}],["将下载的文件去掉后缀重命名为",{"2":{"116":1}}],["将可以更新支持的板卡列表",{"2":{"68":1}}],["将自动调用",{"2":{"65":1,"68":1,"73":1,"76":1}}],["将在命令输出中提示",{"2":{"61":3}}],["将尝试调用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["将根据运行环境",{"2":{"50":1}}],["将增加对openkylin和gentoo的支持",{"2":{"29":1}}],["将完全支持",{"2":{"16":1}}],["完成安装",{"2":{"147":1}}],["完成",{"2":{"95":1,"104":1,"183":1}}],["完成回归测试用例更新和执行全面回归测试",{"2":{"27":1}}],["完善中",{"2":{"46":1}}],["完善的开发环境",{"2":{"5":1,"190":1}}],["周五",{"2":{"27":1}}],["周发布一个开发版本",{"2":{"27":1}}],["敏捷开发版本排期",{"0":{"30":1}}],["敏捷开发版本执行敏捷测试方式",{"2":{"27":1}}],["敏捷开发版本计划",{"0":{"27":1}}],["延迟一周发布",{"2":{"27":1,"30":3}}],["切换为更加敏捷的开发迭代模式",{"2":{"27":1}}],["里程碑版本",{"0":{"26":1}}],["里面有各种各样的工具可以帮助你完成这个任务",{"2":{"17":1}}],["推荐该方式",{"2":{"180":1}}],["推动risc",{"2":{"23":1}}],["推广",{"2":{"23":1}}],["增加开发者的学习和开发效率",{"2":{"23":1}}],["回答问题",{"2":{"23":1}}],["例如打开",{"2":{"91":1}}],["例如用于浮点数乘除法的模拟运算函数",{"2":{"90":1}}],["例如当希望使用其他镜像代替默认的镜像时",{"2":{"69":1}}],["例如",{"2":{"23":1,"124":1}}],["例如在支持的设备中有提供相关支持硬件情况",{"2":{"190":1}}],["例如在",{"2":{"5":1}}],["鼓励开发者积极参与交流和贡献",{"2":{"23":1}}],["积分和奖励机制",{"2":{"23":1}}],["就业和项目机会",{"2":{"23":1}}],["就像是一个你的工作室",{"2":{"17":1}}],["甚至组织在线培训或指导课程",{"2":{"23":1}}],["他们可以提供指导",{"2":{"23":1}}],["他们可以集成其他工具",{"2":{"22":1}}],["专家支持",{"2":{"23":1}}],["专为",{"2":{"11":1}}],["研讨会或会议",{"2":{"23":1}}],["活动和会议",{"2":{"23":1}}],["项目模板",{"2":{"23":1}}],["项目管理工具",{"2":{"22":1}}],["问答平台",{"2":{"23":1}}],["博客和文章",{"2":{"23":1}}],["博客和文档等等功能",{"2":{"17":1}}],["促进交流和知识共享",{"2":{"23":1}}],["分别为",{"2":{"90":1}}],["分享文章或贡献代码可以获得积分或奖励",{"2":{"23":1}}],["分享最新的技术趋势",{"2":{"23":1}}],["分享经验",{"2":{"23":1}}],["分为以下三个部分",{"2":{"7":1,"192":1}}],["让我们从",{"2":{"170":1}}],["让我们开始吧",{"0":{"13":1,"195":1},"1":{"14":1,"196":1,"197":1},"2":{"189":1}}],["让他们在ruyisdk这个中心化的工具中便捷的获取使用和开发所需的支持",{"2":{"124":1}}],["让开发者聚集在一起",{"2":{"23":1}}],["让开发者可以发表问题",{"2":{"23":1}}],["论坛和讨论区",{"2":{"23":1}}],["论坛和技术讨论区",{"2":{"17":1}}],["编辑",{"2":{"135":1}}],["编辑或拒绝或拒绝与本行为准则不相符的评论",{"2":{"135":1}}],["编译工具",{"0":{"144":1},"1":{"145":1,"146":1},"2":{"148":1}}],["编译工具链",{"2":{"147":1}}],["编译工具链安装",{"0":{"147":1},"1":{"148":1,"149":1,"150":1,"151":1,"152":1}}],["编译工具链也会随之进行更新",{"2":{"146":1}}],["编译工具链由于能够实现不同扩展指令集",{"2":{"146":1}}],["编译工具链类型",{"2":{"124":1,"145":1}}],["编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状",{"2":{"124":1}}],["编译工具链的多样性",{"0":{"146":1}}],["编译工具链的不同扩展指令集实现与选择",{"2":{"117":1}}],["编译工具链的版本选择参考ruyisdk",{"2":{"148":1}}],["编译工具链的版本选择参考",{"2":{"117":1}}],["编译代码",{"2":{"125":1}}],["编译需要编译的程序源代码",{"2":{"119":1,"150":1}}],["编译一个简单的",{"2":{"114":1,"157":1}}],["编译",{"0":{"119":1,"149":1},"1":{"150":1,"151":1,"152":1},"2":{"113":1,"156":1}}],["编译环境",{"0":{"110":1,"153":1},"1":{"111":1,"112":1,"113":1,"114":1,"154":1,"155":1,"156":1,"157":1},"2":{"40":1,"112":4,"114":1,"122":1,"155":4,"157":1,"166":1,"176":1}}],["编译环境中使用",{"2":{"40":1,"166":1}}],["编译构建出适用该开发板的可执行程序",{"2":{"22":1}}],["编译构建",{"2":{"17":1}}],["编程技巧",{"2":{"23":1}}],["涵盖risc",{"2":{"23":1}}],["统计功能",{"2":{"23":1}}],["登录等账号有关的管理",{"2":{"23":1}}],["交叉编译",{"0":{"187":1}}],["交叉编译coremark",{"0":{"99":1,"108":1}}],["交流需要的一切资源",{"2":{"23":1}}],["交互式解释器和调试器",{"2":{"22":1}}],["宣发",{"2":{"23":1}}],["主要的设备包括开发侧的个人电脑",{"2":{"125":1}}],["主要包含了一个组件管理器",{"2":{"17":1}}],["主页",{"2":{"23":1}}],["高度可定制的功能和良好的扩展性",{"2":{"22":1}}],["高效地开发risc",{"2":{"22":1}}],["高性能计算设备",{"2":{"11":1}}],["高性能嵌入式开发",{"2":{"11":1}}],["加入",{"2":{"131":1}}],["加速开发过程",{"2":{"22":1}}],["加快他们的开发过程",{"2":{"22":1}}],["利用其提供的各种工具和功能",{"2":{"22":1}}],["还提供文档生成工具",{"2":{"22":1}}],["还提供版本控制集成工具",{"2":{"22":1}}],["帮助开发者寻找合适的工作机会或参与感兴趣的项目",{"2":{"23":1}}],["帮助开发者更好地利用集成开发环境进行开发",{"2":{"23":1}}],["帮助开发者快速上手和解决常见问题",{"2":{"23":1}}],["帮助开发者发现潜在的性能问题和错误",{"2":{"22":1}}],["帮助你记录和分享你的代码",{"2":{"22":1}}],["帮助你管理代码的版本",{"2":{"22":1}}],["中配置了其对应参数",{"2":{"91":1}}],["中不同扩展的工具链已经在",{"2":{"91":1}}],["中秋节",{"2":{"30":1}}],["中的性能分析工具",{"2":{"22":1}}],["中有提供相关支持硬件情况",{"2":{"5":1}}],["逐行调试代码",{"2":{"22":1}}],["通常由操作系统提供",{"2":{"125":1}}],["通常用来运行risc",{"2":{"125":1}}],["通常完成目标可执行程序的准备工作",{"2":{"125":1}}],["通常为",{"2":{"34":1,"159":1,"160":1}}],["通常提供调试器功能",{"2":{"22":1}}],["通过以下步骤以及相关引导即可完成安装",{"2":{"178":1}}],["通过指定版本号安装历史版本",{"2":{"159":1}}],["通过模拟器工具",{"2":{"151":1}}],["通过前置步骤",{"2":{"147":1}}],["通过官方社交媒体帐户发帖或在线上或线下活动中担任指定代表",{"2":{"136":1}}],["通过ruyisdk操作系统安装器工具",{"2":{"101":1}}],["通过",{"2":{"22":1}}],["通过静态分析和语义理解",{"2":{"22":2}}],["设置",{"2":{"150":1,"187":1}}],["设置coremark源码中的编译配置信息",{"2":{"99":1,"108":1,"119":1}}],["设置编译器路径和库路径",{"2":{"22":1}}],["设备上调试应用程序等",{"2":{"10":1}}],["设备专有向导页面",{"2":{"10":1}}],["设备的集成和支持主要包括以下几个方面",{"2":{"10":1}}],["设备安装器",{"2":{"1":1}}],["快速跳转到代码的不同部分",{"2":{"22":1}}],["资源共享",{"2":{"23":1}}],["资源文件和配置文件等",{"2":{"22":1}}],["资源类型",{"2":{"20":1}}],["你已经可以正确使用",{"2":{"147":1}}],["你可以首先使用",{"2":{"171":1}}],["你可以通过",{"2":{"147":1}}],["你可以通过以下方式加入我们的社区",{"2":{"131":1}}],["你可以更高效地开发图像识别应用程序",{"2":{"22":1}}],["你可以将编译好的图像识别应用程序部署到risc",{"2":{"22":1}}],["你可以使用ruyi",{"2":{"22":1}}],["你可以使用代码导航功能",{"2":{"22":1}}],["你可以设置断点",{"2":{"22":1}}],["你可以编写程序",{"2":{"22":1}}],["你可以组织和管理你的代码文件",{"2":{"22":1}}],["你要做一款能够运行在risc",{"2":{"17":1}}],["打开",{"2":{"22":1,"91":1}}],["要求",{"2":{"22":1}}],["改动部分界面需要个性化定制",{"2":{"22":1}}],["自带",{"2":{"111":5,"154":5}}],["自",{"2":{"80":1}}],["自2024年1月开始",{"2":{"27":1}}],["自研发",{"2":{"22":1}}],["自动识别设备",{"2":{"62":1}}],["自动选择显示的语言",{"2":{"50":1}}],["自动弹出变量",{"2":{"22":1}}],["自动生成代码文档或api文档",{"2":{"22":1}}],["自动完成",{"2":{"22":1}}],["定制化",{"2":{"22":1}}],["跨平台兼容性",{"2":{"22":1}}],["能够得到如下步骤所描述的功能支持",{"2":{"22":1}}],["能够流畅地运行在主流的pc设备上",{"2":{"22":1}}],["能够为一个项目同时生成不同的运行环境",{"2":{"22":1}}],["能够支持在线软件源中不同类型",{"2":{"21":1}}],["能够支持工具自身的升级",{"2":{"21":1}}],["可将仓库更换成",{"2":{"173":1}}],["可将仓库切换到备用仓库",{"2":{"116":1}}],["可见或不可见的缺陷",{"2":{"133":1}}],["可按需对指定程序执行编译操作",{"2":{"113":1,"156":1}}],["可选",{"2":{"97":1,"106":1,"185":1}}],["可执行程序文件属性信息",{"2":{"150":1,"187":1}}],["可执行程序",{"0":{"109":1},"2":{"94":2,"151":1,"188":1}}],["可在",{"2":{"44":1}}],["可视化的集成开发环境的界面部分",{"2":{"22":1}}],["可扩展性和插件支持",{"2":{"22":1}}],["可以从如下链接中下载",{"2":{"171":1}}],["可以按需在ruyi",{"2":{"116":1}}],["可以看到成功构建",{"2":{"122":1,"176":1}}],["可以看到",{"2":{"114":1,"157":1}}],["可以执行如下命令退出编译环境",{"2":{"113":1,"156":1}}],["可以更高效的利用有限的系统资源",{"2":{"89":1}}],["可以使用",{"2":{"69":1,"117":1,"118":1}}],["可以阅读任意新闻",{"2":{"61":1}}],["可以分享技术经验",{"2":{"23":1}}],["可以自动生成代码文档或api文档",{"2":{"22":1}}],["可以在配置文件中配置",{"2":{"69":1}}],["可以在开发者社区进行技术交流获取帮助",{"2":{"22":1}}],["可以在命令行环境中逐行执行代码",{"2":{"22":1}}],["可以模拟和调试risc",{"2":{"22":1}}],["可以帮助开发者编写和测试自己的程序",{"2":{"17":1}}],["可以对于实际的开发场景对于代码的编写以及调试",{"2":{"9":1}}],["可以走向国际化",{"2":{"5":1,"190":1}}],["可以通过如下指令实现",{"2":{"150":1}}],["可以通过下载安装最新的",{"2":{"3":1,"127":1}}],["可以通过",{"2":{"1":1,"46":1,"150":1}}],["很多开发语言都有丰富的第三方库和包管理工具",{"2":{"22":1}}],["来管理依赖和隔离项目环境",{"2":{"22":1}}],["因此如果存在ruyi",{"2":{"116":1}}],["因此",{"2":{"22":1,"124":1}}],["join",{"2":{"122":1,"123":1,"176":1,"177":1}}],["jython等",{"2":{"22":1}}],["javascript",{"2":{"22":1}}],["java",{"2":{"22":1}}],["一般通过模拟器工具来模拟运行环境",{"2":{"120":1}}],["一些",{"2":{"91":1}}],["一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["一些语言需要在运行时依赖于相应的解释器或语言虚拟机",{"2":{"22":1}}],["一旦你完成了开发和调试",{"2":{"22":1}}],["一个小型的",{"2":{"89":1}}],["一个包管理工具",{"2":{"17":1}}],["一个开发者交流社区需要具备以下功能",{"2":{"23":1}}],["一个开发者交流社区",{"2":{"17":1}}],["一个集成开发环境",{"2":{"17":1}}],["解包到当前目录",{"2":{"159":1}}],["解答问题",{"2":{"23":1}}],["解释器",{"2":{"22":1}}],["解释器支持",{"2":{"22":1}}],["解析软件包的依赖关系",{"2":{"17":1,"21":1}}],["f3",{"2":{"193":1}}],["float",{"2":{"122":1,"123":1,"176":1,"177":1}}],["flags",{"2":{"123":1,"177":1}}],["flashing",{"2":{"62":1,"103":1,"181":1}}],["flash",{"2":{"62":1,"103":1,"123":1,"177":1,"181":1}}],["flashed",{"2":{"62":1,"103":1,"181":1}}],["flavor",{"2":{"37":2,"110":2,"153":2,"163":2}}],["f",{"2":{"92":2}}],["fire",{"2":{"193":1}}],["file",{"2":{"119":1,"122":1,"123":1,"150":1,"176":1,"177":1}}],["fitness",{"2":{"113":1,"156":1}}],["fixed",{"2":{"91":1}}],["fishwaldo",{"2":{"51":1,"54":1,"82":1}}],["f=gcc",{"2":{"91":1}}],["found",{"2":{"123":1,"177":1}}],["foundation",{"2":{"113":1,"156":1}}],["following",{"2":{"62":1,"103":4,"181":4}}],["format",{"2":{"38":1,"164":1}}],["for",{"2":{"33":2,"36":1,"51":33,"54":34,"62":1,"65":21,"68":24,"73":26,"76":26,"79":28,"82":33,"96":1,"103":5,"112":1,"113":3,"122":2,"123":3,"124":1,"155":1,"156":3,"162":1,"172":2,"176":2,"177":3,"181":5,"184":1}}],["fortran",{"2":{"22":1}}],["faq",{"2":{"143":1}}],["favor",{"2":{"112":1,"155":1}}],["false",{"2":{"69":1}}],["fail",{"2":{"62":1,"103":1,"181":1}}],["fastboot",{"2":{"51":14,"54":14,"62":1,"65":7,"68":7,"73":7,"76":7,"79":10,"82":14}}],["fpga",{"2":{"51":2,"54":2,"82":2,"193":1}}],["free",{"2":{"113":2,"156":2}}],["freertos",{"2":{"51":42,"54":42,"76":1,"79":1,"82":4}}],["fresh",{"2":{"112":1,"155":1}}],["from",{"2":{"33":1,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"78":1,"81":1,"82":1,"112":5,"155":5,"172":1}}],["fetch",{"2":{"33":1,"172":1}}],["fedora38",{"2":{"47":1}}],["fedora",{"2":{"32":1,"45":1}}],["fedora等",{"2":{"21":1,"22":1}}],["潜在的逻辑错误或常见的编码错误",{"2":{"22":1}}],["enforcement",{"2":{"143":1}}],["end=",{"2":{"123":1,"177":1}}],["environment",{"2":{"22":1,"33":1,"112":4,"155":4,"172":1}}],["evt",{"2":{"193":9}}],["even",{"2":{"113":1,"156":1}}],["evb",{"2":{"51":105,"54":105}}],["elfedit",{"2":{"113":1,"114":1,"156":1,"157":1}}],["elf",{"2":{"111":1,"122":1,"123":1,"124":1,"145":2,"154":1,"176":1,"177":1}}],["eabi",{"2":{"92":1}}],["ease",{"2":{"62":1,"103":1,"181":1}}],["e",{"2":{"92":1,"107":1,"112":3,"114":1,"119":1,"123":1,"150":1,"155":3,"157":1,"177":1}}],["eof",{"2":{"69":2,"114":2,"157":2}}],["emulator",{"2":{"36":3,"40":1,"112":6,"155":6,"159":1,"162":3,"166":1}}],["executable",{"2":{"122":1,"123":1,"176":1,"177":1}}],["exe",{"2":{"99":3,"100":1,"108":3,"109":1,"119":2,"120":1,"122":3,"123":7,"150":2,"151":1,"176":3,"177":7,"187":3,"188":1}}],["example",{"2":{"69":1}}],["expr",{"2":{"38":1,"164":1}}],["extracted",{"2":{"122":1,"176":1}}],["extracting",{"2":{"122":1,"176":1}}],["extract",{"2":{"33":3,"39":2,"46":1,"98":1,"107":1,"118":1,"122":1,"150":1,"159":1,"165":2,"172":3,"176":1,"186":1}}],["exit",{"2":{"33":1,"112":1,"155":1,"172":1}}],["error",{"2":{"22":1}}],["etc",{"2":{"20":1,"123":1,"177":1}}],["比较和合并等功能",{"2":{"22":1}}],["比如用c或者c++语言开发一个图像识别的程序",{"2":{"17":1}}],["提出和大方接受建设性意见",{"2":{"134":1}}],["提权",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["提高其在社区中的声誉",{"2":{"23":1}}],["提交",{"2":{"22":1,"135":1}}],["提取变量等",{"2":{"22":1}}],["提取函数",{"2":{"22":1}}],["提供的编译工具链",{"0":{"145":1}}],["提供许多标准",{"2":{"88":1}}],["提供调试功能",{"2":{"87":1}}],["提供对不同",{"2":{"85":1}}],["提供对代码版本的管理",{"2":{"22":1}}],["提供多种图形化ide环境",{"2":{"29":1}}],["提供技术支持和资源共享",{"2":{"23":1}}],["提供开发者撰写博客文章的功能",{"2":{"23":1}}],["提供建议等",{"2":{"23":1}}],["提供了多种类型的编译工具链",{"2":{"145":1}}],["提供了部署工具",{"2":{"22":1}}],["提供了大量的相关技术文章",{"2":{"10":1}}],["提供自动完成功能",{"2":{"22":1}}],["提供与risc",{"2":{"22":1}}],["提供代码分析工具",{"2":{"22":1}}],["提供可重用的代码片段库",{"2":{"22":1}}],["提供集成的调试器",{"2":{"22":1}}],["提供一些新功能",{"2":{"27":1}}],["提供一个讨论区或论坛",{"2":{"23":1}}],["提供一个功能强大的代码编辑器",{"2":{"22":1}}],["提供一系列操作",{"2":{"22":1}}],["提供快速导航到代码的不同部分",{"2":{"22":1}}],["提供关于代码中变量",{"2":{"22":2}}],["提供项目管理功能",{"2":{"22":1}}],["提供互助式技术支持和资源共享",{"2":{"17":1}}],["提供更好的环境隔离",{"2":{"119":1,"150":1}}],["提供更强的计算能力",{"2":{"11":1}}],["提供更强的处理能力",{"2":{"11":1}}],["提供更高的性能和更多的接口",{"2":{"11":1}}],["提供",{"2":{"10":1}}],["提供给开发者使用",{"2":{"10":1}}],["提供risc",{"2":{"0":2}}],["nuclei",{"2":{"193":1}}],["nm",{"2":{"113":2,"114":2,"156":2,"157":2}}],["n",{"2":{"62":1,"103":2,"112":1,"114":1,"155":1,"157":1,"181":2}}],["nanhu",{"2":{"111":1,"112":2,"154":1,"155":2}}],["nano",{"2":{"51":4,"54":4,"82":4,"193":2}}],["name",{"2":{"98":1,"107":1,"112":6,"155":6,"186":1}}],["navigation",{"2":{"22":1}}],["nvme",{"2":{"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6}}],["no",{"2":{"36":1,"61":2,"113":1,"156":1,"162":1}}],["not",{"2":{"33":1,"62":2,"103":2,"112":1,"113":1,"122":1,"123":2,"155":1,"156":1,"172":1,"176":1,"177":2,"181":2}}],["note",{"2":{"27":1,"62":1,"103":1,"181":1}}],["necessary",{"2":{"62":1,"103":1,"181":1}}],["needs",{"2":{"37":2,"110":2,"153":2,"163":2}}],["newlib",{"0":{"89":1},"2":{"89":1}}],["new",{"2":{"61":3,"112":3,"155":3,"159":1}}],["new\\t\\t",{"2":{"35":1,"161":1}}],["news",{"2":{"35":7,"46":1,"48":1,"50":1,"59":1,"61":18,"159":7,"161":7}}],["nezha",{"2":{"1":1,"11":1,"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1,"181":1,"193":3}}],["返回值等",{"2":{"22":2}}],["类型",{"2":{"150":1,"186":1}}],["类型的",{"2":{"113":1,"156":1}}],["类似于问答社区",{"2":{"23":1}}],["类等的详细信息",{"2":{"22":2}}],["类名等的建议",{"2":{"22":1}}],["函数和类名的建议",{"2":{"22":1}}],["函数",{"2":{"22":3}}],["根据用户的输入选择镜像",{"2":{"62":1}}],["根据代码中的注释或特定的标记语言",{"2":{"22":1}}],["根据当前上下文",{"2":{"22":2}}],["根据编程语言的语法规则",{"2":{"22":1}}],["语言虚拟机等软件",{"2":{"125":1}}],["语言虚拟机或运行时环境",{"2":{"22":1}}],["语言运行时库",{"2":{"88":1}}],["语言插件",{"2":{"22":1}}],["语言执行环境",{"2":{"16":1}}],["语法高亮",{"2":{"22":1}}],["减少错误",{"2":{"22":2}}],["错误检查",{"2":{"22":2}}],["智能感知",{"2":{"22":2}}],["智能家居",{"2":{"6":1,"191":1}}],["管理依赖和库等",{"2":{"22":1}}],["导入现有项目",{"2":{"22":1}}],["组织和管理他们的risc",{"2":{"22":1}}],["组件管理器包含一个在线软件源",{"2":{"17":1}}],["待定",{"2":{"21":1,"22":1}}],["搜索",{"2":{"21":1}}],["或将要求公开道歉",{"2":{"139":1}}],["或其他贡献",{"2":{"135":1}}],["或者任何你习惯的方式将代码下载到本地",{"2":{"118":1}}],["或更高的版本",{"2":{"61":3}}],["或",{"2":{"33":1,"44":1,"69":1,"92":1,"97":1,"106":1,"116":1,"117":1,"147":1,"185":1}}],["或工具链",{"2":{"27":1}}],["或目标运行环境",{"2":{"21":1}}],["或图形用户界面",{"2":{"17":1}}],["按照引导进行系统安装",{"2":{"159":1}}],["按照引导信息一步步执行即可",{"2":{"3":1,"14":1,"127":1,"197":1}}],["按照待编译程序自身的编译说明执行",{"2":{"119":1,"150":1}}],["按照当前系统语言设置",{"2":{"55":1}}],["按照可适用的开发板",{"2":{"21":1}}],["按照可支持的扩展指令集搜索",{"2":{"21":1}}],["按照资源类型搜索",{"2":{"21":1}}],["按照版本搜索",{"2":{"21":1}}],["按照name搜索",{"2":{"21":1}}],["卸载软件包",{"0":{"41":1,"167":1}}],["卸载",{"0":{"42":1,"168":1},"2":{"21":1,"46":1,"159":1}}],["卸载和管理软件包",{"2":{"21":1}}],["用于处理生成",{"2":{"86":1}}],["用于将高级编程语言",{"2":{"85":1}}],["用于开发和构建",{"2":{"83":1}}],["用于管理工具链",{"2":{"44":1}}],["用于与在线软件源交互",{"2":{"21":2}}],["用户可以在系统中创建独立的环境",{"2":{"150":1}}],["用户可以更具自己的程序进行调整",{"2":{"91":1}}],["用户可以根据自身硬件和使用场景进行选择",{"2":{"91":1}}],["用户可以根据自身需求调整",{"2":{"91":1}}],["用户运行",{"2":{"77":1}}],["用户注册量等信息进行统计",{"2":{"23":1}}],["用户的注册",{"2":{"23":1}}],["用户无需为环境搭建耗费精力",{"2":{"17":1}}],["用来汇聚关于",{"2":{"23":1}}],["xferd",{"2":{"122":1,"176":1}}],["xfce",{"2":{"51":10,"54":10,"65":9,"68":10,"73":10,"76":10,"79":10,"82":10,"103":1,"181":1}}],["xiangshan",{"2":{"111":1,"112":1,"154":1,"155":1}}],["x26",{"2":{"98":2,"107":2,"186":2}}],["xventanacondops",{"2":{"92":2}}],["xcv",{"2":{"92":1}}],["xcvalu",{"2":{"92":1}}],["xcvmac",{"2":{"92":1}}],["xuantie",{"2":{"90":3,"92":1,"124":1}}],["x86",{"2":{"45":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"94":1,"105":1,"114":1,"157":1,"179":1}}],["xdg",{"2":{"34":1,"52":1,"55":1,"160":1}}],["x3c",{"2":{"33":1,"38":5,"49":1,"53":1,"56":1,"58":1,"60":1,"61":2,"64":1,"67":1,"69":2,"71":1,"75":1,"78":1,"81":1,"114":3,"157":3,"164":5,"172":1}}],["xz",{"2":{"32":2}}],["x这种多个版本",{"2":{"20":1}}],["xthead版本工具链",{"2":{"98":1}}],["xtheadvector",{"2":{"92":1}}],["xtheadsync",{"2":{"92":2}}],["xtheadfmemidx",{"2":{"92":2}}],["xtheadfmv",{"2":{"92":2}}],["xtheadmempair",{"2":{"92":2}}],["xtheadmemidx",{"2":{"92":2}}],["xtheadmac",{"2":{"92":2}}],["xtheadint",{"2":{"92":2}}],["xtheadcondmov",{"2":{"92":2}}],["xtheadcmo",{"2":{"92":2}}],["xtheadbs",{"2":{"92":2}}],["xtheadbb",{"2":{"92":2}}],["xtheadba",{"2":{"92":2}}],["xthead",{"2":{"20":1,"36":4,"37":1,"98":4,"110":1,"111":1,"112":4,"114":4,"124":2,"145":2,"153":1,"154":1,"155":4,"157":4,"162":4,"163":1,"186":5}}],["每种类型会产生诸如vx",{"2":{"20":1}}],["ucb",{"2":{"122":1,"123":1,"176":1,"177":1}}],["util",{"2":{"122":1,"123":1,"176":1,"177":1}}],["utils",{"2":{"32":1}}],["uboot",{"2":{"103":1,"181":1}}],["ubuntu",{"2":{"21":1,"22":1,"32":1,"45":1,"47":1,"51":2,"54":2,"68":1,"73":2,"76":2,"79":2,"82":2,"102":1,"105":1,"179":1}}],["udev",{"2":{"51":1,"54":1,"79":1,"82":1}}],["unknown",{"2":{"107":1,"108":1,"113":34,"119":1,"150":1,"156":34}}],["understand",{"2":{"62":1,"103":1,"181":1}}],["under",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["uninstall",{"2":{"42":4,"46":1,"97":1,"106":1,"159":4,"168":4,"185":1}}],["unmatched",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1,"181":1,"193":1}}],["usage",{"2":{"112":1,"155":1}}],["usb",{"2":{"51":2,"54":2,"180":1}}],["use",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"112":4,"155":4}}],["user模式下执行rv64",{"2":{"120":1}}],["user模式下执行riscv64",{"2":{"109":1}}],["user",{"0":{"109":1},"2":{"36":2,"40":2,"62":1,"103":1,"107":2,"112":2,"114":2,"119":2,"124":2,"145":2,"150":2,"151":1,"155":2,"157":2,"159":1,"162":2,"166":2,"181":1}}],["users",{"2":{"33":1,"172":1}}],["usr",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1,"172":1,"185":1}}],["upload",{"2":{"122":1,"176":1}}],["update执行报连接错误",{"2":{"116":1}}],["update",{"2":{"33":3,"34":1,"46":1,"61":5,"68":1,"97":1,"116":1,"159":1,"160":1,"171":1,"172":3,"173":1,"174":1,"185":1}}],["upstream模拟器",{"2":{"119":1}}],["upstream",{"2":{"20":1,"36":6,"38":6,"40":4,"90":2,"92":1,"107":4,"111":4,"112":4,"113":4,"119":3,"124":4,"145":4,"150":4,"154":4,"155":4,"156":4,"159":7,"162":6,"164":6,"166":4}}],["等任何方式获取源码到本地",{"2":{"150":1}}],["等系列扩展",{"2":{"92":1}}],["等",{"2":{"86":1,"91":1}}],["等属性信息",{"2":{"20":1}}],["等已经大规模硅化的草案",{"2":{"16":1}}],["示例",{"2":{"20":1}}],["库函数的实现",{"2":{"88":1}}],["库文件等",{"2":{"23":1}}],["库",{"2":{"20":1,"89":1}}],["包容",{"2":{"130":1,"133":1}}],["包含三种工具链版本",{"2":{"90":1}}],["包含一些与编译",{"2":{"90":1}}],["包含工具",{"2":{"86":1}}],["包含但不限于openeuler",{"2":{"21":1,"22":1}}],["包版本号>",{"2":{"61":1}}],["包名>",{"2":{"61":1}}],["包括缓存和已安装的软件包",{"2":{"159":1}}],["包括缓存和安装的软件包",{"2":{"159":1}}],["包括持续的不当行为",{"2":{"141":1,"142":1}}],["包括主动与行为准则执行者互动",{"2":{"140":1,"141":1}}],["包括",{"2":{"85":1,"91":1,"174":1}}],["包括对eclipse和vscode的支持",{"2":{"29":1}}],["包括预定义的模板或用户自定义的代码片段",{"2":{"22":1}}],["包括且不限于ruyi",{"2":{"20":1}}],["包管理自身的升级可能会需要",{"2":{"168":1}}],["包管理自身的升级可能会需要超级用户权限",{"2":{"42":1}}],["包管理工具快速查询和安装",{"2":{"117":1}}],["包管理工具默认的配置目录",{"2":{"116":1,"173":1}}],["包管理工具的安装非常简单",{"2":{"116":1}}],["包管理工具",{"0":{"116":1}}],["包管理工具负责从在线软件源中获取软件包的信息",{"2":{"17":1,"21":1}}],["包管理在建立编译环境之前会检查该环境是否合法",{"2":{"111":1,"154":1}}],["包管理是",{"2":{"44":1}}],["包管理时您需要手动进行该操作",{"2":{"42":1,"168":1}}],["包管理被设计为避免进行需要超级用户权限的操作",{"2":{"42":1,"168":1}}],["包管理不询问而直接执行",{"2":{"42":2,"168":2}}],["包管理不再依赖",{"2":{"32":1,"72":1}}],["包管理预置的配置可以使用",{"2":{"37":1,"110":1,"153":1,"163":1}}],["包管理支持",{"2":{"33":1}}],["包管理和库支持",{"2":{"22":1}}],["包管理器部署开发环境",{"0":{"186":1}}],["包管理器可否使用",{"2":{"185":1}}],["包管理器及其所有数据",{"2":{"185":1}}],["包管理器搭建",{"2":{"183":1}}],["包管理器相关的更多命令以及命令具体使用方法请参阅功能介绍",{"2":{"174":1}}],["包管理器和工具的基本使用",{"2":{"174":1}}],["包管理器和工具的使用",{"2":{"121":1}}],["包管理器仓库文档",{"2":{"171":1}}],["包管理器安装到使用",{"2":{"183":1}}],["包管理器安装",{"0":{"170":1},"1":{"171":1,"172":1,"173":1,"174":1,"175":1}}],["包管理器提供以下功能",{"2":{"158":1}}],["包管理器提供了为",{"2":{"181":1}}],["包管理器提供了更为简便的操作系统安装方式",{"2":{"178":1}}],["包管理器提供了虚拟环境技术",{"2":{"150":1}}],["包管理器提供了不同组织所发布的",{"2":{"147":1}}],["包管理器提供了不同组织发布的不同版本的gnu和llvm编译工具链",{"2":{"117":1}}],["包管理器功能说明",{"0":{"158":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1}}],["包管理器具有良好的平台兼容性以及多发行版兼容性",{"2":{"45":1}}],["包管理器的安装",{"0":{"185":1}}],["包管理器的安装开始",{"2":{"170":1}}],["包管理器的问题和需求可以通过仓库issue反馈",{"2":{"44":1}}],["包管理器的过程",{"2":{"42":1,"168":1}}],["包管理器的更新信息",{"2":{"35":1,"161":1}}],["包管理器没有实现卸载",{"2":{"41":1,"167":1}}],["包管理器同时管理一些源码包",{"2":{"39":1,"165":1}}],["包管理器依赖一些外部工具",{"2":{"32":1}}],["包管理器工具目前能在",{"2":{"171":1}}],["包管理器工具可使用",{"2":{"155":1}}],["包管理器工具使用",{"2":{"37":1,"110":1,"153":1,"163":1}}],["包管理器工具则是用于与在线软件源交互的工具",{"2":{"17":1}}],["包管理器工具并执行以下命令为设备安装系统",{"2":{"3":1,"127":1}}],["包管理器获取",{"2":{"9":1}}],["包管理器",{"0":{"8":1,"19":1,"33":1,"42":1,"44":1,"168":1,"171":1},"1":{"20":1,"21":1,"45":1,"46":1,"47":1},"2":{"42":2,"46":1,"69":1,"121":1,"147":1,"159":4,"168":2,"181":1,"185":1}}],["包管理器等",{"2":{"5":1,"190":1}}],["longan",{"2":{"193":1}}],["location",{"2":{"123":2,"177":2}}],["locales",{"2":{"50":1}}],["local",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"61":2,"64":2,"67":2,"69":1,"71":1,"75":3,"78":3,"81":3,"97":1,"98":1,"106":1,"172":1,"185":1,"186":1}}],["lab",{"2":{"190":1}}],["ladder",{"2":{"143":1}}],["latest",{"2":{"36":9,"38":1,"162":9,"164":1}}],["lflags",{"2":{"123":1,"177":1}}],["lrt",{"2":{"122":2,"176":2}}],["left",{"2":{"122":1,"176":1}}],["lto",{"2":{"113":1,"114":1,"156":1,"157":1}}],["lt",{"2":{"98":1,"107":1,"159":2,"186":1}}],["lts",{"2":{"45":1,"47":1}}],["lmul=用于指定一个循环迭代中处理的向量元素的数量",{"2":{"91":1}}],["lp64",{"2":{"91":1,"92":1}}],["lp64e",{"2":{"91":1}}],["lp64d",{"2":{"91":1,"122":1,"176":1}}],["lpi4a1590",{"2":{"98":1,"186":1}}],["lpi4a",{"2":{"37":1,"98":1,"103":2,"110":1,"111":1,"112":2,"114":1,"153":1,"154":1,"155":2,"157":1,"163":1,"181":2,"186":1}}],["ldd",{"2":{"113":1,"114":1,"156":1,"157":1}}],["ld",{"2":{"86":1,"113":2,"114":2,"122":1,"156":2,"157":2,"176":1}}],["lz4",{"2":{"80":1}}],["lsb",{"2":{"122":1,"123":1,"176":1,"177":1}}],["ls",{"2":{"39":1,"98":2,"99":1,"107":1,"108":1,"113":1,"114":1,"156":1,"157":1,"165":1,"186":2,"187":1}}],["llvm工具链",{"2":{"124":1}}],["llvm",{"0":{"93":1},"2":{"36":2,"111":2,"112":3,"124":1,"145":2,"147":1,"154":2,"155":3,"162":2}}],["lldb",{"2":{"20":1}}],["lizard",{"2":{"193":1}}],["linked",{"2":{"122":1,"123":1,"176":1,"177":1}}],["link",{"2":{"99":1,"108":1,"119":1,"122":2,"123":2,"150":1,"176":2,"177":2,"187":1}}],["linux系统皆可",{"2":{"102":1}}],["linux64",{"2":{"99":1,"108":1,"119":1,"122":2,"123":1,"150":1,"176":2,"177":1,"187":1}}],["linux",{"2":{"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"78":1,"81":1,"82":1,"98":1,"99":1,"107":1,"108":1,"113":34,"114":33,"119":1,"122":5,"123":2,"150":1,"156":34,"157":33,"171":1,"176":5,"177":2,"180":1,"186":1,"187":1}}],["lib",{"2":{"122":1,"176":1}}],["libgcc",{"0":{"90":1}}],["libgit2",{"2":{"55":1}}],["library",{"0":{"88":1}}],["likely",{"2":{"62":1,"103":1,"181":1}}],["list",{"2":{"33":3,"35":3,"36":3,"37":2,"46":2,"61":5,"98":2,"107":3,"110":2,"116":1,"117":1,"122":1,"123":1,"147":1,"153":2,"159":6,"161":3,"162":3,"163":2,"171":1,"172":3,"174":1,"176":1,"177":1,"186":2}}],["licensed",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["licenses",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["license",{"2":{"33":2,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":2,"75":2,"78":3,"81":3,"172":2}}],["licheerv",{"2":{"51":4,"54":4,"82":4,"193":2}}],["licheepi",{"2":{"1":1,"11":1,"51":9,"54":9,"62":1,"65":9,"68":9,"73":9,"76":9,"79":9,"82":9,"95":1,"96":1,"103":7,"181":7,"183":1,"184":1,"186":1,"193":1}}],["lichee",{"2":{"1":1,"11":1,"51":12,"54":12,"65":2,"68":2,"73":2,"76":2,"79":2,"82":12,"103":1,"181":1,"193":2}}],["gz",{"2":{"122":3,"176":3}}],["g++",{"2":{"113":1,"114":1,"156":1,"157":1}}],["gcov",{"2":{"113":3,"114":3,"156":3,"157":3}}],["gcc13",{"2":{"123":2,"177":2}}],["gcc",{"0":{"83":1,"85":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1},"2":{"83":1,"85":3,"91":2,"98":1,"99":1,"107":1,"108":1,"113":6,"114":5,"119":1,"122":3,"123":1,"150":1,"156":6,"157":5,"176":3,"177":1,"186":2,"187":1}}],["gfortran",{"2":{"113":1,"114":1,"156":1,"157":1}}],["g",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1,"150":1,"176":1,"177":1,"187":1}}],["gt",{"2":{"98":1,"107":1,"159":2,"186":1,"189":6}}],["glibc",{"0":{"88":1},"2":{"89":1}}],["gprof",{"2":{"86":1,"113":1,"114":1,"156":1,"157":1}}],["group=",{"2":{"51":2,"54":2}}],["gnu工具链",{"2":{"124":1}}],["gnu",{"0":{"85":1,"86":1,"87":1,"88":1},"2":{"36":9,"38":6,"40":2,"83":1,"85":2,"90":2,"91":1,"98":4,"99":1,"107":3,"108":1,"111":8,"112":8,"113":37,"114":35,"119":2,"122":4,"123":2,"124":5,"145":7,"147":1,"150":3,"154":8,"155":8,"156":37,"157":35,"159":10,"162":9,"164":7,"166":2,"176":4,"177":2,"186":7,"187":1}}],["gnu和llvm编译工具链",{"2":{"20":1}}],["github",{"2":{"33":1,"44":2,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"64":1,"69":1,"78":1,"81":1,"82":1,"97":2,"106":1,"116":1,"171":1,"173":1,"185":2}}],["git",{"2":{"32":3,"69":2,"70":1,"72":1,"91":2,"118":1,"150":1}}],["generic",{"2":{"37":1,"40":2,"51":16,"54":17,"65":4,"68":6,"73":6,"76":10,"79":10,"82":14,"107":1,"110":1,"111":4,"112":4,"113":3,"119":1,"150":2,"153":1,"154":4,"155":4,"156":3,"159":2,"163":1,"166":2}}],["generate",{"2":{"33":1,"172":1}}],["generation",{"2":{"22":1}}],["get",{"2":{"32":2,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["gdb",{"0":{"87":1},"2":{"20":1,"113":2,"114":2,"156":2,"157":2}}],["gui未来可能提供",{"2":{"17":1}}],["gui",{"2":{"8":1,"21":1}}],["供参考",{"2":{"18":1}}],["这也就使得编译工具链具有多样性",{"2":{"146":1}}],["这种现象是由于处理器架构的发展",{"2":{"124":1}}],["这个环境中",{"2":{"186":1}}],["这个操作将从",{"2":{"122":1,"176":1}}],["这个过程中您可以自主选择是否保留旧的软件包缓存和",{"2":{"42":1,"168":1}}],["这个命令将会询问您以二次确认该操作",{"2":{"42":1,"168":1}}],["这个命令使用预置的",{"2":{"40":1,"166":1}}],["这和",{"2":{"40":1,"166":1}}],["这里跳过具体事例",{"2":{"113":1,"156":1}}],["这里列出了经过测试可用的配置组合",{"2":{"111":1,"154":1}}],["这里未列举所有的情况",{"2":{"94":1}}],["这里提供示例规则仅供参考",{"2":{"51":1,"54":1}}],["这里以coremark为例",{"2":{"119":1}}],["这里以",{"2":{"33":1,"150":1}}],["这里不同语言存在差异",{"2":{"22":1}}],["这些典型的场景供新用户参考和体验",{"2":{"94":1}}],["这些更新将以",{"2":{"27":1}}],["这些工具从包管理器中获取",{"2":{"22":1}}],["这有助于加快开发速度和提高效率",{"2":{"23":1}}],["这是由",{"2":{"40":1,"166":1}}],["这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段",{"2":{"23":1}}],["这是一个初步的需求设想",{"2":{"18":1}}],["这可能涉及选择适当的编译选项",{"2":{"22":1}}],["这样可以最大限度地发挥其处理器的性能和功能",{"2":{"124":1}}],["这样可以支持同一个开发环境中同时安装不同的编译工具链版本",{"2":{"119":1}}],["这样的多样化为开发者提供了更多的选择",{"2":{"146":1}}],["这样的多样性为开发者提供了更多选择",{"2":{"124":1}}],["这样的一个开发者交流社区可以促进risc",{"2":{"23":1}}],["这样的平台可以快速解决开发过程中的疑问和难题",{"2":{"23":1}}],["这样",{"2":{"22":2}}],["这包括避免在社区场所和外部渠道中的互动",{"2":{"140":1}}],["这包括静态代码分析",{"2":{"22":1}}],["这包括创建新项目",{"2":{"22":1}}],["这一过程和x86下的开发",{"2":{"17":1}}],["说明",{"2":{"18":1,"116":1,"124":1,"145":1}}],["模式下执行",{"2":{"151":1}}],["模式下运行",{"0":{"109":1}}],["模拟运行环境",{"2":{"151":1}}],["模拟运行",{"0":{"114":1,"120":1,"151":1,"157":1},"2":{"125":1}}],["模拟环境",{"2":{"95":1,"104":1,"183":1}}],["模拟器的命令为",{"2":{"114":1,"157":1}}],["模拟器的编译环境",{"2":{"40":1,"166":1}}],["模拟器运行交叉编译的",{"2":{"112":2,"155":2}}],["模拟器上成功执行的过程",{"2":{"104":1}}],["模拟器配置建立",{"2":{"98":1,"107":1,"186":1}}],["模拟器",{"2":{"8":1,"17":1,"20":1,"44":1,"107":1,"120":1,"125":1,"145":1,"150":1,"151":2}}],["模拟器等所需的工具",{"2":{"113":1,"156":1}}],["模拟器等软件和工具都可以从ruyi",{"2":{"17":1}}],["模拟器等工具",{"2":{"17":1}}],["模拟器等",{"2":{"0":1,"10":1}}],["模块介绍",{"0":{"84":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":1}}],["模块需求说明",{"0":{"18":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1}}],["聚集risc",{"2":{"17":1}}],["目标可执行程序的正确性",{"2":{"151":1}}],["目标代码格式是",{"2":{"145":1}}],["目标代码格式是elf",{"2":{"124":1}}],["目标上调试他们的程序",{"2":{"87":1}}],["目标文件工具",{"2":{"86":1}}],["目标运行环境的risc",{"2":{"20":1}}],["目录建立",{"2":{"69":1}}],["目录建立包含",{"2":{"40":1,"166":1}}],["目录下",{"2":{"61":1}}],["目录为",{"2":{"34":1,"160":1}}],["目的是为risc",{"2":{"17":1}}],["目前有一些简单的使用案例提供参考",{"2":{"175":1}}],["目前仅支持英文",{"2":{"171":1}}],["目前ruyisdk已经提供的编译工具链有如下几种",{"2":{"124":1}}],["目前也有一些简单的使用案例供参考",{"2":{"121":1}}],["目前支持的命令如下",{"2":{"46":1}}],["目前经过测试可用的环境有",{"2":{"45":1}}],["目前计划中的里程碑版本有",{"2":{"26":1}}],["目前",{"2":{"11":1,"90":1,"146":1,"147":1,"171":1,"178":1,"193":1}}],["目前在",{"2":{"6":1,"191":1}}],["目前对硬件设备的集成主要体现在包管理器",{"2":{"1":1}}],["也适用于在公共场所代表社区时的个人",{"2":{"136":1}}],["也可以使用",{"2":{"113":1,"156":1}}],["也可通过调试工具进行代码调试",{"2":{"17":1}}],["也称为包管理器",{"2":{"17":1}}],["最佳实践等内容",{"2":{"23":1}}],["最后放入",{"2":{"116":1}}],["最后",{"2":{"22":1}}],["最后在模拟器或者risc",{"2":{"17":1}}],["最终希望",{"2":{"5":1,"190":1}}],["想象一下",{"2":{"17":1}}],["并为设备安装系统",{"2":{"159":1}}],["并指定编译工具链为",{"2":{"150":1}}],["并指定编译工具链为gnu",{"2":{"119":1}}],["并解释举止如何不妥",{"2":{"139":1}}],["并在虚拟环境中配置了",{"2":{"151":1}}],["并在虚拟环境中配置了qemu模拟器",{"2":{"120":1}}],["并在适当时机知采取措施的理由",{"2":{"135":1}}],["并妥善公正地对他们认为不当",{"2":{"135":1}}],["并可以根据具体需求和目标平台选择适合的编译工具链版本",{"2":{"124":1}}],["并满足不同处理器版本的需求",{"2":{"124":1}}],["并使其具有可执行权限",{"2":{"116":1}}],["并使用平头哥",{"2":{"114":1,"157":1}}],["并且测试",{"2":{"181":1}}],["并且相互不冲突和影响",{"2":{"119":1}}],["并且改变提示符以提示当前进入编译环境中",{"2":{"113":1,"156":1}}],["并且开始自动执行对应程序为用户自动部署",{"2":{"14":1,"197":1}}],["并赋予其可执行权限",{"2":{"97":1,"185":1}}],["并用",{"2":{"61":3}}],["并不会删除软件包缓存和安装的",{"2":{"42":1,"168":1}}],["并进行远程调试和监视",{"2":{"22":1}}],["并观察变量的值",{"2":{"22":1}}],["并创建一个新的项目或工程",{"2":{"22":1}}],["并行编译能力",{"2":{"22":1}}],["并与其他开发者共享他们的插件",{"2":{"22":1}}],["并提供与其他竞争对手不同的优势",{"2":{"124":1}}],["并提供优化建议",{"2":{"22":1}}],["并提供更好的代码编写和维护体验",{"2":{"22":2}}],["并查看变量的值和内存的状态",{"2":{"22":1}}],["并给出相应的警告或错误提示",{"2":{"22":1}}],["并自动处理依赖关系的下载和安装",{"2":{"17":1,"21":1}}],["安装适用于",{"2":{"186":1}}],["安装适用于licheepi",{"2":{"98":1}}],["安装特定版本的",{"2":{"159":1}}],["安装指定版本的",{"2":{"159":1}}],["安装最新的",{"2":{"159":1}}],["安装器",{"2":{"125":1}}],["安装目标程序运行所需的运行时环境",{"2":{"125":1}}],["安装编译工具链",{"0":{"117":1},"2":{"113":1,"114":1,"156":1,"157":1}}],["安装虚拟环境中使用的编译工具链",{"2":{"113":1,"156":1}}],["安装qemu",{"2":{"107":1}}],["安装工具链",{"2":{"107":1}}],["安装操作系统",{"0":{"103":1,"181":1}}],["安装gnu",{"2":{"98":1}}],["安装它们",{"2":{"61":1}}],["安装源码包",{"0":{"39":1,"165":1}}],["安装软件包",{"0":{"38":1,"164":1}}],["安装依赖软件",{"0":{"32":1}}],["安装和管理各种python库和依赖项",{"2":{"22":1}}],["安装",{"0":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"116":1},"2":{"17":1,"21":1,"174":1,"186":1}}],["安装教程",{"2":{"10":1}}],["translations",{"2":{"143":1}}],["telegram",{"2":{"131":1}}],["test",{"2":{"114":4,"157":4}}],["testsuite",{"2":{"91":1}}],["testing",{"2":{"33":1,"106":1,"172":1}}],["tinyvision",{"2":{"193":1}}],["ticks",{"2":{"123":1,"177":1}}],["time",{"2":{"122":3,"123":1,"176":3,"177":1}}],["title",{"2":{"61":2}}],["t",{"2":{"98":1,"107":1,"112":8,"113":2,"114":1,"119":1,"150":1,"155":8,"156":2,"157":1,"186":1}}],["txt",{"2":{"61":1,"123":1,"177":1}}],["tang",{"2":{"51":4,"54":4,"82":4,"193":1}}],["target",{"2":{"91":1}}],["target系统镜像等内容",{"2":{"17":1}}],["tar",{"2":{"32":2,"122":3,"176":3}}],["th1520",{"2":{"96":1,"184":1}}],["that",{"2":{"62":3,"103":3,"181":3}}],["thread",{"2":{"51":29,"54":29,"82":1}}],["them",{"2":{"61":1}}],["there",{"2":{"61":1,"113":1,"156":1}}],["the",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"62":4,"78":3,"81":3,"103":12,"112":9,"113":1,"155":9,"156":1,"172":1,"181":12}}],["then",{"2":{"33":1,"62":1,"103":1,"172":1,"181":1}}],["this",{"2":{"33":2,"49":1,"53":1,"56":1,"58":1,"62":2,"78":1,"81":1,"103":2,"112":1,"113":1,"155":1,"156":1,"172":2,"181":2}}],["total",{"2":{"122":2,"123":2,"176":2,"177":2}}],["toml",{"2":{"69":3,"116":1,"173":1}}],["tool",{"2":{"113":1,"114":1,"156":1,"157":1}}],["toolchain",{"2":{"33":1,"36":5,"40":1,"85":1,"111":1,"112":7,"154":1,"155":7,"159":1,"162":5,"166":1,"172":1}}],["tools",{"2":{"22":1}}],["to",{"2":{"33":2,"62":4,"103":7,"112":5,"122":2,"155":5,"172":2,"176":2,"181":7}}],["todo",{"2":{"8":1,"93":1,"121":1,"152":1}}],["集成文档和教程",{"2":{"22":1}}],["集成一个risc",{"2":{"22":1}}],["集成risc",{"2":{"22":1}}],["集成",{"2":{"22":1}}],["集成开发环境来为开发者提供方便",{"2":{"125":1}}],["集成开发环境提供智能感知功能",{"2":{"22":1}}],["集成开发环境会根据编程语言的语法规则",{"2":{"22":1}}],["集成开发环境",{"2":{"17":1}}],["集成多种通信接口",{"2":{"11":1}}],["集中存储了risc",{"2":{"17":1}}],["培育运营一个活跃全面的开发者交流社区",{"2":{"16":1}}],["os",{"0":{"197":1}}],["o2",{"2":{"122":2,"123":4,"176":2,"177":4}}],["override",{"2":{"112":1,"155":1}}],["o",{"2":{"106":1,"114":1,"122":1,"123":2,"157":1,"176":1,"177":2}}],["o3",{"2":{"91":1,"114":1,"157":1}}],["objcopy",{"2":{"86":1,"113":1,"114":1,"156":1,"157":1}}],["objdump",{"2":{"86":1,"113":1,"114":1,"156":1,"157":1}}],["onlinedocs",{"2":{"85":1}}],["only",{"2":{"51":71,"54":71,"76":1,"79":1,"82":5}}],["onto",{"2":{"62":1,"103":1,"181":1}}],["on",{"2":{"49":1,"51":9,"53":1,"54":9,"56":1,"58":1,"62":2,"65":6,"68":6,"73":6,"76":9,"78":1,"79":9,"81":1,"82":9,"103":3,"123":1,"177":1,"181":3}}],["one",{"2":{"38":1,"103":2,"112":1,"155":1,"164":1,"181":2}}],["op",{"2":{"159":1}}],["operation",{"2":{"123":1,"177":1}}],["openwrt",{"2":{"51":1,"54":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["openkylin",{"2":{"51":1,"54":1,"73":1,"76":1,"79":1,"82":1}}],["openeuler",{"2":{"10":1,"32":1,"45":2,"47":1,"51":20,"54":20,"65":18,"68":20,"73":20,"76":20,"79":20,"82":20,"96":1,"103":2,"181":2,"184":1}}],["op>`",{"2":{"38":1,"164":1}}],["op>",{"2":{"38":1,"164":1}}],["options",{"2":{"33":1,"112":1,"155":1,"172":1}}],["official",{"2":{"49":1,"51":13,"53":1,"54":13,"56":1,"58":1,"65":4,"68":6,"73":6,"76":10,"78":1,"79":10,"81":1,"82":13}}],["of",{"2":{"33":2,"36":1,"38":1,"49":4,"53":4,"56":4,"58":4,"60":2,"64":2,"67":2,"71":2,"75":2,"78":4,"81":4,"112":4,"143":2,"155":4,"162":1,"164":1,"172":2}}],["org",{"2":{"33":1,"49":2,"53":2,"56":2,"58":2,"60":1,"64":1,"67":1,"71":1,"75":1,"78":2,"81":2,"85":1,"86":1,"91":1,"143":3,"172":1}}],["or",{"2":{"16":1,"113":1,"156":1}}],["和运行侧的risc",{"2":{"125":1}}],["和",{"2":{"16":1,"17":1,"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"85":1}}],["和物联网应用",{"2":{"11":1}}],["0x5275",{"2":{"123":1,"177":1}}],["0x8e3a",{"2":{"123":1,"177":1}}],["0x1fd7",{"2":{"123":1,"177":1}}],["0xe714",{"2":{"123":1,"177":1}}],["0xe9f5",{"2":{"123":1,"177":1}}],["0>",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["05",{"2":{"30":5}}],["07",{"2":{"30":5}}],["09",{"2":{"30":5,"45":2,"47":1}}],["04",{"2":{"30":4,"45":1,"47":1,"102":1,"105":1,"179":1}}],["08",{"2":{"30":7}}],["03",{"2":{"30":5}}],["02",{"2":{"30":3}}],["01",{"2":{"30":4,"61":8,"122":3,"176":3}}],["0666",{"2":{"51":2,"54":2}}],["06",{"2":{"26":3,"30":7}}],["0",{"0":{"48":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"67":1,"70":1,"71":1,"74":1,"75":1,"80":1,"81":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"81":1,"82":1},"2":{"16":2,"32":1,"33":5,"36":18,"38":3,"49":11,"50":2,"51":2,"52":2,"53":11,"54":2,"55":3,"56":11,"57":2,"58":11,"60":10,"61":5,"62":2,"64":12,"65":2,"67":10,"68":2,"69":2,"71":6,"72":1,"73":2,"74":1,"75":9,"76":2,"77":2,"78":7,"79":2,"80":1,"81":11,"82":2,"85":1,"92":2,"97":6,"98":1,"106":2,"113":1,"114":1,"122":6,"123":8,"124":1,"145":1,"156":1,"157":1,"159":3,"162":18,"164":3,"172":5,"176":6,"177":8,"185":6,"186":1}}],["尤其强调",{"2":{"16":1}}],["计划发布时间",{"2":{"26":6}}],["计划以每半年为一个里程碑版本周期来推动",{"2":{"26":1}}],["计划用三年时间为",{"2":{"15":1,"24":1}}],["计算库",{"2":{"16":1}}],["运行risc",{"0":{"128":1},"2":{"125":1}}],["运行",{"2":{"114":1,"157":1}}],["运行构建出的",{"2":{"114":1,"157":1}}],["运行验证",{"0":{"100":1,"188":1}}],["运行的流程是一致的",{"2":{"17":1}}],["运行时或虚拟机",{"2":{"16":1}}],["运行环境主要是risc",{"2":{"125":1}}],["运行环境",{"2":{"8":1,"17":1,"20":1,"125":1}}],["固件",{"2":{"16":1}}],["都可以通过",{"2":{"16":2}}],["任何一款",{"2":{"16":1}}],["几乎",{"2":{"16":1}}],["年开始筹备",{"2":{"15":1,"24":1}}],["从配置的软件源中获得本地软件包缓存的更新",{"2":{"171":1}}],["从配置的软件源更新本地软件包缓存",{"2":{"46":1,"116":1}}],["从软件源下载并解压指定的源码包",{"2":{"118":1,"150":1}}],["从ruyi",{"2":{"97":1,"106":1,"185":1}}],["从ruyisdk包管理器中下载和安装所需的编译工具链",{"2":{"17":1}}],["从ruyisdk开始使用设备",{"0":{"2":1},"1":{"3":1}}],["从该版本开始",{"2":{"68":1}}],["从本地软件包缓存中列出可用软件包",{"2":{"46":1,"117":1}}],["从中获得有价值的信息",{"2":{"23":1}}],["从",{"2":{"13":1,"15":1,"24":1,"33":1,"50":1,"51":1,"54":1,"61":1,"62":1,"64":1,"69":1,"72":1,"77":1,"79":1,"82":1,"195":1}}],["架构示例",{"0":{"172":1},"1":{"173":1}}],["架构示意图",{"0":{"12":1,"17":1,"194":1},"2":{"189":1}}],["架构",{"2":{"150":1}}],["架构的二进制",{"2":{"122":1,"176":1}}],["架构的一些常见用法",{"2":{"91":1}}],["架构的目标文件",{"2":{"86":1}}],["架构的目标代码",{"2":{"85":1}}],["架构的软件",{"2":{"83":1}}],["架构的",{"2":{"83":1}}],["架构环境安装",{"2":{"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3}}],["架构环境为例进行安装",{"2":{"33":1}}],["架构编译环境",{"2":{"33":1}}],["架构图中的各种工具等",{"2":{"20":1}}],["架构设计的开发工具箱",{"2":{"9":1}}],["适用范围",{"0":{"136":1}}],["适用于玄铁",{"2":{"145":1}}],["适用于不同的",{"2":{"145":1}}],["适用于嵌入式系统和其他资源受限的环境",{"2":{"89":1}}],["适用于边缘计算",{"2":{"11":1}}],["适用于入门级开发和教育用途",{"2":{"11":1}}],["适合入门和教育",{"2":{"11":1}}],["适合高性能开发和研究",{"2":{"11":1}}],["适合物联网应用",{"2":{"11":1}}],["适合嵌入式应用",{"2":{"11":1}}],["小巧灵活",{"2":{"11":1}}],["awol",{"2":{"193":1}}],["ahead",{"2":{"193":1}}],["average",{"2":{"122":1,"176":1}}],["available",{"2":{"33":1,"36":1,"62":1,"103":1,"162":1,"172":1,"181":1}}],["about",{"2":{"103":1,"181":1}}],["abi",{"2":{"92":1,"122":1,"123":1,"176":1,"177":1}}],["atom",{"2":{"112":3,"155":3}}],["at",{"2":{"103":1,"181":1}}],["attr",{"2":{"51":4,"54":4}}],["along",{"2":{"122":1,"123":1,"176":1,"177":1}}],["al",{"2":{"98":1,"99":1,"107":1,"108":1,"186":1,"187":1}}],["allow",{"2":{"62":2,"103":2,"181":2}}],["all",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"62":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"103":1,"172":1,"181":1}}],["allwinner",{"2":{"1":1,"11":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6,"103":1,"181":1,"193":1}}],["a=tree",{"2":{"91":1}}],["as",{"2":{"62":3,"86":1,"103":3,"113":1,"114":1,"156":1,"157":1,"181":3}}],["asked",{"2":{"62":1,"103":1,"181":1}}],["ar",{"2":{"113":2,"114":2,"156":2,"157":2}}],["arguments",{"2":{"112":1,"155":1}}],["arrange",{"2":{"62":1,"103":1,"181":1}}],["are",{"2":{"61":1,"62":1,"103":3,"181":3}}],["armbian",{"2":{"54":2,"55":1}}],["arm64",{"2":{"33":1,"49":4,"53":4,"56":4,"58":4,"75":4,"78":4,"81":4,"116":1,"171":1}}],["amp",{"2":{"51":3,"54":3,"82":3,"102":1}}],["amd64",{"0":{"172":1},"1":{"173":1},"2":{"33":5,"49":4,"53":4,"56":4,"58":4,"60":4,"64":4,"67":4,"71":4,"75":4,"78":4,"81":4,"106":1,"116":1,"171":1,"172":3}}],["analyzer",{"2":{"36":1,"162":1}}],["and",{"2":{"33":3,"62":2,"103":3,"112":1,"123":1,"155":1,"172":3,"177":1,"181":3}}],["add",{"2":{"113":1,"114":1,"156":1,"157":1}}],["addr2line",{"2":{"113":1,"114":1,"156":1,"157":1}}],["adapted",{"2":{"33":1,"172":1}}],["admin",{"2":{"33":2,"46":1,"172":2}}],["a",{"2":{"33":1,"62":2,"92":1,"103":2,"112":2,"113":1,"155":2,"156":1,"172":1,"181":2}}],["applicable",{"2":{"112":1,"155":1}}],["apache",{"2":{"33":2,"49":2,"53":2,"56":2,"58":2,"60":2,"64":2,"67":2,"71":2,"75":2,"78":2,"81":2,"172":2}}],["apt",{"2":{"32":2}}],["activate",{"2":{"98":1,"107":1,"113":4,"114":2,"119":1,"122":1,"150":1,"156":4,"157":2,"176":1,"186":1}}],["account",{"2":{"62":1,"103":1,"181":1}}],["access",{"2":{"62":2,"103":2,"181":2}}],["academy",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["ac",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1,"172":1,"176":1}}],["autovec",{"2":{"39":1,"91":2,"165":1}}],["auto",{"2":{"22":1}}],["aarch64",{"2":{"21":1,"22":1}}],["ai",{"2":{"11":2}}],["换而言之提供一个镜像站",{"2":{"10":1}}],["便于开发者获取相关镜像",{"2":{"10":1}}],["便捷的开发环境",{"2":{"5":1,"190":1}}],["对于有开发经验或者开发目标的开发者而言",{"2":{"118":1}}],["对于不熟悉参数的用户",{"2":{"91":1}}],["对于一些嵌入式risc",{"2":{"89":1}}],["对于部分必须由用户手工下载的文件",{"2":{"55":1}}],["对主页累计访问量",{"2":{"23":1}}],["对你的代码进行着色",{"2":{"22":1}}],["对代码进行着色",{"2":{"22":1}}],["对",{"2":{"10":1,"92":1}}],["使用的就是",{"2":{"186":1}}],["使用的就是gnu",{"2":{"98":1}}],["使用案例",{"0":{"175":1}}],["使用预置的",{"2":{"159":1}}],["使用默认镜像",{"2":{"159":1}}],["使用默认镜像即可",{"2":{"34":1,"160":1}}],["使用不恰当的语言或其他在社区中被认定为不符合职业道德或不受欢迎的行为",{"2":{"139":1}}],["使用情色化的语言或图像",{"2":{"134":1}}],["使用ruyisdk",{"0":{"125":1}}],["使用ruyi工具部署开发环境",{"0":{"98":1,"107":1}}],["使用编译环境进行",{"0":{"122":1,"176":1},"1":{"123":1,"177":1}}],["使用qemu",{"2":{"119":1}}],["使用平头哥",{"2":{"112":1,"155":1}}],["使用平头哥工具链配置荔枝派",{"2":{"112":1,"155":1}}],["使用上游",{"2":{"112":1,"155":1}}],["使用示例",{"0":{"95":1,"104":1,"183":1},"1":{"96":1,"97":1,"98":1,"99":1,"100":1,"105":1,"106":1,"107":1,"108":1,"109":1,"184":1,"185":1,"186":1,"187":1,"188":1}}],["使用示例请参考",{"2":{"91":1}}],["使用时的两个常用参数",{"2":{"91":1}}],["使用说明",{"0":{"91":1}}],["使用下面的命令卸载",{"2":{"42":1,"168":1}}],["使用",{"0":{"186":1},"2":{"23":1,"38":1,"39":1,"51":1,"54":1,"61":2,"65":1,"68":1,"70":1,"73":1,"76":1,"79":1,"82":1,"91":1,"112":4,"119":1,"150":2,"155":4,"164":1,"165":1,"174":1}}],["使用集成开发环境提供的构建工具进行项目的构建",{"2":{"22":1}}],["使用语法高亮功能",{"2":{"22":1}}],["使用包管理器开发者可以获取该工具箱中的编译工具链",{"2":{"9":1}}],["使开发者能够根据自己的需求扩展和定制ide",{"2":{"22":1}}],["使开发者能够在ide中直接执行和调试代码片段",{"2":{"22":1}}],["使开发者能够方便地创建",{"2":{"22":1}}],["使开发者能够编译和构建基于risc",{"2":{"22":1}}],["使开发者能够设置断点",{"2":{"22":1}}],["使开发者能够轻松创建",{"2":{"22":1}}],["使开发者能够搜索",{"2":{"17":1,"21":1}}],["使得开发者从最开始的学习",{"2":{"6":1,"191":1}}],["使得",{"2":{"5":1,"190":1}}],["8888",{"2":{"51":1,"54":1}}],["8g",{"2":{"51":10,"54":10,"65":4,"68":4,"73":4,"76":4,"79":6,"82":10,"103":1,"181":1}}],["8",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"8":1,"30":1,"36":1,"55":1,"77":1,"78":4,"79":1,"98":1,"103":1,"162":1,"181":1,"186":1}}],["工具提供了为",{"2":{"103":1}}],["工具并为其赋可执行权限并配置到环境变量中",{"2":{"97":1,"106":1,"185":1}}],["工具及其所有数据",{"2":{"97":1,"106":1}}],["工具搭建",{"2":{"95":1,"104":1}}],["工具安装到使用",{"2":{"95":1,"104":1}}],["工具新增了新闻支持",{"2":{"61":3}}],["工具刷写镜像前请务必留足磁盘空间",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["工具刷写镜像时",{"2":{"51":1,"54":1,"79":1,"82":1}}],["工具需要支持x86",{"2":{"21":1}}],["工具",{"2":{"8":1,"17":1,"20":1,"21":1,"185":1}}],["工具链配置香山南湖编译环境",{"2":{"112":1,"155":1}}],["工具链配置",{"2":{"112":1,"155":1}}],["工具链与预置配置组合",{"0":{"111":1,"154":1}}],["工具链版本",{"2":{"92":1}}],["工具链中各个工具的使用方法请参考其使用说明文档",{"2":{"91":1}}],["工具链侧重于提供稳定的工具链环境",{"2":{"90":1}}],["工具链侧重于使用",{"2":{"90":1}}],["工具链适合面向最新",{"2":{"90":1}}],["工具链是专门用于",{"2":{"83":1}}],["工具链介绍",{"0":{"83":1,"93":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1}}],["工具链和",{"2":{"40":1,"166":1}}],["工具链",{"2":{"5":1,"8":1,"16":1,"83":1,"111":1,"145":3,"154":1,"190":1}}],["7654",{"2":{"51":1,"54":1}}],["7",{"0":{"74":1,"75":1},"1":{"75":1,"76":1},"2":{"8":1,"16":1,"30":1,"65":1,"75":4,"76":1,"92":1,"103":3,"181":3}}],["源码作为编译对象",{"2":{"186":1}}],["源码包",{"2":{"159":1}}],["源码中的编译配置信息",{"2":{"150":1,"187":1}}],["源码并解包到当前目录",{"2":{"122":1,"176":1}}],["源码可以直接从",{"2":{"122":1,"176":1}}],["源码交叉编译并在",{"2":{"104":1}}],["源码本地编译并在",{"2":{"95":1,"183":1}}],["源码等各种二进制软件包和源码包",{"2":{"44":1}}],["源码",{"2":{"8":1}}],["666",{"2":{"123":1,"177":1}}],["64架构的个人电脑",{"2":{"125":1}}],["64m",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3,"193":1}}],["64",{"2":{"45":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"85":1,"91":2,"94":2,"102":1,"104":1,"105":1,"114":1,"122":1,"123":1,"157":1,"176":1,"177":1,"179":1}}],["6",{"0":{"70":1,"71":1},"1":{"71":1,"72":1,"73":1},"2":{"8":1,"30":1,"32":1,"36":1,"71":3,"72":1,"73":1,"74":1,"103":1,"162":1,"181":1}}],["5",{"0":{"66":1,"67":1},"1":{"67":1,"68":1,"69":1},"2":{"8":1,"16":1,"30":1,"36":1,"55":1,"67":5,"68":1,"69":1,"70":1,"73":1,"97":3,"103":1,"162":1,"181":1,"185":3}}],["42",{"2":{"123":1,"177":1}}],["41",{"2":{"86":1}}],["4g",{"2":{"51":2,"54":2,"79":2,"82":2}}],["4",{"0":{"63":1,"64":1,"142":1},"1":{"64":1,"65":1},"2":{"8":1,"30":1,"64":6,"65":1,"103":1,"122":1,"123":1,"176":1,"177":1,"181":1}}],["4a的编译工具链gnu",{"2":{"98":1}}],["4a开发板",{"2":{"96":1}}],["4a开发板上运行的过程",{"2":{"95":1}}],["4a",{"2":{"1":1,"11":1,"51":19,"54":19,"62":2,"65":9,"68":9,"73":9,"76":9,"79":9,"82":19,"103":7,"112":1,"114":1,"155":1,"157":1,"181":7,"183":1,"184":1,"186":1,"193":3}}],["391k",{"2":{"122":2,"176":2}}],["32",{"2":{"85":1,"91":2}}],["38",{"2":{"45":1}}],["30000",{"2":{"123":1,"177":1}}],["30",{"2":{"30":2}}],["3",{"0":{"59":1,"60":1,"141":1},"1":{"60":1,"61":1,"62":1},"2":{"8":1,"30":1,"51":1,"54":1,"60":5,"61":4,"62":3,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"103":4,"119":1,"150":1,"181":4}}],["2k",{"2":{"123":1,"177":1}}],["29",{"2":{"30":1,"52":1,"54":1}}],["2011",{"2":{"123":2,"177":2}}],["20",{"2":{"30":4,"80":1,"82":1}}],["20240324",{"2":{"124":1,"145":1}}],["20240512",{"2":{"106":1}}],["20240222",{"2":{"98":1,"186":1}}],["2024",{"2":{"30":46,"61":8}}],["2024目标",{"0":{"29":1}}],["2024年12月",{"2":{"26":1}}],["2024年6月",{"2":{"26":1}}],["2025年12月",{"2":{"26":1}}],["2025年6月",{"2":{"26":1}}],["20230125",{"2":{"36":1,"162":1}}],["20231118",{"2":{"36":6,"38":2,"159":2,"162":6,"164":2}}],["20231114",{"2":{"36":1,"162":1}}],["20231121",{"2":{"36":3,"162":3}}],["20231210",{"2":{"45":1,"47":1}}],["20231212",{"2":{"36":6,"112":1,"113":1,"155":1,"156":1,"162":6}}],["20231211",{"2":{"33":5,"172":5}}],["20231207+g03813c9fe8",{"2":{"36":1,"162":1}}],["2023年12月",{"2":{"26":1}}],["2023年6月",{"2":{"26":1}}],["2023",{"2":{"15":1,"24":1,"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":1,"156":1,"172":1}}],["21",{"2":{"30":2}}],["28",{"2":{"30":1,"48":1,"51":1}}],["22",{"2":{"30":3,"45":1,"47":1,"92":1,"102":1,"105":1,"179":1}}],["27",{"2":{"30":1}}],["26",{"2":{"30":3}}],["256m",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3,"193":1}}],["25",{"2":{"26":2,"30":3}}],["24",{"2":{"26":2,"30":4}}],["2345",{"2":{"51":1,"54":1}}],["23",{"2":{"26":2,"30":4,"45":2,"47":1}}],["2",{"0":{"140":1},"2":{"8":1,"16":1,"27":1,"33":4,"36":2,"49":4,"51":1,"53":4,"54":1,"56":4,"58":4,"60":2,"61":3,"62":1,"64":2,"65":1,"67":2,"68":1,"71":2,"73":1,"75":2,"76":1,"78":4,"79":1,"81":4,"82":1,"85":1,"86":1,"98":1,"103":5,"113":1,"119":1,"143":2,"150":1,"156":1,"162":2,"172":4,"181":5,"186":1,"193":2}}],["1为要读取的新闻条目的序号或id",{"2":{"35":1,"161":1}}],["18",{"2":{"30":1}}],["17",{"2":{"30":1,"36":1,"162":1}}],["1703147196780",{"2":{"17":1}}],["151",{"2":{"52":1}}],["15",{"2":{"30":2,"61":5,"122":1,"123":1,"176":1,"177":1}}],["138k",{"2":{"51":4,"54":4,"82":4,"193":1}}],["13",{"0":{"57":1,"58":1},"1":{"58":1},"2":{"30":1,"58":4,"74":1,"76":1,"85":1,"113":1,"156":1}}],["11",{"0":{"52":1,"53":1},"1":{"53":1,"54":1},"2":{"30":7,"52":1,"53":4,"54":1,"55":1}}],["14911",{"2":{"123":1,"177":1}}],["1404k",{"2":{"122":1,"176":1}}],["1400k",{"2":{"122":1,"176":1}}],["14",{"2":{"30":2,"61":3,"77":1,"79":1,"123":1,"177":1}}],["100ask",{"2":{"193":1}}],["100",{"2":{"122":2,"176":2}}],["10",{"0":{"48":1,"49":1},"1":{"49":1,"50":1,"51":1},"2":{"30":7,"49":4,"50":1,"51":1,"106":1}}],["192",{"2":{"123":1,"177":1}}],["19",{"2":{"30":3}}],["168",{"2":{"123":1,"177":1}}],["16g",{"2":{"51":8,"54":8,"65":4,"68":4,"73":4,"76":4,"79":4,"82":8,"103":5,"181":5}}],["16",{"2":{"30":3}}],["1234",{"2":{"51":1,"54":1}}],["12",{"0":{"55":1,"56":1},"1":{"56":1},"2":{"26":3,"30":8,"56":4,"57":1}}],["1",{"0":{"77":1,"78":1,"139":1},"1":{"78":1,"79":1},"2":{"8":1,"16":1,"35":1,"36":5,"51":1,"54":1,"55":2,"61":3,"62":2,"65":1,"68":1,"73":1,"76":1,"78":4,"79":1,"82":1,"103":7,"119":1,"122":9,"123":5,"143":2,"150":1,"159":2,"161":1,"162":5,"176":9,"177":5,"181":7}}],["在确保已安装",{"2":{"181":1}}],["在任意",{"2":{"180":1}}],["在指定目录建立包含工具链和模拟器的编译环境",{"2":{"159":1}}],["在指定时间内",{"2":{"140":1,"141":1}}],["在进入该步骤前",{"2":{"151":1}}],["在这个模块中我们更进一步的安装",{"2":{"147":1}}],["在此期间",{"2":{"141":1}}],["在参与社区讨论前",{"2":{"130":1}}],["在运行侧",{"2":{"125":1}}],["在开发侧",{"2":{"125":1}}],["在开发过程中",{"2":{"22":1}}],["在最新的",{"0":{"123":1,"177":1}}],["在安装完成后最常用的命令一般需要有",{"2":{"116":1}}],["在安装和ide初始设置时都已经被集成到",{"2":{"17":1}}],["在创建虚拟环境之前",{"2":{"113":1,"156":1}}],["在虚拟环境下编译",{"0":{"113":1,"156":1}}],["在venv",{"2":{"98":1}}],["在x86",{"2":{"94":1}}],["在编译和运行结束后",{"2":{"120":1,"151":1}}],["在编译或者运行验证完毕后",{"2":{"113":1,"156":1}}],["在编译器中开启",{"2":{"91":1}}],["在编写完代码后",{"2":{"22":1}}],["在编写代码的过程中",{"2":{"22":1}}],["在使用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["在使用普通用户调用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["在本文档中家目录为",{"2":{"34":1,"160":1}}],["在",{"2":{"34":1,"40":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"65":1,"67":2,"68":1,"71":1,"73":1,"75":3,"76":1,"78":3,"81":3,"114":1,"123":1,"157":1,"160":1,"166":1,"177":1,"186":1}}],["在代码编写过程中",{"2":{"22":1}}],["在该文件中",{"2":{"22":1}}],["在该包管理器中",{"2":{"8":1}}],["在集成开发环境中",{"2":{"22":1}}],["在集成开发环境中增加",{"2":{"10":1}}],["在集成开发环境中增加risc",{"2":{"0":1}}],["在集成开发环境的文本编辑器中",{"2":{"22":1}}],["在项目中",{"2":{"22":1}}],["在输入代码的过程中自动弹出变量",{"2":{"22":1}}],["在线软件源即",{"2":{"17":1}}],["在线上也会有相应的论坛提供给开发者进行技术交流",{"2":{"10":1}}],["在我们的社区当中",{"2":{"10":1}}],["该命令将会返回工具目前所支持的",{"2":{"181":1}}],["该命令将会返回工具目前所支持的risc",{"2":{"103":1}}],["该命令将列出所有可用的软件包",{"2":{"36":1,"162":1}}],["该值将被使用",{"2":{"69":2}}],["该文件需要您自行在",{"2":{"69":1}}],["该文件默认存放在",{"2":{"61":1}}],["该目录在",{"2":{"61":1}}],["该指令会识别硬件信息",{"2":{"14":1,"197":1}}],["该",{"2":{"9":1}}],["该包管理器是一个在线的软件源",{"2":{"8":1}}],["该项目旨在为",{"2":{"5":1,"190":1}}],["功能持续更新中",{"2":{"46":1}}],["功能与上述cli接口类似",{"2":{"21":1}}],["功能",{"0":{"7":1,"192":1},"1":{"8":1,"9":1,"10":1},"2":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":2,"174":1,"189":1}}],["而非个人得失",{"2":{"134":1}}],["而不是",{"2":{"89":1}}],["而需要用户自行扩展磁盘分区大小",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["而会导致软件包功能异常时",{"2":{"41":1,"167":1}}],["而是使用",{"2":{"32":1,"72":1}}],["而",{"2":{"6":1,"42":1,"168":1,"191":1}}],["而在过往针对",{"2":{"6":1,"191":1}}],["而言更具精简性",{"2":{"6":1,"191":1}}],["操作系统",{"2":{"6":1,"191":1}}],["icicle",{"2":{"193":1}}],["iterations",{"2":{"123":2,"177":2}}],["item",{"2":{"61":1}}],["items",{"2":{"48":1,"50":1,"61":1}}],["ip",{"2":{"123":1,"177":1}}],["ilinux64",{"2":{"122":1,"123":1,"176":1,"177":1}}],["ilp32",{"2":{"91":1,"92":2}}],["ilp32e",{"2":{"91":1}}],["ilp32d",{"2":{"91":1}}],["if",{"2":{"62":1,"103":1,"112":1,"155":1,"181":1}}],["id",{"2":{"61":3,"159":1}}],["idproduct",{"2":{"51":2,"54":2}}],["idvendor",{"2":{"51":2,"54":2}}],["ide中",{"2":{"22":1}}],["ide可以提供对这些工具的集成",{"2":{"22":1}}],["ide可以提供对虚拟环境的支持",{"2":{"22":1}}],["ide可以集成交互式解释器",{"2":{"22":1}}],["ide需要与这些解释器或虚拟机进行集成",{"2":{"22":1}}],["ide",{"0":{"9":1,"22":1},"2":{"9":1,"17":4,"20":1,"22":13}}],["i18n",{"0":{"50":1}}],["issues",{"2":{"135":1}}],["issue",{"2":{"52":1}}],["is",{"2":{"38":1,"62":2,"103":2,"113":2,"156":2,"164":1,"181":2}}],["iscas",{"2":{"5":1,"33":3,"44":1,"49":4,"53":4,"56":4,"58":4,"60":3,"64":3,"67":3,"71":2,"75":4,"78":4,"81":4,"97":1,"106":2,"116":1,"122":1,"171":1,"172":2,"176":1,"185":1}}],["images",{"2":{"47":1,"61":2,"62":1,"103":1,"181":1}}],["image",{"2":{"36":1,"103":2,"162":1,"181":2}}],["i",{"2":{"33":2,"51":3,"54":3,"82":3,"92":1,"99":1,"108":1,"117":1,"119":1,"122":2,"123":1,"147":1,"150":1,"172":2,"176":2,"177":1,"187":1}}],["info",{"2":{"122":4,"123":1,"176":4,"177":1}}],["information",{"2":{"33":2,"172":2}}],["int",{"2":{"114":1,"157":1}}],["interpreter",{"2":{"122":1,"176":1}}],["intended",{"2":{"62":2,"103":2,"181":2}}],["integration",{"2":{"22":1}}],["intelligent",{"2":{"22":1}}],["inc",{"2":{"113":1,"156":1}}],["included",{"2":{"112":1,"155":1}}],["include",{"2":{"112":1,"114":1,"155":1,"157":1}}],["inside",{"2":{"112":2,"155":2}}],["institute",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["installation",{"2":{"33":1,"172":1}}],["install",{"2":{"32":2,"33":3,"38":5,"41":1,"46":1,"61":1,"62":1,"98":2,"103":2,"107":3,"113":2,"114":1,"117":1,"147":1,"156":2,"157":1,"159":4,"164":5,"167":1,"172":3,"174":1,"181":2,"186":2}}],["index",{"2":{"69":2,"113":1,"114":1,"156":1,"157":1}}],["in",{"2":{"33":1,"38":1,"112":1,"123":1,"155":1,"164":1,"172":1,"177":1}}],["iot",{"2":{"6":1,"191":1}}],["开始编译",{"2":{"150":1}}],["开始使用",{"2":{"64":1}}],["开始使用设备",{"2":{"13":1,"195":1}}],["开始",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1}}],["开始的第一步",{"2":{"14":1,"197":1}}],["开源使其能够更加方便的运用在不同的领域",{"2":{"6":1,"191":1}}],["开发环境目前更多的是x86",{"2":{"125":1}}],["开发环境",{"2":{"14":1,"125":1,"197":1}}],["开发者在进行risc",{"2":{"125":1}}],["开发者往往都有自己的开发需求",{"2":{"118":1}}],["开发者管理",{"2":{"23":1}}],["开发者社区",{"0":{"23":1}}],["开发者交流社区则提供文档和教程",{"2":{"17":1}}],["开发者购买了",{"2":{"16":1}}],["开发者可以共享和下载与risc",{"2":{"23":2}}],["开发者可以发布问题",{"2":{"23":1}}],["开发者可以在ide中方便地查阅文档和学习相关知识",{"2":{"22":1}}],["开发者可以在ide中设置断点",{"2":{"22":1}}],["开发者可以指定任何常用的",{"2":{"16":1}}],["开发者可以使用模拟器或者在",{"2":{"9":1}}],["开发者可以轻松的通过",{"2":{"9":1}}],["开发者提供开发的便捷",{"2":{"5":1,"190":1}}],["开发者提供一个完整的",{"2":{"15":1,"24":1}}],["开发者提供一个完善",{"2":{"5":1,"190":1}}],["开发者提供一个便捷",{"2":{"5":1,"190":1}}],["开发者快速上手",{"2":{"0":1,"10":1}}],["开发者获取指定开发板可用的os并可方便的安装os的安装",{"2":{"0":1}}],["开发资料和相关工具",{"2":{"0":1,"10":1}}],["开发板以",{"2":{"180":1}}],["开发板和应用场景",{"2":{"145":1}}],["开发板安装操作系统",{"0":{"178":1},"1":{"179":1,"180":1,"181":1,"182":1}}],["开发板安装操作系统的功能",{"2":{"103":1,"181":1}}],["开发板安装镜像都只需要执行",{"2":{"103":1,"181":1}}],["开发板上运行的过程",{"2":{"183":1}}],["开发板上本地编译并运行",{"2":{"94":1}}],["开发板上对自身的程序进行编写以及调试",{"2":{"9":1}}],["开发板",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"180":1,"181":1,"184":1}}],["开发板系统的安装引导",{"0":{"43":1,"169":1},"2":{"46":1,"101":1}}],["开发板系统安装引导程序",{"2":{"0":1}}],["开发板或模组",{"2":{"16":1}}],["开发板镜像相关信息以及下载",{"2":{"10":1}}],["开发板对应的演示程序",{"2":{"0":1,"10":1}}],["开发板适用镜像信息维护与下载",{"2":{"0":1}}],["相关的系统刷写问题可以访问对应开发板官网以获取针对性的帮助",{"2":{"182":1}}],["相关链接",{"2":{"145":1}}],["相关介绍内容",{"2":{"4":1,"189":1}}],["相貌",{"2":{"133":1}}],["相对路径目录名",{"2":{"113":1,"156":1}}],["相比",{"2":{"6":1,"191":1}}],["是否可用",{"2":{"186":1}}],["是第一级别入口",{"2":{"23":1}}],["是第五代精简指令集",{"2":{"6":1,"191":1}}],["是一个由",{"2":{"190":1}}],["是一个由中科院软件所",{"2":{"5":1}}],["是一个旨在提供给一个一体化集成开发环境的产品计划",{"2":{"15":1,"24":1}}],["是一个为",{"2":{"9":1}}],["背景",{"0":{"6":1,"191":1},"2":{"189":1}}],["为要读取的新闻条目的序号或",{"2":{"159":1}}],["为确保",{"2":{"151":1}}],["为新用户提供了一些代码示例",{"2":{"150":1}}],["为新人用户提供了一些代码示例",{"2":{"118":1}}],["为使得这部分新的指令集扩展能够充分运用",{"2":{"146":1}}],["为了充分利用这些新的指令集扩展",{"2":{"124":1}}],["为了方便验证risc",{"2":{"120":1}}],["为隔离化编译创建虚拟环境",{"2":{"119":1,"150":1}}],["为激活编译环境用的脚本",{"2":{"113":1,"156":1}}],["为任一型号的",{"2":{"103":1,"181":1}}],["为各种不同厂家",{"2":{"101":1}}],["为risc",{"0":{"101":1,"127":1},"1":{"102":1,"103":1},"2":{"125":1}}],["为例",{"2":{"95":1,"103":1,"104":1,"150":1,"181":1,"183":1}}],["为",{"0":{"178":1},"1":{"179":1,"180":1,"181":1,"182":1},"2":{"92":1,"150":1}}],["为方便您及时了解",{"2":{"61":3}}],["为设备安装系统",{"2":{"43":1,"169":1}}],["为全球的",{"2":{"5":1,"190":1}}],["为什么会有",{"2":{"4":1,"189":1}}],["以确保对于不同版本编译工具链以及库文件进行环境隔离",{"2":{"150":1}}],["以满足其特定的需求",{"2":{"124":1}}],["以满足不同开发者的需求",{"2":{"22":1}}],["以隔离不同版本的编译工具链及库文件等",{"2":{"119":1}}],["以",{"2":{"103":1,"181":1}}],["以上场景介绍了",{"2":{"174":1}}],["以上",{"2":{"103":1,"181":1}}],["以开源基准测试程序",{"2":{"95":1,"104":1,"183":1}}],["以下任选",{"2":{"180":1}}],["以下内容为表格内容详细说明",{"2":{"159":1}}],["以下案例是使用ruyisdk搭建相关的开发或运行环境来实现的",{"2":{"94":1}}],["以下是本文相关内容",{"2":{"4":1,"189":1}}],["以获得更高的程序性能",{"2":{"91":1}}],["以提供更好的性能",{"2":{"124":1}}],["以提供更高的性能",{"2":{"124":1}}],["以提权",{"2":{"62":1}}],["以提高开发效率",{"2":{"22":1}}],["以支持在",{"2":{"88":1}}],["以支持",{"2":{"55":1}}],["以尝试重试安装该软件包",{"2":{"41":1,"167":1}}],["以增强开发环境的功能和灵活性",{"2":{"23":1}}],["以增强可读性和代码理解性",{"2":{"22":2}}],["以解决代码中的错误和问题",{"2":{"22":1}}],["以帮助你编写正确的代码",{"2":{"22":1}}],["以帮助开发者更轻松",{"2":{"22":1}}],["以帮助开发者学习和使用risc",{"2":{"22":1}}],["以帮助开发者编写更高效和可靠的risc",{"2":{"22":1}}],["以帮助开发者编写正确的代码",{"2":{"22":1}}],["以帮助开发者改善代码的结构和可维护性",{"2":{"22":1}}],["以进行程序的调试和分析",{"2":{"22":1}}],["以便开发者能够方便地搜索",{"2":{"22":1}}],["以便进行快速的实验和调试",{"2":{"22":1}}],["以便在ide中直接运行和调试python代码",{"2":{"22":1}}],["以便快速插入常用代码块",{"2":{"22":1}}],["以便快速定位和浏览代码",{"2":{"22":2}}],["以便调试和排查代码中的问题",{"2":{"22":1}}],["以加快编码速度和减少拼写错误",{"2":{"22":2}}],["以及",{"2":{"147":1}}],["以及人身或政治攻击",{"2":{"134":1}}],["以及不同risc",{"2":{"85":1}}],["以及处理依赖关系",{"2":{"22":1}}],["以及我们会举办一定的线下活动获得来自用户的反馈",{"2":{"10":1}}],["以及建设并运营一个完善的社区以便开发者交流",{"2":{"5":1,"190":1}}],["成为主流架构",{"2":{"5":1,"190":1}}],["其它高级语言",{"2":{"128":1}}],["其他说明",{"0":{"148":1,"173":1,"180":1,"182":1}}],["其他语言翻译参见",{"2":{"143":1}}],["其他有理由认定为违反职业操守的不当行为",{"2":{"134":1}}],["其他均为工具链二进制",{"2":{"113":1,"156":1}}],["其他开发者可以回答问题或提供解决方案",{"2":{"23":1}}],["其他开发者可以回复和讨论",{"2":{"23":1}}],["其他开发者可以浏览和评论这些文章",{"2":{"23":1}}],["其输入参数可以参考",{"2":{"91":1}}],["其默认参数在",{"2":{"91":2}}],["其中",{"2":{"36":1,"162":1}}],["其中涵盖多种操作系统",{"2":{"10":1}}],["其最终目标是希望为",{"2":{"5":1,"190":1}}],["其提供了相关最新的硬件信息",{"2":{"5":1,"190":1}}],["如嵌入式系统",{"2":{"146":1}}],["如上表",{"2":{"146":1}}],["如物理或电子邮件地址",{"2":{"134":1}}],["如java程序",{"2":{"128":1}}],["如安装编译工具链",{"2":{"125":1}}],["如编译器",{"2":{"83":1}}],["如编译工具链有不同厂商发布的",{"2":{"20":1}}],["如包管理器能力迭代",{"2":{"27":1}}],["如代码示例",{"2":{"23":1}}],["如果想安装某个历史版本的",{"2":{"164":1}}],["如果想安装某个历史版本的gnu",{"2":{"38":1}}],["如果您有更好的建议请通过以下的联系方式与我们取得联系",{"2":{"130":1}}],["如果您使用",{"2":{"61":3}}],["如果无可自己创建",{"2":{"116":1,"173":1}}],["如果软件源中有新增的新闻条目",{"2":{"61":3}}],["如果软件包显示",{"2":{"36":1,"162":1}}],["如果在意这个问题请跳过这个版本",{"2":{"52":1}}],["如果希望删除所有缓存和安装了的软件包以实现干净的卸载",{"2":{"42":1,"168":1}}],["如果希望",{"2":{"42":2,"168":2}}],["如果遇到技术问题",{"2":{"22":1}}],["如果需要提高图像识别程序的性能",{"2":{"22":1}}],["如果代码需要调试",{"2":{"17":1}}],["如跳转到函数的定义处",{"2":{"22":1}}],["如跳转到定义处",{"2":{"22":1}}],["如图像识别算法的逻辑和实现",{"2":{"22":1}}],["如python是pip",{"2":{"22":1}}],["如python具有交互式解释器",{"2":{"22":1}}],["如python开发中通常会使用虚拟环境",{"2":{"22":1}}],["如python需要在运行时依赖于相应的解释器或语言虚拟机",{"2":{"22":1}}],["如cpython",{"2":{"22":1}}],["如git",{"2":{"22":1}}],["如gnu和llvm目前有三种类型",{"2":{"20":1}}],["如重命名",{"2":{"22":1}}],["如类型",{"2":{"22":2}}],["如基于",{"2":{"10":1}}],["如",{"2":{"5":1,"38":1,"85":1,"151":1,"164":1,"190":1}}],["软件",{"2":{"179":1}}],["软件仓库中下载",{"2":{"122":1,"176":1}}],["软件环境",{"2":{"96":1,"105":1,"184":1}}],["软件包",{"2":{"42":2,"69":1,"168":2}}],["软件包安装进程或做了其他非预期操作",{"2":{"41":1,"167":1}}],["软件包的功能",{"2":{"41":1,"167":1}}],["软件包前缀表示分类",{"2":{"36":1,"162":1}}],["软件包缓存将存放在用户目录中",{"2":{"34":1,"159":1,"160":1}}],["软件下载次数",{"2":{"23":1}}],["软件源中下载",{"2":{"122":1,"176":1}}],["软件源下载编译",{"2":{"118":1}}],["软件源内包的元数据包含并不限于",{"2":{"20":1}}],["软件源的管理内容包括以下内容",{"2":{"20":1}}],["软件更新",{"2":{"16":1}}],["软件开发等领域都有应用",{"2":{"6":1,"191":1}}],["软件层面提供了镜像",{"2":{"5":1,"190":1}}],["软件支持",{"2":{"5":1,"190":1}}],["介绍",{"0":{"5":1,"15":1,"190":1},"2":{"189":1}}],["我们建议在虚拟环境中进行编译操作",{"2":{"150":1}}],["我们建议创建虚拟环境并在虚拟环境中进行编译操作",{"2":{"119":1}}],["我们的准则",{"0":{"134":1}}],["我们的承诺",{"0":{"133":1}}],["我们承诺以有助于建立开放",{"2":{"133":1}}],["我们承诺使社区参与者不受骚扰",{"2":{"133":1}}],["我们为",{"2":{"61":3}}],["我们希望",{"2":{"22":1}}],["我们提供了如下内容",{"2":{"8":1}}],["我该从何开始",{"2":{"4":1,"189":1}}],["我可以在什么设备上运行",{"2":{"4":1,"189":1}}],["的软件源中获取源码",{"2":{"150":1}}],["的裸机工具链",{"2":{"124":1,"145":1}}],["的更多命令和命令具体使用方法详见",{"2":{"121":1}}],["的操作参考如下",{"2":{"114":1,"157":1}}],["的编译工具链",{"2":{"186":1}}],["的编译",{"2":{"95":1,"104":1,"183":1}}],["的向量化特性",{"2":{"91":1}}],["的各个扩展与新特性",{"2":{"90":1}}],["的源代码翻译成",{"2":{"85":1}}],["的核心组件之一",{"2":{"85":1}}],["的依赖",{"2":{"70":1}}],["的位置",{"2":{"61":1}}],["的开发动态",{"2":{"61":3}}],["的开发面临的问题在于相关资讯没有统一的平台",{"2":{"6":1,"191":1}}],["的虚拟环境",{"2":{"150":1}}],["的虚拟环境十分类似",{"2":{"40":1,"166":1}}],["的虚拟环境类似",{"2":{"37":1,"110":1,"153":1,"163":1}}],["的方式公开",{"2":{"27":1}}],["的不断完善",{"2":{"26":1}}],["的支持",{"2":{"22":1,"61":4}}],["的特性",{"2":{"22":1}}],["的组成",{"2":{"17":1}}],["的目标",{"0":{"16":1}}],["的",{"2":{"10":1,"38":1,"54":1,"55":1,"123":1,"164":1,"177":1}}],["的出现就是为了解决这些问题",{"2":{"6":1,"191":1}}],["的原理是什么",{"2":{"4":1,"189":1}}],["的信息维护和下载",{"2":{"0":1,"10":1}}],["什么是",{"2":{"4":1,"189":1}}],["欢迎来到",{"2":{"4":1,"189":1}}],["html",{"2":{"143":1}}],["https",{"2":{"33":2,"44":1,"49":6,"51":1,"53":6,"54":1,"56":6,"58":6,"60":3,"64":3,"67":3,"69":2,"71":2,"75":4,"78":6,"81":6,"82":1,"85":1,"86":1,"91":1,"97":1,"106":1,"122":1,"143":3,"172":2,"176":1,"185":1}}],["h>",{"2":{"114":1,"157":1}}],["have",{"2":{"103":1,"181":1}}],["hand",{"2":{"103":1,"181":1}}],["hardware",{"2":{"103":1,"181":1}}],["has",{"2":{"103":1,"181":1}}],["heap",{"2":{"123":2,"177":2}}],["headless",{"2":{"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1,"181":1}}],["here",{"2":{"123":1,"177":1}}],["helper",{"2":{"131":1}}],["help",{"2":{"33":3,"62":2,"103":2,"106":1,"107":1,"112":2,"155":3,"172":3,"181":2}}],["hello",{"0":{"4":1,"189":1},"1":{"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1},"2":{"114":2,"157":2}}],["host",{"2":{"36":1,"62":1,"103":1,"162":1,"181":1}}],["home",{"2":{"34":3,"52":1,"55":1,"61":2,"69":2,"98":1,"122":1,"160":3,"176":1,"186":1}}],["h",{"2":{"33":1,"35":2,"46":1,"98":1,"112":3,"119":1,"150":1,"155":3,"159":2,"161":2,"172":1,"186":1}}],["highlighting",{"2":{"22":1}}],["hifive",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1,"181":1,"193":1}}],["bpi",{"2":{"193":1}}],["bit",{"2":{"122":1,"123":1,"176":1,"177":1,"193":1}}],["binaries",{"2":{"98":1,"186":1}}],["binary",{"2":{"36":1,"162":1}}],["binutils",{"0":{"86":1},"2":{"86":1}}],["bin",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"98":3,"106":1,"107":2,"113":3,"114":2,"119":1,"122":1,"150":1,"156":3,"157":2,"172":1,"176":1,"185":1,"186":3}}],["bfd",{"2":{"113":1,"114":1,"156":1,"157":1}}],["bgcc",{"2":{"99":1,"108":1,"119":1,"122":1,"150":1,"176":1,"187":1}}],["b",{"2":{"91":1,"99":1,"108":1,"119":1,"122":1,"150":1,"176":1,"187":1}}],["branch",{"2":{"69":1}}],["by",{"2":{"62":1,"103":2,"181":2}}],["buildid",{"2":{"122":1,"123":1,"176":1,"177":1}}],["buildroot",{"2":{"51":8,"54":8,"65":4,"68":4,"73":4,"76":6,"79":6,"82":8}}],["but",{"2":{"62":1,"103":1,"181":1}}],["blobs",{"2":{"61":1}}],["beaglev",{"2":{"193":2}}],["beforehand",{"2":{"62":1,"103":1,"181":1}}],["be",{"2":{"38":1,"62":2,"103":2,"164":1,"181":2}}],["beta",{"2":{"33":2,"106":1,"172":2}}],["bananapi",{"2":{"193":1}}],["base",{"2":{"51":8,"54":8,"65":7,"68":8,"73":8,"76":8,"79":8,"82":8}}],["bashriscv64",{"2":{"107":1}}],["bashruyi",{"2":{"59":1,"63":1,"97":3,"98":3,"103":1,"106":3,"107":6,"109":2,"181":1,"185":3,"186":3}}],["bashls",{"2":{"107":1}}],["bashwget",{"2":{"106":1}}],["bashfile",{"2":{"99":1,"108":1,"187":1}}],["bashmake",{"2":{"99":1,"108":1,"187":1}}],["bashmkdir",{"2":{"98":1,"107":1,"186":1}}],["bashsed",{"2":{"99":1,"108":1,"187":1}}],["bash",{"2":{"46":1,"97":1,"98":1,"100":1,"112":1,"113":2,"114":2,"116":1,"117":1,"118":1,"119":1,"120":1,"122":4,"123":3,"150":2,"151":1,"155":1,"156":2,"157":2,"176":4,"177":3,"185":1,"186":1,"188":1}}],["bash$",{"2":{"3":1,"14":1,"32":2,"33":2,"34":1,"35":1,"36":2,"37":1,"38":3,"39":1,"40":1,"42":4,"43":1,"49":4,"53":4,"56":4,"58":4,"60":3,"61":4,"62":1,"64":3,"67":3,"69":1,"71":2,"75":4,"78":4,"81":4,"110":1,"112":1,"113":5,"114":4,"122":1,"123":1,"127":1,"153":1,"155":1,"156":5,"157":4,"160":1,"161":1,"162":2,"163":1,"164":3,"165":1,"166":1,"168":4,"169":1,"172":2,"176":1,"177":1,"197":1}}],["baremetal",{"2":{"37":1,"110":1,"111":1,"153":1,"154":1,"163":1}}],["board",{"2":{"36":1,"61":2,"103":2,"162":1,"181":2}}],["box",{"2":{"1":1,"11":1,"51":4,"54":4,"62":1,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1,"181":1,"193":1}}],["bzip2",{"2":{"32":2}}],["performance",{"2":{"123":1,"177":1}}],["performed",{"2":{"122":1,"123":1,"176":1,"177":1}}],["polarfire",{"2":{"193":1}}],["positional",{"2":{"112":1,"155":1}}],["port",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1,"150":1,"176":1,"177":1,"187":1}}],["portme",{"2":{"99":1,"108":1,"119":1,"122":2,"123":1,"150":1,"176":2,"177":1,"187":1}}],["pc上实现从",{"2":{"104":1}}],["pc",{"2":{"102":1,"179":1,"180":2}}],["pc+linux",{"2":{"94":1}}],["p=gcc",{"2":{"91":1}}],["pick",{"2":{"62":1,"103":2,"181":2}}],["pine64",{"2":{"54":4,"55":1}}],["pioneer",{"2":{"1":1,"11":1,"51":11,"54":11,"62":1,"65":11,"68":11,"73":11,"76":11,"79":11,"82":11,"103":1,"181":1,"193":1}}],["please",{"2":{"62":1,"103":3,"123":1,"177":1,"181":3}}],["pleasure",{"2":{"62":1,"103":1,"181":1}}],["plugdev",{"2":{"51":2,"54":2}}],["platformio",{"2":{"51":4,"54":4}}],["plctxthead",{"2":{"98":1,"99":1,"114":33,"157":33,"186":1,"187":1}}],["plct",{"2":{"20":1,"36":6,"98":5,"111":6,"112":7,"114":2,"122":3,"123":1,"124":4,"145":4,"154":6,"155":7,"157":2,"162":6,"176":3,"177":1,"186":5,"190":1}}],["purpose",{"2":{"113":1,"156":1}}],["purge",{"2":{"42":2,"97":1,"106":1,"159":2,"168":2,"185":1}}],["putchar",{"2":{"114":1,"157":1}}],["put",{"2":{"103":1,"123":1,"177":1,"181":1}}],["public",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["particular",{"2":{"113":1,"156":1}}],["param=riscv",{"2":{"91":2}}],["parameters",{"2":{"123":1,"177":1}}],["parameter",{"2":{"38":1,"164":1}}],["path",{"2":{"69":1,"112":1,"155":1,"185":1}}],["packages",{"2":{"33":2,"36":1,"62":1,"69":3,"103":2,"162":1,"172":2,"181":2}}],["package",{"2":{"33":3,"98":1,"107":1,"112":3,"122":2,"155":3,"172":3,"176":2,"186":1}}],["preference=用于告知编译器输入向量的长度",{"2":{"91":1}}],["prereleases",{"2":{"69":1}}],["prerelease",{"2":{"36":2,"57":1,"162":2}}],["pre",{"2":{"36":1,"69":1,"162":1}}],["proceed",{"2":{"103":1,"181":1}}],["pro",{"2":{"51":4,"54":4,"82":4,"193":2}}],["project",{"2":{"49":2,"53":2,"56":2,"58":2,"78":2,"81":2}}],["profiles",{"2":{"37":2,"46":1,"92":1,"98":1,"107":1,"110":2,"153":2,"159":1,"163":2,"186":1}}],["profile",{"2":{"33":1,"111":1,"112":3,"113":1,"154":1,"155":3,"156":1,"172":1}}],["provisioning",{"2":{"62":1,"103":1,"181":1}}],["provision查询",{"2":{"11":1}}],["provision",{"2":{"3":1,"14":1,"43":1,"62":2,"103":1,"112":1,"127":1,"155":1,"159":1,"169":1,"181":1,"193":1,"197":1}}],["provision命令查询",{"2":{"1":1}}],["printf",{"2":{"114":1,"157":1}}],["print",{"2":{"33":2,"172":2}}],["pygit2",{"2":{"32":1,"55":1,"70":1,"72":1}}],["python等",{"2":{"128":1}}],["python",{"2":{"22":1,"40":1,"49":1,"51":2,"53":1,"54":2,"56":1,"58":1,"65":2,"68":2,"73":2,"76":2,"78":1,"79":2,"81":1,"82":2,"113":1,"153":1,"156":1,"159":1,"166":1}}],["png",{"2":{"17":1}}],["crb",{"2":{"193":1}}],["crcfinal",{"2":{"123":1,"177":1}}],["crcstate",{"2":{"123":1,"177":1}}],["crcmatrix",{"2":{"123":1,"177":1}}],["crclist",{"2":{"123":1,"177":1}}],["c程序",{"2":{"128":1}}],["cc",{"2":{"113":1,"114":1,"156":1,"157":1}}],["cd",{"2":{"97":1,"98":1,"107":1,"114":1,"122":1,"157":1,"176":1,"185":1,"186":1}}],["cluster",{"2":{"51":5,"54":5,"82":5,"193":1}}],["cli",{"2":{"21":1}}],["certifi",{"2":{"49":3,"53":3,"56":3,"58":3,"78":3,"81":3}}],["cat",{"2":{"69":1,"114":1,"157":1}}],["card",{"2":{"51":3,"54":3,"76":3,"79":3,"82":3}}],["canmv",{"2":{"51":2,"54":2,"68":2,"73":2,"76":2,"79":2,"82":2,"193":1}}],["can",{"2":{"49":1,"53":1,"56":1,"58":1,"61":1,"78":1,"81":1}}],["canaan",{"2":{"1":1,"11":1,"51":7,"54":7,"68":4,"73":4,"76":4,"79":4,"82":7,"103":1,"181":1,"193":1}}],["cache",{"2":{"34":3,"69":1,"122":1,"159":1,"160":3,"176":1}}],["currently",{"2":{"62":1,"103":1,"181":1}}],["current",{"2":{"33":1,"36":1,"122":2,"162":1,"172":1,"176":2}}],["c",{"0":{"88":1},"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"85":1,"88":2,"89":1,"92":1,"113":1,"114":3,"122":6,"123":6,"156":1,"157":3,"172":1,"176":6,"177":6}}],["cpp",{"2":{"113":1,"114":1,"156":1,"157":1}}],["cpu",{"2":{"90":1}}],["cp",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"172":1,"185":1}}],["cn",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1,"131":1,"172":1,"176":1}}],["choose",{"2":{"103":1,"181":1}}],["choice",{"2":{"62":1,"103":4,"181":4}}],["chosen",{"2":{"33":1,"103":1,"172":1,"181":1}}],["ch573f",{"2":{"193":1}}],["ch592x",{"2":{"51":4,"54":4,"193":1}}],["ch582f",{"2":{"51":4,"54":4,"193":1}}],["ch32v307vct6",{"2":{"51":1,"54":1}}],["ch32v307wcu6",{"2":{"51":1,"54":1}}],["ch32v307rct6",{"2":{"51":1,"54":1}}],["ch32v307",{"2":{"51":10,"54":10,"193":1}}],["ch32v305rbt6",{"2":{"51":1,"54":1}}],["ch32v305gbu6",{"2":{"51":1,"54":1}}],["ch32v305fbp6",{"2":{"51":1,"54":1}}],["ch32v305",{"2":{"51":10,"54":10,"193":1}}],["ch32v303vct6",{"2":{"51":1,"54":1}}],["ch32v303rct6",{"2":{"51":1,"54":1}}],["ch32v303rbt6",{"2":{"51":1,"54":1}}],["ch32v303cbt6",{"2":{"51":1,"54":1}}],["ch32v303",{"2":{"51":13,"54":13,"193":1}}],["ch32v208wbu6",{"2":{"51":1,"54":1}}],["ch32v208rbt6",{"2":{"51":1,"54":1}}],["ch32v208gbu6",{"2":{"51":1,"54":1}}],["ch32v208cbu6",{"2":{"51":1,"54":1}}],["ch32v208",{"2":{"51":13,"54":13,"193":1}}],["ch32v203rbt6",{"2":{"51":1,"54":1}}],["ch32v203k8t6",{"2":{"51":1,"54":1}}],["ch32v203k6t6",{"2":{"51":1,"54":1}}],["ch32v203g8r6",{"2":{"51":1,"54":1}}],["ch32v203g6u6",{"2":{"51":1,"54":1}}],["ch32v203f8u6",{"2":{"51":1,"54":1}}],["ch32v203f8p6",{"2":{"51":1,"54":1}}],["ch32v203f6p6",{"2":{"51":1,"54":1}}],["ch32v203c8u6",{"2":{"51":1,"54":1}}],["ch32v203c8t6",{"2":{"51":1,"54":1}}],["ch32v203c6t6",{"2":{"51":1,"54":1}}],["ch32v203",{"2":{"51":34,"54":34,"193":1}}],["ch32v103r8t6",{"2":{"51":1,"54":1}}],["ch32v103c8u6",{"2":{"51":1,"54":1}}],["ch32v103c8t6",{"2":{"51":1,"54":1}}],["ch32v103c6t6",{"2":{"51":1,"54":1}}],["ch32v103",{"2":{"51":17,"54":17,"193":1}}],["chinese",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["chisel等不同的语言类型",{"2":{"22":1}}],["chmod",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1,"172":1,"185":1}}],["checking",{"2":{"22":1}}],["c++filt",{"2":{"113":1,"114":1,"156":1,"157":1}}],["c++源代码文件",{"2":{"22":1}}],["c++",{"2":{"22":1,"85":1,"113":1,"114":1,"156":1,"157":1}}],["covenant",{"2":{"143":4}}],["copying",{"2":{"113":1,"156":1}}],["copyright",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":1,"156":1,"172":1}}],["correct",{"2":{"123":1,"177":1}}],["corresponding",{"2":{"103":1,"181":1}}],["core",{"2":{"99":1,"108":1,"119":1,"122":7,"123":6,"150":1,"176":7,"177":6,"187":1}}],["coremark可执行程序",{"2":{"100":1,"109":1,"120":1}}],["coremark",{"0":{"109":1,"122":1,"176":1,"187":1},"1":{"123":1,"177":1},"2":{"36":1,"95":2,"98":3,"99":1,"100":1,"104":2,"107":3,"108":1,"109":1,"119":1,"120":1,"122":15,"123":11,"150":4,"151":2,"162":1,"176":15,"177":11,"183":2,"186":4,"187":4,"188":2}}],["collection",{"0":{"85":1}}],["conduct",{"2":{"143":2}}],["conditions",{"2":{"113":1,"156":1}}],["conda等",{"2":{"22":1}}],["config",{"2":{"69":6,"116":2,"173":2}}],["configurations",{"2":{"103":1,"181":1}}],["configuration",{"2":{"62":2,"103":2,"181":2}}],["configured",{"2":{"33":2,"172":2}}],["contributor",{"2":{"143":4}}],["control",{"2":{"22":1}}],["contact",{"2":{"131":1}}],["continue",{"2":{"62":1,"103":1,"181":1}}],["console",{"2":{"51":5,"54":5,"82":5,"193":1}}],["code",{"2":{"22":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"123":1,"143":2,"177":1}}],["compile",{"2":{"122":1,"123":1,"176":1,"177":1}}],["compiler",{"0":{"85":1},"2":{"123":2,"177":2}}],["completion",{"2":{"22":1}}],["commits",{"2":{"135":1}}],["comment",{"2":{"135":1}}],["commands",{"2":{"62":1,"103":1,"181":1}}],["community",{"0":{"10":1}}],["com",{"2":{"44":1,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"69":1,"78":1,"81":1,"82":1,"97":1,"185":1}}],["cisc",{"2":{"6":1,"191":1}}],["cm",{"2":{"1":1,"11":1,"51":3,"54":3,"76":3,"79":3,"82":3}}],["m0s",{"2":{"193":1}}],["m0p",{"2":{"193":1}}],["m0",{"2":{"193":1}}],["mq",{"2":{"193":2}}],["m",{"2":{"92":1}}],["m8",{"2":{"91":1}}],["m4",{"2":{"91":1}}],["m2",{"2":{"91":1}}],["m1s",{"2":{"193":1}}],["m1",{"2":{"91":1}}],["mkdir",{"2":{"69":1,"122":1,"176":1}}],["most",{"2":{"62":1,"103":1,"181":1}}],["mode=",{"2":{"51":2,"54":2}}],["mozilla",{"2":{"49":2,"53":2,"56":2,"58":2,"78":2,"81":2,"143":1}}],["mpl",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["md",{"2":{"39":1,"165":1}}],["myon",{"2":{"34":1,"122":1,"160":1,"176":1}}],["memory",{"2":{"123":2,"177":2}}],["merchantability",{"2":{"113":1,"156":1}}],["mega",{"2":{"51":4,"54":4,"82":4,"193":1}}],["message",{"2":{"33":1,"112":1,"155":1,"172":1}}],["meles",{"2":{"1":1,"11":1,"51":5,"54":5,"77":1,"79":5,"82":5,"193":1}}],["mirror",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1,"172":1,"176":1}}],["milkv",{"0":{"123":1,"177":1},"2":{"37":1,"76":1,"77":1,"110":1,"111":1,"112":3,"122":10,"123":7,"153":1,"154":1,"155":3,"163":1,"176":10,"177":7}}],["milk",{"2":{"1":7,"11":7,"51":35,"54":35,"62":2,"65":18,"68":18,"73":18,"76":30,"79":35,"82":35,"103":2,"181":2,"193":6}}],["mangopi",{"2":{"193":2}}],["managing",{"2":{"33":1,"172":1}}],["manage",{"2":{"33":1,"172":1}}],["manager",{"2":{"33":1,"172":1}}],["management",{"2":{"22":1}}],["matrix",{"2":{"122":1,"123":1,"176":1,"177":1}}],["match",{"2":{"38":1,"164":1}}],["mak",{"2":{"99":1,"108":1,"119":1,"122":1,"150":1,"176":1,"187":1}}],["make",{"2":{"62":1,"103":1,"119":1,"122":1,"123":1,"150":1,"176":1,"177":1,"181":1}}],["makes",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["mabi",{"2":{"91":1}}],["march=rv64gc",{"2":{"91":1}}],["march=rv64gcv",{"2":{"91":1}}],["march",{"2":{"91":3}}],["mars",{"2":{"1":2,"11":2,"51":6,"54":6,"76":6,"79":6,"82":6,"193":1}}],["main",{"2":{"69":1,"114":1,"122":1,"123":1,"157":1,"176":1,"177":1}}],["maix",{"2":{"51":3,"54":3,"82":3,"193":1}}],["svnapot",{"2":{"92":1}}],["svinval",{"2":{"92":1}}],["spent",{"2":{"122":1,"176":1}}],["speed",{"2":{"122":2,"176":2}}],["specifier",{"2":{"112":3,"155":3}}],["spec",{"2":{"91":1}}],["spike",{"2":{"20":1}}],["scp",{"2":{"123":1,"177":1}}],["scalable输入",{"2":{"91":1}}],["sciences",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["stu",{"2":{"193":1}}],["str=",{"2":{"122":1,"123":1,"176":1,"177":1}}],["stripped",{"2":{"122":1,"123":1,"176":1,"177":1}}],["strip",{"2":{"113":1,"114":1,"156":1,"157":1}}],["strings",{"2":{"113":1,"114":1,"156":1,"157":1}}],["stdio",{"2":{"114":1,"157":1}}],["storage",{"2":{"62":1,"103":1,"181":1}}],["statically",{"2":{"123":1,"177":1}}],["static",{"2":{"123":5,"177":5}}],["state",{"2":{"52":1,"55":1,"61":3,"122":1,"123":1,"176":1,"177":1}}],["star",{"2":{"193":1}}],["star64",{"2":{"54":4,"55":1,"193":1}}],["starfive",{"2":{"1":2,"11":2,"51":8,"54":8,"65":8,"68":8,"73":8,"76":8,"79":8,"82":8,"103":2,"181":2}}],["sh",{"2":{"123":1,"177":1}}],["sha1",{"2":{"122":1,"123":1,"176":1,"177":1}}],["share",{"2":{"61":1,"98":1,"186":1}}],["should",{"2":{"38":1,"62":2,"103":2,"164":1,"181":2}}],["show",{"2":{"33":1,"112":1,"155":1,"172":1}}],["sd",{"2":{"51":3,"54":3,"76":3,"79":3,"82":3,"180":1}}],["sdk",{"2":{"51":81,"54":81,"65":4,"68":6,"73":6,"76":10,"79":10,"82":15}}],["slug",{"2":{"36":7,"162":7}}],["soc",{"2":{"193":1}}],["so",{"2":{"62":1,"103":1,"122":1,"176":1,"181":1}}],["somehow",{"2":{"62":1,"103":1,"181":1}}],["some",{"2":{"62":1,"103":1,"181":1}}],["sourceware",{"2":{"86":1}}],["sources",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"113":1,"156":1}}],["source",{"2":{"36":3,"113":3,"156":3,"162":3}}],["software",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":2,"156":2,"172":1}}],["sec",{"2":{"123":1,"177":1}}],["secs",{"2":{"123":1,"177":1}}],["sed",{"2":{"119":1,"122":1,"150":1,"176":1}}],["seedcrc",{"2":{"123":1,"177":1}}],["see",{"2":{"113":1,"123":1,"156":1,"177":1}}],["server",{"2":{"51":1,"54":1,"73":1,"76":1,"79":1,"82":1}}],["self",{"2":{"33":2,"42":4,"46":1,"97":1,"106":1,"159":4,"168":4,"172":2,"185":1}}],["sense",{"2":{"22":1,"193":1}}],["such",{"2":{"62":1,"103":1,"181":1}}],["subsystem==",{"2":{"51":2,"54":2}}],["subcommands",{"2":{"33":2,"172":2}}],["sudo",{"2":{"32":2,"33":1,"49":3,"51":1,"53":3,"54":1,"56":3,"58":3,"60":2,"62":3,"64":2,"65":1,"67":2,"68":1,"71":1,"73":1,"75":3,"76":1,"78":3,"79":1,"81":3,"82":1,"97":2,"103":2,"106":1,"168":1,"172":1,"181":2,"185":2}}],["supported",{"2":{"62":1,"103":2,"181":2}}],["support",{"2":{"22":1}}],["sail",{"2":{"22":1}}],["snippet",{"2":{"22":1}}],["sysv",{"2":{"122":1,"123":1,"176":1,"177":1}}],["system",{"2":{"51":8,"54":8,"62":2,"65":7,"68":8,"73":8,"76":8,"79":8,"82":8,"103":3,"124":1,"145":1,"181":3}}],["sysroot为generic类型",{"2":{"119":1}}],["sysroot",{"2":{"20":1,"111":1,"112":12,"150":1,"154":1,"155":12,"186":1}}],["syntax",{"2":{"22":1}}],["size",{"2":{"113":1,"114":1,"123":1,"156":1,"157":1,"177":1}}],["sipeed这个环境中",{"2":{"98":1}}],["sipeed",{"2":{"1":2,"11":2,"37":1,"51":32,"54":32,"62":1,"65":11,"68":11,"73":11,"76":11,"79":11,"80":1,"82":32,"98":9,"103":10,"110":1,"111":1,"112":3,"114":1,"153":1,"154":1,"155":3,"157":1,"163":1,"181":10,"186":10,"193":5}}],["sifive",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1,"181":1}}],["s",{"2":{"1":1,"11":1,"33":1,"37":2,"49":2,"51":3,"53":2,"54":3,"56":2,"58":2,"61":1,"62":1,"76":3,"78":2,"79":3,"81":2,"82":3,"99":1,"103":1,"108":1,"110":2,"112":1,"119":1,"122":1,"143":1,"150":1,"153":2,"155":1,"163":2,"172":1,"176":1,"181":1,"187":1,"193":1}}],["kit",{"2":{"193":2}}],["k",{"2":{"92":1}}],["k510",{"2":{"51":3,"54":3,"82":3,"193":1}}],["k230",{"2":{"1":1,"11":1,"51":4,"54":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1,"181":1,"193":1}}],["kendryte",{"2":{"1":1,"11":1,"51":7,"54":7,"68":4,"73":4,"76":4,"79":4,"82":7,"103":1,"181":1}}],["data",{"2":{"123":2,"177":2}}],["dart",{"2":{"22":1}}],["dflags",{"2":{"122":1,"123":1,"176":1,"177":1}}],["dload",{"2":{"122":1,"176":1}}],["dump",{"2":{"113":2,"114":2,"156":2,"157":2}}],["duo",{"0":{"123":1,"177":1},"2":{"1":2,"11":2,"37":1,"51":10,"54":10,"62":1,"65":7,"68":7,"73":7,"76":10,"79":10,"82":10,"103":1,"110":1,"111":1,"112":2,"122":1,"123":5,"153":1,"154":1,"155":2,"163":1,"176":1,"177":5,"181":1,"193":3}}],["d",{"2":{"92":2}}],["dynamically",{"2":{"122":1,"176":1}}],["dynamic选项",{"2":{"91":1}}],["dynamic",{"2":{"91":1}}],["diterations=0",{"2":{"122":1,"123":1,"176":1,"177":1}}],["distfiles",{"2":{"122":1,"176":1}}],["dist",{"2":{"122":1,"176":1}}],["disk",{"2":{"62":1,"103":1,"181":1}}],["dir=linux64",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1,"150":1,"176":1,"177":1,"187":1}}],["directory",{"2":{"33":1,"122":1,"172":1,"176":1}}],["dongshanpi",{"2":{"193":2}}],["double",{"2":{"122":1,"123":1,"176":1,"177":1}}],["do",{"2":{"112":1,"155":1}}],["downloading",{"2":{"122":1,"176":1}}],["download",{"2":{"97":1,"103":1,"181":1,"185":1}}],["downloaded",{"2":{"62":1,"103":1,"181":1}}],["dock",{"2":{"193":3}}],["docs",{"2":{"86":1}}],["documentation",{"2":{"22":1,"51":71,"54":71,"76":1,"79":1,"82":5}}],["domain",{"2":{"69":1}}],["does",{"2":{"62":2,"103":2,"181":2}}],["ddr200t",{"2":{"193":1}}],["dd",{"2":{"51":33,"54":34,"62":2,"65":20,"68":25,"73":27,"76":30,"79":31,"82":33,"103":1,"181":1}}],["default",{"2":{"112":1,"155":1}}],["dest",{"2":{"112":2,"155":2}}],["desktop",{"2":{"51":2,"54":2,"76":2,"79":2,"82":2}}],["deactivate",{"2":{"109":1,"113":1,"114":1,"120":1,"122":1,"151":1,"156":1,"157":1,"176":1}}],["development",{"2":{"62":1,"103":1,"181":1}}],["devices",{"2":{"62":1,"103":1,"181":1}}],["device",{"2":{"1":1,"3":1,"11":1,"14":1,"43":1,"46":1,"59":1,"62":7,"63":1,"103":10,"127":1,"159":1,"169":1,"181":10,"193":1,"197":1}}],["demo",{"2":{"36":1,"39":1,"159":2,"162":1,"165":1}}],["debug",{"2":{"122":1,"123":1,"176":1,"177":1}}],["debugger",{"0":{"87":1}}],["debugging",{"2":{"22":1}}],["debian",{"2":{"10":1,"21":1,"22":1,"32":1,"51":4,"54":4,"68":1,"73":1,"76":3,"79":3,"82":4,"96":1,"184":1}}],["d1s",{"2":{"193":2}}],["d1",{"2":{"1":1,"11":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6,"103":1,"181":1}}],["支持香山南湖微架构",{"2":{"145":1}}],["支持了香山南湖微架构",{"2":{"124":1}}],["支持了",{"2":{"80":1}}],["支持了相应的用户体验",{"2":{"55":1}}],["支持展示新闻了",{"2":{"61":5}}],["支持",{"0":{"50":1},"2":{"85":1,"124":1,"145":1}}],["支持计划于2024年发布的sg2044和sg2380",{"2":{"29":1}}],["支持运行≥7个流行的linux发行版",{"2":{"29":1}}],["支持50多种risc",{"2":{"29":1}}],["支持插件系统",{"2":{"22":1}}],["支持c",{"2":{"22":1}}],["支持开发语言的语法高亮显示",{"2":{"22":1}}],["支持属性扩展",{"2":{"20":1}}],["支持多种",{"2":{"11":1}}],["支持在",{"2":{"10":1}}],["支持在risc",{"2":{"0":1}}],["支持的荔枝派",{"2":{"114":1,"157":1}}],["支持的命令",{"2":{"46":1}}],["支持的发行版平台",{"0":{"45":1}}],["支持的编译环境",{"2":{"40":1,"166":1}}],["支持的设备如下",{"2":{"11":1,"193":1}}],["支持的设备",{"0":{"11":1,"193":1},"2":{"5":2,"189":1}}],["支持的risc",{"0":{"1":1}}],["ranlib",{"2":{"113":2,"114":2,"156":2,"157":2}}],["raw",{"2":{"62":1,"103":1,"181":1}}],["ram",{"2":{"51":26,"54":26,"65":14,"68":14,"73":14,"76":14,"79":18,"82":26,"103":5,"181":5}}],["root",{"2":{"62":1,"77":1,"103":1,"123":3,"177":3,"181":1}}],["rootfs",{"2":{"20":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6}}],["rt",{"2":{"51":29,"54":29,"82":1}}],["rights",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["riscv",{"2":{"36":2,"40":2,"91":2,"107":2,"112":2,"114":2,"119":2,"124":3,"145":3,"150":2,"155":2,"157":2,"159":1,"162":2,"166":2}}],["riscv64",{"0":{"109":1},"2":{"33":1,"45":2,"49":4,"53":4,"56":4,"58":4,"60":4,"64":4,"67":4,"71":1,"74":1,"75":4,"78":4,"81":4,"94":2,"97":2,"98":2,"99":1,"108":1,"113":34,"114":33,"116":1,"119":1,"122":5,"123":1,"150":1,"156":34,"157":33,"171":1,"176":5,"177":1,"185":3,"186":2,"187":1,"188":1}}],["riscv64等",{"2":{"10":1}}],["risc",{"0":{"178":1},"1":{"179":1,"180":1,"181":1,"182":1},"2":{"0":2,"5":4,"6":2,"9":2,"10":6,"14":1,"15":1,"16":2,"21":1,"22":5,"24":1,"51":21,"54":20,"65":18,"68":20,"73":20,"76":20,"79":20,"80":1,"82":20,"83":2,"85":3,"86":1,"87":1,"88":1,"90":3,"91":2,"94":2,"95":1,"96":1,"102":1,"103":4,"104":1,"112":4,"114":1,"122":2,"123":1,"145":1,"147":1,"150":1,"151":1,"155":4,"157":1,"176":2,"177":1,"180":2,"181":5,"183":1,"184":1,"190":4,"191":2,"197":1}}],["rules",{"2":{"123":1,"177":1}}],["run",{"2":{"62":1,"103":1,"123":2,"177":2,"181":1}}],["running",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["rust",{"2":{"22":1}}],["ruyi工具的安装",{"0":{"97":1,"106":1}}],["ruyi包管理工具",{"0":{"21":1}}],["ruyi在线软件源",{"0":{"20":1}}],["ruyi",{"0":{"4":1,"8":1,"9":1,"19":1,"20":1,"21":1,"22":1,"33":1,"42":1,"44":1,"61":1,"110":1,"116":1,"153":1,"158":1,"168":1,"170":1,"171":1,"185":1,"186":1,"189":1,"196":1},"1":{"20":1,"21":1,"45":1,"46":1,"47":1,"111":1,"112":1,"113":1,"114":1,"154":1,"155":1,"156":1,"157":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"171":1,"172":1,"173":1,"174":1,"175":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1},"2":{"1":1,"3":2,"9":1,"14":1,"17":9,"22":10,"32":2,"33":13,"34":3,"35":8,"36":5,"37":4,"38":4,"39":2,"40":4,"41":3,"42":15,"43":1,"44":3,"45":1,"46":16,"49":18,"50":1,"51":3,"53":18,"54":3,"56":18,"58":18,"59":1,"60":12,"61":31,"62":3,"64":12,"65":2,"67":12,"68":3,"69":6,"71":7,"72":1,"73":2,"75":17,"76":2,"77":1,"78":18,"79":3,"81":18,"82":3,"95":2,"97":7,"98":9,"103":2,"104":2,"106":6,"107":6,"110":4,"111":1,"112":10,"113":12,"114":16,"116":6,"117":5,"118":1,"119":4,"120":2,"121":2,"122":14,"123":2,"127":2,"147":5,"150":6,"151":2,"153":4,"154":1,"155":10,"156":12,"157":16,"158":1,"159":28,"160":3,"161":8,"162":5,"163":4,"164":4,"165":2,"166":4,"167":3,"168":15,"169":1,"171":4,"172":12,"173":4,"174":6,"176":14,"177":2,"178":1,"181":4,"183":2,"185":10,"186":9,"193":1,"197":1}}],["ruyisdk针对上述常见的需求提供了包管理器",{"2":{"125":1}}],["ruyisdk计划为持有不同risc",{"2":{"124":1}}],["ruyisdk中编译工具链类型简介",{"0":{"124":1}}],["ruyisdk中负责管理ruyisdk各种软件源的工具",{"2":{"44":1}}],["ruyisdk包管理器提供了虚拟环境技术",{"2":{"119":1}}],["ruyisdk包管理器工具可使用",{"2":{"112":1}}],["ruyisdk包管理工具目前提供了linux系统",{"2":{"116":1}}],["ruyisdk支持的编译工具链版本",{"2":{"94":1}}],["ruyisdk使用示例",{"0":{"94":1}}],["ruyisdk官网上线",{"2":{"29":1}}],["ruyisdk软件源提供新的软件包或者软件包版本升级",{"2":{"27":1}}],["ruyisdk",{"0":{"12":1,"16":1,"17":1,"18":1,"25":1,"28":1,"83":1,"93":1,"144":1,"145":1,"194":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"26":1,"27":1,"29":1,"30":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"145":1,"146":1},"2":{"4":5,"5":2,"6":1,"7":1,"10":1,"11":1,"13":1,"15":1,"16":3,"17":2,"23":1,"24":1,"26":2,"27":1,"33":3,"36":1,"39":1,"44":1,"49":3,"53":3,"56":3,"58":3,"60":2,"61":12,"62":2,"64":2,"67":2,"69":3,"71":1,"75":3,"78":3,"80":1,"81":3,"83":1,"90":2,"91":1,"92":1,"97":1,"103":2,"106":1,"113":1,"118":1,"121":1,"122":1,"130":1,"131":3,"145":1,"146":1,"150":2,"155":1,"156":1,"159":1,"162":1,"165":1,"170":1,"171":1,"172":3,"176":1,"181":2,"185":1,"189":6,"190":2,"191":1,"192":1,"193":1,"195":1}}],["ruyisdk集成了多种可用的操作系统供用户选择",{"2":{"0":1}}],["ruyisdk集成的risc",{"0":{"0":1},"1":{"1":1,"2":1,"3":1}}],["ruyisdk对risc",{"2":{"0":1}}],["received",{"2":{"122":1,"176":1}}],["return",{"2":{"114":1,"157":1}}],["remote",{"2":{"69":3}}],["required",{"2":{"62":1,"103":1,"181":1}}],["respective",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["reserved",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"172":1}}],["reinstall",{"2":{"38":2,"41":1,"159":1,"164":2,"167":1}}],["readelf",{"2":{"113":1,"114":1,"156":1,"157":1}}],["readme",{"2":{"39":1,"123":1,"165":1,"177":1}}],["read",{"2":{"35":4,"61":10,"159":4,"161":4}}],["regular",{"2":{"33":1,"172":1}}],["releases",{"2":{"33":1,"44":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":2,"106":1,"116":1,"171":1,"185":2}}],["release",{"2":{"27":1,"69":1}}],["repl",{"2":{"22":1}}],["reporting",{"2":{"123":1,"177":1}}],["repos",{"2":{"33":1,"172":1}}],["repository",{"2":{"33":2,"172":2}}],["repo中获取",{"2":{"17":1}}],["repo",{"0":{"20":1},"2":{"17":3,"33":1,"69":3,"118":1,"150":1,"172":1}}],["refactoring",{"2":{"22":1}}],["revyos",{"2":{"5":1,"10":1,"45":1,"47":1,"51":9,"54":9,"65":3,"68":3,"73":3,"76":3,"79":5,"82":9,"103":3,"181":3,"190":1}}],["rvc",{"2":{"122":1,"123":1,"176":1,"177":1}}],["rv20",{"2":{"92":1}}],["rv64gc",{"2":{"91":1}}],["rv64",{"2":{"85":1,"92":1,"150":1,"151":1,"187":1}}],["rv64ilp32",{"2":{"37":2,"110":2,"111":2,"124":2,"145":2,"153":2,"154":2,"163":2}}],["rv32gc",{"2":{"91":1}}],["rv32",{"2":{"85":1,"92":1}}],["rvv1",{"2":{"92":1}}],["rvv",{"2":{"39":1,"91":5,"92":1,"165":1}}],["rvp",{"2":{"16":1}}],["rv",{"2":{"1":1,"11":1,"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1,"181":1,"193":1}}],["方便用户可以直接从",{"2":{"150":1}}],["方便用户直接使用",{"2":{"91":1}}],["方便新手直接从ruyi",{"2":{"118":1}}],["方便",{"2":{"0":2,"10":1}}],["v853",{"2":{"193":2}}],["v运行环境",{"0":{"126":1},"1":{"127":1,"128":1}}],["v目标程序",{"0":{"128":1},"2":{"125":1}}],["v目标可执行程序的正确性",{"2":{"120":1}}],["v硬件设备",{"2":{"125":1}}],["validated",{"2":{"123":1,"177":1}}],["variants",{"2":{"103":1,"181":1}}],["variant",{"2":{"51":16,"54":17,"65":4,"68":6,"73":6,"76":10,"79":10,"82":14,"103":1,"181":1}}],["vlmax输入与可伸缩向量不固定长度的",{"2":{"91":1}}],["v1",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3,"193":1}}],["v0",{"0":{"48":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"67":1,"70":1,"71":1,"74":1,"75":1,"77":1,"78":1,"80":1,"81":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"78":1,"79":1,"81":1,"82":1},"2":{"30":23,"32":1,"60":1,"64":1,"67":1,"71":1,"72":1,"74":1}}],["v集成开发环境的用户之间的交流和合作",{"2":{"23":1}}],["v集成开发环境相关的插件和扩展",{"2":{"23":1}}],["v集成开发环境所需的编译工具链",{"2":{"17":1}}],["v领域的专家",{"2":{"23":1}}],["virtual",{"2":{"22":1,"33":1,"112":3,"155":3,"172":1}}],["visionfive2",{"2":{"1":1,"11":1,"51":4,"54":4,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1,"181":1}}],["visionfive",{"2":{"1":1,"11":1,"51":4,"54":4,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1,"181":1,"193":2}}],["v相关的文档",{"2":{"22":1}}],["v应用程序",{"2":{"22":2}}],["v指令的执行过程",{"2":{"22":1}}],["v指令集的应用程序",{"2":{"22":1}}],["v模拟器和调试器",{"2":{"22":2}}],["v编译器",{"2":{"22":1}}],["v项目",{"2":{"22":1}}],["v三种架构的主流linux系统",{"2":{"21":1,"22":1}}],["v系统镜像文件",{"2":{"20":1}}],["v生态系统的发展",{"2":{"17":1,"23":1}}],["v开发时",{"2":{"125":1}}],["v开发环境",{"0":{"115":1},"1":{"116":1,"117":1,"118":1,"119":1,"120":1,"121":1},"2":{"125":1}}],["v开发环境的使用指南",{"2":{"23":1}}],["v开发相关的资源",{"2":{"23":1}}],["v开发板的开发者们提供支持",{"2":{"124":1}}],["v开发板的sd卡通过读卡机接入pc",{"2":{"102":1}}],["v开发板以usb连接线接入pc或者risc",{"2":{"102":1}}],["v开发板提供镜像信息的维护与下载",{"2":{"101":1}}],["v开发板安装操作系统",{"0":{"101":1,"127":1},"1":{"102":1,"103":1},"2":{"125":1}}],["v开发板并为其安装系统镜像",{"2":{"94":1}}],["v开发板类型是丰富且不断扩展的",{"2":{"94":1}}],["v开发板",{"2":{"22":1,"103":1}}],["v开发板上进行运行和测试",{"2":{"17":1}}],["v开发者的集成开发环境将提供一系列专门针对risc",{"2":{"22":1}}],["v开发者使用的集成开发环境",{"2":{"22":2}}],["v开发者并推动risc",{"2":{"17":1}}],["v开发者提供一个开放的交流平台",{"2":{"17":1}}],["v的编译工具链",{"2":{"17":1}}],["v架构目标可执行程序以达到验证或者使用的目的",{"2":{"125":1}}],["v架构",{"2":{"22":1,"119":1}}],["v架构的工具和功能",{"2":{"22":1}}],["v架构的嵌入式设备上",{"2":{"22":1}}],["v架构的编译器",{"2":{"22":1}}],["v架构的可执行程序",{"2":{"17":1}}],["v架构设备上的软件和应用的工具箱",{"2":{"17":1}}],["ver",{"2":{"159":1}}],["ver>`",{"2":{"38":1,"164":1}}],["version",{"2":{"22":1,"33":7,"49":2,"53":2,"56":2,"58":2,"60":1,"64":1,"67":1,"71":1,"75":1,"78":2,"81":2,"97":1,"98":1,"106":1,"107":2,"113":1,"122":1,"123":2,"143":1,"156":1,"172":7,"176":1,"177":2,"185":1,"186":1}}],["venv是自定义的虚拟环境名",{"2":{"113":1,"156":1}}],["venv1",{"2":{"107":3,"119":2,"150":3}}],["venv",{"2":{"33":2,"37":1,"40":4,"46":1,"98":6,"107":2,"110":1,"112":18,"113":9,"114":11,"119":3,"122":9,"123":2,"150":3,"153":1,"155":18,"156":9,"157":11,"159":2,"163":1,"166":4,"172":2,"176":9,"177":2,"186":9}}],["vector",{"2":{"16":1}}],["vega",{"2":{"1":1,"11":1,"51":3,"54":3,"76":4,"79":3,"82":3,"193":1}}],["v",{"0":{"178":1},"1":{"179":1,"180":1,"181":1,"182":1},"2":{"0":4,"1":7,"5":4,"6":2,"9":2,"10":6,"11":7,"14":1,"15":1,"16":2,"24":1,"33":1,"36":1,"51":56,"54":55,"62":2,"65":36,"68":38,"73":38,"76":51,"77":1,"79":55,"80":1,"82":55,"83":2,"85":4,"86":1,"87":1,"88":1,"89":1,"90":3,"91":4,"92":1,"94":1,"95":1,"96":1,"103":6,"104":1,"107":1,"112":4,"114":1,"116":1,"122":2,"123":1,"145":1,"147":1,"150":1,"151":1,"155":4,"157":1,"159":1,"162":1,"172":1,"176":2,"177":1,"180":2,"181":8,"183":1,"184":1,"190":4,"191":2,"193":6,"197":1}}],["v设备也可以",{"2":{"125":1}}],["v设备上的应用程序",{"2":{"17":1}}],["v设备上调试应用程序等",{"2":{"0":1}}],["v设备有",{"2":{"1":1}}],["v设备专有向导页面",{"2":{"0":1}}],["v设备的集成和支持主要包括以下几个方面",{"2":{"0":1}}],["v设备",{"0":{"0":1,"1":1},"1":{"1":1,"2":1,"3":1},"2":{"29":1,"125":1}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexroot.CKepwnlc.js b/assets/chunks/@localSearchIndexroot.CKepwnlc.js deleted file mode 100644 index 69b315d8..00000000 --- a/assets/chunks/@localSearchIndexroot.CKepwnlc.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":129,"nextId":129,"documentIds":{"0":"/docs/zh/devices/#ruyisdk集成的risc-v设备","1":"/docs/zh/devices/#支持的risc-v设备","2":"/docs/zh/devices/#从ruyisdk开始使用设备","3":"/docs/zh/devices/#获取并安装os","4":"/docs/zh/introduction/#hello-ruyi","5":"/docs/zh/introduction/#介绍","6":"/docs/zh/introduction/#背景","7":"/docs/zh/introduction/#功能","8":"/docs/zh/introduction/#ruyi-包管理器","9":"/docs/zh/introduction/#ruyi-ide","10":"/docs/zh/introduction/#community","11":"/docs/zh/introduction/#支持的设备","12":"/docs/zh/introduction/#ruyisdk-架构示意图","13":"/docs/zh/introduction/#让我们开始吧","14":"/docs/zh/introduction/#获取并安装os","15":"/docs/zh/introduction/requirement.html#介绍","16":"/docs/zh/introduction/requirement.html#ruyisdk-的目标","17":"/docs/zh/introduction/requirement.html#ruyisdk-架构示意图","18":"/docs/zh/introduction/requirement.html#ruyisdk-模块需求说明","19":"/docs/zh/introduction/requirement.html#ruyi-包管理器","20":"/docs/zh/introduction/requirement.html#ruyi在线软件源-ruyi-repo","21":"/docs/zh/introduction/requirement.html#ruyi包管理工具-ruyi","22":"/docs/zh/introduction/requirement.html#ruyi-ide","23":"/docs/zh/introduction/requirement.html#开发者社区","24":"/docs/zh/plan/#版本规划路线图","25":"/docs/zh/plan/#ruyisdk-版本计划","26":"/docs/zh/plan/#里程碑版本","27":"/docs/zh/plan/#敏捷开发版本计划","28":"/docs/zh/plan/#ruyisdk-规划","29":"/docs/zh/plan/#_2024目标","30":"/docs/zh/plan/#敏捷开发版本排期","31":"/docs/zh/ruyi/getstarted/#开始","32":"/docs/zh/ruyi/getstarted/#安装依赖软件","33":"/docs/zh/ruyi/getstarted/#安装-ruyi-包管理器","34":"/docs/zh/ruyi/getstarted/#刷新软件包缓存","35":"/docs/zh/ruyi/getstarted/#查询包管理器更新内容","36":"/docs/zh/ruyi/getstarted/#查询可用软件包","37":"/docs/zh/ruyi/getstarted/#查询可用编译环境","38":"/docs/zh/ruyi/getstarted/#安装软件包","39":"/docs/zh/ruyi/getstarted/#安装源码包","40":"/docs/zh/ruyi/getstarted/#搭建编译环境","41":"/docs/zh/ruyi/getstarted/#卸载软件包","42":"/docs/zh/ruyi/getstarted/#卸载-ruyi-包管理器","43":"/docs/zh/ruyi/getstarted/#镜像信息的维护与下载、开发板系统的安装引导","44":"/docs/zh/ruyi/#ruyi-包管理器","45":"/docs/zh/ruyi/#支持的发行版平台","46":"/docs/zh/ruyi/#命令","47":"/docs/zh/ruyi/#附-外部链接","48":"/docs/zh/ruyi/updates/0.10.0.html#v0-10-0-版本新增特性","49":"/docs/zh/ruyi/updates/0.10.0.html#安装-v0-10-0","50":"/docs/zh/ruyi/updates/0.10.0.html#i18n-支持","51":"/docs/zh/ruyi/updates/0.10.0.html#板卡镜像刷写","52":"/docs/zh/ruyi/updates/0.11.0.html#v0-11-0-版本新增特性","53":"/docs/zh/ruyi/updates/0.11.0.html#安装-v0-11-0","54":"/docs/zh/ruyi/updates/0.11.0.html#板卡镜像刷写","55":"/docs/zh/ruyi/updates/0.12.0.html#v0-12-0-版本新增特性","56":"/docs/zh/ruyi/updates/0.12.0.html#安装-v0-12-0","57":"/docs/zh/ruyi/updates/0.13.0.html#v0-13-0-版本新增特性","58":"/docs/zh/ruyi/updates/0.13.0.html#安装-v0-13-0","59":"/docs/zh/ruyi/updates/0.3.0.html#v0-3-0-版本新增特性","60":"/docs/zh/ruyi/updates/0.3.0.html#安装-v0-3-0","61":"/docs/zh/ruyi/updates/0.3.0.html#ruyi-新闻","62":"/docs/zh/ruyi/updates/0.3.0.html#板卡镜像刷写","63":"/docs/zh/ruyi/updates/0.4.0.html#v0-4-0-版本新增特性","64":"/docs/zh/ruyi/updates/0.4.0.html#安装-v0-4-0","65":"/docs/zh/ruyi/updates/0.4.0.html#板卡镜像刷写","66":"/docs/zh/ruyi/updates/0.5.0.html#v0-5-0-版本新增特性","67":"/docs/zh/ruyi/updates/0.5.0.html#安装-v0-5-0","68":"/docs/zh/ruyi/updates/0.5.0.html#板卡镜像刷写","69":"/docs/zh/ruyi/updates/0.5.0.html#镜像源换源支持","70":"/docs/zh/ruyi/updates/0.6.0.html#v0-6-0-版本新增特性","71":"/docs/zh/ruyi/updates/0.6.0.html#安装-v0-6-0","72":"/docs/zh/ruyi/updates/0.6.0.html#依赖变化","73":"/docs/zh/ruyi/updates/0.6.0.html#板卡镜像刷写","74":"/docs/zh/ruyi/updates/0.7.0.html#v0-7-0-版本新增特性","75":"/docs/zh/ruyi/updates/0.7.0.html#安装-v0-7-0","76":"/docs/zh/ruyi/updates/0.7.0.html#板卡镜像刷写","77":"/docs/zh/ruyi/updates/0.8.1.html#v0-8-1-版本新增特性","78":"/docs/zh/ruyi/updates/0.8.1.html#安装-v0-8-1","79":"/docs/zh/ruyi/updates/0.8.1.html#板卡镜像刷写","80":"/docs/zh/ruyi/updates/0.9.0.html#v0-9-0-版本新增特性","81":"/docs/zh/ruyi/updates/0.9.0.html#安装-v0-9-0","82":"/docs/zh/ruyi/updates/0.9.0.html#板卡镜像刷写","83":"/docs/zh/sdk/gnu/#ruyisdk-gcc-工具链介绍","84":"/docs/zh/sdk/gnu/#模块介绍","85":"/docs/zh/sdk/gnu/#gcc-gnu-compiler-collection","86":"/docs/zh/sdk/gnu/#gnu-binutils","87":"/docs/zh/sdk/gnu/#gdb-gnu-debugger","88":"/docs/zh/sdk/gnu/#glibc-gnu-c-library","89":"/docs/zh/sdk/gnu/#newlib","90":"/docs/zh/sdk/gnu/#libgcc","91":"/docs/zh/sdk/gnu/#使用说明","92":"/docs/zh/sdk/gnu/#扩展支持","93":"/docs/zh/sdk/llvm/#ruyisdk-llvm-工具链介绍","94":"/docs/zh/usecase/#ruyisdk使用示例","95":"/docs/zh/usecase/rvbook/#使用示例","96":"/docs/zh/usecase/rvbook/#环境说明","97":"/docs/zh/usecase/rvbook/#ruyi工具的安装","98":"/docs/zh/usecase/rvbook/#使用ruyi工具部署开发环境","99":"/docs/zh/usecase/rvbook/#交叉编译coremark","100":"/docs/zh/usecase/rvbook/#运行验证","101":"/docs/zh/usecase/setupos/#为risc-v开发板安装操作系统","102":"/docs/zh/usecase/setupos/#环境说明","103":"/docs/zh/usecase/setupos/#安装操作系统","104":"/docs/zh/usecase/x86pc/#使用示例","105":"/docs/zh/usecase/x86pc/#环境说明","106":"/docs/zh/usecase/x86pc/#ruyi工具的安装","107":"/docs/zh/usecase/x86pc/#使用ruyi工具部署开发环境","108":"/docs/zh/usecase/x86pc/#交叉编译coremark","109":"/docs/zh/usecase/x86pc/#qemu-user-模式下运行-riscv64-coremark-可执行程序","110":"/docs/zh/usedirection/developmentside/environments/#ruyi-编译环境","111":"/docs/zh/usedirection/developmentside/environments/#工具链与预置配置组合","112":"/docs/zh/usedirection/developmentside/environments/#创建虚拟环境","113":"/docs/zh/usedirection/developmentside/environments/#在虚拟环境下编译","114":"/docs/zh/usedirection/developmentside/environments/#模拟运行","115":"/docs/zh/usedirection/developmentside/#准备risc-v开发环境","116":"/docs/zh/usedirection/developmentside/#安装-ruyi-包管理工具","117":"/docs/zh/usedirection/developmentside/#安装编译工具链","118":"/docs/zh/usedirection/developmentside/#准备代码","119":"/docs/zh/usedirection/developmentside/#编译","120":"/docs/zh/usedirection/developmentside/#模拟运行","121":"/docs/zh/usedirection/developmentside/#调试","122":"/docs/zh/usedirection/developmentside/sources/coremark/#使用编译环境进行-coremark-构建","123":"/docs/zh/usedirection/developmentside/sources/coremark/#在最新的-milkv-duo-镜像上运行","124":"/docs/zh/usedirection/developmentside/typeselection/#ruyisdk中编译工具链类型简介","125":"/docs/zh/usedirection/#使用ruyisdk","126":"/docs/zh/usedirection/operationside/#准备risc-v运行环境","127":"/docs/zh/usedirection/operationside/#为risc-v开发板安装操作系统","128":"/docs/zh/usedirection/operationside/#运行risc-v目标程序"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,22],"1":[2,2,36],"2":[1,2,1],"3":[1,3,8],"4":[2,1,11],"5":[1,1,30],"6":[1,1,23],"7":[1,1,3],"8":[2,1,22],"9":[2,1,15],"10":[1,1,37],"11":[1,1,54],"12":[2,1,1],"13":[2,1,4],"14":[1,2,12],"15":[1,1,11],"16":[2,1,36],"17":[2,1,76],"18":[2,1,5],"19":[2,2,1],"20":[4,4,40],"21":[3,4,38],"22":[2,2,278],"23":[1,2,84],"24":[1,1,11],"25":[2,1,1],"26":[1,3,17],"27":[1,3,26],"28":[2,1,1],"29":[1,3,10],"30":[1,3,51],"31":[1,1,1],"32":[1,1,29],"33":[3,1,124],"34":[1,1,20],"35":[1,1,21],"36":[1,1,60],"37":[1,1,24],"38":[1,1,44],"39":[1,1,16],"40":[1,1,33],"41":[1,1,12],"42":[3,1,29],"43":[2,1,7],"44":[2,1,22],"45":[1,2,24],"46":[1,2,35],"47":[2,2,13],"48":[4,1,8],"49":[4,4,82],"50":[2,4,11],"51":[1,4,182],"52":[4,1,17],"53":[4,4,82],"54":[1,4,185],"55":[4,1,28],"56":[4,4,82],"57":[4,1,7],"58":[4,4,82],"59":[4,1,7],"60":[4,4,53],"61":[2,4,87],"62":[1,4,118],"63":[4,1,4],"64":[4,4,57],"65":[1,4,70],"66":[4,1,5],"67":[4,4,53],"68":[1,4,83],"69":[1,4,58],"70":[4,1,12],"71":[4,4,56],"72":[1,4,12],"73":[1,4,81],"74":[4,1,11],"75":[4,4,52],"76":[1,4,96],"77":[4,1,17],"78":[4,4,83],"79":[1,4,103],"80":[4,1,17],"81":[4,4,82],"82":[1,4,124],"83":[3,1,15],"84":[1,3,1],"85":[5,4,34],"86":[2,4,27],"87":[4,4,7],"88":[5,4,10],"89":[1,4,14],"90":[1,4,27],"91":[1,3,94],"92":[1,3,118],"93":[3,1,2],"94":[1,1,24],"95":[1,1,16],"96":[1,1,11],"97":[1,1,43],"98":[2,1,70],"99":[1,1,32],"100":[1,1,6],"101":[2,1,6],"102":[1,2,13],"103":[1,2,171],"104":[1,1,18],"105":[1,1,8],"106":[1,1,41],"107":[2,1,51],"108":[1,1,32],"109":[6,1,9],"110":[2,1,24],"111":[1,2,27],"112":[1,2,103],"113":[1,2,121],"114":[1,2,100],"115":[2,1,1],"116":[3,2,49],"117":[1,2,15],"118":[1,2,15],"119":[1,2,70],"120":[1,2,18],"121":[1,2,12],"122":[3,1,147],"123":[4,3,153],"124":[1,1,73],"125":[1,1,38],"126":[2,1,1],"127":[2,2,8],"128":[2,2,7]},"averageFieldLength":[2.007751937984497,2.062015503875968,42.38759689922478],"storedFields":{"0":{"title":"RuyiSDK集成的RISC-V设备","titles":[]},"1":{"title":"支持的RISC-V设备","titles":["RuyiSDK集成的RISC-V设备"]},"2":{"title":"从RuyiSDK开始使用设备","titles":["RuyiSDK集成的RISC-V设备"]},"3":{"title":"获取并安装OS","titles":["RuyiSDK集成的RISC-V设备","从RuyiSDK开始使用设备"]},"4":{"title":"Hello Ruyi","titles":[]},"5":{"title":"介绍","titles":[]},"6":{"title":"背景","titles":[]},"7":{"title":"功能","titles":[]},"8":{"title":"Ruyi 包管理器","titles":["功能"]},"9":{"title":"Ruyi IDE","titles":["功能"]},"10":{"title":"Community","titles":["功能"]},"11":{"title":"支持的设备","titles":[]},"12":{"title":"RuyiSDK-架构示意图","titles":[]},"13":{"title":"让我们开始吧!","titles":[]},"14":{"title":"获取并安装OS","titles":["让我们开始吧!"]},"15":{"title":"介绍","titles":[]},"16":{"title":"RuyiSDK 的目标","titles":[]},"17":{"title":"RuyiSDK 架构示意图","titles":[]},"18":{"title":"RuyiSDK 模块需求说明","titles":[]},"19":{"title":"RUYI 包管理器","titles":["RuyiSDK 模块需求说明"]},"20":{"title":"RUYI在线软件源(Ruyi Repo)","titles":["RuyiSDK 模块需求说明","RUYI 包管理器"]},"21":{"title":"RUYI包管理工具(ruyi)","titles":["RuyiSDK 模块需求说明","RUYI 包管理器"]},"22":{"title":"Ruyi IDE","titles":["RuyiSDK 模块需求说明"]},"23":{"title":"开发者社区","titles":["RuyiSDK 模块需求说明"]},"24":{"title":"版本规划路线图","titles":[]},"25":{"title":"RUYISDK 版本计划","titles":["版本规划路线图"]},"26":{"title":"里程碑版本","titles":["版本规划路线图","RUYISDK 版本计划"]},"27":{"title":"敏捷开发版本计划","titles":["版本规划路线图","RUYISDK 版本计划"]},"28":{"title":"RUYISDK 规划","titles":["版本规划路线图"]},"29":{"title":"2024目标","titles":["版本规划路线图","RUYISDK 规划"]},"30":{"title":"敏捷开发版本排期","titles":["版本规划路线图","RUYISDK 规划"]},"31":{"title":"开始","titles":[]},"32":{"title":"安装依赖软件","titles":["开始"]},"33":{"title":"安装 RUYI 包管理器","titles":["开始"]},"34":{"title":"刷新软件包缓存","titles":["开始"]},"35":{"title":"查询包管理器更新内容","titles":["开始"]},"36":{"title":"查询可用软件包","titles":["开始"]},"37":{"title":"查询可用编译环境","titles":["开始"]},"38":{"title":"安装软件包","titles":["开始"]},"39":{"title":"安装源码包","titles":["开始"]},"40":{"title":"搭建编译环境","titles":["开始"]},"41":{"title":"卸载软件包","titles":["开始"]},"42":{"title":"卸载 RUYI 包管理器","titles":["开始"]},"43":{"title":"镜像信息的维护与下载、开发板系统的安装引导","titles":["开始"]},"44":{"title":"RUYI 包管理器","titles":[]},"45":{"title":"支持的发行版平台","titles":["RUYI 包管理器"]},"46":{"title":"命令","titles":["RUYI 包管理器"]},"47":{"title":"附:外部链接","titles":["RUYI 包管理器"]},"48":{"title":"v0.10.0 版本新增特性","titles":[]},"49":{"title":"安装 v0.10.0","titles":["v0.10.0 版本新增特性"]},"50":{"title":"i18n 支持","titles":["v0.10.0 版本新增特性"]},"51":{"title":"板卡镜像刷写","titles":["v0.10.0 版本新增特性"]},"52":{"title":"v0.11.0 版本新增特性","titles":[]},"53":{"title":"安装 v0.11.0","titles":["v0.11.0 版本新增特性"]},"54":{"title":"板卡镜像刷写","titles":["v0.11.0 版本新增特性"]},"55":{"title":"v0.12.0 版本新增特性","titles":[]},"56":{"title":"安装 v0.12.0","titles":["v0.12.0 版本新增特性"]},"57":{"title":"v0.13.0 版本新增特性","titles":[]},"58":{"title":"安装 v0.13.0","titles":["v0.13.0 版本新增特性"]},"59":{"title":"v0.3.0 版本新增特性","titles":[]},"60":{"title":"安装 v0.3.0","titles":["v0.3.0 版本新增特性"]},"61":{"title":"RUYI 新闻","titles":["v0.3.0 版本新增特性"]},"62":{"title":"板卡镜像刷写","titles":["v0.3.0 版本新增特性"]},"63":{"title":"v0.4.0 版本新增特性","titles":[]},"64":{"title":"安装 v0.4.0","titles":["v0.4.0 版本新增特性"]},"65":{"title":"板卡镜像刷写","titles":["v0.4.0 版本新增特性"]},"66":{"title":"v0.5.0 版本新增特性","titles":[]},"67":{"title":"安装 v0.5.0","titles":["v0.5.0 版本新增特性"]},"68":{"title":"板卡镜像刷写","titles":["v0.5.0 版本新增特性"]},"69":{"title":"镜像源换源支持","titles":["v0.5.0 版本新增特性"]},"70":{"title":"v0.6.0 版本新增特性","titles":[]},"71":{"title":"安装 v0.6.0","titles":["v0.6.0 版本新增特性"]},"72":{"title":"依赖变化","titles":["v0.6.0 版本新增特性"]},"73":{"title":"板卡镜像刷写","titles":["v0.6.0 版本新增特性"]},"74":{"title":"v0.7.0 版本新增特性","titles":[]},"75":{"title":"安装 v0.7.0","titles":["v0.7.0 版本新增特性"]},"76":{"title":"板卡镜像刷写","titles":["v0.7.0 版本新增特性"]},"77":{"title":"v0.8.1 版本新增特性","titles":[]},"78":{"title":"安装 v0.8.1","titles":["v0.8.1 版本新增特性"]},"79":{"title":"板卡镜像刷写","titles":["v0.8.1 版本新增特性"]},"80":{"title":"v0.9.0 版本新增特性","titles":[]},"81":{"title":"安装 v0.9.0","titles":["v0.9.0 版本新增特性"]},"82":{"title":"板卡镜像刷写","titles":["v0.9.0 版本新增特性"]},"83":{"title":"RuyiSDK GCC 工具链介绍","titles":[]},"84":{"title":"模块介绍","titles":["RuyiSDK GCC 工具链介绍"]},"85":{"title":"GCC(GNU Compiler Collection)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"86":{"title":"GNU Binutils","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"87":{"title":"GDB(GNU Debugger)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"88":{"title":"Glibc(GNU C Library)","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"89":{"title":"Newlib","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"90":{"title":"Libgcc","titles":["RuyiSDK GCC 工具链介绍","模块介绍"]},"91":{"title":"使用说明","titles":["RuyiSDK GCC 工具链介绍"]},"92":{"title":"扩展支持","titles":["RuyiSDK GCC 工具链介绍"]},"93":{"title":"RuyiSDK LLVM 工具链介绍","titles":[]},"94":{"title":"RuyiSDK使用示例","titles":[]},"95":{"title":"使用示例","titles":[]},"96":{"title":"环境说明","titles":["使用示例"]},"97":{"title":"ruyi工具的安装","titles":["使用示例"]},"98":{"title":"使用ruyi工具部署开发环境:","titles":["使用示例"]},"99":{"title":"交叉编译coremark","titles":["使用示例"]},"100":{"title":"运行验证","titles":["使用示例"]},"101":{"title":"为RISC-V开发板安装操作系统","titles":[]},"102":{"title":"环境说明","titles":["为RISC-V开发板安装操作系统"]},"103":{"title":"安装操作系统","titles":["为RISC-V开发板安装操作系统"]},"104":{"title":"使用示例","titles":[]},"105":{"title":"环境说明","titles":["使用示例"]},"106":{"title":"ruyi工具的安装","titles":["使用示例"]},"107":{"title":"使用ruyi工具部署开发环境:","titles":["使用示例"]},"108":{"title":"交叉编译coremark","titles":["使用示例"]},"109":{"title":"qemu-user 模式下运行 riscv64 coremark 可执行程序","titles":["使用示例"]},"110":{"title":"RUYI 编译环境","titles":[]},"111":{"title":"工具链与预置配置组合","titles":["RUYI 编译环境"]},"112":{"title":"创建虚拟环境","titles":["RUYI 编译环境"]},"113":{"title":"在虚拟环境下编译","titles":["RUYI 编译环境"]},"114":{"title":"模拟运行","titles":["RUYI 编译环境"]},"115":{"title":"准备RISC-V开发环境","titles":[]},"116":{"title":"安装 ruyi 包管理工具","titles":["准备RISC-V开发环境"]},"117":{"title":"安装编译工具链","titles":["准备RISC-V开发环境"]},"118":{"title":"准备代码","titles":["准备RISC-V开发环境"]},"119":{"title":"编译","titles":["准备RISC-V开发环境"]},"120":{"title":"模拟运行","titles":["准备RISC-V开发环境"]},"121":{"title":"调试","titles":["准备RISC-V开发环境"]},"122":{"title":"使用编译环境进行 Coremark 构建","titles":[]},"123":{"title":"在最新的 Milkv Duo 镜像上运行","titles":["使用编译环境进行 Coremark 构建"]},"124":{"title":"RuyiSDK中编译工具链类型简介","titles":[]},"125":{"title":"使用RuyiSDK","titles":[]},"126":{"title":"准备RISC-V运行环境","titles":[]},"127":{"title":"为RISC-V开发板安装操作系统","titles":["准备RISC-V运行环境"]},"128":{"title":"运行RISC-V目标程序","titles":["准备RISC-V运行环境"]}},"dirtCount":0,"index":[["但是一些高性能的risc",{"2":{"125":1}}],["但是并不保证建立成功的环境一定可用于构建",{"2":{"111":1}}],["仓库",{"2":{"124":1}}],["仓库文档在",{"2":{"116":1}}],["非通用工具链",{"2":{"124":1}}],["图像处理等领域可能需要针对特定指令集的优化和定制",{"2":{"124":1}}],["机器学习",{"2":{"124":1}}],["嵌入式系统",{"2":{"124":1}}],["嵌入式设备中为",{"2":{"91":1}}],["某些特定的应用领域可能对扩展指令集有特殊的需求",{"2":{"124":1}}],["某些扩展指令集是由标准和规范定义的",{"2":{"124":1}}],["特定应用需求",{"2":{"124":1}}],["特性的开发者",{"2":{"90":1}}],["稳定性或兼容性",{"2":{"124":1}}],["然而",{"2":{"124":1}}],["然后在文本编辑器中完成对代码的编辑",{"2":{"17":1}}],["针对自己的处理器架构实现了特定版本的编译工具链",{"2":{"124":1}}],["针对risc",{"2":{"22":2}}],["添加特定的硬件加速器等方式",{"2":{"124":1}}],["添加自定义功能",{"2":{"22":1}}],["优化编译器生成的代码",{"2":{"124":1}}],["更多的功能和更好的能效",{"2":{"124":1}}],["更新最新的软件源索引",{"2":{"97":1}}],["更新软件包缓存",{"2":{"34":1}}],["更新",{"2":{"21":1}}],["更新和管理软件包",{"2":{"17":1}}],["处理器架构不断演进和改进",{"2":{"124":1}}],["处理器架构的发展",{"2":{"124":1}}],["随着时间的推移",{"2":{"124":1}}],["随着版本的更新和发布",{"2":{"20":1}}],["厂商定制和优化",{"2":{"124":2}}],["厂商定制扩展",{"2":{"16":1}}],["重新上传后运行",{"2":{"123":1}}],["重构工具",{"2":{"22":1}}],["地址请按实际情况更改",{"2":{"123":1}}],["传送",{"2":{"123":1}}],["首先进入编译环境",{"2":{"122":1}}],["首先创建项目",{"2":{"17":1}}],["构建",{"0":{"122":1},"1":{"123":1},"2":{"122":2}}],["此外",{"2":{"121":1}}],["此部分没有统一规范",{"2":{"119":1}}],["初步检验可执行程序是否risc",{"2":{"119":1}}],["举例",{"2":{"119":1}}],["前提",{"2":{"119":1,"120":1}}],["大致操作步骤如下",{"2":{"119":1}}],["允许用户在系统中创建独立的环境",{"2":{"119":1}}],["允许开发人员在",{"2":{"87":1}}],["准备代码",{"0":{"118":1},"2":{"125":1}}],["准备risc",{"0":{"115":1,"126":1},"1":{"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"127":1,"128":1},"2":{"125":1}}],["保证ruyi",{"2":{"116":1}}],["获取最新缓存才能获取软件仓库最新的软件包资源",{"2":{"116":1}}],["获取并查看更新信息",{"2":{"46":1}}],["获取并安装os",{"0":{"3":1,"14":1}}],["路径下就可以开始了",{"2":{"116":1}}],["三种架构平台下的安装程序",{"2":{"116":1}}],["三架构支持",{"2":{"21":1,"22":1}}],["程序并使用",{"2":{"114":1}}],["进入编译环境",{"2":{"114":1}}],["进行代码的协作开发和团队协作",{"2":{"22":1}}],["进行例如图像识别应用程序的开发时",{"2":{"22":1}}],["实际操作中请注意将上述例子中的参数替换为正确的值",{"2":{"113":1}}],["实现运行环境隔离的设计",{"2":{"98":1}}],["实现",{"2":{"42":1}}],["实现一套图形用户界面",{"2":{"21":1}}],["实现一套命令行接口",{"2":{"21":1}}],["实现开发环境和运行环境的文件传输",{"2":{"0":1,"10":1}}],["退出后环境将被还原",{"2":{"113":1}}],["退出编译环境",{"2":{"113":1,"114":1}}],["退出虚拟环境",{"2":{"109":1,"120":1,"122":1}}],["调用工具链",{"2":{"113":1}}],["调试技巧等方面的内容",{"2":{"23":1}}],["调试支持",{"2":{"22":1}}],["调试支持等功能",{"2":{"22":1}}],["调试支持等",{"2":{"16":1}}],["调试",{"0":{"121":1},"2":{"17":1,"125":1}}],["调试工具等等",{"2":{"125":1}}],["调试工具和模拟器",{"2":{"9":1}}],["调试工具",{"2":{"8":1,"17":2,"20":1}}],["表示",{"2":{"113":1}}],["建立编译环境",{"2":{"113":1,"114":1}}],["建议使用最新版本",{"2":{"116":1}}],["建议使用",{"2":{"91":1}}],["无",{"2":{"111":1}}],["无浮点硬件中为",{"2":{"91":1}}],["预置配置",{"2":{"111":1}}],["预期每",{"2":{"27":1}}],["展示在x86",{"2":{"104":1}}],["展示从",{"2":{"95":1}}],["您只需要按照引导提示一步步执行即可",{"2":{"103":1}}],["您可用",{"2":{"61":4}}],["直接运行即可",{"2":{"128":1}}],["直接运行riscv64",{"2":{"100":1}}],["直接使用环境变量指定的gcc编译",{"2":{"98":1}}],["得到可执行程序coremark",{"2":{"99":1,"108":1,"119":1}}],["参考上表代入具体的参数",{"2":{"112":1}}],["参考coremark仓库自述文档",{"2":{"99":1,"108":1}}],["参数",{"2":{"38":1,"69":1}}],["参数列表",{"2":{"22":2}}],["激活方式与",{"2":{"113":1}}],["激活构建环境",{"2":{"113":1}}],["激活后",{"2":{"98":1}}],["激活虚拟环境",{"2":{"98":1,"107":1,"119":1}}],["激活和管理虚拟环境",{"2":{"22":1}}],["创建一个叫venv1的虚拟环境",{"2":{"119":1}}],["创建一个新的c",{"2":{"22":1}}],["创建虚拟环境",{"0":{"112":1},"2":{"112":1}}],["创建虚拟环境venv",{"2":{"98":1}}],["验证ruyi可否使用",{"2":{"97":1,"106":1}}],["清除当前已经安装的",{"2":{"97":1,"106":1}}],["硬件环境",{"2":{"96":1,"105":1}}],["环境则不是交叉编译",{"2":{"122":1}}],["环境下使用平头哥工具链配置带",{"2":{"114":1}}],["环境说明",{"0":{"96":1,"102":1,"105":1}}],["环境变量被无视的问题",{"2":{"55":1}}],["环境变量被设置时",{"2":{"34":1}}],["环境变量",{"2":{"52":1}}],["接入risc",{"2":{"94":1}}],["接着对项目进行编译构建获得risc",{"2":{"17":1}}],["案例三",{"2":{"94":1}}],["案例二",{"2":{"94":1}}],["案例一",{"2":{"94":1}}],["案例研究和实践经验",{"2":{"23":1}}],["希望通过一些小场景让大家更多的了解ruyisdk的使用",{"2":{"94":1}}],["额外支持",{"2":{"92":1}}],["手册",{"2":{"91":1}}],["有特定优化",{"2":{"92":1}}],["有已知固定向量长度的",{"2":{"91":1}}],["有什么用",{"2":{"4":1}}],["请注意关注版本信息",{"2":{"116":1}}],["请务必同时使用",{"2":{"91":1}}],["请使用更新的版本",{"2":{"71":1}}],["请使用",{"2":{"41":1}}],["向量扩展时",{"2":{"91":1}}],["控制不同扩展的使用",{"2":{"91":1}}],["输入",{"2":{"91":1}}],["zpsfoperand",{"2":{"92":1}}],["zpn",{"2":{"92":1}}],["ztso",{"2":{"92":1}}],["zc",{"2":{"92":1}}],["zcmt",{"2":{"92":1}}],["zcmp",{"2":{"92":1}}],["zcd",{"2":{"92":2}}],["zcf",{"2":{"92":1}}],["zce",{"2":{"92":1}}],["zcb",{"2":{"92":1}}],["zca",{"2":{"92":1}}],["zmmul",{"2":{"92":1}}],["zvkt",{"2":{"92":1}}],["zvksc",{"2":{"92":1}}],["zvksh",{"2":{"92":1}}],["zvksed",{"2":{"92":1}}],["zvknc",{"2":{"92":1}}],["zvknhb",{"2":{"92":1}}],["zvknha",{"2":{"92":1}}],["zvkned",{"2":{"92":1}}],["zvkg",{"2":{"92":1}}],["zvbc",{"2":{"92":1}}],["zvbb",{"2":{"92":1}}],["zvfhmin",{"2":{"92":1}}],["zvfh",{"2":{"92":1}}],["zfa",{"2":{"92":1}}],["zfhmin",{"2":{"92":1}}],["zfh",{"2":{"92":1}}],["zfinx",{"2":{"92":2}}],["zkt",{"2":{"92":1}}],["zksh",{"2":{"92":1}}],["zksed",{"2":{"92":1}}],["zkr",{"2":{"92":1}}],["zknh",{"2":{"92":1}}],["zkne",{"2":{"92":1}}],["zknd",{"2":{"92":1}}],["zhinxmin",{"2":{"92":1}}],["zhinx",{"2":{"92":1}}],["zdinx",{"2":{"92":1}}],["zawrs",{"2":{"92":1}}],["zihintpause",{"2":{"92":1}}],["zihintntl",{"2":{"92":1}}],["zicbop",{"2":{"92":1}}],["zicbom",{"2":{"92":1}}],["zicboz",{"2":{"92":1}}],["zicond",{"2":{"92":1}}],["zicsr",{"2":{"92":1}}],["zifencei",{"2":{"92":1}}],["zbpbo",{"2":{"92":1}}],["zbkx",{"2":{"92":1}}],["zbkc",{"2":{"92":1}}],["zbkb",{"2":{"92":1}}],["zbs",{"2":{"91":1,"92":1}}],["zbc",{"2":{"91":1,"92":1}}],["zbb",{"2":{"91":1,"92":1}}],["zba",{"2":{"91":1,"92":1}}],["zstd",{"2":{"32":2}}],["扩展不兼容",{"2":{"92":1}}],["扩展名称",{"2":{"92":1}}],["扩展支持",{"0":{"92":1}}],["扩展可以使用",{"2":{"91":2}}],["扩展",{"2":{"91":1}}],["扩展指令集架构组合",{"2":{"16":1}}],["选项",{"2":{"91":1}}],["选项主要控制工具链中所使用的寄存器组",{"2":{"91":1}}],["选项可以控制工具链开启的",{"2":{"91":1}}],["选择开发板后将返回所有支持指定开发板的操作系统",{"2":{"103":1}}],["选择使用",{"2":{"89":1}}],["选择合适架构的预编译二进制下载",{"2":{"33":1}}],["下通过",{"2":{"116":1}}],["下执行",{"2":{"102":1}}],["下面以任一个编译工具链在虚拟环境中编译程序一般的操作说明操作步骤",{"2":{"113":1}}],["下面我们来介绍",{"2":{"91":1}}],["下面重点介绍",{"2":{"91":1}}],["下载解压coremark源码作为编译对象",{"2":{"98":1,"107":1}}],["下载riscv64版本的ruyi",{"2":{"97":1}}],["下载",{"2":{"97":1,"106":1}}],["下载并解包指定的源码包",{"2":{"46":1}}],["下载并安装指定的软件包",{"2":{"46":1,"117":1}}],["下载地址",{"2":{"44":1}}],["下载链接",{"2":{"20":1}}],["尽可能的继承目前",{"2":{"90":1}}],["芯片的硬件",{"2":{"90":1}}],["芯片设计",{"2":{"6":1}}],["系列",{"2":{"90":1}}],["系统",{"2":{"89":1}}],["系统生成客户所需的操作系统",{"2":{"16":1}}],["系统获得硬件资料说明",{"2":{"16":1}}],["系统镜像",{"2":{"8":1}}],["器紧密相关的支持函数",{"2":{"90":1}}],["反汇编等操作",{"2":{"86":1}}],["链接器",{"2":{"86":1}}],["链接器等",{"2":{"83":1}}],["详细使用说明参考",{"2":{"85":1,"86":1}}],["位工具链中为",{"2":{"91":4}}],["位",{"2":{"85":2}}],["位长的支持",{"2":{"85":1}}],["汇编器",{"2":{"83":1,"86":1}}],["它们可能通过改进指令执行流程",{"2":{"124":1}}],["它包括一系列工具",{"2":{"83":1}}],["它提供直观的用户界面",{"2":{"22":1}}],["它提供了一套命令行接口",{"2":{"17":1}}],["产品",{"2":{"80":1}}],["全线",{"2":{"80":1}}],["全家桶式的全功能开发环境",{"2":{"15":1,"24":1}}],["格式压缩文件的解包",{"2":{"80":1}}],["默认最新",{"2":{"113":1}}],["默认不允许以",{"2":{"77":1}}],["默认使用",{"2":{"69":1}}],["暂时没有提供官方镜像下载",{"2":{"76":1}}],["二进制的",{"2":{"123":1}}],["二进制",{"2":{"112":2,"114":1}}],["二进制无法工作的问题",{"2":{"74":1}}],["二进制可能无法正常工作",{"2":{"71":1}}],["依赖变化",{"0":{"72":1}}],["依赖库版本到",{"2":{"55":1}}],["种",{"2":{"70":1,"73":1}}],["替代对",{"2":{"70":1}}],["远端元数据仓库分支",{"2":{"69":1}}],["远端元数据仓库",{"2":{"69":1}}],["未配置或配置为空时",{"2":{"69":3}}],["启用",{"2":{"69":1}}],["托管默认软件源",{"2":{"64":1}}],["除了",{"2":{"113":1}}],["除了这里列举的环境外",{"2":{"94":1}}],["除了荔枝派",{"2":{"62":1}}],["除去继承开源软件的部分",{"2":{"22":1}}],["指定了编译工具链的类型和版本",{"2":{"113":1}}],["指定新闻编号或",{"2":{"61":1}}],["指令集有所不同",{"2":{"90":1}}],["指令集扩展的支持",{"2":{"85":1}}],["指令执行效率更高",{"2":{"6":1}}],["现已为以下板卡新增了镜像包",{"2":{"61":1}}],["感谢您对",{"2":{"61":4}}],["之后",{"2":{"61":3}}],["之中",{"2":{"17":1}}],["那么当您完成",{"2":{"61":3}}],["┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛",{"2":{"61":4}}],["┃",{"2":{"61":8}}],["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓",{"2":{"61":4}}],["阅读它们",{"2":{"61":3}}],["阅读所有未读新闻",{"2":{"61":1}}],["阅读新闻或将信息设置为已读",{"2":{"35":1}}],["变量被设置时为",{"2":{"61":1}}],["文章",{"2":{"124":1}}],["文件配置",{"2":{"116":1}}],["文件中",{"2":{"61":1}}],["文档支持增加到",{"2":{"48":1,"52":1}}],["文档和教程",{"2":{"23":1}}],["文档生成",{"2":{"22":1}}],["文档资源等各种信息",{"2":{"20":1}}],["文档可能更新不及时",{"2":{"11":1}}],["文档",{"2":{"8":1,"17":1,"20":1}}],["───────────────────────────────────────────────────────────────",{"2":{"61":2}}],["新的处理器架构可能引入了新的指令集扩展",{"2":{"124":1}}],["新闻的阅读状态将保存在",{"2":{"61":1}}],["新闻",{"0":{"61":1},"2":{"59":1}}],["新增可执行程序coremark",{"2":{"99":1,"108":1}}],["新增板卡支持",{"2":{"61":3}}],["新增",{"2":{"54":1,"77":1}}],["遗留的版本匹配问题",{"2":{"57":1}}],["修复",{"2":{"57":2,"74":1}}],["修复了",{"2":{"55":1}}],["修复了先前",{"2":{"55":1}}],["升级了",{"2":{"55":1}}],["升级版",{"2":{"11":1}}],["渲染相应的提示语",{"2":{"55":1}}],["规则",{"2":{"51":1,"54":1,"79":1,"82":1}}],["规划",{"0":{"28":1},"1":{"29":1,"30":1}}],["故此处只提供了文档链接而没有刷写支持",{"2":{"76":1}}],["故需要用户自行配置",{"2":{"51":1,"54":1,"79":1,"82":1}}],["故在需要升级",{"2":{"42":1}}],["刷写工具根据板卡的不同依赖",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["刷写方式",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["刷新软件包缓存",{"0":{"34":1}}],["单片机系列的文档支持",{"2":{"51":1}}],["单步执行代码",{"2":{"22":2}}],["本文使用",{"2":{"122":1}}],["本操作在x86",{"2":{"102":1}}],["本地元数据路径",{"2":{"69":1}}],["本次主要增加了沁恒",{"2":{"51":1}}],["本身",{"2":{"42":1}}],["本身的安装程序需要支持x86",{"2":{"22":1}}],["检查虚拟环境中编译工具的版本信息",{"2":{"107":1}}],["检查安装版本",{"2":{"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["检查代码的瓶颈并进行优化",{"2":{"22":1}}],["款",{"2":{"48":1,"51":1,"52":1,"54":1,"65":1,"66":1,"68":1,"74":1,"76":1,"77":1,"79":1,"80":1,"82":1}}],["板卡刷写",{"2":{"77":1}}],["板卡支持列表",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["板卡镜像刷写支持增加到",{"2":{"66":1,"74":1,"77":1,"80":1}}],["板卡镜像刷写功能所支持的板卡增加到",{"2":{"51":1,"54":1,"65":1,"68":1,"76":1,"79":1,"82":1}}],["板卡镜像刷写",{"0":{"51":1,"54":1,"62":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1},"2":{"48":1,"52":1,"59":1,"63":1}}],["板卡的新增适配等等",{"2":{"27":1}}],["多语言支持",{"2":{"48":1}}],["虚拟环境类似",{"2":{"113":1}}],["虚拟环境可以理解成一个容器",{"2":{"98":1}}],["虚拟环境venv1",{"2":{"107":1}}],["虚拟环境venv",{"2":{"98":1}}],["虚拟环境",{"2":{"46":1}}],["由于使用的工具链为",{"2":{"122":1}}],["由于软件包索引信息目前托管的github仓库国内访问的网络不稳定性",{"2":{"116":1}}],["由于ruyi滚动发版",{"2":{"116":1}}],["由指定的工具链",{"2":{"98":1,"107":1}}],["由指定的工具链和配置建立",{"2":{"46":1}}],["由编译器自动配置选取合适的处理数量",{"2":{"91":1}}],["由",{"2":{"62":1}}],["由加州伯克利分校所发起的一个开源项目",{"2":{"6":1}}],["外部链接",{"0":{"47":1},"2":{"45":1}}],["附",{"0":{"47":1},"2":{"45":1}}],["仅",{"2":{"92":1}}],["仅限验证过的",{"2":{"45":1}}],["仅列出未读新闻",{"2":{"35":1}}],["需求与问题",{"2":{"44":1}}],["需要更新和升级编译工具链",{"2":{"124":1}}],["需要编辑构建脚本",{"2":{"122":1}}],["需要先安装运行时环境或语言虚拟机",{"2":{"128":1}}],["需要先",{"2":{"113":1}}],["需要为其安装镜像",{"2":{"103":1}}],["需要指定正确的编译器版本和sysroot类型",{"2":{"98":1}}],["需要注意的是一些镜像的解包需要占用大量的磁盘空间",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["需要手动安装",{"2":{"32":1}}],["需要具备如下特点",{"2":{"22":1}}],["需要具备如下功能",{"2":{"22":1}}],["需要一一区别和定义",{"2":{"22":1}}],["官方仓库",{"2":{"44":1}}],["官方网站",{"2":{"23":1}}],["执行交叉编译和构建",{"2":{"99":1,"108":1,"119":1}}],["执行汇编和链接",{"2":{"86":1}}],["执行如下命令并按照引导执行即可下载所需系统镜像",{"2":{"43":1}}],["执行新特性的测试验证和基础功能回归测试",{"2":{"27":1}}],["镜像上运行",{"0":{"123":1}}],["镜像支持增加到",{"2":{"70":1,"73":1}}],["镜像源下载体验",{"2":{"116":1}}],["镜像源下载最新的ruyi工具",{"2":{"97":1,"106":1}}],["镜像源下载最新版本体验",{"2":{"44":1}}],["镜像源下载最新版本",{"2":{"33":1}}],["镜像源换源支持",{"0":{"69":1},"2":{"66":1}}],["镜像文件会被自动解压或符号链接到",{"2":{"61":1}}],["镜像无法下载的问题",{"2":{"55":1}}],["镜像",{"2":{"51":1,"54":2,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["镜像搭建工具",{"2":{"46":1}}],["镜像信息的维护与下载",{"0":{"43":1},"2":{"46":1}}],["再执行安装",{"2":{"42":1}}],["再到开发应用的效率大幅降低",{"2":{"6":1}}],["即使在同一个指令集标准下",{"2":{"124":1}}],["即首先卸载",{"2":{"42":1}}],["即时检测代码中的语法错误",{"2":{"22":1}}],["同样的这个命令将会询问您以二次确认该操作",{"2":{"42":1}}],["同时优化了命令逻辑",{"2":{"65":1}}],["同时",{"2":{"22":1}}],["your",{"2":{"62":6,"103":8}}],["you",{"2":{"49":1,"53":1,"56":1,"58":1,"61":1,"62":4,"78":1,"81":1,"103":6}}],["y",{"2":{"42":2,"62":2,"103":3}}],["若出现这样的错误",{"2":{"123":1}}],["若要开启其他扩展",{"2":{"91":1}}],["若您强制中断",{"2":{"41":1}}],["若希望重装一个软件包",{"2":{"38":1}}],["章节介绍",{"2":{"121":1}}],["章节",{"2":{"40":1,"45":1,"117":1}}],["具有",{"2":{"40":1}}],["具体操作参考",{"2":{"116":1}}],["具体的使用可参考ruyi仓库文档",{"2":{"116":1}}],["具体的使用方法可通过help命令获得",{"2":{"112":1}}],["具体可以查看",{"2":{"52":1}}],["具体使用参见",{"2":{"40":1}}],["具体还需要结合技术可行性等进行进一步的调整",{"2":{"18":1}}],["配置环境变量",{"2":{"98":1}}],["配置",{"2":{"40":1,"69":1}}],["已经提前安装了所需的编译工具链",{"2":{"120":1}}],["已经安装了所需的编译工具链",{"2":{"119":1}}],["已经安装的工具链与模拟器需要在",{"2":{"40":1}}],["已经集成的risc",{"2":{"1":1}}],["搭建编译环境",{"0":{"40":1}}],["=1548f6b30560e1ca6f3fa8ba3ef6aea4188feacf",{"2":{"123":1}}],["=d9dbc7115d07d1953087dd2c1e5d46adc2ab0d4f",{"2":{"122":1}}],["=",{"2":{"38":2,"51":2,"54":2,"69":5}}],["==",{"2":{"38":1,"51":2,"54":2}}],["==0",{"2":{"38":1,"124":1}}],[">=",{"2":{"38":1}}],[">",{"2":{"38":1,"69":1,"114":1}}],["`",{"2":{"38":2}}],["上运行",{"2":{"123":1}}],["上运行的程序",{"2":{"88":1}}],["上",{"2":{"94":1}}],["上交叉编译并模拟运行",{"2":{"94":1}}],["上述原因导致了编译工具链版本的多样性",{"2":{"124":1}}],["上述结合使用场景简单的介绍了",{"2":{"121":1}}],["上述操作系统链接参考本文文末的",{"2":{"45":1}}],["上述通过指定软件包名安装的方式默认会安装",{"2":{"38":1}}],["上面的命令只是删除",{"2":{"42":1}}],["上游工具链配置",{"2":{"112":2}}],["上游工具链",{"2":{"38":1}}],["命令返回的数据最新",{"2":{"116":1}}],["命令回显信息显示了文件的架构相关信息",{"2":{"99":1,"108":1}}],["命令将执行一个向导",{"2":{"62":1}}],["命令将默认显示未读新闻条目",{"2":{"61":1}}],["命令刷写镜像失败时",{"2":{"51":1,"54":1,"79":1,"82":1}}],["命令",{"0":{"46":1},"2":{"51":1,"54":1,"62":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"113":1}}],["命令实现的",{"2":{"40":1}}],["命令下载一个源码包并解包到当前目录",{"2":{"39":1}}],["命令安装软件包",{"2":{"38":1}}],["命令查看",{"2":{"37":1,"110":1}}],["命令应用配置到指定的工具链以建立编译环境",{"2":{"37":1,"110":1}}],["与",{"2":{"40":1,"92":2}}],["与python",{"2":{"37":1,"110":1}}],["与版本控制系统",{"2":{"22":1}}],["列出它们",{"2":{"61":3}}],["列出所有新闻",{"2":{"61":1}}],["列出所有软件包的详细信息",{"2":{"36":1}}],["列出已安装的配置",{"2":{"46":1}}],["列出帮助信息",{"2":{"33":1}}],["则需要静态链接的二进制",{"2":{"123":1}}],["则需利用该选项重新向工具链指定想要开启的扩展",{"2":{"91":1}}],["则只会使用当前普通用户",{"2":{"51":1,"54":1,"79":1,"82":1}}],["则可以加上",{"2":{"38":1}}],["则可以通过指定版本来安装",{"2":{"38":1}}],["则该软件包的当前版本不支持本机架构",{"2":{"36":1}}],["则是一个专门用来开发能够运行在risc",{"2":{"17":1}}],["代表分析工具",{"2":{"36":1}}],["代表开发板镜像",{"2":{"36":1}}],["代表模拟器二进制包",{"2":{"36":1}}],["代表工具链二进制包",{"2":{"36":1}}],["代表软件源码包",{"2":{"36":1}}],["代码冻结日期",{"2":{"30":1}}],["代码冻结日期在发布日期的上一周周四",{"2":{"27":1}}],["代码冻结日~发布日",{"2":{"27":1}}],["代码执行环境管理",{"2":{"22":1}}],["代码分析和优化",{"2":{"22":1}}],["代码片段管理",{"2":{"22":2}}],["代码导航",{"2":{"22":2}}],["代码自动完成",{"2":{"22":1}}],["代码编辑器常见功能详细说明",{"2":{"22":1}}],["代码编辑器",{"2":{"22":1}}],["代码",{"2":{"10":1,"17":1,"20":1}}],["只需下载ruyi工具预构建的二进制文件",{"2":{"116":1}}],["只需要输入对应的序号",{"2":{"103":1}}],["只标记为已读",{"2":{"35":1}}],["只是适用于当前开发语言及目标运行设备的risc",{"2":{"17":1}}],["不创建虚拟环境也可以为",{"2":{"98":1}}],["不支持",{"2":{"92":1}}],["不兼容",{"2":{"92":1}}],["不输出任何东西",{"2":{"35":1}}],["不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化",{"2":{"124":1}}],["不同的虚拟环境创建如下",{"2":{"112":1}}],["不同linux发行版可能不同",{"2":{"116":1}}],["不同型号的risc",{"2":{"101":1}}],["不同适用环境的软件包的搜索",{"2":{"21":1}}],["不同厂商",{"2":{"21":1}}],["不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持",{"2":{"124":1}}],["不同版本的编译工具链可以支持不同处理器架构的特定指令集",{"2":{"124":1}}],["不同版本的工具链也可能存在细微的差异和改进",{"2":{"124":1}}],["不同版本的软件资源需要进行管理",{"2":{"20":1}}],["不同版本支持的",{"2":{"90":1}}],["不同版本",{"2":{"21":1}}],["\\t",{"2":{"35":1}}],["\\t\\t",{"2":{"35":2}}],["questions",{"2":{"62":1,"103":1}}],["quot",{"2":{"61":2}}],["quiet",{"2":{"35":1}}],["qemu模拟器",{"2":{"124":1}}],["qemu",{"0":{"109":1},"2":{"20":1,"36":2,"40":3,"104":1,"107":3,"109":2,"112":6,"114":19,"119":1,"120":2,"124":3}}],["读取下一条新闻",{"2":{"35":1}}],["查询可用编译环境",{"0":{"37":1}}],["查询可用软件包",{"0":{"36":1}}],["查询包管理器更新内容",{"0":{"35":1}}],["查看如何使用",{"2":{"119":1}}],["查看工具版本",{"2":{"116":1}}],["查看可用的二进制",{"2":{"114":1}}],["查看可用的工具链二进制",{"2":{"113":1}}],["查看可用的软件包",{"2":{"36":1}}],["查看虚拟环境bin目录下已安装的工具链",{"2":{"107":1}}],["查看详细信息",{"2":{"107":1}}],["查看ruyi帮助",{"2":{"106":1}}],["查看rv64可执行程序文件属性信息",{"2":{"99":1,"108":1,"119":1}}],["查看当前虚拟环境下的gcc是否可用",{"2":{"98":1}}],["查看编译环境中得工具",{"2":{"98":1}}],["查看预置编译环境",{"2":{"98":1,"107":1}}],["查看软件仓软件包索引信息",{"2":{"98":1,"107":1}}],["查看",{"2":{"35":1,"46":1}}],["查看变量的值等",{"2":{"22":1}}],["查看最新支持的设备请通过指令ruyi",{"2":{"11":1}}],["~$",{"2":{"98":1}}],["~",{"2":{"34":1,"61":2,"69":3,"116":1,"123":3}}],["注意这整个过程如果在",{"2":{"122":1}}],["注意在虚拟环境创建时",{"2":{"98":1}}],["注意指定的",{"2":{"92":1}}],["注意指定对应的",{"2":{"92":1}}],["注意刷写镜像的操作需要调用",{"2":{"62":1}}],["注意",{"2":{"41":1,"52":1,"71":1,"76":1}}],["注意二进制的文件名必须为",{"2":{"33":1}}],["注意从",{"2":{"32":1}}],["应当可以正常打印版本信息",{"2":{"33":1}}],["应用框架等",{"2":{"16":1}}],["应用设计",{"2":{"11":1}}],["working",{"2":{"122":1}}],["workstation",{"2":{"47":1}}],["warranty",{"2":{"113":1}}],["want",{"2":{"103":1}}],["we",{"2":{"103":1}}],["website",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["will",{"2":{"62":3,"103":3}}],["wizard",{"2":{"62":3,"103":3}}],["without",{"2":{"112":2}}],["with",{"2":{"51":2,"54":2,"61":1,"62":1,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1,"112":2,"122":2,"123":2}}],["wch",{"2":{"51":105,"54":105}}],["where",{"2":{"38":1}}],["www",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["wget",{"2":{"32":2,"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1}}],["+x",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1}}],["$path",{"2":{"116":1}}],["$xdg",{"2":{"34":1,"61":2,"69":2}}],["$",{"2":{"33":3,"35":6,"38":1,"39":1,"49":6,"53":6,"56":6,"58":6,"60":4,"61":1,"64":4,"67":4,"69":1,"71":2,"75":6,"78":6,"81":6,"112":7,"113":5,"114":7,"122":9,"123":2}}],["当前支持的其他设备镜像均需要用户手动指定目标刷写设备以执行",{"2":{"62":1}}],["当前",{"2":{"33":1,"45":1}}],["当使用",{"2":{"22":1}}],["作为替代方案",{"2":{"32":1,"72":1}}],["国庆节",{"2":{"30":1}}],["端午节",{"2":{"30":1}}],["劳动节",{"2":{"30":1}}],["937496",{"2":{"123":2}}],["911000",{"2":{"123":1}}],["9",{"0":{"80":1,"81":1},"1":{"81":1,"82":1},"2":{"30":1,"66":1,"68":1,"80":1,"81":4,"82":1,"103":3}}],["跳过一次",{"2":{"30":1}}],["跳转到变量的引用处",{"2":{"22":1}}],["跳转到函数调用等",{"2":{"22":1}}],["跳转到引用处",{"2":{"22":1}}],["春节",{"2":{"30":1}}],["备注",{"2":{"30":1}}],["滚动发行版本号",{"2":{"30":1}}],["服务≥10000名注册开发者",{"2":{"29":1}}],["将下载的文件去掉后缀重命名为",{"2":{"116":1}}],["将其放到path路径下",{"2":{"97":1}}],["将可以更新支持的板卡列表",{"2":{"68":1}}],["将自动调用",{"2":{"65":1,"68":1,"73":1,"76":1}}],["将在命令输出中提示",{"2":{"61":3}}],["将尝试调用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["将根据运行环境",{"2":{"50":1}}],["将增加对openkylin和gentoo的支持",{"2":{"29":1}}],["将完全支持",{"2":{"16":1}}],["完成",{"2":{"95":1,"104":1}}],["完成回归测试用例更新和执行全面回归测试",{"2":{"27":1}}],["完善中",{"2":{"46":1}}],["完善的开发环境",{"2":{"5":1}}],["周五",{"2":{"27":1}}],["周发布一个开发版本",{"2":{"27":1}}],["敏捷开发版本排期",{"0":{"30":1}}],["敏捷开发版本执行敏捷测试方式",{"2":{"27":1}}],["敏捷开发版本计划",{"0":{"27":1}}],["延迟一周发布",{"2":{"27":1,"30":3}}],["发布日期",{"2":{"30":1}}],["发布日期默认每双周周二发布",{"2":{"27":1}}],["发布日~下一次代码冻结日",{"2":{"27":1}}],["发布周期内遇3日以上节假日的",{"2":{"27":1}}],["发布厂商",{"2":{"20":1}}],["切换为更加敏捷的开发迭代模式",{"2":{"27":1}}],["里程碑版本",{"0":{"26":1}}],["里面有各种各样的工具可以帮助你完成这个任务",{"2":{"17":1}}],["推动risc",{"2":{"23":1}}],["推广",{"2":{"23":1}}],["增加开发者的学习和开发效率",{"2":{"23":1}}],["回答问题",{"2":{"23":1}}],["例如打开",{"2":{"91":1}}],["例如用于浮点数乘除法的模拟运算函数",{"2":{"90":1}}],["例如当希望使用其他镜像代替默认的镜像时",{"2":{"69":1}}],["例如",{"2":{"23":1,"124":1}}],["例如在",{"2":{"5":1}}],["鼓励开发者积极参与交流和贡献",{"2":{"23":1}}],["积分和奖励机制",{"2":{"23":1}}],["就业和项目机会",{"2":{"23":1}}],["就像是一个你的工作室",{"2":{"17":1}}],["插件和扩展",{"2":{"23":1}}],["甚至组织在线培训或指导课程",{"2":{"23":1}}],["他们可以提供指导",{"2":{"23":1}}],["他们可以集成其他工具",{"2":{"22":1}}],["专家支持",{"2":{"23":1}}],["专为",{"2":{"11":1}}],["研讨会或会议",{"2":{"23":1}}],["社区可以设立积分和奖励机制",{"2":{"23":1}}],["社区可以提供就业和项目机会的发布平台",{"2":{"23":1}}],["社区可以组织定期的在线活动",{"2":{"23":1}}],["社区可能吸引一些risc",{"2":{"23":1}}],["社区可能提供详细的文档和教程",{"2":{"23":1}}],["活动和会议",{"2":{"23":1}}],["项目模板",{"2":{"23":1}}],["项目管理工具",{"2":{"22":1}}],["问答平台",{"2":{"23":1}}],["博客和文章",{"2":{"23":1}}],["博客和文档等等功能",{"2":{"17":1}}],["促进交流和知识共享",{"2":{"23":1}}],["分别为",{"2":{"90":1}}],["分享文章或贡献代码可以获得积分或奖励",{"2":{"23":1}}],["分享最新的技术趋势",{"2":{"23":1}}],["分享经验",{"2":{"23":1}}],["分为以下三个部分",{"2":{"7":1}}],["让他们在ruyisdk这个中心化的工具中便捷的获取使用和开发所需的支持",{"2":{"124":1}}],["让开发者聚集在一起",{"2":{"23":1}}],["让开发者可以发表问题",{"2":{"23":1}}],["让我们开始吧",{"0":{"13":1},"1":{"14":1}}],["论坛和讨论区",{"2":{"23":1}}],["论坛和技术讨论区",{"2":{"17":1}}],["编译代码",{"2":{"125":1}}],["编译工具链类型",{"2":{"124":1}}],["编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状",{"2":{"124":1}}],["编译工具链的不同扩展指令集实现与选择",{"2":{"117":1}}],["编译工具链的版本选择参考",{"2":{"117":1}}],["编译需要编译的程序源代码",{"2":{"119":1}}],["编译一个简单的",{"2":{"114":1}}],["编译",{"0":{"119":1},"2":{"113":1}}],["编译环境",{"0":{"110":1},"1":{"111":1,"112":1,"113":1,"114":1},"2":{"40":1,"112":4,"114":1,"122":1}}],["编译环境中使用",{"2":{"40":1}}],["编译构建出适用该开发板的可执行程序",{"2":{"22":1}}],["编译构建",{"2":{"17":1}}],["编程技巧",{"2":{"23":1}}],["涵盖risc",{"2":{"23":1}}],["统计功能",{"2":{"23":1}}],["登录等账号有关的管理",{"2":{"23":1}}],["交叉编译coremark",{"0":{"99":1,"108":1}}],["交流需要的一切资源",{"2":{"23":1}}],["交互式解释器和调试器",{"2":{"22":1}}],["宣发",{"2":{"23":1}}],["主要的设备包括开发侧的个人电脑",{"2":{"125":1}}],["主要包含了一个组件管理器",{"2":{"17":1}}],["主页",{"2":{"23":1}}],["高度可定制的功能和良好的扩展性",{"2":{"22":1}}],["高效地开发risc",{"2":{"22":1}}],["高性能计算设备",{"2":{"11":1}}],["高性能嵌入式开发",{"2":{"11":1}}],["总之",{"2":{"22":1}}],["加速开发过程",{"2":{"22":1}}],["加快他们的开发过程",{"2":{"22":1}}],["利用其提供的各种工具和功能",{"2":{"22":1}}],["还提供文档生成工具",{"2":{"22":1}}],["还提供版本控制集成工具",{"2":{"22":1}}],["帮助开发者寻找合适的工作机会或参与感兴趣的项目",{"2":{"23":1}}],["帮助开发者更好地利用集成开发环境进行开发",{"2":{"23":1}}],["帮助开发者快速上手和解决常见问题",{"2":{"23":1}}],["帮助开发者发现潜在的性能问题和错误",{"2":{"22":1}}],["帮助你记录和分享你的代码",{"2":{"22":1}}],["帮助你管理代码的版本",{"2":{"22":1}}],["中配置了其对应参数",{"2":{"91":1}}],["中不同扩展的工具链已经在",{"2":{"91":1}}],["中秋节",{"2":{"30":1}}],["中的性能分析工具",{"2":{"22":1}}],["中有提供相关支持硬件情况",{"2":{"5":1}}],["逐行调试代码",{"2":{"22":1}}],["通常由操作系统提供",{"2":{"125":1}}],["通常用来运行risc",{"2":{"125":1}}],["通常完成目标可执行程序的准备工作",{"2":{"125":1}}],["通常为",{"2":{"34":1}}],["通常提供调试器功能",{"2":{"22":1}}],["通过ruyisdk操作系统安装器工具",{"2":{"101":1}}],["通过",{"2":{"22":1}}],["通过静态分析和语义理解",{"2":{"22":2}}],["设置coremark源码中的编译配置信息",{"2":{"99":1,"108":1,"119":1}}],["设置编译器路径和库路径",{"2":{"22":1}}],["设备上调试应用程序等",{"2":{"10":1}}],["设备专有向导页面",{"2":{"10":1}}],["设备的集成和支持主要包括以下几个方面",{"2":{"10":1}}],["设备安装器",{"2":{"1":1}}],["快速跳转到代码的不同部分",{"2":{"22":1}}],["资源共享",{"2":{"23":1}}],["资源文件和配置文件等",{"2":{"22":1}}],["资源类型",{"2":{"20":1}}],["你可以更高效地开发图像识别应用程序",{"2":{"22":1}}],["你可以将编译好的图像识别应用程序部署到risc",{"2":{"22":1}}],["你可以使用ruyi",{"2":{"22":1}}],["你可以使用代码导航功能",{"2":{"22":1}}],["你可以设置断点",{"2":{"22":1}}],["你可以编写程序",{"2":{"22":1}}],["你可以组织和管理你的代码文件",{"2":{"22":1}}],["你要做一款能够运行在risc",{"2":{"17":1}}],["打开",{"2":{"22":1,"91":1}}],["要求",{"2":{"22":1}}],["性能分析工具",{"2":{"86":1}}],["性能分析和内存分析等功能",{"2":{"22":1}}],["性能",{"2":{"22":1}}],["改动部分界面需要个性化定制",{"2":{"22":1}}],["自带",{"2":{"111":5}}],["自",{"2":{"80":1}}],["自2024年1月开始",{"2":{"27":1}}],["自研发",{"2":{"22":1}}],["自动识别设备",{"2":{"62":1}}],["自动选择显示的语言",{"2":{"50":1}}],["自动弹出变量",{"2":{"22":1}}],["自动生成代码文档或api文档",{"2":{"22":1}}],["自动完成",{"2":{"22":1}}],["定制化",{"2":{"22":1}}],["跨平台兼容性",{"2":{"22":1}}],["能够得到如下步骤所描述的功能支持",{"2":{"22":1}}],["能够流畅地运行在主流的pc设备上",{"2":{"22":1}}],["能够为一个项目同时生成不同的运行环境",{"2":{"22":1}}],["能够支持在线软件源中不同类型",{"2":{"21":1}}],["能够支持工具自身的升级",{"2":{"21":1}}],["可将仓库切换到备用仓库",{"2":{"116":1}}],["可按需对指定程序执行编译操作",{"2":{"113":1}}],["可选",{"2":{"97":1,"106":1}}],["可执行程序",{"0":{"109":1},"2":{"94":2}}],["可在",{"2":{"44":1}}],["可视化的集成开发环境的界面部分",{"2":{"22":1}}],["可扩展性和插件支持",{"2":{"22":1}}],["可以按需在ruyi",{"2":{"116":1}}],["可以看到成功构建",{"2":{"122":1}}],["可以看到",{"2":{"114":1}}],["可以执行如下命令退出编译环境",{"2":{"113":1}}],["可以更高效的利用有限的系统资源",{"2":{"89":1}}],["可以使用",{"2":{"69":1,"117":1,"118":1}}],["可以阅读任意新闻",{"2":{"61":1}}],["可以分享技术经验",{"2":{"23":1}}],["可以自动生成代码文档或api文档",{"2":{"22":1}}],["可以在配置文件中配置",{"2":{"69":1}}],["可以在开发者社区进行技术交流获取帮助",{"2":{"22":1}}],["可以在命令行环境中逐行执行代码",{"2":{"22":1}}],["可以模拟和调试risc",{"2":{"22":1}}],["可以帮助开发者编写和测试自己的程序",{"2":{"17":1}}],["可以对于实际的开发场景对于代码的编写以及调试",{"2":{"9":1}}],["可以走向国际化",{"2":{"5":1}}],["可以通过下载安装最新的",{"2":{"3":1,"127":1}}],["可以通过",{"2":{"1":1,"46":1}}],["很多开发语言都有丰富的第三方库和包管理工具",{"2":{"22":1}}],["来管理依赖和隔离项目环境",{"2":{"22":1}}],["因此如果存在ruyi",{"2":{"116":1}}],["因此",{"2":{"22":1,"124":1}}],["join",{"2":{"122":1,"123":1}}],["jython等",{"2":{"22":1}}],["javascript",{"2":{"22":1}}],["java",{"2":{"22":1}}],["一般通过模拟器工具来模拟运行环境",{"2":{"120":1}}],["一些",{"2":{"91":1}}],["一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["一些语言需要在运行时依赖于相应的解释器或语言虚拟机",{"2":{"22":1}}],["一旦你完成了开发和调试",{"2":{"22":1}}],["一个小型的",{"2":{"89":1}}],["一个包管理工具",{"2":{"17":1}}],["一个开发者交流社区需要具备以下功能",{"2":{"23":1}}],["一个开发者交流社区",{"2":{"17":1}}],["一个集成开发环境",{"2":{"17":1}}],["教程",{"2":{"23":1}}],["教程和示例代码的集成",{"2":{"22":1}}],["教程视频",{"2":{"10":1}}],["解答问题",{"2":{"23":1}}],["解释器",{"2":{"22":1}}],["解释器支持",{"2":{"22":1}}],["解析软件包的依赖关系",{"2":{"17":1,"21":1}}],["float",{"2":{"122":1,"123":1}}],["flags",{"2":{"123":1}}],["flashing",{"2":{"62":1,"103":1}}],["flash",{"2":{"62":1,"103":1,"123":1}}],["flashed",{"2":{"62":1,"103":1}}],["flavor",{"2":{"37":2,"110":2}}],["f",{"2":{"92":2}}],["file",{"2":{"119":1,"122":1,"123":1}}],["fitness",{"2":{"113":1}}],["fixed",{"2":{"91":1}}],["fishwaldo",{"2":{"51":1,"54":1,"82":1}}],["f=gcc",{"2":{"91":1}}],["found",{"2":{"123":1}}],["foundation",{"2":{"113":1}}],["following",{"2":{"62":1,"103":4}}],["format",{"2":{"38":1}}],["for",{"2":{"33":2,"36":1,"51":33,"54":34,"62":1,"65":21,"68":24,"73":26,"76":26,"79":28,"82":33,"96":1,"103":5,"112":1,"113":3,"122":2,"123":3,"124":1}}],["fortran",{"2":{"22":1}}],["favor",{"2":{"112":1}}],["false",{"2":{"69":1}}],["fail",{"2":{"62":1,"103":1}}],["fastboot",{"2":{"51":14,"54":14,"62":1,"65":7,"68":7,"73":7,"76":7,"79":10,"82":14}}],["fpga",{"2":{"51":2,"54":2,"82":2}}],["free",{"2":{"113":2}}],["freertos",{"2":{"51":42,"54":42,"76":1,"79":1,"82":4}}],["fresh",{"2":{"112":1}}],["from",{"2":{"33":1,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"78":1,"81":1,"82":1,"112":5}}],["fetch",{"2":{"33":1}}],["fedora38",{"2":{"47":1}}],["fedora",{"2":{"32":1,"45":1}}],["fedora等",{"2":{"21":1,"22":1}}],["潜在的逻辑错误或常见的编码错误",{"2":{"22":1}}],["end=",{"2":{"123":1}}],["environment",{"2":{"22":1,"33":1,"112":4}}],["even",{"2":{"113":1}}],["evb",{"2":{"51":105,"54":105}}],["elfedit",{"2":{"113":1,"114":1}}],["elf",{"2":{"111":1,"122":1,"123":1,"124":1}}],["eabi",{"2":{"92":1}}],["ease",{"2":{"62":1,"103":1}}],["e",{"2":{"92":1,"107":1,"112":3,"114":1,"119":1,"123":1}}],["eof",{"2":{"69":2,"114":2}}],["emulator",{"2":{"36":3,"40":1,"112":6}}],["executable",{"2":{"122":1,"123":1}}],["exe",{"2":{"99":3,"100":1,"108":3,"109":1,"119":2,"120":1,"122":3,"123":7}}],["example",{"2":{"69":1}}],["expr",{"2":{"38":1}}],["extracted",{"2":{"122":1}}],["extracting",{"2":{"122":1}}],["extract",{"2":{"33":3,"39":2,"46":1,"98":1,"107":1,"118":1,"122":1}}],["exit",{"2":{"33":1,"112":1}}],["error",{"2":{"22":1}}],["etc",{"2":{"20":1,"123":1}}],["比较和合并等功能",{"2":{"22":1}}],["比如用c或者c++语言开发一个图像识别的程序",{"2":{"17":1}}],["提权",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["提高其在社区中的声誉",{"2":{"23":1}}],["提交",{"2":{"22":1}}],["提取变量等",{"2":{"22":1}}],["提取函数",{"2":{"22":1}}],["提供许多标准",{"2":{"88":1}}],["提供调试功能",{"2":{"87":1}}],["提供对不同",{"2":{"85":1}}],["提供对代码版本的管理",{"2":{"22":1}}],["提供多种图形化ide环境",{"2":{"29":1}}],["提供技术支持和资源共享",{"2":{"23":1}}],["提供开发者撰写博客文章的功能",{"2":{"23":1}}],["提供建议等",{"2":{"23":1}}],["提供了部署工具",{"2":{"22":1}}],["提供了大量的相关技术文章",{"2":{"10":1}}],["提供自动完成功能",{"2":{"22":1}}],["提供与risc",{"2":{"22":1}}],["提供代码分析工具",{"2":{"22":1}}],["提供可重用的代码片段库",{"2":{"22":1}}],["提供集成的调试器",{"2":{"22":1}}],["提供一些新功能",{"2":{"27":1}}],["提供一个讨论区或论坛",{"2":{"23":1}}],["提供一个功能强大的代码编辑器",{"2":{"22":1}}],["提供一系列操作",{"2":{"22":1}}],["提供快速导航到代码的不同部分",{"2":{"22":1}}],["提供关于代码中变量",{"2":{"22":2}}],["提供项目管理功能",{"2":{"22":1}}],["提供互助式技术支持和资源共享",{"2":{"17":1}}],["提供更好的环境隔离",{"2":{"119":1}}],["提供更强的计算能力",{"2":{"11":1}}],["提供更强的处理能力",{"2":{"11":1}}],["提供更高的性能和更多的接口",{"2":{"11":1}}],["提供",{"2":{"10":1}}],["提供给开发者使用",{"2":{"10":1}}],["提供risc",{"2":{"0":2}}],["nm",{"2":{"113":2,"114":2}}],["n",{"2":{"62":1,"103":2,"112":1,"114":1}}],["nanhu",{"2":{"111":1,"112":2}}],["nano",{"2":{"51":4,"54":4,"82":4}}],["name",{"2":{"98":1,"107":1,"112":6}}],["navigation",{"2":{"22":1}}],["nvme",{"2":{"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6}}],["no",{"2":{"36":1,"61":2,"113":1}}],["not",{"2":{"33":1,"62":2,"103":2,"112":1,"113":1,"122":1,"123":2}}],["note",{"2":{"27":1,"62":1,"103":1}}],["necessary",{"2":{"62":1,"103":1}}],["needs",{"2":{"37":2,"110":2}}],["newlib",{"0":{"89":1},"2":{"89":1}}],["new",{"2":{"61":3,"112":3}}],["new\\t\\t",{"2":{"35":1}}],["news",{"2":{"35":7,"46":1,"48":1,"50":1,"59":1,"61":18}}],["nezha",{"2":{"1":1,"11":1,"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1}}],["返回值等",{"2":{"22":2}}],["类型的",{"2":{"113":1}}],["类似于问答社区",{"2":{"23":1}}],["类等的详细信息",{"2":{"22":2}}],["类名等的建议",{"2":{"22":1}}],["函数和类名的建议",{"2":{"22":1}}],["函数",{"2":{"22":3}}],["根据用户的输入选择镜像",{"2":{"62":1}}],["根据代码中的注释或特定的标记语言",{"2":{"22":1}}],["根据当前上下文",{"2":{"22":2}}],["根据编程语言的语法规则",{"2":{"22":1}}],["语言虚拟机等软件",{"2":{"125":1}}],["语言虚拟机或运行时环境",{"2":{"22":1}}],["语言运行时库",{"2":{"88":1}}],["语言插件",{"2":{"22":1}}],["语言执行环境",{"2":{"16":1}}],["语法高亮",{"2":{"22":1}}],["减少错误",{"2":{"22":2}}],["版本除非指定",{"2":{"113":1}}],["版本以及ruyisdk",{"2":{"90":1}}],["版本的",{"2":{"71":1}}],["版本的稳定二进制为",{"2":{"60":1,"64":1,"67":1}}],["版本识别",{"2":{"57":1}}],["版本中",{"2":{"55":1}}],["版本会忽略",{"2":{"52":1}}],["版本",{"2":{"51":1,"54":1,"55":1,"65":2,"68":2,"73":2,"74":1,"76":2,"79":1,"82":1,"90":2}}],["版本新增特性",{"0":{"48":1,"52":1,"55":1,"57":1,"59":1,"63":1,"66":1,"70":1,"74":1,"77":1,"80":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"78":1,"79":1,"81":1,"82":1}}],["版本开始支持矽速",{"2":{"80":1}}],["版本开始新增板卡镜像刷写功能",{"2":{"62":1}}],["版本开始新增新闻功能",{"2":{"61":1}}],["版本开始",{"2":{"32":1,"50":1,"51":1,"54":1,"69":1,"72":1,"77":1,"79":1,"82":1}}],["版本计划",{"0":{"25":1},"1":{"26":1,"27":1}}],["版本规划路线图",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1,"30":1}}],["版本控制集成",{"2":{"22":2}}],["版本信息",{"2":{"20":1}}],["错误检查",{"2":{"22":2}}],["智能感知",{"2":{"22":2}}],["智能家居",{"2":{"6":1}}],["管理依赖和库等",{"2":{"22":1}}],["导入现有项目",{"2":{"22":1}}],["组织和管理他们的risc",{"2":{"22":1}}],["组件管理器包含一个在线软件源",{"2":{"17":1}}],["待定",{"2":{"21":1,"22":1}}],["搜索",{"2":{"21":1}}],["或者任何你习惯的方式将代码下载到本地",{"2":{"118":1}}],["或更高的版本",{"2":{"61":3}}],["或",{"2":{"33":1,"44":1,"69":1,"92":1,"97":1,"106":1,"116":1,"117":1}}],["或工具链",{"2":{"27":1}}],["或目标运行环境",{"2":{"21":1}}],["或图形用户界面",{"2":{"17":1}}],["按照待编译程序自身的编译说明执行",{"2":{"119":1}}],["按照当前系统语言设置",{"2":{"55":1}}],["按照可适用的开发板",{"2":{"21":1}}],["按照可支持的扩展指令集搜索",{"2":{"21":1}}],["按照资源类型搜索",{"2":{"21":1}}],["按照版本搜索",{"2":{"21":1}}],["按照name搜索",{"2":{"21":1}}],["按照引导信息一步步执行即可",{"2":{"3":1,"14":1,"127":1}}],["卸载软件包",{"0":{"41":1}}],["卸载",{"0":{"42":1},"2":{"21":1,"46":1}}],["卸载和管理软件包",{"2":{"21":1}}],["用于处理生成",{"2":{"86":1}}],["用于将高级编程语言",{"2":{"85":1}}],["用于开发和构建",{"2":{"83":1}}],["用于管理工具链",{"2":{"44":1}}],["用于与在线软件源交互",{"2":{"21":2}}],["用户可以更具自己的程序进行调整",{"2":{"91":1}}],["用户可以根据自身硬件和使用场景进行选择",{"2":{"91":1}}],["用户可以根据自身需求调整",{"2":{"91":1}}],["用户运行",{"2":{"77":1}}],["用户注册量等信息进行统计",{"2":{"23":1}}],["用户的注册",{"2":{"23":1}}],["用户无需为环境搭建耗费精力",{"2":{"17":1}}],["用来汇聚关于",{"2":{"23":1}}],["xferd",{"2":{"122":1}}],["xfce",{"2":{"51":10,"54":10,"65":9,"68":10,"73":10,"76":10,"79":10,"82":10,"103":1}}],["xiangshan",{"2":{"111":1,"112":1}}],["x26",{"2":{"98":2,"107":2}}],["xventanacondops",{"2":{"92":2}}],["xcv",{"2":{"92":1}}],["xcvalu",{"2":{"92":1}}],["xcvmac",{"2":{"92":1}}],["xuantie",{"2":{"90":3,"92":1,"124":1}}],["x86",{"2":{"45":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"94":1,"105":1,"114":1}}],["xdg",{"2":{"34":1,"52":1,"55":1}}],["x3c",{"2":{"33":1,"38":5,"49":1,"53":1,"56":1,"58":1,"60":1,"61":2,"64":1,"67":1,"69":2,"71":1,"75":1,"78":1,"81":1,"114":3}}],["xz",{"2":{"32":2}}],["x这种多个版本",{"2":{"20":1}}],["xthead版本工具链",{"2":{"98":1}}],["xtheadvector",{"2":{"92":1}}],["xtheadsync",{"2":{"92":2}}],["xtheadfmemidx",{"2":{"92":2}}],["xtheadfmv",{"2":{"92":2}}],["xtheadmempair",{"2":{"92":2}}],["xtheadmemidx",{"2":{"92":2}}],["xtheadmac",{"2":{"92":2}}],["xtheadint",{"2":{"92":2}}],["xtheadcondmov",{"2":{"92":2}}],["xtheadcmo",{"2":{"92":2}}],["xtheadbs",{"2":{"92":2}}],["xtheadbb",{"2":{"92":2}}],["xtheadba",{"2":{"92":2}}],["xthead",{"2":{"20":1,"36":4,"37":1,"98":4,"110":1,"111":1,"112":4,"114":4,"124":2}}],["每种类型会产生诸如vx",{"2":{"20":1}}],["ucb",{"2":{"122":1,"123":1}}],["util",{"2":{"122":1,"123":1}}],["utils",{"2":{"32":1}}],["uboot",{"2":{"103":1}}],["ubuntu",{"2":{"21":1,"22":1,"32":1,"45":1,"47":1,"51":2,"54":2,"68":1,"73":2,"76":2,"79":2,"82":2,"102":1,"105":1}}],["udev",{"2":{"51":1,"54":1,"79":1,"82":1}}],["unknown",{"2":{"107":1,"108":1,"113":34,"119":1}}],["understand",{"2":{"62":1,"103":1}}],["under",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["uninstall",{"2":{"42":4,"46":1,"97":1,"106":1}}],["unmatched",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1}}],["usage",{"2":{"112":1}}],["usb",{"2":{"51":2,"54":2}}],["use",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"112":4}}],["user模式下执行rv64",{"2":{"120":1}}],["user模式下执行riscv64",{"2":{"109":1}}],["user",{"0":{"109":1},"2":{"36":2,"40":2,"62":1,"103":1,"107":2,"112":2,"114":2,"119":2,"124":2}}],["users",{"2":{"33":1}}],["usr",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1}}],["upload",{"2":{"122":1}}],["update执行报连接错误",{"2":{"116":1}}],["update",{"2":{"33":3,"34":1,"46":1,"61":5,"68":1,"97":1,"116":1}}],["upstream模拟器",{"2":{"119":1}}],["upstream",{"2":{"20":1,"36":6,"38":6,"40":4,"90":2,"92":1,"107":4,"111":4,"112":4,"113":4,"119":3,"124":4}}],["等系列扩展",{"2":{"92":1}}],["等",{"2":{"86":1,"91":1}}],["等属性信息",{"2":{"20":1}}],["等已经大规模硅化的草案",{"2":{"16":1}}],["示例",{"2":{"20":1}}],["库函数的实现",{"2":{"88":1}}],["库文件等",{"2":{"23":1}}],["库",{"2":{"20":1,"89":1}}],["包含三种工具链版本",{"2":{"90":1}}],["包含一些与编译",{"2":{"90":1}}],["包含工具",{"2":{"86":1}}],["包含但不限于openeuler",{"2":{"21":1,"22":1}}],["包版本号>",{"2":{"61":1}}],["包名>",{"2":{"61":1}}],["包括",{"2":{"85":1,"91":1}}],["包括对eclipse和vscode的支持",{"2":{"29":1}}],["包括预定义的模板或用户自定义的代码片段",{"2":{"22":1}}],["包括且不限于ruyi",{"2":{"20":1}}],["包管理工具快速查询和安装",{"2":{"117":1}}],["包管理工具默认的配置目录",{"2":{"116":1}}],["包管理工具的安装非常简单",{"2":{"116":1}}],["包管理工具",{"0":{"116":1}}],["包管理工具负责从在线软件源中获取软件包的信息",{"2":{"17":1,"21":1}}],["包管理在建立编译环境之前会检查该环境是否合法",{"2":{"111":1}}],["包管理是",{"2":{"44":1}}],["包管理时您需要手动进行该操作",{"2":{"42":1}}],["包管理被设计为避免进行需要超级用户权限的操作",{"2":{"42":1}}],["包管理自身的升级可能会需要超级用户权限",{"2":{"42":1}}],["包管理不询问而直接执行",{"2":{"42":2}}],["包管理不再依赖",{"2":{"32":1,"72":1}}],["包管理预置的配置可以使用",{"2":{"37":1,"110":1}}],["包管理支持",{"2":{"33":1}}],["包管理和库支持",{"2":{"22":1}}],["包管理器和工具的使用",{"2":{"121":1}}],["包管理器提供了不同组织发布的不同版本的gnu和llvm编译工具链",{"2":{"117":1}}],["包管理器具有良好的平台兼容性以及多发行版兼容性",{"2":{"45":1}}],["包管理器的问题和需求可以通过仓库issue反馈",{"2":{"44":1}}],["包管理器的过程",{"2":{"42":1}}],["包管理器的更新信息",{"2":{"35":1}}],["包管理器没有实现卸载",{"2":{"41":1}}],["包管理器同时管理一些源码包",{"2":{"39":1}}],["包管理器依赖一些外部工具",{"2":{"32":1}}],["包管理器工具使用",{"2":{"37":1,"110":1}}],["包管理器工具则是用于与在线软件源交互的工具",{"2":{"17":1}}],["包管理器工具并执行以下命令为设备安装系统",{"2":{"3":1,"127":1}}],["包管理器获取",{"2":{"9":1}}],["包管理器",{"0":{"8":1,"19":1,"33":1,"42":1,"44":1},"1":{"20":1,"21":1,"45":1,"46":1,"47":1},"2":{"42":2,"46":1,"69":1,"121":1}}],["包管理器等",{"2":{"5":1}}],["location",{"2":{"123":2}}],["locales",{"2":{"50":1}}],["local",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"61":2,"64":2,"67":2,"69":1,"71":1,"75":3,"78":3,"81":3,"97":1,"98":1,"106":1}}],["lflags",{"2":{"123":1}}],["lrt",{"2":{"122":2}}],["left",{"2":{"122":1}}],["lto",{"2":{"113":1,"114":1}}],["lt",{"2":{"98":1,"107":1}}],["lts",{"2":{"45":1,"47":1}}],["lmul=用于指定一个循环迭代中处理的向量元素的数量",{"2":{"91":1}}],["lp64",{"2":{"91":1,"92":1}}],["lp64e",{"2":{"91":1}}],["lp64d",{"2":{"91":1,"122":1}}],["lpi4a1590",{"2":{"98":1}}],["lpi4a",{"2":{"37":1,"98":1,"103":2,"110":1,"111":1,"112":2,"114":1}}],["ldd",{"2":{"113":1,"114":1}}],["ld",{"2":{"86":1,"113":2,"114":2,"122":1}}],["lz4",{"2":{"80":1}}],["lsb",{"2":{"122":1,"123":1}}],["ls",{"2":{"39":1,"98":2,"99":1,"107":1,"108":1,"113":1,"114":1}}],["llvm工具链",{"2":{"124":1}}],["llvm",{"0":{"93":1},"2":{"36":2,"111":2,"112":3,"124":1}}],["lldb",{"2":{"20":1}}],["latest",{"2":{"36":9,"38":1}}],["linked",{"2":{"122":1,"123":1}}],["link",{"2":{"99":1,"108":1,"119":1,"122":2,"123":2}}],["linux系统皆可",{"2":{"102":1}}],["linux64",{"2":{"99":1,"108":1,"119":1,"122":2,"123":1}}],["linux",{"2":{"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"78":1,"81":1,"82":1,"98":1,"99":1,"107":1,"108":1,"113":34,"114":33,"119":1,"122":5,"123":2}}],["lib",{"2":{"122":1}}],["libgcc",{"0":{"90":1}}],["libgit2",{"2":{"55":1}}],["library",{"0":{"88":1}}],["likely",{"2":{"62":1,"103":1}}],["list",{"2":{"33":3,"35":3,"36":3,"37":2,"46":2,"61":5,"98":2,"107":3,"110":2,"116":1,"117":1,"122":1,"123":1}}],["licensed",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["licenses",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["license",{"2":{"33":2,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":2,"75":2,"78":3,"81":3}}],["licheerv",{"2":{"51":4,"54":4,"82":4}}],["licheepi",{"2":{"1":1,"11":1,"51":9,"54":9,"62":1,"65":9,"68":9,"73":9,"76":9,"79":9,"82":9,"95":1,"96":1,"103":7}}],["lichee",{"2":{"1":1,"11":1,"51":12,"54":12,"65":2,"68":2,"73":2,"76":2,"79":2,"82":12,"103":1}}],["gz",{"2":{"122":3}}],["g++",{"2":{"113":1,"114":1}}],["gcov",{"2":{"113":3,"114":3}}],["gcc13",{"2":{"123":2}}],["gcc",{"0":{"83":1,"85":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1},"2":{"83":1,"85":3,"91":2,"98":1,"99":1,"107":1,"108":1,"113":6,"114":5,"119":1,"122":3,"123":1}}],["gfortran",{"2":{"113":1,"114":1}}],["g",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1}}],["gt",{"2":{"98":1,"107":1}}],["glibc",{"0":{"88":1},"2":{"89":1}}],["gprof",{"2":{"86":1,"113":1,"114":1}}],["group=",{"2":{"51":2,"54":2}}],["gnu工具链",{"2":{"124":1}}],["gnu",{"0":{"85":1,"86":1,"87":1,"88":1},"2":{"36":9,"38":6,"40":2,"83":1,"85":2,"90":2,"91":1,"98":4,"99":1,"107":3,"108":1,"111":8,"112":8,"113":37,"114":35,"119":2,"122":4,"123":2,"124":5}}],["gnu和llvm编译工具链",{"2":{"20":1}}],["github",{"2":{"33":1,"44":2,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"64":1,"69":1,"78":1,"81":1,"82":1,"97":2,"106":1,"116":1}}],["git",{"2":{"32":3,"69":2,"70":1,"72":1,"91":2,"118":1}}],["generic",{"2":{"37":1,"40":2,"51":16,"54":17,"65":4,"68":6,"73":6,"76":10,"79":10,"82":14,"107":1,"110":1,"111":4,"112":4,"113":3,"119":1}}],["generate",{"2":{"33":1}}],["generation",{"2":{"22":1}}],["get",{"2":{"32":2,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["gdb",{"0":{"87":1},"2":{"20":1,"113":2,"114":2}}],["gui未来可能提供",{"2":{"17":1}}],["gui",{"2":{"8":1,"21":1}}],["供参考",{"2":{"18":1}}],["这种现象是由于处理器架构的发展",{"2":{"124":1}}],["这个操作将从",{"2":{"122":1}}],["这个过程中您可以自主选择是否保留旧的软件包缓存和",{"2":{"42":1}}],["这个命令将会询问您以二次确认该操作",{"2":{"42":1}}],["这个命令使用预置的",{"2":{"40":1}}],["这和",{"2":{"40":1}}],["这里跳过具体事例",{"2":{"113":1}}],["这里列出了经过测试可用的配置组合",{"2":{"111":1}}],["这里未列举所有的情况",{"2":{"94":1}}],["这里提供示例规则仅供参考",{"2":{"51":1,"54":1}}],["这里以coremark为例",{"2":{"119":1}}],["这里以",{"2":{"33":1}}],["这里不同语言存在差异",{"2":{"22":1}}],["这些典型的场景供新用户参考和体验",{"2":{"94":1}}],["这些更新将以",{"2":{"27":1}}],["这些工具从包管理器中获取",{"2":{"22":1}}],["这有助于加快开发速度和提高效率",{"2":{"23":1}}],["这是由",{"2":{"40":1}}],["这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段",{"2":{"23":1}}],["这是一个初步的需求设想",{"2":{"18":1}}],["这可能涉及选择适当的编译选项",{"2":{"22":1}}],["这样可以最大限度地发挥其处理器的性能和功能",{"2":{"124":1}}],["这样可以支持同一个开发环境中同时安装不同的编译工具链版本",{"2":{"119":1}}],["这样的多样性为开发者提供了更多选择",{"2":{"124":1}}],["这样的一个开发者交流社区可以促进risc",{"2":{"23":1}}],["这样的平台可以快速解决开发过程中的疑问和难题",{"2":{"23":1}}],["这样",{"2":{"22":2}}],["这包括静态代码分析",{"2":{"22":1}}],["这包括创建新项目",{"2":{"22":1}}],["这一过程和x86下的开发",{"2":{"17":1}}],["说明",{"2":{"18":1,"116":1,"124":1}}],["模式下运行",{"0":{"109":1}}],["模拟运行",{"0":{"114":1,"120":1},"2":{"125":1}}],["模拟环境",{"2":{"95":1,"104":1}}],["模拟器的命令为",{"2":{"114":1}}],["模拟器的编译环境",{"2":{"40":1}}],["模拟器运行交叉编译的",{"2":{"112":2}}],["模拟器上成功执行的过程",{"2":{"104":1}}],["模拟器配置建立",{"2":{"98":1,"107":1}}],["模拟器",{"2":{"8":1,"17":1,"20":1,"44":1,"107":1,"120":1,"125":1}}],["模拟器等所需的工具",{"2":{"113":1}}],["模拟器等软件和工具都可以从ruyi",{"2":{"17":1}}],["模拟器等工具",{"2":{"17":1}}],["模拟器等",{"2":{"0":1,"10":1}}],["模块介绍",{"0":{"84":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":1}}],["模块需求说明",{"0":{"18":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1}}],["聚集risc",{"2":{"17":1}}],["目标代码格式是elf",{"2":{"124":1}}],["目标上调试他们的程序",{"2":{"87":1}}],["目标文件工具",{"2":{"86":1}}],["目标运行环境的risc",{"2":{"20":1}}],["目录建立",{"2":{"69":1}}],["目录建立包含",{"2":{"40":1}}],["目录下",{"2":{"61":1}}],["目录为",{"2":{"34":1}}],["目的是为risc",{"2":{"17":1}}],["目前ruyisdk已经提供的编译工具链有如下几种",{"2":{"124":1}}],["目前也有一些简单的使用案例供参考",{"2":{"121":1}}],["目前支持的命令如下",{"2":{"46":1}}],["目前经过测试可用的环境有",{"2":{"45":1}}],["目前计划中的里程碑版本有",{"2":{"26":1}}],["目前",{"2":{"11":1,"90":1}}],["目前在",{"2":{"6":1}}],["目前对硬件设备的集成主要体现在包管理器",{"2":{"1":1}}],["也可以使用",{"2":{"113":1}}],["也可通过调试工具进行代码调试",{"2":{"17":1}}],["也称为包管理器",{"2":{"17":1}}],["最佳实践等内容",{"2":{"23":1}}],["最后放入",{"2":{"116":1}}],["最后",{"2":{"22":1}}],["最后在模拟器或者risc",{"2":{"17":1}}],["最终希望",{"2":{"5":1}}],["想象一下",{"2":{"17":1}}],["并可以根据具体需求和目标平台选择适合的编译工具链版本",{"2":{"124":1}}],["并满足不同处理器版本的需求",{"2":{"124":1}}],["并在虚拟环境中配置了qemu模拟器",{"2":{"120":1}}],["并指定编译工具链为gnu",{"2":{"119":1}}],["并使其具有可执行权限",{"2":{"116":1}}],["并使用平头哥",{"2":{"114":1}}],["并且相互不冲突和影响",{"2":{"119":1}}],["并且改变提示符以提示当前进入编译环境中",{"2":{"113":1}}],["并且开始自动执行对应程序为用户自动部署",{"2":{"14":1}}],["并赋予其可执行权限",{"2":{"97":1}}],["并用",{"2":{"61":3}}],["并不会删除软件包缓存和安装的",{"2":{"42":1}}],["并进行远程调试和监视",{"2":{"22":1}}],["并观察变量的值",{"2":{"22":1}}],["并创建一个新的项目或工程",{"2":{"22":1}}],["并行编译能力",{"2":{"22":1}}],["并与其他开发者共享他们的插件",{"2":{"22":1}}],["并提供与其他竞争对手不同的优势",{"2":{"124":1}}],["并提供优化建议",{"2":{"22":1}}],["并提供更好的代码编写和维护体验",{"2":{"22":2}}],["并查看变量的值和内存的状态",{"2":{"22":1}}],["并给出相应的警告或错误提示",{"2":{"22":1}}],["并自动处理依赖关系的下载和安装",{"2":{"17":1,"21":1}}],["安装器",{"2":{"125":1}}],["安装目标程序运行所需的运行时环境",{"2":{"125":1}}],["安装编译工具链",{"0":{"117":1},"2":{"113":1,"114":1}}],["安装虚拟环境中使用的编译工具链",{"2":{"113":1}}],["安装qemu",{"2":{"107":1}}],["安装工具链",{"2":{"107":1}}],["安装操作系统",{"0":{"103":1}}],["安装适用于licheepi",{"2":{"98":1}}],["安装gnu",{"2":{"98":1}}],["安装它们",{"2":{"61":1}}],["安装源码包",{"0":{"39":1}}],["安装软件包",{"0":{"38":1}}],["安装依赖软件",{"0":{"32":1}}],["安装和管理各种python库和依赖项",{"2":{"22":1}}],["安装",{"0":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"116":1},"2":{"17":1,"21":1}}],["安装教程",{"2":{"10":1}}],["ticks",{"2":{"123":1}}],["time",{"2":{"122":3,"123":1}}],["title",{"2":{"61":2}}],["t",{"2":{"98":1,"107":1,"112":8,"113":2,"114":1,"119":1}}],["test",{"2":{"114":4}}],["testsuite",{"2":{"91":1}}],["testing",{"2":{"33":1,"106":1}}],["txt",{"2":{"61":1,"123":1}}],["tang",{"2":{"51":4,"54":4,"82":4}}],["target",{"2":{"91":1}}],["target系统镜像等内容",{"2":{"17":1}}],["tar",{"2":{"32":2,"122":3}}],["th1520",{"2":{"96":1}}],["that",{"2":{"62":3,"103":3}}],["thread",{"2":{"51":29,"54":29,"82":1}}],["them",{"2":{"61":1}}],["there",{"2":{"61":1,"113":1}}],["the",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"62":4,"78":3,"81":3,"103":12,"112":9,"113":1}}],["then",{"2":{"33":1,"62":1,"103":1}}],["this",{"2":{"33":2,"49":1,"53":1,"56":1,"58":1,"62":2,"78":1,"81":1,"103":2,"112":1,"113":1}}],["total",{"2":{"122":2,"123":2}}],["toml",{"2":{"69":3,"116":1}}],["tool",{"2":{"113":1,"114":1}}],["toolchain",{"2":{"33":1,"36":5,"40":1,"85":1,"111":1,"112":7}}],["tools",{"2":{"22":1}}],["to",{"2":{"33":2,"62":4,"103":7,"112":5,"122":2}}],["todo",{"2":{"8":1,"93":1,"121":1}}],["集成文档和教程",{"2":{"22":1}}],["集成一个risc",{"2":{"22":1}}],["集成risc",{"2":{"22":1}}],["集成",{"2":{"22":1}}],["集成开发环境来为开发者提供方便",{"2":{"125":1}}],["集成开发环境提供智能感知功能",{"2":{"22":1}}],["集成开发环境会根据编程语言的语法规则",{"2":{"22":1}}],["集成开发环境",{"2":{"17":1}}],["集成多种通信接口",{"2":{"11":1}}],["集中存储了risc",{"2":{"17":1}}],["培育运营一个活跃全面的开发者交流社区",{"2":{"16":1}}],["o2",{"2":{"122":2,"123":4}}],["override",{"2":{"112":1}}],["o",{"2":{"106":1,"114":1,"122":1,"123":2}}],["o3",{"2":{"91":1,"114":1}}],["objcopy",{"2":{"86":1,"113":1,"114":1}}],["objdump",{"2":{"86":1,"113":1,"114":1}}],["onlinedocs",{"2":{"85":1}}],["only",{"2":{"51":71,"54":71,"76":1,"79":1,"82":5}}],["onto",{"2":{"62":1,"103":1}}],["on",{"2":{"49":1,"51":9,"53":1,"54":9,"56":1,"58":1,"62":2,"65":6,"68":6,"73":6,"76":9,"78":1,"79":9,"81":1,"82":9,"103":3,"123":1}}],["one",{"2":{"38":1,"103":2,"112":1}}],["operation",{"2":{"123":1}}],["openwrt",{"2":{"51":1,"54":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["openkylin",{"2":{"51":1,"54":1,"73":1,"76":1,"79":1,"82":1}}],["openeuler",{"2":{"10":1,"32":1,"45":2,"47":1,"51":20,"54":20,"65":18,"68":20,"73":20,"76":20,"79":20,"82":20,"96":1,"103":2}}],["op>`",{"2":{"38":1}}],["op>",{"2":{"38":1}}],["options",{"2":{"33":1,"112":1}}],["official",{"2":{"49":1,"51":13,"53":1,"54":13,"56":1,"58":1,"65":4,"68":6,"73":6,"76":10,"78":1,"79":10,"81":1,"82":13}}],["of",{"2":{"33":2,"36":1,"38":1,"49":4,"53":4,"56":4,"58":4,"60":2,"64":2,"67":2,"71":2,"75":2,"78":4,"81":4,"112":4}}],["org",{"2":{"33":1,"49":2,"53":2,"56":2,"58":2,"60":1,"64":1,"67":1,"71":1,"75":1,"78":2,"81":2,"85":1,"86":1,"91":1}}],["or",{"2":{"16":1,"113":1}}],["标准和规范的演进",{"2":{"124":1}}],["标准和规范的演进以及特定应用需求等因素相互作用的结果",{"2":{"124":1}}],["标准",{"2":{"16":1}}],["和运行侧的risc",{"2":{"125":1}}],["和",{"2":{"16":1,"17":1,"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"85":1}}],["和物联网应用",{"2":{"11":1}}],["0x5275",{"2":{"123":1}}],["0x8e3a",{"2":{"123":1}}],["0x1fd7",{"2":{"123":1}}],["0xe714",{"2":{"123":1}}],["0xe9f5",{"2":{"123":1}}],["0>",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["05",{"2":{"30":5}}],["07",{"2":{"30":5}}],["09",{"2":{"30":5,"45":2,"47":1}}],["04",{"2":{"30":4,"45":1,"47":1,"102":1,"105":1}}],["08",{"2":{"30":7}}],["03",{"2":{"30":5}}],["02",{"2":{"30":3}}],["01",{"2":{"30":4,"61":8,"122":3}}],["0666",{"2":{"51":2,"54":2}}],["06",{"2":{"26":3,"30":7}}],["0",{"0":{"48":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"67":1,"70":1,"71":1,"74":1,"75":1,"80":1,"81":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"81":1,"82":1},"2":{"16":2,"32":1,"33":5,"36":18,"38":3,"49":11,"50":2,"51":2,"52":2,"53":11,"54":2,"55":3,"56":11,"57":2,"58":11,"60":10,"61":5,"62":2,"64":12,"65":2,"67":10,"68":2,"69":2,"71":6,"72":1,"73":2,"74":1,"75":9,"76":2,"77":2,"78":7,"79":2,"80":1,"81":11,"82":2,"85":1,"92":2,"97":6,"98":1,"106":2,"113":1,"114":1,"122":6,"123":8,"124":1}}],["尤其强调",{"2":{"16":1}}],["计划发布时间",{"2":{"26":6}}],["计划以每半年为一个里程碑版本周期来推动",{"2":{"26":1}}],["计划用三年时间为",{"2":{"15":1,"24":1}}],["计算库",{"2":{"16":1}}],["运行risc",{"0":{"128":1},"2":{"125":1}}],["运行",{"2":{"114":1}}],["运行构建出的",{"2":{"114":1}}],["运行验证",{"0":{"100":1}}],["运行的流程是一致的",{"2":{"17":1}}],["运行时或虚拟机",{"2":{"16":1}}],["运行环境主要是risc",{"2":{"125":1}}],["运行环境",{"2":{"8":1,"17":1,"20":1,"125":1}}],["固件",{"2":{"16":1}}],["都可以通过",{"2":{"16":2}}],["任何一款",{"2":{"16":1}}],["几乎",{"2":{"16":1}}],["年开始筹备",{"2":{"15":1,"24":1}}],["从软件源下载并解压指定的源码包",{"2":{"118":1}}],["从ruyi",{"2":{"97":1,"106":1}}],["从ruyisdk包管理器中下载和安装所需的编译工具链",{"2":{"17":1}}],["从ruyisdk开始使用设备",{"0":{"2":1},"1":{"3":1}}],["从该版本开始",{"2":{"68":1}}],["从本地软件包缓存中列出可用软件包",{"2":{"46":1,"117":1}}],["从配置的软件源更新本地软件包缓存",{"2":{"46":1,"116":1}}],["从中获得有价值的信息",{"2":{"23":1}}],["从",{"2":{"13":1,"15":1,"24":1,"33":1,"50":1,"51":1,"54":1,"61":1,"62":1,"64":1,"69":1,"72":1,"77":1,"79":1,"82":1}}],["架构的二进制",{"2":{"122":1}}],["架构的一些常见用法",{"2":{"91":1}}],["架构的目标文件",{"2":{"86":1}}],["架构的目标代码",{"2":{"85":1}}],["架构的软件",{"2":{"83":1}}],["架构的",{"2":{"83":1}}],["架构环境安装",{"2":{"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3}}],["架构环境为例进行安装",{"2":{"33":1}}],["架构编译环境",{"2":{"33":1}}],["架构图中的各种工具等",{"2":{"20":1}}],["架构示意图",{"0":{"12":1,"17":1}}],["架构设计的开发工具箱",{"2":{"9":1}}],["适用于嵌入式系统和其他资源受限的环境",{"2":{"89":1}}],["适用于边缘计算",{"2":{"11":1}}],["适用于入门级开发和教育用途",{"2":{"11":1}}],["适合入门和教育",{"2":{"11":1}}],["适合高性能开发和研究",{"2":{"11":1}}],["适合物联网应用",{"2":{"11":1}}],["适合嵌入式应用",{"2":{"11":1}}],["小巧灵活",{"2":{"11":1}}],["average",{"2":{"122":1}}],["available",{"2":{"33":1,"36":1,"62":1,"103":1}}],["about",{"2":{"103":1}}],["abi",{"2":{"92":1,"122":1,"123":1}}],["atom",{"2":{"112":3}}],["at",{"2":{"103":1}}],["attr",{"2":{"51":4,"54":4}}],["along",{"2":{"122":1,"123":1}}],["al",{"2":{"98":1,"99":1,"107":1,"108":1}}],["allow",{"2":{"62":2,"103":2}}],["all",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"62":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"103":1}}],["allwinner",{"2":{"1":1,"11":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6,"103":1}}],["a=tree",{"2":{"91":1}}],["as",{"2":{"62":3,"86":1,"103":3,"113":1,"114":1}}],["asked",{"2":{"62":1,"103":1}}],["ar",{"2":{"113":2,"114":2}}],["arguments",{"2":{"112":1}}],["arrange",{"2":{"62":1,"103":1}}],["are",{"2":{"61":1,"62":1,"103":3}}],["armbian",{"2":{"54":2,"55":1}}],["arm64",{"2":{"33":1,"49":4,"53":4,"56":4,"58":4,"75":4,"78":4,"81":4,"116":1}}],["amp",{"2":{"51":3,"54":3,"82":3,"102":1}}],["amd64",{"2":{"33":5,"49":4,"53":4,"56":4,"58":4,"60":4,"64":4,"67":4,"71":4,"75":4,"78":4,"81":4,"106":1,"116":1}}],["analyzer",{"2":{"36":1}}],["and",{"2":{"33":3,"62":2,"103":3,"112":1,"123":1}}],["add",{"2":{"113":1,"114":1}}],["addr2line",{"2":{"113":1,"114":1}}],["adapted",{"2":{"33":1}}],["admin",{"2":{"33":2,"46":1}}],["a",{"2":{"33":1,"62":2,"92":1,"103":2,"112":2,"113":1}}],["applicable",{"2":{"112":1}}],["apache",{"2":{"33":2,"49":2,"53":2,"56":2,"58":2,"60":2,"64":2,"67":2,"71":2,"75":2,"78":2,"81":2}}],["apt",{"2":{"32":2}}],["activate",{"2":{"98":1,"107":1,"113":4,"114":2,"119":1,"122":1}}],["account",{"2":{"62":1,"103":1}}],["access",{"2":{"62":2,"103":2}}],["academy",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["ac",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1}}],["autovec",{"2":{"39":1,"91":2}}],["auto",{"2":{"22":1}}],["aarch64",{"2":{"21":1,"22":1}}],["ai",{"2":{"11":2}}],["换而言之提供一个镜像站",{"2":{"10":1}}],["便于开发者获取相关镜像",{"2":{"10":1}}],["便捷的开发环境",{"2":{"5":1}}],["对于有开发经验或者开发目标的开发者而言",{"2":{"118":1}}],["对于不熟悉参数的用户",{"2":{"91":1}}],["对于一些嵌入式risc",{"2":{"89":1}}],["对于部分必须由用户手工下载的文件",{"2":{"55":1}}],["对主页累计访问量",{"2":{"23":1}}],["对你的代码进行着色",{"2":{"22":1}}],["对代码进行着色",{"2":{"22":1}}],["对",{"2":{"10":1,"92":1}}],["使用ruyisdk",{"0":{"125":1}}],["使用ruyi工具部署开发环境",{"0":{"98":1,"107":1}}],["使用编译环境进行",{"0":{"122":1},"1":{"123":1}}],["使用qemu",{"2":{"119":1}}],["使用平头哥",{"2":{"112":1}}],["使用平头哥工具链配置荔枝派",{"2":{"112":1}}],["使用上游",{"2":{"112":1}}],["使用的就是gnu",{"2":{"98":1}}],["使用示例",{"0":{"95":1,"104":1},"1":{"96":1,"97":1,"98":1,"99":1,"100":1,"105":1,"106":1,"107":1,"108":1,"109":1}}],["使用示例请参考",{"2":{"91":1}}],["使用时的两个常用参数",{"2":{"91":1}}],["使用说明",{"0":{"91":1}}],["使用下面的命令卸载",{"2":{"42":1}}],["使用默认镜像即可",{"2":{"34":1}}],["使用",{"2":{"23":1,"38":1,"39":1,"51":1,"54":1,"61":2,"65":1,"68":1,"70":1,"73":1,"76":1,"79":1,"82":1,"91":1,"112":4,"119":1}}],["使用集成开发环境提供的构建工具进行项目的构建",{"2":{"22":1}}],["使用语法高亮功能",{"2":{"22":1}}],["使用包管理器开发者可以获取该工具箱中的编译工具链",{"2":{"9":1}}],["使开发者能够根据自己的需求扩展和定制ide",{"2":{"22":1}}],["使开发者能够在ide中直接执行和调试代码片段",{"2":{"22":1}}],["使开发者能够方便地创建",{"2":{"22":1}}],["使开发者能够编译和构建基于risc",{"2":{"22":1}}],["使开发者能够设置断点",{"2":{"22":1}}],["使开发者能够轻松创建",{"2":{"22":1}}],["使开发者能够搜索",{"2":{"17":1,"21":1}}],["使得开发者从最开始的学习",{"2":{"6":1}}],["使得",{"2":{"5":1}}],["8888",{"2":{"51":1,"54":1}}],["8g",{"2":{"51":10,"54":10,"65":4,"68":4,"73":4,"76":4,"79":6,"82":10,"103":1}}],["8",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"8":1,"30":1,"36":1,"55":1,"77":1,"78":4,"79":1,"98":1,"103":1}}],["工具提供了为",{"2":{"103":1}}],["工具并为其赋可执行权限并配置到环境变量中",{"2":{"97":1,"106":1}}],["工具及其所有数据",{"2":{"97":1,"106":1}}],["工具搭建",{"2":{"95":1,"104":1}}],["工具安装到使用",{"2":{"95":1,"104":1}}],["工具新增了新闻支持",{"2":{"61":3}}],["工具刷写镜像前请务必留足磁盘空间",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["工具刷写镜像时",{"2":{"51":1,"54":1,"79":1,"82":1}}],["工具需要支持x86",{"2":{"21":1}}],["工具",{"2":{"8":1,"17":1,"20":1,"21":1}}],["工具链配置香山南湖编译环境",{"2":{"112":1}}],["工具链配置",{"2":{"112":1}}],["工具链与预置配置组合",{"0":{"111":1}}],["工具链版本",{"2":{"92":1}}],["工具链中各个工具的使用方法请参考其使用说明文档",{"2":{"91":1}}],["工具链侧重于提供稳定的工具链环境",{"2":{"90":1}}],["工具链侧重于使用",{"2":{"90":1}}],["工具链适合面向最新",{"2":{"90":1}}],["工具链是专门用于",{"2":{"83":1}}],["工具链介绍",{"0":{"83":1,"93":1},"1":{"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1}}],["工具链和",{"2":{"40":1}}],["工具链",{"2":{"5":1,"8":1,"16":1,"83":1,"111":1}}],["7654",{"2":{"51":1,"54":1}}],["7",{"0":{"74":1,"75":1},"1":{"75":1,"76":1},"2":{"8":1,"16":1,"30":1,"65":1,"75":4,"76":1,"92":1,"103":3}}],["源码并解包到当前目录",{"2":{"122":1}}],["源码可以直接从",{"2":{"122":1}}],["源码交叉编译并在",{"2":{"104":1}}],["源码本地编译并在",{"2":{"95":1}}],["源码等各种二进制软件包和源码包",{"2":{"44":1}}],["源码",{"2":{"8":1}}],["666",{"2":{"123":1}}],["64架构的个人电脑",{"2":{"125":1}}],["64m",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3}}],["64",{"2":{"45":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"85":1,"91":2,"94":2,"102":1,"104":1,"105":1,"114":1,"122":1,"123":1}}],["6",{"0":{"70":1,"71":1},"1":{"71":1,"72":1,"73":1},"2":{"8":1,"30":1,"32":1,"36":1,"71":3,"72":1,"73":1,"74":1,"103":1}}],["5",{"0":{"66":1,"67":1},"1":{"67":1,"68":1,"69":1},"2":{"8":1,"16":1,"30":1,"36":1,"55":1,"67":5,"68":1,"69":1,"70":1,"73":1,"97":3,"103":1}}],["42",{"2":{"123":1}}],["41",{"2":{"86":1}}],["4g",{"2":{"51":2,"54":2,"79":2,"82":2}}],["4",{"0":{"63":1,"64":1},"1":{"64":1,"65":1},"2":{"8":1,"30":1,"64":6,"65":1,"103":1,"122":1,"123":1}}],["4a的编译工具链gnu",{"2":{"98":1}}],["4a开发板",{"2":{"96":1}}],["4a开发板上运行的过程",{"2":{"95":1}}],["4a",{"2":{"1":1,"11":1,"51":19,"54":19,"62":2,"65":9,"68":9,"73":9,"76":9,"79":9,"82":19,"103":7,"112":1,"114":1}}],["391k",{"2":{"122":2}}],["32",{"2":{"85":1,"91":2}}],["38",{"2":{"45":1}}],["30000",{"2":{"123":1}}],["30",{"2":{"30":2}}],["3",{"0":{"59":1,"60":1},"1":{"60":1,"61":1,"62":1},"2":{"8":1,"30":1,"51":1,"54":1,"60":5,"61":4,"62":3,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1,"103":4,"119":1}}],["2k",{"2":{"123":1}}],["29",{"2":{"30":1,"52":1,"54":1}}],["2011",{"2":{"123":2}}],["20",{"2":{"30":4,"80":1,"82":1}}],["20240324",{"2":{"124":1}}],["20240512",{"2":{"106":1}}],["20240222",{"2":{"98":1}}],["2024",{"2":{"30":46,"61":8}}],["2024目标",{"0":{"29":1}}],["2024年12月",{"2":{"26":1}}],["2024年6月",{"2":{"26":1}}],["2025年12月",{"2":{"26":1}}],["2025年6月",{"2":{"26":1}}],["20230125",{"2":{"36":1}}],["20231118",{"2":{"36":6,"38":2}}],["20231114",{"2":{"36":1}}],["20231121",{"2":{"36":3}}],["20231210",{"2":{"45":1,"47":1}}],["20231212",{"2":{"36":6,"112":1,"113":1}}],["20231211",{"2":{"33":5}}],["20231207+g03813c9fe8",{"2":{"36":1}}],["2023年12月",{"2":{"26":1}}],["2023年6月",{"2":{"26":1}}],["2023",{"2":{"15":1,"24":1,"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":1}}],["21",{"2":{"30":2}}],["28",{"2":{"30":1,"48":1,"51":1}}],["22",{"2":{"30":3,"45":1,"47":1,"92":1,"102":1,"105":1}}],["27",{"2":{"30":1}}],["26",{"2":{"30":3}}],["256m",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3}}],["25",{"2":{"26":2,"30":3}}],["24",{"2":{"26":2,"30":4}}],["2345",{"2":{"51":1,"54":1}}],["23",{"2":{"26":2,"30":4,"45":2,"47":1}}],["2",{"2":{"8":1,"16":1,"27":1,"33":4,"36":2,"49":4,"51":1,"53":4,"54":1,"56":4,"58":4,"60":2,"61":3,"62":1,"64":2,"65":1,"67":2,"68":1,"71":2,"73":1,"75":2,"76":1,"78":4,"79":1,"81":4,"82":1,"85":1,"86":1,"98":1,"103":5,"113":1,"119":1}}],["1为要读取的新闻条目的序号或id",{"2":{"35":1}}],["18",{"2":{"30":1}}],["17",{"2":{"30":1,"36":1}}],["1703147196780",{"2":{"17":1}}],["151",{"2":{"52":1}}],["15",{"2":{"30":2,"61":5,"122":1,"123":1}}],["138k",{"2":{"51":4,"54":4,"82":4}}],["13",{"0":{"57":1,"58":1},"1":{"58":1},"2":{"30":1,"58":4,"74":1,"76":1,"85":1,"113":1}}],["11",{"0":{"52":1,"53":1},"1":{"53":1,"54":1},"2":{"30":7,"52":1,"53":4,"54":1,"55":1}}],["14911",{"2":{"123":1}}],["1404k",{"2":{"122":1}}],["1400k",{"2":{"122":1}}],["14",{"2":{"30":2,"61":3,"77":1,"79":1,"123":1}}],["100",{"2":{"122":2}}],["10",{"0":{"48":1,"49":1},"1":{"49":1,"50":1,"51":1},"2":{"30":7,"49":4,"50":1,"51":1,"106":1}}],["192",{"2":{"123":1}}],["19",{"2":{"30":3}}],["168",{"2":{"123":1}}],["16g",{"2":{"51":8,"54":8,"65":4,"68":4,"73":4,"76":4,"79":4,"82":8,"103":5}}],["16",{"2":{"30":3}}],["1234",{"2":{"51":1,"54":1}}],["12",{"0":{"55":1,"56":1},"1":{"56":1},"2":{"26":3,"30":8,"56":4,"57":1}}],["1",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"8":1,"16":1,"35":1,"36":5,"51":1,"54":1,"55":2,"61":3,"62":2,"65":1,"68":1,"73":1,"76":1,"78":4,"79":1,"82":1,"103":7,"119":1,"122":9,"123":5}}],["在运行侧",{"2":{"125":1}}],["在开发侧",{"2":{"125":1}}],["在开发过程中",{"2":{"22":1}}],["在最新的",{"0":{"123":1}}],["在安装完成后最常用的命令一般需要有",{"2":{"116":1}}],["在安装和ide初始设置时都已经被集成到",{"2":{"17":1}}],["在创建虚拟环境之前",{"2":{"113":1}}],["在虚拟环境下编译",{"0":{"113":1}}],["在venv",{"2":{"98":1}}],["在x86",{"2":{"94":1}}],["在编译和运行结束后",{"2":{"120":1}}],["在编译或者运行验证完毕后",{"2":{"113":1}}],["在编译器中开启",{"2":{"91":1}}],["在编写完代码后",{"2":{"22":1}}],["在编写代码的过程中",{"2":{"22":1}}],["在使用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["在使用普通用户调用",{"2":{"51":1,"54":1,"79":1,"82":1}}],["在本文档中家目录为",{"2":{"34":1}}],["在",{"2":{"34":1,"40":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"65":1,"67":2,"68":1,"71":1,"73":1,"75":3,"76":1,"78":3,"81":3,"114":1,"123":1}}],["在代码编写过程中",{"2":{"22":1}}],["在该文件中",{"2":{"22":1}}],["在该包管理器中",{"2":{"8":1}}],["在集成开发环境中",{"2":{"22":1}}],["在集成开发环境中增加",{"2":{"10":1}}],["在集成开发环境中增加risc",{"2":{"0":1}}],["在集成开发环境的文本编辑器中",{"2":{"22":1}}],["在项目中",{"2":{"22":1}}],["在输入代码的过程中自动弹出变量",{"2":{"22":1}}],["在线软件源即",{"2":{"17":1}}],["在线上也会有相应的论坛提供给开发者进行技术交流",{"2":{"10":1}}],["在我们的社区当中",{"2":{"10":1}}],["该命令将会返回工具目前所支持的risc",{"2":{"103":1}}],["该命令将列出所有可用的软件包",{"2":{"36":1}}],["该值将被使用",{"2":{"69":2}}],["该文件需要您自行在",{"2":{"69":1}}],["该文件默认存放在",{"2":{"61":1}}],["该目录在",{"2":{"61":1}}],["该指令会识别硬件信息",{"2":{"14":1}}],["该",{"2":{"9":1}}],["该包管理器是一个在线的软件源",{"2":{"8":1}}],["该项目旨在为",{"2":{"5":1}}],["功能持续更新中",{"2":{"46":1}}],["功能与上述cli接口类似",{"2":{"21":1}}],["功能",{"0":{"7":1},"1":{"8":1,"9":1,"10":1},"2":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":2}}],["而不是",{"2":{"89":1}}],["而需要用户自行扩展磁盘分区大小",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["而会导致软件包功能异常时",{"2":{"41":1}}],["而是使用",{"2":{"32":1,"72":1}}],["而",{"2":{"6":1,"42":1}}],["而在过往针对",{"2":{"6":1}}],["而言更具精简性",{"2":{"6":1}}],["操作系统",{"2":{"6":1}}],["iterations",{"2":{"123":2}}],["item",{"2":{"61":1}}],["items",{"2":{"48":1,"50":1,"61":1}}],["ip",{"2":{"123":1}}],["ilinux64",{"2":{"122":1,"123":1}}],["ilp32",{"2":{"91":1,"92":2}}],["ilp32e",{"2":{"91":1}}],["ilp32d",{"2":{"91":1}}],["if",{"2":{"62":1,"103":1,"112":1}}],["id",{"2":{"61":3}}],["idproduct",{"2":{"51":2,"54":2}}],["idvendor",{"2":{"51":2,"54":2}}],["ide中",{"2":{"22":1}}],["ide可以提供对这些工具的集成",{"2":{"22":1}}],["ide可以提供对虚拟环境的支持",{"2":{"22":1}}],["ide可以集成交互式解释器",{"2":{"22":1}}],["ide需要与这些解释器或虚拟机进行集成",{"2":{"22":1}}],["ide",{"0":{"9":1,"22":1},"2":{"9":1,"17":4,"20":1,"22":13}}],["i18n",{"0":{"50":1}}],["issue",{"2":{"52":1}}],["is",{"2":{"38":1,"62":2,"103":2,"113":2}}],["iscas",{"2":{"5":1,"33":3,"44":1,"49":4,"53":4,"56":4,"58":4,"60":3,"64":3,"67":3,"71":2,"75":4,"78":4,"81":4,"97":1,"106":2,"116":1,"122":1}}],["images",{"2":{"47":1,"61":2,"62":1,"103":1}}],["image",{"2":{"36":1,"103":2}}],["i",{"2":{"33":2,"51":3,"54":3,"82":3,"92":1,"99":1,"108":1,"117":1,"119":1,"122":2,"123":1}}],["info",{"2":{"122":4,"123":1}}],["information",{"2":{"33":2}}],["int",{"2":{"114":1}}],["interpreter",{"2":{"122":1}}],["intended",{"2":{"62":2,"103":2}}],["integration",{"2":{"22":1}}],["intelligent",{"2":{"22":1}}],["inc",{"2":{"113":1}}],["included",{"2":{"112":1}}],["include",{"2":{"112":1,"114":1}}],["inside",{"2":{"112":2}}],["institute",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["installation",{"2":{"33":1}}],["install",{"2":{"32":2,"33":3,"38":5,"41":1,"46":1,"61":1,"62":1,"98":2,"103":2,"107":3,"113":2,"114":1,"117":1}}],["index",{"2":{"69":2,"113":1,"114":1}}],["in",{"2":{"33":1,"38":1,"112":1,"123":1}}],["iot",{"2":{"6":1}}],["开始使用",{"2":{"64":1}}],["开始使用设备",{"2":{"13":1}}],["开始",{"0":{"31":1},"1":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1}}],["开始的第一步",{"2":{"14":1}}],["开源使其能够更加方便的运用在不同的领域",{"2":{"6":1}}],["开发环境目前更多的是x86",{"2":{"125":1}}],["开发环境",{"2":{"14":1,"125":1}}],["开发者在进行risc",{"2":{"125":1}}],["开发者往往都有自己的开发需求",{"2":{"118":1}}],["开发者管理",{"2":{"23":1}}],["开发者社区",{"0":{"23":1}}],["开发者交流社区则提供文档和教程",{"2":{"17":1}}],["开发者购买了",{"2":{"16":1}}],["开发者可以共享和下载与risc",{"2":{"23":2}}],["开发者可以发布问题",{"2":{"23":1}}],["开发者可以在ide中方便地查阅文档和学习相关知识",{"2":{"22":1}}],["开发者可以在ide中设置断点",{"2":{"22":1}}],["开发者可以指定任何常用的",{"2":{"16":1}}],["开发者可以使用模拟器或者在",{"2":{"9":1}}],["开发者可以轻松的通过",{"2":{"9":1}}],["开发者提供开发的便捷",{"2":{"5":1}}],["开发者提供一个完整的",{"2":{"15":1,"24":1}}],["开发者提供一个完善",{"2":{"5":1}}],["开发者提供一个便捷",{"2":{"5":1}}],["开发者快速上手",{"2":{"0":1,"10":1}}],["开发者获取指定开发板可用的os并可方便的安装os的安装",{"2":{"0":1}}],["开发资料和相关工具",{"2":{"0":1,"10":1}}],["开发板安装镜像都只需要执行",{"2":{"103":1}}],["开发板安装操作系统的功能",{"2":{"103":1}}],["开发板上本地编译并运行",{"2":{"94":1}}],["开发板上对自身的程序进行编写以及调试",{"2":{"9":1}}],["开发板",{"2":{"51":1,"54":1,"65":1,"68":1,"73":1,"76":1,"79":1,"82":1}}],["开发板系统的安装引导",{"0":{"43":1},"2":{"46":1,"101":1}}],["开发板系统安装引导程序",{"2":{"0":1}}],["开发板或模组",{"2":{"16":1}}],["开发板镜像相关信息以及下载",{"2":{"10":1}}],["开发板对应的演示程序",{"2":{"0":1,"10":1}}],["开发板适用镜像信息维护与下载",{"2":{"0":1}}],["相对路径目录名",{"2":{"113":1}}],["相比",{"2":{"6":1}}],["相关介绍内容",{"2":{"4":1}}],["是第一级别入口",{"2":{"23":1}}],["是第五代精简指令集",{"2":{"6":1}}],["是一个旨在提供给一个一体化集成开发环境的产品计划",{"2":{"15":1,"24":1}}],["是一个为",{"2":{"9":1}}],["是一个由中科院软件所",{"2":{"5":1}}],["背景",{"0":{"6":1}}],["为了充分利用这些新的指令集扩展",{"2":{"124":1}}],["为了方便验证risc",{"2":{"120":1}}],["为隔离化编译创建虚拟环境",{"2":{"119":1}}],["为新人用户提供了一些代码示例",{"2":{"118":1}}],["为激活编译环境用的脚本",{"2":{"113":1}}],["为任一型号的",{"2":{"103":1}}],["为各种不同厂家",{"2":{"101":1}}],["为risc",{"0":{"101":1,"127":1},"1":{"102":1,"103":1},"2":{"125":1}}],["为例",{"2":{"95":1,"103":1,"104":1}}],["为",{"2":{"92":1}}],["为方便您及时了解",{"2":{"61":3}}],["为设备安装系统",{"2":{"43":1}}],["为全球的",{"2":{"5":1}}],["为什么会有",{"2":{"4":1}}],["以满足其特定的需求",{"2":{"124":1}}],["以满足不同开发者的需求",{"2":{"22":1}}],["以隔离不同版本的编译工具链及库文件等",{"2":{"119":1}}],["以",{"2":{"103":1}}],["以上",{"2":{"103":1}}],["以开源基准测试程序",{"2":{"95":1,"104":1}}],["以下案例是使用ruyisdk搭建相关的开发或运行环境来实现的",{"2":{"94":1}}],["以下是本文相关内容",{"2":{"4":1}}],["以获得更高的程序性能",{"2":{"91":1}}],["以提供更好的性能",{"2":{"124":1}}],["以提供更高的性能",{"2":{"124":1}}],["以提权",{"2":{"62":1}}],["以提高开发效率",{"2":{"22":1}}],["以支持在",{"2":{"88":1}}],["以支持",{"2":{"55":1}}],["以尝试重试安装该软件包",{"2":{"41":1}}],["以增强开发环境的功能和灵活性",{"2":{"23":1}}],["以增强可读性和代码理解性",{"2":{"22":2}}],["以解决代码中的错误和问题",{"2":{"22":1}}],["以帮助你编写正确的代码",{"2":{"22":1}}],["以帮助开发者更轻松",{"2":{"22":1}}],["以帮助开发者学习和使用risc",{"2":{"22":1}}],["以帮助开发者编写更高效和可靠的risc",{"2":{"22":1}}],["以帮助开发者编写正确的代码",{"2":{"22":1}}],["以帮助开发者改善代码的结构和可维护性",{"2":{"22":1}}],["以进行程序的调试和分析",{"2":{"22":1}}],["以便开发者能够方便地搜索",{"2":{"22":1}}],["以便进行快速的实验和调试",{"2":{"22":1}}],["以便在ide中直接运行和调试python代码",{"2":{"22":1}}],["以便快速插入常用代码块",{"2":{"22":1}}],["以便快速定位和浏览代码",{"2":{"22":2}}],["以便调试和排查代码中的问题",{"2":{"22":1}}],["以加快编码速度和减少拼写错误",{"2":{"22":2}}],["以及不同risc",{"2":{"85":1}}],["以及处理依赖关系",{"2":{"22":1}}],["以及我们会举办一定的线下活动获得来自用户的反馈",{"2":{"10":1}}],["以及建设并运营一个完善的社区以便开发者交流",{"2":{"5":1}}],["成为主流架构",{"2":{"5":1}}],["其它高级语言",{"2":{"128":1}}],["其他均为工具链二进制",{"2":{"113":1}}],["其他开发者可以回答问题或提供解决方案",{"2":{"23":1}}],["其他开发者可以回复和讨论",{"2":{"23":1}}],["其他开发者可以浏览和评论这些文章",{"2":{"23":1}}],["其输入参数可以参考",{"2":{"91":1}}],["其默认参数在",{"2":{"91":2}}],["其中",{"2":{"36":1}}],["其中涵盖多种操作系统",{"2":{"10":1}}],["其最终目标是希望为",{"2":{"5":1}}],["其提供了相关最新的硬件信息",{"2":{"5":1}}],["如java程序",{"2":{"128":1}}],["如安装编译工具链",{"2":{"125":1}}],["如编译器",{"2":{"83":1}}],["如编译工具链有不同厂商发布的",{"2":{"20":1}}],["如包管理器能力迭代",{"2":{"27":1}}],["如代码示例",{"2":{"23":1}}],["如果无可自己创建",{"2":{"116":1}}],["如果软件源中有新增的新闻条目",{"2":{"61":3}}],["如果软件包显示",{"2":{"36":1}}],["如果您使用",{"2":{"61":3}}],["如果在意这个问题请跳过这个版本",{"2":{"52":1}}],["如果希望删除所有缓存和安装了的软件包以实现干净的卸载",{"2":{"42":1}}],["如果希望",{"2":{"42":2}}],["如果想安装某个历史版本的gnu",{"2":{"38":1}}],["如果遇到技术问题",{"2":{"22":1}}],["如果需要提高图像识别程序的性能",{"2":{"22":1}}],["如果代码需要调试",{"2":{"17":1}}],["如跳转到函数的定义处",{"2":{"22":1}}],["如跳转到定义处",{"2":{"22":1}}],["如图像识别算法的逻辑和实现",{"2":{"22":1}}],["如python是pip",{"2":{"22":1}}],["如python具有交互式解释器",{"2":{"22":1}}],["如python开发中通常会使用虚拟环境",{"2":{"22":1}}],["如python需要在运行时依赖于相应的解释器或语言虚拟机",{"2":{"22":1}}],["如cpython",{"2":{"22":1}}],["如git",{"2":{"22":1}}],["如gnu和llvm目前有三种类型",{"2":{"20":1}}],["如重命名",{"2":{"22":1}}],["如类型",{"2":{"22":2}}],["如基于",{"2":{"10":1}}],["如",{"2":{"5":1,"38":1,"85":1}}],["软件仓库中下载",{"2":{"122":1}}],["软件环境",{"2":{"96":1,"105":1}}],["软件包",{"2":{"42":2,"69":1}}],["软件包安装进程或做了其他非预期操作",{"2":{"41":1}}],["软件包的功能",{"2":{"41":1}}],["软件包前缀表示分类",{"2":{"36":1}}],["软件包缓存将存放在用户目录中",{"2":{"34":1}}],["软件下载次数",{"2":{"23":1}}],["软件源中下载",{"2":{"122":1}}],["软件源下载编译",{"2":{"118":1}}],["软件源内包的元数据包含并不限于",{"2":{"20":1}}],["软件源的管理内容包括以下内容",{"2":{"20":1}}],["软件更新",{"2":{"16":1}}],["软件开发等领域都有应用",{"2":{"6":1}}],["软件层面提供了镜像",{"2":{"5":1}}],["软件支持",{"2":{"5":1}}],["所启动的开源项目",{"2":{"5":1}}],["介绍",{"0":{"5":1,"15":1}}],["我们建议创建虚拟环境并在虚拟环境中进行编译操作",{"2":{"119":1}}],["我们为",{"2":{"61":3}}],["我们希望",{"2":{"22":1}}],["我们提供了如下内容",{"2":{"8":1}}],["我该从何开始",{"2":{"4":1}}],["我可以在什么设备上运行",{"2":{"4":1}}],["的裸机工具链",{"2":{"124":1}}],["的更多命令和命令具体使用方法详见",{"2":{"121":1}}],["的操作参考如下",{"2":{"114":1}}],["的编译",{"2":{"95":1,"104":1}}],["的向量化特性",{"2":{"91":1}}],["的各个扩展与新特性",{"2":{"90":1}}],["的源代码翻译成",{"2":{"85":1}}],["的核心组件之一",{"2":{"85":1}}],["的依赖",{"2":{"70":1}}],["的位置",{"2":{"61":1}}],["的开发动态",{"2":{"61":3}}],["的开发面临的问题在于相关资讯没有统一的平台",{"2":{"6":1}}],["的虚拟环境十分类似",{"2":{"40":1}}],["的虚拟环境类似",{"2":{"37":1,"110":1}}],["的方式公开",{"2":{"27":1}}],["的不断完善",{"2":{"26":1}}],["的支持",{"2":{"22":1,"61":4}}],["的特性",{"2":{"22":1}}],["的组成",{"2":{"17":1}}],["的目标",{"0":{"16":1}}],["的",{"2":{"10":1,"38":1,"54":1,"55":1,"123":1}}],["的出现就是为了解决这些问题",{"2":{"6":1}}],["的原理是什么",{"2":{"4":1}}],["的信息维护和下载",{"2":{"0":1,"10":1}}],["什么是",{"2":{"4":1}}],["欢迎来到",{"2":{"4":1}}],["h>",{"2":{"114":1}}],["have",{"2":{"103":1}}],["hand",{"2":{"103":1}}],["hardware",{"2":{"103":1}}],["has",{"2":{"103":1}}],["heap",{"2":{"123":2}}],["headless",{"2":{"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1}}],["here",{"2":{"123":1}}],["help",{"2":{"33":3,"62":2,"103":2,"106":1,"107":1,"112":2}}],["hello",{"0":{"4":1},"2":{"114":2}}],["host",{"2":{"36":1,"62":1,"103":1}}],["home",{"2":{"34":3,"52":1,"55":1,"61":2,"69":2,"98":1,"122":1}}],["h",{"2":{"33":1,"35":2,"46":1,"98":1,"112":3,"119":1}}],["https",{"2":{"33":2,"44":1,"49":6,"51":1,"53":6,"54":1,"56":6,"58":6,"60":3,"64":3,"67":3,"69":2,"71":2,"75":4,"78":6,"81":6,"82":1,"85":1,"86":1,"91":1,"97":1,"106":1,"122":1}}],["highlighting",{"2":{"22":1}}],["hifive",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1}}],["bit",{"2":{"122":1,"123":1}}],["binaries",{"2":{"98":1}}],["binary",{"2":{"36":1}}],["binutils",{"0":{"86":1},"2":{"86":1}}],["bin",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"98":3,"106":1,"107":2,"113":3,"114":2,"119":1,"122":1}}],["bfd",{"2":{"113":1,"114":1}}],["bgcc",{"2":{"99":1,"108":1,"119":1,"122":1}}],["b",{"2":{"91":1,"99":1,"108":1,"119":1,"122":1}}],["branch",{"2":{"69":1}}],["by",{"2":{"62":1,"103":2}}],["buildid",{"2":{"122":1,"123":1}}],["buildroot",{"2":{"51":8,"54":8,"65":4,"68":4,"73":4,"76":6,"79":6,"82":8}}],["but",{"2":{"62":1,"103":1}}],["blobs",{"2":{"61":1}}],["beforehand",{"2":{"62":1,"103":1}}],["be",{"2":{"38":1,"62":2,"103":2}}],["beta",{"2":{"33":2,"106":1}}],["base",{"2":{"51":8,"54":8,"65":7,"68":8,"73":8,"76":8,"79":8,"82":8}}],["bashriscv64",{"2":{"107":1}}],["bashruyi",{"2":{"59":1,"63":1,"97":3,"98":3,"103":1,"106":3,"107":6,"109":2}}],["bashls",{"2":{"107":1}}],["bashwget",{"2":{"106":1}}],["bashfile",{"2":{"99":1,"108":1}}],["bashmake",{"2":{"99":1,"108":1}}],["bashmkdir",{"2":{"98":1,"107":1}}],["bashsed",{"2":{"99":1,"108":1}}],["bash",{"2":{"46":1,"97":1,"98":1,"100":1,"112":1,"113":2,"114":2,"116":1,"117":1,"118":1,"119":1,"120":1,"122":4,"123":3}}],["bash$",{"2":{"3":1,"14":1,"32":2,"33":2,"34":1,"35":1,"36":2,"37":1,"38":3,"39":1,"40":1,"42":4,"43":1,"49":4,"53":4,"56":4,"58":4,"60":3,"61":4,"62":1,"64":3,"67":3,"69":1,"71":2,"75":4,"78":4,"81":4,"110":1,"112":1,"113":5,"114":4,"122":1,"123":1,"127":1}}],["baremetal",{"2":{"37":1,"110":1,"111":1}}],["board",{"2":{"36":1,"61":2,"103":2}}],["box",{"2":{"1":1,"11":1,"51":4,"54":4,"62":1,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1}}],["bzip2",{"2":{"32":2}}],["performance",{"2":{"123":1}}],["performed",{"2":{"122":1,"123":1}}],["positional",{"2":{"112":1}}],["port",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1}}],["portme",{"2":{"99":1,"108":1,"119":1,"122":2,"123":1}}],["pc上实现从",{"2":{"104":1}}],["pc",{"2":{"102":1}}],["pc+linux",{"2":{"94":1}}],["p=gcc",{"2":{"91":1}}],["pick",{"2":{"62":1,"103":2}}],["pine64",{"2":{"54":4,"55":1}}],["pioneer",{"2":{"1":1,"11":1,"51":11,"54":11,"62":1,"65":11,"68":11,"73":11,"76":11,"79":11,"82":11,"103":1}}],["please",{"2":{"62":1,"103":3,"123":1}}],["pleasure",{"2":{"62":1,"103":1}}],["plugdev",{"2":{"51":2,"54":2}}],["platformio",{"2":{"51":4,"54":4}}],["plctxthead",{"2":{"98":1,"99":1,"114":33}}],["plct",{"2":{"20":1,"36":6,"98":5,"111":6,"112":7,"114":2,"122":3,"123":1,"124":4}}],["purpose",{"2":{"113":1}}],["purge",{"2":{"42":2,"97":1,"106":1}}],["putchar",{"2":{"114":1}}],["put",{"2":{"103":1,"123":1}}],["public",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["particular",{"2":{"113":1}}],["param=riscv",{"2":{"91":2}}],["parameters",{"2":{"123":1}}],["parameter",{"2":{"38":1}}],["path",{"2":{"69":1,"112":1}}],["packages",{"2":{"33":2,"36":1,"62":1,"69":3,"103":2}}],["package",{"2":{"33":3,"98":1,"107":1,"112":3,"122":2}}],["preference=用于告知编译器输入向量的长度",{"2":{"91":1}}],["prereleases",{"2":{"69":1}}],["prerelease",{"2":{"36":2,"57":1}}],["pre",{"2":{"36":1,"69":1}}],["proceed",{"2":{"103":1}}],["pro",{"2":{"51":4,"54":4,"82":4}}],["project",{"2":{"49":2,"53":2,"56":2,"58":2,"78":2,"81":2}}],["profiles",{"2":{"37":2,"46":1,"92":1,"98":1,"107":1,"110":2}}],["profile",{"2":{"33":1,"111":1,"112":3,"113":1}}],["provisioning",{"2":{"62":1,"103":1}}],["provision查询",{"2":{"11":1}}],["provision",{"2":{"3":1,"14":1,"43":1,"62":2,"103":1,"112":1,"127":1}}],["provision命令查询",{"2":{"1":1}}],["printf",{"2":{"114":1}}],["print",{"2":{"33":2}}],["pygit2",{"2":{"32":1,"55":1,"70":1,"72":1}}],["python等",{"2":{"128":1}}],["python",{"2":{"22":1,"40":1,"49":1,"51":2,"53":1,"54":2,"56":1,"58":1,"65":2,"68":2,"73":2,"76":2,"78":1,"79":2,"81":1,"82":2,"113":1}}],["png",{"2":{"17":1}}],["c程序",{"2":{"128":1}}],["crcfinal",{"2":{"123":1}}],["crcstate",{"2":{"123":1}}],["crcmatrix",{"2":{"123":1}}],["crclist",{"2":{"123":1}}],["cc",{"2":{"113":1,"114":1}}],["cd",{"2":{"97":1,"98":1,"107":1,"114":1,"122":1}}],["cluster",{"2":{"51":5,"54":5,"82":5}}],["cli",{"2":{"21":1}}],["certifi",{"2":{"49":3,"53":3,"56":3,"58":3,"78":3,"81":3}}],["cat",{"2":{"69":1,"114":1}}],["card",{"2":{"51":3,"54":3,"76":3,"79":3,"82":3}}],["canmv",{"2":{"51":2,"54":2,"68":2,"73":2,"76":2,"79":2,"82":2}}],["can",{"2":{"49":1,"53":1,"56":1,"58":1,"61":1,"78":1,"81":1}}],["canaan",{"2":{"1":1,"11":1,"51":7,"54":7,"68":4,"73":4,"76":4,"79":4,"82":7,"103":1}}],["cache",{"2":{"34":3,"69":1,"122":1}}],["currently",{"2":{"62":1,"103":1}}],["current",{"2":{"33":1,"36":1,"122":2}}],["c",{"0":{"88":1},"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"85":1,"88":2,"89":1,"92":1,"113":1,"114":3,"122":6,"123":6}}],["cpp",{"2":{"113":1,"114":1}}],["cpu",{"2":{"90":1}}],["cp",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1}}],["cn",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1}}],["choose",{"2":{"103":1}}],["choice",{"2":{"62":1,"103":4}}],["chosen",{"2":{"33":1,"103":1}}],["ch592x",{"2":{"51":4,"54":4}}],["ch582f",{"2":{"51":4,"54":4}}],["ch32v307vct6",{"2":{"51":1,"54":1}}],["ch32v307wcu6",{"2":{"51":1,"54":1}}],["ch32v307rct6",{"2":{"51":1,"54":1}}],["ch32v307",{"2":{"51":10,"54":10}}],["ch32v305rbt6",{"2":{"51":1,"54":1}}],["ch32v305gbu6",{"2":{"51":1,"54":1}}],["ch32v305fbp6",{"2":{"51":1,"54":1}}],["ch32v305",{"2":{"51":10,"54":10}}],["ch32v303vct6",{"2":{"51":1,"54":1}}],["ch32v303rct6",{"2":{"51":1,"54":1}}],["ch32v303rbt6",{"2":{"51":1,"54":1}}],["ch32v303cbt6",{"2":{"51":1,"54":1}}],["ch32v303",{"2":{"51":13,"54":13}}],["ch32v208wbu6",{"2":{"51":1,"54":1}}],["ch32v208rbt6",{"2":{"51":1,"54":1}}],["ch32v208gbu6",{"2":{"51":1,"54":1}}],["ch32v208cbu6",{"2":{"51":1,"54":1}}],["ch32v208",{"2":{"51":13,"54":13}}],["ch32v203rbt6",{"2":{"51":1,"54":1}}],["ch32v203k8t6",{"2":{"51":1,"54":1}}],["ch32v203k6t6",{"2":{"51":1,"54":1}}],["ch32v203g8r6",{"2":{"51":1,"54":1}}],["ch32v203g6u6",{"2":{"51":1,"54":1}}],["ch32v203f8u6",{"2":{"51":1,"54":1}}],["ch32v203f8p6",{"2":{"51":1,"54":1}}],["ch32v203f6p6",{"2":{"51":1,"54":1}}],["ch32v203c8u6",{"2":{"51":1,"54":1}}],["ch32v203c8t6",{"2":{"51":1,"54":1}}],["ch32v203c6t6",{"2":{"51":1,"54":1}}],["ch32v203",{"2":{"51":34,"54":34}}],["ch32v103r8t6",{"2":{"51":1,"54":1}}],["ch32v103c8u6",{"2":{"51":1,"54":1}}],["ch32v103c8t6",{"2":{"51":1,"54":1}}],["ch32v103c6t6",{"2":{"51":1,"54":1}}],["ch32v103",{"2":{"51":17,"54":17}}],["chinese",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["chisel等不同的语言类型",{"2":{"22":1}}],["chmod",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":1,"106":1}}],["checking",{"2":{"22":1}}],["c++filt",{"2":{"113":1,"114":1}}],["c++源代码文件",{"2":{"22":1}}],["c++",{"2":{"22":1,"85":1,"113":1,"114":1}}],["copying",{"2":{"113":1}}],["copyright",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":1}}],["correct",{"2":{"123":1}}],["corresponding",{"2":{"103":1}}],["core",{"2":{"99":1,"108":1,"119":1,"122":7,"123":6}}],["coremark可执行程序",{"2":{"100":1,"109":1,"120":1}}],["coremark",{"0":{"109":1,"122":1},"1":{"123":1},"2":{"36":1,"95":2,"98":3,"99":1,"100":1,"104":2,"107":3,"108":1,"109":1,"119":1,"120":1,"122":15,"123":11}}],["collection",{"0":{"85":1}}],["conditions",{"2":{"113":1}}],["conda等",{"2":{"22":1}}],["config",{"2":{"69":6,"116":2}}],["configurations",{"2":{"103":1}}],["configuration",{"2":{"62":2,"103":2}}],["configured",{"2":{"33":2}}],["continue",{"2":{"62":1,"103":1}}],["control",{"2":{"22":1}}],["console",{"2":{"51":5,"54":5,"82":5}}],["code",{"2":{"22":3,"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"123":1}}],["compile",{"2":{"122":1,"123":1}}],["compiler",{"0":{"85":1},"2":{"123":2}}],["completion",{"2":{"22":1}}],["commands",{"2":{"62":1,"103":1}}],["community",{"0":{"10":1}}],["com",{"2":{"44":1,"49":1,"51":1,"53":1,"54":1,"56":1,"58":1,"69":1,"78":1,"81":1,"82":1,"97":1}}],["cisc",{"2":{"6":1}}],["cm",{"2":{"1":1,"11":1,"51":3,"54":3,"76":3,"79":3,"82":3}}],["m",{"2":{"92":1}}],["m8",{"2":{"91":1}}],["m4",{"2":{"91":1}}],["m2",{"2":{"91":1}}],["m1",{"2":{"91":1}}],["mkdir",{"2":{"69":1,"122":1}}],["most",{"2":{"62":1,"103":1}}],["mode=",{"2":{"51":2,"54":2}}],["mozilla",{"2":{"49":2,"53":2,"56":2,"58":2,"78":2,"81":2}}],["mpl",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["md",{"2":{"39":1}}],["myon",{"2":{"34":1,"122":1}}],["memory",{"2":{"123":2}}],["merchantability",{"2":{"113":1}}],["mega",{"2":{"51":4,"54":4,"82":4}}],["message",{"2":{"33":1,"112":1}}],["meles",{"2":{"1":1,"11":1,"51":5,"54":5,"77":1,"79":5,"82":5}}],["mirror",{"2":{"33":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"106":1,"122":1}}],["milkv",{"0":{"123":1},"2":{"37":1,"76":1,"77":1,"110":1,"111":1,"112":3,"122":10,"123":7}}],["milk",{"2":{"1":7,"11":7,"51":35,"54":35,"62":2,"65":18,"68":18,"73":18,"76":30,"79":35,"82":35,"103":2}}],["matrix",{"2":{"122":1,"123":1}}],["match",{"2":{"38":1}}],["mak",{"2":{"99":1,"108":1,"119":1,"122":1}}],["make",{"2":{"62":1,"103":1,"119":1,"122":1,"123":1}}],["makes",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["mabi",{"2":{"91":1}}],["march=rv64gc",{"2":{"91":1}}],["march=rv64gcv",{"2":{"91":1}}],["march",{"2":{"91":3}}],["mars",{"2":{"1":2,"11":2,"51":6,"54":6,"76":6,"79":6,"82":6}}],["main",{"2":{"69":1,"114":1,"122":1,"123":1}}],["maix",{"2":{"51":3,"54":3,"82":3}}],["managing",{"2":{"33":1}}],["manage",{"2":{"33":1}}],["manager",{"2":{"33":1}}],["management",{"2":{"22":1}}],["svnapot",{"2":{"92":1}}],["svinval",{"2":{"92":1}}],["spent",{"2":{"122":1}}],["speed",{"2":{"122":2}}],["specifier",{"2":{"112":3}}],["spec",{"2":{"91":1}}],["spike",{"2":{"20":1}}],["scp",{"2":{"123":1}}],["scalable输入",{"2":{"91":1}}],["sciences",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["str=",{"2":{"122":1,"123":1}}],["stripped",{"2":{"122":1,"123":1}}],["strip",{"2":{"113":1,"114":1}}],["strings",{"2":{"113":1,"114":1}}],["stdio",{"2":{"114":1}}],["storage",{"2":{"62":1,"103":1}}],["statically",{"2":{"123":1}}],["static",{"2":{"123":5}}],["state",{"2":{"52":1,"55":1,"61":3,"122":1,"123":1}}],["star64",{"2":{"54":4,"55":1}}],["starfive",{"2":{"1":2,"11":2,"51":8,"54":8,"65":8,"68":8,"73":8,"76":8,"79":8,"82":8,"103":2}}],["sh",{"2":{"123":1}}],["sha1",{"2":{"122":1,"123":1}}],["share",{"2":{"61":1,"98":1}}],["should",{"2":{"38":1,"62":2,"103":2}}],["show",{"2":{"33":1,"112":1}}],["sd",{"2":{"51":3,"54":3,"76":3,"79":3,"82":3}}],["sdk",{"2":{"51":81,"54":81,"65":4,"68":6,"73":6,"76":10,"79":10,"82":15}}],["slug",{"2":{"36":7}}],["so",{"2":{"62":1,"103":1,"122":1}}],["somehow",{"2":{"62":1,"103":1}}],["some",{"2":{"62":1,"103":1}}],["sourceware",{"2":{"86":1}}],["sources",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1,"113":1}}],["source",{"2":{"36":3,"113":3}}],["software",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1,"113":2}}],["sec",{"2":{"123":1}}],["secs",{"2":{"123":1}}],["sed",{"2":{"119":1,"122":1}}],["seedcrc",{"2":{"123":1}}],["see",{"2":{"113":1,"123":1}}],["server",{"2":{"51":1,"54":1,"73":1,"76":1,"79":1,"82":1}}],["self",{"2":{"33":2,"42":4,"46":1,"97":1,"106":1}}],["sense",{"2":{"22":1}}],["such",{"2":{"62":1,"103":1}}],["subsystem==",{"2":{"51":2,"54":2}}],["subcommands",{"2":{"33":2}}],["sudo",{"2":{"32":2,"33":1,"49":3,"51":1,"53":3,"54":1,"56":3,"58":3,"60":2,"62":3,"64":2,"65":1,"67":2,"68":1,"71":1,"73":1,"75":3,"76":1,"78":3,"79":1,"81":3,"82":1,"97":2,"103":2,"106":1}}],["supported",{"2":{"62":1,"103":2}}],["support",{"2":{"22":1}}],["sail",{"2":{"22":1}}],["snippet",{"2":{"22":1}}],["sysv",{"2":{"122":1,"123":1}}],["system",{"2":{"51":8,"54":8,"62":2,"65":7,"68":8,"73":8,"76":8,"79":8,"82":8,"103":3,"124":1}}],["sysroot为generic类型",{"2":{"119":1}}],["sysroot",{"2":{"20":1,"111":1,"112":12}}],["syntax",{"2":{"22":1}}],["size",{"2":{"113":1,"114":1,"123":1}}],["sipeed这个环境中",{"2":{"98":1}}],["sipeed",{"2":{"1":2,"11":2,"37":1,"51":32,"54":32,"62":1,"65":11,"68":11,"73":11,"76":11,"79":11,"80":1,"82":32,"98":9,"103":10,"110":1,"111":1,"112":3,"114":1}}],["sifive",{"2":{"1":1,"11":1,"51":7,"54":7,"68":5,"70":1,"73":8,"76":7,"79":7,"82":7,"103":1}}],["s",{"2":{"1":1,"11":1,"33":1,"37":2,"49":2,"51":3,"53":2,"54":3,"56":2,"58":2,"61":1,"62":1,"76":3,"78":2,"79":3,"81":2,"82":3,"99":1,"103":1,"108":1,"110":2,"112":1,"119":1,"122":1}}],["k",{"2":{"92":1}}],["k510",{"2":{"51":3,"54":3,"82":3}}],["k230",{"2":{"1":1,"11":1,"51":4,"54":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1}}],["kendryte",{"2":{"1":1,"11":1,"51":7,"54":7,"68":4,"73":4,"76":4,"79":4,"82":7,"103":1}}],["data",{"2":{"123":2}}],["dart",{"2":{"22":1}}],["dflags",{"2":{"122":1,"123":1}}],["dload",{"2":{"122":1}}],["dump",{"2":{"113":2,"114":2}}],["duo",{"0":{"123":1},"2":{"1":2,"11":2,"37":1,"51":10,"54":10,"62":1,"65":7,"68":7,"73":7,"76":10,"79":10,"82":10,"103":1,"110":1,"111":1,"112":2,"122":1,"123":5}}],["d",{"2":{"92":2}}],["dynamically",{"2":{"122":1}}],["dynamic选项",{"2":{"91":1}}],["dynamic",{"2":{"91":1}}],["diterations=0",{"2":{"122":1,"123":1}}],["distfiles",{"2":{"122":1}}],["dist",{"2":{"122":1}}],["disk",{"2":{"62":1,"103":1}}],["dir=linux64",{"2":{"99":1,"108":1,"119":1,"122":1,"123":1}}],["directory",{"2":{"33":1,"122":1}}],["double",{"2":{"122":1,"123":1}}],["do",{"2":{"112":1}}],["downloading",{"2":{"122":1}}],["download",{"2":{"97":1,"103":1}}],["downloaded",{"2":{"62":1,"103":1}}],["docs",{"2":{"86":1}}],["documentation",{"2":{"22":1,"51":71,"54":71,"76":1,"79":1,"82":5}}],["domain",{"2":{"69":1}}],["does",{"2":{"62":2,"103":2}}],["dd",{"2":{"51":33,"54":34,"62":2,"65":20,"68":25,"73":27,"76":30,"79":31,"82":33,"103":1}}],["default",{"2":{"112":1}}],["dest",{"2":{"112":2}}],["desktop",{"2":{"51":2,"54":2,"76":2,"79":2,"82":2}}],["deactivate",{"2":{"109":1,"113":1,"114":1,"120":1,"122":1}}],["development",{"2":{"62":1,"103":1}}],["devices",{"2":{"62":1,"103":1}}],["device",{"2":{"1":1,"3":1,"11":1,"14":1,"43":1,"46":1,"59":1,"62":7,"63":1,"103":10,"127":1}}],["demo",{"2":{"36":1,"39":1}}],["debug",{"2":{"122":1,"123":1}}],["debugger",{"0":{"87":1}}],["debugging",{"2":{"22":1}}],["debian",{"2":{"10":1,"21":1,"22":1,"32":1,"51":4,"54":4,"68":1,"73":1,"76":3,"79":3,"82":4,"96":1}}],["d1",{"2":{"1":1,"11":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6,"103":1}}],["支持了香山南湖微架构",{"2":{"124":1}}],["支持了",{"2":{"80":1}}],["支持了相应的用户体验",{"2":{"55":1}}],["支持展示新闻了",{"2":{"61":5}}],["支持",{"0":{"50":1},"2":{"85":1,"124":1}}],["支持计划于2024年发布的sg2044和sg2380",{"2":{"29":1}}],["支持运行≥7个流行的linux发行版",{"2":{"29":1}}],["支持50多种risc",{"2":{"29":1}}],["支持插件系统",{"2":{"22":1}}],["支持c",{"2":{"22":1}}],["支持开发语言的语法高亮显示",{"2":{"22":1}}],["支持属性扩展",{"2":{"20":1}}],["支持多种",{"2":{"11":1}}],["支持在",{"2":{"10":1}}],["支持在risc",{"2":{"0":1}}],["支持的荔枝派",{"2":{"114":1}}],["支持的命令",{"2":{"46":1}}],["支持的发行版平台",{"0":{"45":1}}],["支持的编译环境",{"2":{"40":1}}],["支持的设备如下",{"2":{"11":1}}],["支持的设备",{"0":{"11":1},"2":{"5":2}}],["支持的risc",{"0":{"1":1}}],["含适用的编译工具链",{"2":{"0":1,"10":1}}],["ranlib",{"2":{"113":2,"114":2}}],["raw",{"2":{"62":1,"103":1}}],["ram",{"2":{"51":26,"54":26,"65":14,"68":14,"73":14,"76":14,"79":18,"82":26,"103":5}}],["root",{"2":{"62":1,"77":1,"103":1,"123":3}}],["rootfs",{"2":{"20":1,"51":6,"54":6,"65":6,"68":6,"73":6,"76":6,"79":6,"82":6}}],["rt",{"2":{"51":29,"54":29,"82":1}}],["rights",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["riscv",{"2":{"36":2,"40":2,"91":2,"107":2,"112":2,"114":2,"119":2,"124":3}}],["riscv64",{"0":{"109":1},"2":{"33":1,"45":2,"49":4,"53":4,"56":4,"58":4,"60":4,"64":4,"67":4,"71":1,"74":1,"75":4,"78":4,"81":4,"94":2,"97":2,"98":2,"99":1,"108":1,"113":34,"114":33,"116":1,"119":1,"122":5,"123":1}}],["riscv64等",{"2":{"10":1}}],["risc",{"2":{"0":2,"5":4,"6":2,"9":2,"10":6,"14":1,"15":1,"16":2,"21":1,"22":5,"24":1,"51":21,"54":20,"65":18,"68":20,"73":20,"76":20,"79":20,"80":1,"82":20,"83":2,"85":3,"86":1,"87":1,"88":1,"90":3,"91":2,"94":2,"95":1,"96":1,"102":1,"103":4,"104":1,"112":4,"114":1,"122":2,"123":1}}],["rules",{"2":{"123":1}}],["run",{"2":{"62":1,"103":1,"123":2}}],["running",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["rust",{"2":{"22":1}}],["ruyi工具的安装",{"0":{"97":1,"106":1}}],["ruyi包管理工具",{"0":{"21":1}}],["ruyi在线软件源",{"0":{"20":1}}],["ruyi",{"0":{"4":1,"8":1,"9":1,"19":1,"20":1,"21":1,"22":1,"33":1,"42":1,"44":1,"61":1,"110":1,"116":1},"1":{"20":1,"21":1,"45":1,"46":1,"47":1,"111":1,"112":1,"113":1,"114":1},"2":{"1":1,"3":2,"9":1,"14":1,"17":9,"22":10,"32":2,"33":13,"34":3,"35":8,"36":5,"37":4,"38":4,"39":2,"40":4,"41":3,"42":15,"43":1,"44":3,"45":1,"46":16,"49":18,"50":1,"51":3,"53":18,"54":3,"56":18,"58":18,"59":1,"60":12,"61":31,"62":3,"64":12,"65":2,"67":12,"68":3,"69":6,"71":7,"72":1,"73":2,"75":17,"76":2,"77":1,"78":18,"79":3,"81":18,"82":3,"95":2,"97":7,"98":9,"103":2,"104":2,"106":6,"107":6,"110":4,"111":1,"112":10,"113":12,"114":16,"116":6,"117":5,"118":1,"119":4,"120":2,"121":2,"122":14,"123":2,"127":2}}],["ruyisdk针对上述常见的需求提供了包管理器",{"2":{"125":1}}],["ruyisdk计划为持有不同risc",{"2":{"124":1}}],["ruyisdk中编译工具链类型简介",{"0":{"124":1}}],["ruyisdk中负责管理ruyisdk各种软件源的工具",{"2":{"44":1}}],["ruyisdk包管理器提供了虚拟环境技术",{"2":{"119":1}}],["ruyisdk包管理器工具可使用",{"2":{"112":1}}],["ruyisdk包管理工具目前提供了linux系统",{"2":{"116":1}}],["ruyisdk支持的编译工具链版本",{"2":{"94":1}}],["ruyisdk使用示例",{"0":{"94":1}}],["ruyisdk官网上线",{"2":{"29":1}}],["ruyisdk软件源提供新的软件包或者软件包版本升级",{"2":{"27":1}}],["ruyisdk",{"0":{"12":1,"16":1,"17":1,"18":1,"25":1,"28":1,"83":1,"93":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"26":1,"27":1,"29":1,"30":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1},"2":{"4":5,"5":2,"6":1,"7":1,"10":1,"11":1,"13":1,"15":1,"16":3,"17":2,"23":1,"24":1,"26":2,"27":1,"33":3,"36":1,"39":1,"44":1,"49":3,"53":3,"56":3,"58":3,"60":2,"61":12,"62":2,"64":2,"67":2,"69":3,"71":1,"75":3,"78":3,"80":1,"81":3,"83":1,"90":2,"91":1,"92":1,"97":1,"103":2,"106":1,"113":1,"118":1,"121":1,"122":1}}],["ruyisdk集成了多种可用的操作系统供用户选择",{"2":{"0":1}}],["ruyisdk集成的risc",{"0":{"0":1},"1":{"1":1,"2":1,"3":1}}],["ruyisdk对risc",{"2":{"0":1}}],["received",{"2":{"122":1}}],["return",{"2":{"114":1}}],["remote",{"2":{"69":3}}],["required",{"2":{"62":1,"103":1}}],["respective",{"2":{"49":1,"53":1,"56":1,"58":1,"78":1,"81":1}}],["reserved",{"2":{"33":1,"49":1,"53":1,"56":1,"58":1,"60":1,"64":1,"67":1,"71":1,"75":1,"78":1,"81":1}}],["reinstall",{"2":{"38":2,"41":1}}],["readelf",{"2":{"113":1,"114":1}}],["readme",{"2":{"39":1,"123":1}}],["read",{"2":{"35":4,"61":10}}],["regular",{"2":{"33":1}}],["releases",{"2":{"33":1,"44":1,"49":3,"53":3,"56":3,"58":3,"60":2,"64":2,"67":2,"71":1,"75":3,"78":3,"81":3,"97":2,"106":1,"116":1}}],["release",{"2":{"27":1,"69":1}}],["repl",{"2":{"22":1}}],["reporting",{"2":{"123":1}}],["repos",{"2":{"33":1}}],["repository",{"2":{"33":2}}],["repo中获取",{"2":{"17":1}}],["repo",{"0":{"20":1},"2":{"17":3,"33":1,"69":3,"118":1}}],["refactoring",{"2":{"22":1}}],["revyos",{"2":{"5":1,"10":1,"45":1,"47":1,"51":9,"54":9,"65":3,"68":3,"73":3,"76":3,"79":5,"82":9,"103":3}}],["rvc",{"2":{"122":1,"123":1}}],["rv20",{"2":{"92":1}}],["rv64gc",{"2":{"91":1}}],["rv64",{"2":{"85":1,"92":1}}],["rv64ilp32",{"2":{"37":2,"110":2,"111":2,"124":2}}],["rv32gc",{"2":{"91":1}}],["rv32",{"2":{"85":1,"92":1}}],["rvv1",{"2":{"92":1}}],["rvv",{"2":{"39":1,"91":5,"92":1}}],["rvp",{"2":{"16":1}}],["rv",{"2":{"1":1,"11":1,"51":2,"54":2,"65":2,"68":2,"73":2,"76":2,"79":2,"82":2,"103":1}}],["方便新手直接从ruyi",{"2":{"118":1}}],["方便用户直接使用",{"2":{"91":1}}],["方便",{"2":{"0":2,"10":1}}],["v运行环境",{"0":{"126":1},"1":{"127":1,"128":1}}],["v目标程序",{"0":{"128":1},"2":{"125":1}}],["v目标可执行程序的正确性",{"2":{"120":1}}],["v硬件设备",{"2":{"125":1}}],["validated",{"2":{"123":1}}],["variants",{"2":{"103":1}}],["variant",{"2":{"51":16,"54":17,"65":4,"68":6,"73":6,"76":10,"79":10,"82":14,"103":1}}],["vlmax输入与可伸缩向量不固定长度的",{"2":{"91":1}}],["v1",{"2":{"51":3,"54":3,"65":3,"68":3,"73":3,"76":3,"79":3,"82":3}}],["v0",{"0":{"48":1,"49":1,"52":1,"53":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"63":1,"64":1,"66":1,"67":1,"70":1,"71":1,"74":1,"75":1,"77":1,"78":1,"80":1,"81":1},"1":{"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"60":1,"61":1,"62":1,"64":1,"65":1,"67":1,"68":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"78":1,"79":1,"81":1,"82":1},"2":{"30":23,"32":1,"60":1,"64":1,"67":1,"71":1,"72":1,"74":1}}],["v集成开发环境的用户之间的交流和合作",{"2":{"23":1}}],["v集成开发环境相关的插件和扩展",{"2":{"23":1}}],["v集成开发环境所需的编译工具链",{"2":{"17":1}}],["v领域的专家",{"2":{"23":1}}],["virtual",{"2":{"22":1,"33":1,"112":3}}],["visionfive2",{"2":{"1":1,"11":1,"51":4,"54":4,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1}}],["visionfive",{"2":{"1":1,"11":1,"51":4,"54":4,"65":4,"68":4,"73":4,"76":4,"79":4,"82":4,"103":1}}],["v相关的文档",{"2":{"22":1}}],["v应用程序",{"2":{"22":2}}],["v指令的执行过程",{"2":{"22":1}}],["v指令集的应用程序",{"2":{"22":1}}],["v模拟器和调试器",{"2":{"22":2}}],["v编译器",{"2":{"22":1}}],["v项目",{"2":{"22":1}}],["v三种架构的主流linux系统",{"2":{"21":1,"22":1}}],["v系统镜像文件",{"2":{"20":1}}],["v生态系统的发展",{"2":{"17":1,"23":1}}],["v开发时",{"2":{"125":1}}],["v开发环境",{"0":{"115":1},"1":{"116":1,"117":1,"118":1,"119":1,"120":1,"121":1},"2":{"125":1}}],["v开发环境的使用指南",{"2":{"23":1}}],["v开发相关的资源",{"2":{"23":1}}],["v开发板的开发者们提供支持",{"2":{"124":1}}],["v开发板的sd卡通过读卡机接入pc",{"2":{"102":1}}],["v开发板以usb连接线接入pc或者risc",{"2":{"102":1}}],["v开发板提供镜像信息的维护与下载",{"2":{"101":1}}],["v开发板安装操作系统",{"0":{"101":1,"127":1},"1":{"102":1,"103":1},"2":{"125":1}}],["v开发板并为其安装系统镜像",{"2":{"94":1}}],["v开发板类型是丰富且不断扩展的",{"2":{"94":1}}],["v开发板",{"2":{"22":1,"103":1}}],["v开发板上进行运行和测试",{"2":{"17":1}}],["v开发者的集成开发环境将提供一系列专门针对risc",{"2":{"22":1}}],["v开发者使用的集成开发环境",{"2":{"22":2}}],["v开发者并推动risc",{"2":{"17":1}}],["v开发者提供一个开放的交流平台",{"2":{"17":1}}],["v的编译工具链",{"2":{"17":1}}],["v架构目标可执行程序以达到验证或者使用的目的",{"2":{"125":1}}],["v架构",{"2":{"22":1,"119":1}}],["v架构的工具和功能",{"2":{"22":1}}],["v架构的嵌入式设备上",{"2":{"22":1}}],["v架构的编译器",{"2":{"22":1}}],["v架构的可执行程序",{"2":{"17":1}}],["v架构设备上的软件和应用的工具箱",{"2":{"17":1}}],["ver>`",{"2":{"38":1}}],["version",{"2":{"22":1,"33":7,"49":2,"53":2,"56":2,"58":2,"60":1,"64":1,"67":1,"71":1,"75":1,"78":2,"81":2,"97":1,"98":1,"106":1,"107":2,"113":1,"122":1,"123":2}}],["venv是自定义的虚拟环境名",{"2":{"113":1}}],["venv1",{"2":{"107":3,"119":2}}],["venv",{"2":{"33":2,"37":1,"40":4,"46":1,"98":6,"107":2,"110":1,"112":18,"113":9,"114":11,"119":3,"122":9,"123":2}}],["vector",{"2":{"16":1}}],["vega",{"2":{"1":1,"11":1,"51":3,"54":3,"76":4,"79":3,"82":3}}],["v",{"2":{"0":4,"1":7,"5":4,"6":2,"9":2,"10":6,"11":7,"14":1,"15":1,"16":2,"24":1,"33":1,"36":1,"51":56,"54":55,"62":2,"65":36,"68":38,"73":38,"76":51,"77":1,"79":55,"80":1,"82":55,"83":2,"85":4,"86":1,"87":1,"88":1,"89":1,"90":3,"91":4,"92":1,"94":1,"95":1,"96":1,"103":6,"104":1,"107":1,"112":4,"114":1,"116":1,"122":2,"123":1}}],["v设备也可以",{"2":{"125":1}}],["v设备上的应用程序",{"2":{"17":1}}],["v设备上调试应用程序等",{"2":{"0":1}}],["v设备有",{"2":{"1":1}}],["v设备专有向导页面",{"2":{"0":1}}],["v设备的集成和支持主要包括以下几个方面",{"2":{"0":1}}],["v设备",{"0":{"0":1,"1":1},"1":{"1":1,"2":1,"3":1},"2":{"29":1,"125":1}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.twz1QzUO.js b/assets/chunks/VPLocalSearchBox.CEyexYv2.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.twz1QzUO.js rename to assets/chunks/VPLocalSearchBox.CEyexYv2.js index 4e1cd01e..a0e81d40 100644 --- a/assets/chunks/VPLocalSearchBox.twz1QzUO.js +++ b/assets/chunks/VPLocalSearchBox.CEyexYv2.js @@ -1,4 +1,4 @@ -var It=Object.defineProperty;var Dt=(o,e,t)=>e in o?It(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>Dt(o,typeof e!="symbol"?e+"":e,t);import{X as tt,s as oe,v as $e,ai as kt,aj as Ot,d as _t,G as xe,ak as rt,h as Fe,al as Rt,am as Mt,x as Lt,an as Pt,y as _e,R as de,Q as Ee,ao as zt,ap as Vt,Y as Bt,U as $t,aq as Wt,o as ee,b as Kt,j as k,a1 as Jt,k as j,ar as Ut,as as jt,at as Gt,c as re,n as at,e as Se,E as nt,F as it,a as ve,t as pe,au as Qt,p as qt,l as Ht,av as ot,aw as Yt,a7 as Zt,ad as Xt,ax as er,_ as tr}from"./framework.BKLMYXYM.js";import{u as rr,c as ar}from"./theme.BUxsoWON.js";const nr={en:()=>tt(()=>import("./@localSearchIndexen.FA3pwFm7.js"),[]),root:()=>tt(()=>import("./@localSearchIndexroot.CKepwnlc.js"),[])};/*! +var It=Object.defineProperty;var Dt=(o,e,t)=>e in o?It(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>Dt(o,typeof e!="symbol"?e+"":e,t);import{X as tt,s as oe,v as $e,ai as kt,aj as Ot,d as _t,G as xe,ak as rt,h as Fe,al as Rt,am as Mt,x as Lt,an as Pt,y as _e,R as de,Q as Ee,ao as zt,ap as Vt,Y as Bt,U as $t,aq as Wt,o as ee,b as Kt,j as k,a1 as Jt,k as j,ar as Ut,as as jt,at as Gt,c as re,n as at,e as Se,E as nt,F as it,a as ve,t as pe,au as Qt,p as qt,l as Ht,av as ot,aw as Yt,a7 as Zt,ad as Xt,ax as er,_ as tr}from"./framework.BKLMYXYM.js";import{u as rr,c as ar}from"./theme.CHBAehbQ.js";const nr={en:()=>tt(()=>import("./@localSearchIndexen.FA3pwFm7.js"),[]),root:()=>tt(()=>import("./@localSearchIndexroot.Btvlp7ZV.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),gt=typeof Element>"u",ue=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!gt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},bt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},wt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var m=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,m):n.push({scopeParent:i,candidates:m})}else a.unshift.apply(a,i.children)}}return n},xt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!xt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!xt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Ft=function(e){return e.tagName==="INPUT"},ur=function(e){return Ft(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return st(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return st(e);return!1},mr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:yr}):r=bt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=bt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),Re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! diff --git a/assets/chunks/theme.BUxsoWON.js b/assets/chunks/theme.CHBAehbQ.js similarity index 99% rename from assets/chunks/theme.BUxsoWON.js rename to assets/chunks/theme.CHBAehbQ.js index 4713eb3d..13c8293e 100644 --- a/assets/chunks/theme.BUxsoWON.js +++ b/assets/chunks/theme.CHBAehbQ.js @@ -1,2 +1,2 @@ -const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.twz1QzUO.js","assets/chunks/framework.BKLMYXYM.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); -import{d as _,o as a,c,r as l,n as N,a as D,t as I,b as $,w as d,e as f,T as ve,_ as b,u as Ue,i as Ge,f as je,g as pe,h as y,j as v,k as r,p as B,l as H,m as z,q as ie,s as w,v as j,x as Z,y as R,z as he,A as ye,B as ze,C as qe,D as q,F as M,E,G as Pe,H as x,I as m,J as W,K as Le,L as ee,M as Y,N as te,O as Ke,P as Ve,Q as le,R as We,S as Se,U as oe,V as Re,W as Je,X as Ye,Y as Te,Z as Ie,$ as Qe,a0 as Xe,a1 as Ze,a2 as xe}from"./framework.BKLMYXYM.js";const et=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:N(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[D(I(e.text),1)])],2))}}),tt={key:0,class:"VPBackdrop"},ot=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(ve,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",tt)):f("",!0)]),_:1}))}}),st=b(ot,[["__scopeId","data-v-54a304ca"]]),P=Ue;function nt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!s.startsWith("http")||!je(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return pe(u)}function J({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:s,hash:i}=P(),u=y(()=>{var p,g;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:((g=e.value.locales[t.value])==null?void 0:g.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,g])=>u.value.label===g.label?[]:{text:g.label,link:at(g.link||(p==="root"?"/":`/${p}/`),s.value.i18nRouting!==!1&&o,n.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function at(o,e,t,n){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const rt=o=>(B("data-v-6ff51ddd"),o=o(),H(),o),it={class:"NotFound"},lt={class:"code"},ct={class:"title"},ut=rt(()=>v("div",{class:"divider"},null,-1)),dt={class:"quote"},vt={class:"action"},pt=["href","aria-label"],ht=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=J();return(n,s)=>{var i,u,h,p,g;return a(),c("div",it,[v("p",lt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",ct,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ut,v("blockquote",dt,I(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",vt,[v("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I(((g=r(e).notFound)==null?void 0:g.linkText)??"Take me home"),9,pt)])])}}}),ft=b(ht,[["__scopeId","data-v-6ff51ddd"]]);function we(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((s,i)=>i.split("/").length-s.split("/").length).find(s=>e.startsWith(ce(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function _t(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function mt(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):z(o,e.link)?!0:e.items?ue(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function O(){const{frontmatter:o,page:e,theme:t}=P(),n=ie("(min-width: 960px)"),s=w(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?we(C,S):[]}),u=w(i.value);j(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(u.value=i.value)});const h=y(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=y(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),L=y(()=>h.value&&n.value),k=y(()=>h.value?_t(u.value):[]);function V(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():V()}return{isOpen:s,sidebar:u,sidebarGroups:k,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:L,open:V,close:T,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",n)}),he(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function bt(o){const{page:e,hash:t}=P(),n=w(!1),s=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),u=w(!1),h=()=>{u.value=z(e.value.relativePath,o.value.link)};j([e,o,t],h),R(h);const p=y(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),g=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{n.value=!!(s.value&&o.value.collapsed)}),ye(()=>{(u.value||p.value)&&(n.value=!1)});function L(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:i,isActiveLink:u,hasActiveLink:p,hasChildren:g,toggle:L}}function $t(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:gt(t),link:"#"+t.id,level:n}});return yt(e,o)}function gt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function yt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=n&&u.level<=s),de.length=0;for(const{element:u,link:h}of o)de.push({element:u,link:h});const i=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),ze(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,L=Math.abs(h+p-g)<1,k=de.map(({element:T,link:A})=>({link:A,top:Lt(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!k.length){u(null);return}if(h<1){u(null);return}if(L){u(k[k.length-1].link);return}let V=null;for(const{link:T,top:A}of k){if(A>h+qe()+4)break;V=T}u(V)}function u(h){s&&s.classList.remove("active"),h==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Lt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],St=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=q("VPDocOutlineItem",!0);return a(),c("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},I(h),9,Vt),i!=null&&i.length?(a(),$(s,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(St,[["__scopeId","data-v-53c99d69"]]),Tt={class:"content"},It={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),n=Pe([]);x(()=>{n.value=_e(e.value.outline??t.value.outline)});const s=w(),i=w();return Pt(s,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s},[v("div",Tt,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",It,I(r(Ne)(r(t))),1),m(Me,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Nt=b(wt,[["__scopeId","data-v-f610f197"]]),Mt={class:"VPDocAsideCarbonAds"},At=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),c("div",Mt,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ct=o=>(B("data-v-cb998dce"),o=o(),H(),o),Bt={class:"VPDocAside"},Ht=Ct(()=>v("div",{class:"spacer"},null,-1)),Et=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,n)=>(a(),c("div",Bt,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Nt),l(t.$slots,"aside-outline-after",{},void 0,!0),Ht,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(At,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=b(Et,[["__scopeId","data-v-cb998dce"]]);function Dt(){const{theme:o,page:e}=P();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Ot(){const{page:o,theme:e,frontmatter:t}=P();return y(()=>{var g,L,k,V,T,A,C,S;const n=we(e.value.sidebar,o.value.relativePath),s=mt(n),i=Ut(s,U=>U.link.replace(/[?#].*$/,"")),u=i.findIndex(U=>z(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[u-1])==null?void 0:k.docFooterText)??((V=i[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[u-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((C=i[u+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function Ut(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const F=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(s,i)=>(a(),$(W(t.value),{class:N(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?r(fe)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[l(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Gt={class:"VPLastUpdated"},jt=["datetime"],zt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=P(),i=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=y(()=>i.value.toISOString()),h=w("");return R(()=>{Z(()=>{var p,g,L;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?s.value:void 0,((L=e.value.lastUpdated)==null?void 0:L.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(i.value)})}),(p,g)=>{var L;return a(),c("p",Gt,[D(I(((L=r(e).lastUpdated)==null?void 0:L.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},I(h.value),9,jt)])}}}),qt=b(zt,[["__scopeId","data-v-19a7ae4e"]]),Ae=o=>(B("data-v-5941af80"),o=o(),H(),o),Kt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},Rt={key:0,class:"edit-link"},Jt=Ae(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Yt={key:1,class:"last-updated"},Qt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Xt=Ae(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Zt={class:"pager"},xt=["innerHTML"],eo=["innerHTML"],to={class:"pager"},oo=["innerHTML"],so=["innerHTML"],no=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=P(),s=Dt(),i=Ot(),u=y(()=>e.value.editLink&&n.value.editLink!==!1),h=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>u.value||h.value||i.value.prev||i.value.next);return(g,L)=>{var k,V,T,A;return p.value?(a(),c("footer",Kt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Wt,[u.value?(a(),c("div",Rt,[m(F,{class:"edit-link-button",href:r(s).url,"no-icon":!0},{default:d(()=>[Jt,D(" "+I(r(s).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Yt,[m(qt)])):f("",!0)])):f("",!0),(k=r(i).prev)!=null&&k.link||(V=r(i).next)!=null&&V.link?(a(),c("nav",Qt,[Xt,v("div",Zt,[(T=r(i).prev)!=null&&T.link?(a(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,xt),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,eo)]}),_:1},8,["href"])):f("",!0)]),v("div",to,[(A=r(i).next)!=null&&A.link?(a(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,oo),v("span",{class:"title",innerHTML:r(i).next.text},null,8,so)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ao=b(no,[["__scopeId","data-v-5941af80"]]),ro=o=>(B("data-v-e6f2a212"),o=o(),H(),o),io={class:"container"},lo=ro(()=>v("div",{class:"aside-curtain"},null,-1)),co={class:"aside-container"},uo={class:"aside-content"},vo={class:"content"},po={class:"content-container"},ho={class:"main"},fo=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:n,hasAside:s,leftAside:i}=O(),u=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=q("Content");return a(),c("div",{class:N(["VPDoc",{"has-sidebar":r(n),"has-aside":r(s)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",io,[r(s)?(a(),c("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[lo,v("div",co,[v("div",uo,[m(Ft,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",vo,[v("div",po,[l(h.$slots,"doc-before",{},void 0,!0),v("main",ho,[m(g,{class:N(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(ao,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),_o=b(fo,[["__scopeId","data-v-e6f2a212"]]),mo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,i)=>(a(),$(W(n.value),{class:N(["VPButton",[s.size,s.theme]]),href:s.href?r(fe)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[D(I(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),ko=b(mo,[["__scopeId","data-v-c9cf0e3c"]]),bo=["src","alt"],$o=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=q("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,bo)):(a(),c(M,{key:1},[m(n,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b($o,[["__scopeId","data-v-ab19afbb"]]),go=o=>(B("data-v-b10c5094"),o=o(),H(),o),yo={class:"container"},Po={class:"main"},Lo={key:0,class:"name"},Vo=["innerHTML"],So=["innerHTML"],To=["innerHTML"],Io={key:0,class:"actions"},wo={key:0,class:"image"},No={class:"image-container"},Mo=go(()=>v("div",{class:"image-bg"},null,-1)),Ao=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[v("div",yo,[v("div",Po,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Lo,[v("span",{innerHTML:t.name,class:"clip"},null,8,Vo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,So)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Io,[(a(!0),c(M,null,E(t.actions,s=>(a(),c("div",{key:s.link,class:"action"},[m(ko,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",wo,[v("div",No,[Mo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Co=b(Ao,[["__scopeId","data-v-b10c5094"]]),Bo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).hero?(a(),$(Co,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Ho=o=>(B("data-v-bd37d1a2"),o=o(),H(),o),Eo={class:"box"},Fo={key:0,class:"icon"},Do=["innerHTML"],Oo=["innerHTML"],Uo=["innerHTML"],Go={key:4,class:"link-text"},jo={class:"link-text-value"},zo=Ho(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),qo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Eo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Fo,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Do)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Oo),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Uo)):f("",!0),e.linkText?(a(),c("div",Go,[v("p",jo,[D(I(e.linkText)+" ",1),zo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ko=b(qo,[["__scopeId","data-v-bd37d1a2"]]),Wo={key:0,class:"VPFeatures"},Ro={class:"container"},Jo={class:"items"},Yo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),c("div",Wo,[v("div",Ro,[v("div",Jo,[(a(!0),c(M,null,E(n.features,i=>(a(),c("div",{key:i.title,class:N(["item",[t.value]])},[m(Ko,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Qo=b(Yo,[["__scopeId","data-v-b1eea84a"]]),Xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).features?(a(),$(Qo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),Zo=_({__name:"VPHomeContent",setup(o){const{width:e}=Ke({initialWidth:0,includeScrollbar:!1});return(t,n)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),xo=b(Zo,[["__scopeId","data-v-c141a4bd"]]),es={class:"VPHome"},ts=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,n)=>{const s=q("Content");return a(),c("div",es,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Bo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(Xo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(xo,{key:0},{default:d(()=>[m(s)]),_:1})):(a(),$(s,{key:1}))])}}}),os=b(ts,[["__scopeId","data-v-07b1ad08"]]),ss={},ns={class:"VPPage"};function as(o,e){const t=q("Content");return a(),c("div",ns,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const rs=b(ss,[["render",as]]),is=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>(a(),c("div",{class:N(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(s.$slots,"not-found",{key:0},()=>[m(ft)],!0):r(t).layout==="page"?(a(),$(rs,{key:1},{"page-top":d(()=>[l(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(os,{key:2},{"home-hero-before":d(()=>[l(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(W(r(t).layout),{key:3})):(a(),$(_o,{key:4},{"doc-top":d(()=>[l(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ls=b(is,[["__scopeId","data-v-9a6c75ad"]]),cs={class:"container"},us=["innerHTML"],ds=["innerHTML"],vs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(n)}])},[v("div",cs,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,us)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ds)):f("",!0)])],2)):f("",!0)}}),ps=b(vs,[["__scopeId","data-v-566314d4"]]);function hs(){const{theme:o,frontmatter:e}=P(),t=Pe([]),n=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const fs=o=>(B("data-v-883964e0"),o=o(),H(),o),_s={class:"menu-text"},ms=fs(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),ks={class:"header"},bs={class:"outline"},$s=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),n=w(!1),s=w(0),i=w(),u=w();function h(k){var V;(V=i.value)!=null&&V.contains(k.target)||(n.value=!1)}j(n,k=>{if(k){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),le("Escape",()=>{n.value=!1}),x(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function g(k){k.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),We(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,V)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":s.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(a(),c("button",{key:0,onClick:p,class:N({open:n.value})},[v("span",_s,I(r(Ne)(r(t))),1),ms],2)):(a(),c("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:d(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:g},[v("div",ks,[v("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),v("div",bs,[m(Me,{headers:k.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),gs=b($s,[["__scopeId","data-v-883964e0"]]),ys=o=>(B("data-v-2488c25a"),o=o(),H(),o),Ps={class:"container"},Ls=["aria-expanded"],Vs=ys(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Ss={class:"menu-text"},Ts=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O(),{headers:s}=hs(),{y:i}=Se(),u=w(0);R(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{s.value=_e(t.value.outline??e.value.outline)});const h=y(()=>s.value.length===0),p=y(()=>h.value&&!n.value),g=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:p.value}));return(L,k)=>r(t).layout!=="home"&&(!p.value||r(i)>=u.value)?(a(),c("div",{key:0,class:N(g.value)},[v("div",Ps,[r(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>L.$emit("open-menu"))},[Vs,v("span",Ss,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ls)):f("",!0),m(gs,{headers:r(s),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Is=b(Ts,[["__scopeId","data-v-2488c25a"]]);function ws(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const i=ee();return j(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Ns={},Ms={class:"VPSwitch",type:"button",role:"switch"},As={class:"check"},Cs={key:0,class:"icon"};function Bs(o,e){return a(),c("button",Ms,[v("span",As,[o.$slots.default?(a(),c("span",Cs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Hs=b(Ns,[["render",Bs],["__scopeId","data-v-b4ccac88"]]),Ce=o=>(B("data-v-7df97737"),o=o(),H(),o),Es=Ce(()=>v("span",{class:"vpi-sun sun"},null,-1)),Fs=Ce(()=>v("span",{class:"vpi-moon moon"},null,-1)),Ds=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),n=te("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(i,u)=>(a(),$(Hs,{title:s.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:d(()=>[Es,Fs]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Ds,[["__scopeId","data-v-7df97737"]]),Os={key:0,class:"VPNavBarAppearance"},Us=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",Os,[m(me)])):f("",!0)}}),Gs=b(Us,[["__scopeId","data-v-283b26e9"]]),ke=w();let Be=!1,re=0;function js(o){const e=w(!1);if(oe){!Be&&zs(),re++;const t=j(ke,n=>{var s,i,u;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});he(()=>{t(),re--,re||qs()})}return Re(e)}function zs(){document.addEventListener("focusin",He),Be=!0,ke.value=document.activeElement}function qs(){document.removeEventListener("focusin",He)}function He(){ke.value=document.activeElement}const Ks={class:"VPMenuLink"},Ws=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),c("div",Ks,[m(F,{class:N({active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Ws,[["__scopeId","data-v-f51f088d"]]),Rs={class:"VPMenuGroup"},Js={key:0,class:"title"},Ys=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Rs,[e.text?(a(),c("p",Js,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),c(M,null,["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),Qs=b(Ys,[["__scopeId","data-v-a6b0397c"]]),Xs={class:"VPMenu"},Zs={key:0,class:"items"},xs=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Xs,[e.items?(a(),c("div",Zs,[(a(!0),c(M,null,E(e.items,n=>(a(),c(M,{key:n.text},["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):(a(),$(Qs,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),en=b(xs,[["__scopeId","data-v-e42ed9b3"]]),tn=o=>(B("data-v-af5898d3"),o=o(),H(),o),on=["aria-expanded","aria-label"],sn={key:0,class:"text"},nn=["innerHTML"],an=tn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),rn={key:1,class:"vpi-more-horizontal icon"},ln={class:"menu"},cn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();js({el:t,onBlur:n});function n(){e.value=!1}return(s,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[s.button||s.icon?(a(),c("span",sn,[s.icon?(a(),c("span",{key:0,class:N([s.icon,"option-icon"])},null,2)):f("",!0),s.button?(a(),c("span",{key:1,innerHTML:s.button},null,8,nn)):f("",!0),an])):(a(),c("span",rn))],8,on),v("div",ln,[m(en,{items:s.items},{default:d(()=>[l(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(cn,[["__scopeId","data-v-af5898d3"]]),un=["href","aria-label","innerHTML"],dn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,un))}}),vn=b(dn,[["__scopeId","data-v-358b6670"]]),pn={class:"VPSocialLinks"},hn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",pn,[(a(!0),c(M,null,E(e.links,({link:n,icon:s,ariaLabel:i})=>(a(),$(vn,{key:n,icon:s,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(hn,[["__scopeId","data-v-e71e869c"]]),fn={key:0,class:"group translations"},_n={class:"trans-title"},mn={key:1,class:"group"},kn={class:"item appearance"},bn={class:"label"},$n={class:"appearance-action"},gn={key:2,class:"group"},yn={class:"item social-links"},Pn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:s}=J({correspondingLink:!0}),i=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[r(n).length&&r(s).label?(a(),c("div",fn,[v("p",_n,I(r(s).label),1),(a(!0),c(M,null,E(r(n),p=>(a(),$(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",mn,[v("div",kn,[v("p",bn,I(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",$n,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",gn,[v("div",yn,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ln=b(Pn,[["__scopeId","data-v-8e87c032"]]),Vn=o=>(B("data-v-6bee1efd"),o=o(),H(),o),Sn=["aria-expanded"],Tn=Vn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),In=[Tn],wn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},In,10,Sn))}}),Nn=b(wn,[["__scopeId","data-v-6bee1efd"]]),Mn=["innerHTML"],An=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),$(F,{class:N({VPNavBarMenuLink:!0,active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cn=b(An,[["__scopeId","data-v-08fbf4b6"]]),Bn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),n=i=>"link"in i?z(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),s=y(()=>n(e.item));return(i,u)=>(a(),$(be,{class:N({VPNavBarMenuGroup:!0,active:r(z)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||s.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Hn=o=>(B("data-v-f732b5d0"),o=o(),H(),o),En={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Fn=Hn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Dn=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",En,[Fn,(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Cn,{key:0,item:s},null,8,["item"])):(a(),$(Bn,{key:1,item:s},null,8,["item"]))],64))),128))])):f("",!0)}}),On=b(Dn,[["__scopeId","data-v-f732b5d0"]]);function Un(o){const{localeIndex:e,theme:t}=P();function n(s){var A,C,S;const i=s.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((S=(C=u.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,g=h&&u.translations||null;let L=p,k=g,V=o;const T=i.pop();for(const U of i){let G=null;const K=V==null?void 0:V[U];K&&(G=V=K);const ne=k==null?void 0:k[U];ne&&(G=k=ne);const ae=L==null?void 0:L[U];ae&&(G=L=ae),K||(V=G),ne||(k=G),ae||(L=G)}return(L==null?void 0:L[T])??(k==null?void 0:k[T])??(V==null?void 0:V[T])??""}return n}const Gn=["aria-label"],jn={class:"DocSearch-Button-Container"},zn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),qn={class:"DocSearch-Button-Placeholder"},Kn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Un({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",jn,[zn,v("span",qn,I(r(t)("button.buttonText")),1)]),Kn],8,Gn))}}),Wn={class:"VPNavBarSearch"},Rn={id:"local-search"},Jn={key:1,id:"docsearch"},Yn=_({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.twz1QzUO.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=P(),s=w(!1),i=w(!1);R(()=>{});function u(){s.value||(s.value=!0,setTimeout(h,16))}function h(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function p(k){const V=k.target,T=V.tagName;return V.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const g=w(!1);le("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),g.value=!0)}),le("/",k=>{p(k)||(k.preventDefault(),g.value=!0)});const L="local";return(k,V)=>{var T;return a(),c("div",Wn,[r(L)==="local"?(a(),c(M,{key:0},[g.value?(a(),$(r(e),{key:0,onClose:V[0]||(V[0]=A=>g.value=!1)})):f("",!0),v("div",Rn,[m(ge,{onClick:V[1]||(V[1]=A=>g.value=!0)})])],64)):r(L)==="algolia"?(a(),c(M,{key:1},[s.value?(a(),$(r(t),{key:0,algolia:((T=r(n).search)==null?void 0:T.options)??r(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Jn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Qn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Xn=b(Qn,[["__scopeId","data-v-ef6192dc"]]),Zn=["href","rel","target"],xn={key:1},ea={key:2},ta=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:n}=O(),{currentLang:s}=J(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(n)}])},[v("a",{class:"title",href:i.value??r(fe)(r(s).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",xn,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",ea,I(r(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Zn)],2))}}),oa=b(ta,[["__scopeId","data-v-0ad69264"]]),sa={class:"items"},na={class:"title"},aa=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:n}=J({correspondingLink:!0});return(s,i)=>r(t).length&&r(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",sa,[v("p",na,I(r(n).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ra=b(aa,[["__scopeId","data-v-acee064b"]]),ia=o=>(B("data-v-844edcde"),o=o(),H(),o),la={class:"wrapper"},ca={class:"container"},ua={class:"title"},da={class:"content"},va={class:"content-body"},pa=ia(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),ha=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{frontmatter:n}=P(),s=w({});return ye(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(i,u)=>(a(),c("div",{class:N(["VPNavBar",s.value])},[v("div",la,[v("div",ca,[v("div",ua,[m(oa,null,{"nav-bar-title-before":d(()=>[l(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",da,[v("div",va,[l(i.$slots,"nav-bar-content-before",{},void 0,!0),m(Yn,{class:"search"}),m(On,{class:"menu"}),m(ra,{class:"translations"}),m(Gs,{class:"appearance"}),m(Xn,{class:"social-links"}),m(Ln,{class:"extra"}),l(i.$slots,"nav-bar-content-after",{},void 0,!0),m(Nn,{class:"hamburger",active:i.isScreenOpen,onClick:u[0]||(u[0]=h=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),pa],2))}}),fa=b(ha,[["__scopeId","data-v-844edcde"]]),_a={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},ka=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(n,s)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",_a,[v("p",ma,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),ba=b(ka,[["__scopeId","data-v-338d9b48"]]),$a=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),ga=b($a,[["__scopeId","data-v-1a934d60"]]),ya=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=b(ya,[["__scopeId","data-v-aea78dd1"]]),Pa={class:"VPNavScreenMenuGroupSection"},La={key:0,class:"title"},Va=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Pa,[e.text?(a(),c("p",La,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),$(Ee,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Sa=b(Va,[["__scopeId","data-v-f60dbfa7"]]),Ta=o=>(B("data-v-d2212c70"),o=o(),H(),o),Ia=["aria-controls","aria-expanded"],wa=["innerHTML"],Na=Ta(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Aa={key:1,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:i.text},null,8,wa),Na],8,Ia),v("div",{id:n.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(Ee,{item:h},null,8,["item"])])):(a(),c("div",Aa,[m(Sa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ba=b(Ca,[["__scopeId","data-v-d2212c70"]]),Ha={key:0,class:"VPNavScreenMenu"},Ea=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",Ha,[(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(ga,{key:0,item:s},null,8,["item"])):(a(),$(Ba,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Fa=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(B("data-v-516e4bc3"),o=o(),H(),o),Da=Fe(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Oa=Fe(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ua={class:"list"},Ga=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),n=w(!1);function s(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:N(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[Da,D(" "+I(r(t).label)+" ",1),Oa]),v("ul",Ua,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(F,{class:"link",href:h.link},{default:d(()=>[D(I(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),ja=b(Ga,[["__scopeId","data-v-516e4bc3"]]),za={class:"container"},qa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=Te(oe?document.body:null);return(n,s)=>(a(),$(ve,{name:"fade",onEnter:s[0]||(s[0]=i=>t.value=!0),onAfterLeave:s[1]||(s[1]=i=>t.value=!1)},{default:d(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",za,[l(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Ea,{class:"menu"}),m(ja,{class:"translations"}),m(ba,{class:"appearance"}),m(Fa,{class:"social-links"}),l(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=b(qa,[["__scopeId","data-v-57cce842"]]),Wa={key:0,class:"VPNav"},Ra=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=ws(),{frontmatter:s}=P(),i=y(()=>s.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Wa,[m(fa,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:r(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ja=b(Ra,[["__scopeId","data-v-7ad780c2"]]),De=o=>(B("data-v-c24f735a"),o=o(),H(),o),Ya=["role","tabindex"],Qa=De(()=>v("div",{class:"indicator"},null,-1)),Xa=De(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Za=[Xa],xa={key:1,class:"items"},er=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:p}=bt(y(()=>e.item)),g=y(()=>h.value?"section":"div"),L=y(()=>s.value?"a":"div"),k=y(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,U)=>{const G=q("VPSidebarItem",!0);return a(),$(W(g.value),{class:N(["VPSidebarItem",T.value])},{default:d(()=>[S.item.text?(a(),c("div",Y({key:0,class:"item",role:V.value},Xe(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[Qa,S.item.link?(a(),$(F,{key:0,tag:L.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:d(()=>[(a(),$(W(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(W(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Qe(C,["enter"]),tabindex:"0"},Za,32)):f("",!0)],16,Ya)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",xa,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,K=>(a(),$(G,{key:K.text,item:K,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),tr=b(er,[["__scopeId","data-v-c24f735a"]]),Oe=o=>(B("data-v-4871f9f5"),o=o(),H(),o),or=Oe(()=>v("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},nr=Oe(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ar=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),n=o,s=w(null),i=Te(oe?document.body:null);return j([n,s],()=>{var u;n.open?(i.value=!0,(u=s.value)==null||u.focus()):i.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),c("aside",{key:0,class:N(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:h[0]||(h[0]=Ze(()=>{},["stop"]))},[or,v("nav",sr,[nr,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(r(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(tr,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),rr=b(ar,[["__scopeId","data-v-4871f9f5"]]),ir=_({__name:"VPSkipLink",setup(o){const e=ee(),t=w();j(()=>e.path,()=>t.value.focus());function n({target:s}){const i=document.getElementById(decodeURIComponent(s.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(s,i)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),lr=b(ir,[["__scopeId","data-v-c8291ffa"]]),cr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=O(),s=ee();j(()=>s.path,n),kt(e,n);const{frontmatter:i}=P(),u=xe(),h=y(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(p,g)=>{const L=q("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:N(["Layout",r(i).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(lr),m(st,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),m(Ja,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Is,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(rr,{open:r(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(ls,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(ps),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),ur=b(cr,[["__scopeId","data-v-d8b57b2d"]]),vr={Layout:ur,enhanceApp:({app:o})=>{o.component("Badge",et)}};export{Un as c,vr as t,P as u}; +const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.CEyexYv2.js","assets/chunks/framework.BKLMYXYM.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); +import{d as _,o as a,c,r as l,n as N,a as D,t as I,b as $,w as d,e as f,T as ve,_ as b,u as Ue,i as Ge,f as je,g as pe,h as y,j as v,k as r,p as B,l as H,m as z,q as ie,s as w,v as j,x as Z,y as R,z as he,A as ye,B as ze,C as qe,D as q,F as M,E,G as Pe,H as x,I as m,J as W,K as Le,L as ee,M as Y,N as te,O as Ke,P as Ve,Q as le,R as We,S as Se,U as oe,V as Re,W as Je,X as Ye,Y as Te,Z as Ie,$ as Qe,a0 as Xe,a1 as Ze,a2 as xe}from"./framework.BKLMYXYM.js";const et=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:N(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[D(I(e.text),1)])],2))}}),tt={key:0,class:"VPBackdrop"},ot=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(ve,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",tt)):f("",!0)]),_:1}))}}),st=b(ot,[["__scopeId","data-v-54a304ca"]]),P=Ue;function nt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!s.startsWith("http")||!je(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return pe(u)}function J({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:s,hash:i}=P(),u=y(()=>{var p,g;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:((g=e.value.locales[t.value])==null?void 0:g.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,g])=>u.value.label===g.label?[]:{text:g.label,link:at(g.link||(p==="root"?"/":`/${p}/`),s.value.i18nRouting!==!1&&o,n.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function at(o,e,t,n){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const rt=o=>(B("data-v-6ff51ddd"),o=o(),H(),o),it={class:"NotFound"},lt={class:"code"},ct={class:"title"},ut=rt(()=>v("div",{class:"divider"},null,-1)),dt={class:"quote"},vt={class:"action"},pt=["href","aria-label"],ht=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=J();return(n,s)=>{var i,u,h,p,g;return a(),c("div",it,[v("p",lt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",ct,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ut,v("blockquote",dt,I(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",vt,[v("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I(((g=r(e).notFound)==null?void 0:g.linkText)??"Take me home"),9,pt)])])}}}),ft=b(ht,[["__scopeId","data-v-6ff51ddd"]]);function we(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((s,i)=>i.split("/").length-s.split("/").length).find(s=>e.startsWith(ce(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function _t(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function mt(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):z(o,e.link)?!0:e.items?ue(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function O(){const{frontmatter:o,page:e,theme:t}=P(),n=ie("(min-width: 960px)"),s=w(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?we(C,S):[]}),u=w(i.value);j(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(u.value=i.value)});const h=y(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=y(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),L=y(()=>h.value&&n.value),k=y(()=>h.value?_t(u.value):[]);function V(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():V()}return{isOpen:s,sidebar:u,sidebarGroups:k,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:L,open:V,close:T,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",n)}),he(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function bt(o){const{page:e,hash:t}=P(),n=w(!1),s=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),u=w(!1),h=()=>{u.value=z(e.value.relativePath,o.value.link)};j([e,o,t],h),R(h);const p=y(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),g=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{n.value=!!(s.value&&o.value.collapsed)}),ye(()=>{(u.value||p.value)&&(n.value=!1)});function L(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:i,isActiveLink:u,hasActiveLink:p,hasChildren:g,toggle:L}}function $t(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:gt(t),link:"#"+t.id,level:n}});return yt(e,o)}function gt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function yt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=n&&u.level<=s),de.length=0;for(const{element:u,link:h}of o)de.push({element:u,link:h});const i=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),ze(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,L=Math.abs(h+p-g)<1,k=de.map(({element:T,link:A})=>({link:A,top:Lt(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!k.length){u(null);return}if(h<1){u(null);return}if(L){u(k[k.length-1].link);return}let V=null;for(const{link:T,top:A}of k){if(A>h+qe()+4)break;V=T}u(V)}function u(h){s&&s.classList.remove("active"),h==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Lt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],St=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=q("VPDocOutlineItem",!0);return a(),c("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},I(h),9,Vt),i!=null&&i.length?(a(),$(s,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(St,[["__scopeId","data-v-53c99d69"]]),Tt={class:"content"},It={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),n=Pe([]);x(()=>{n.value=_e(e.value.outline??t.value.outline)});const s=w(),i=w();return Pt(s,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s},[v("div",Tt,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",It,I(r(Ne)(r(t))),1),m(Me,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Nt=b(wt,[["__scopeId","data-v-f610f197"]]),Mt={class:"VPDocAsideCarbonAds"},At=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),c("div",Mt,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ct=o=>(B("data-v-cb998dce"),o=o(),H(),o),Bt={class:"VPDocAside"},Ht=Ct(()=>v("div",{class:"spacer"},null,-1)),Et=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,n)=>(a(),c("div",Bt,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Nt),l(t.$slots,"aside-outline-after",{},void 0,!0),Ht,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(At,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=b(Et,[["__scopeId","data-v-cb998dce"]]);function Dt(){const{theme:o,page:e}=P();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Ot(){const{page:o,theme:e,frontmatter:t}=P();return y(()=>{var g,L,k,V,T,A,C,S;const n=we(e.value.sidebar,o.value.relativePath),s=mt(n),i=Ut(s,U=>U.link.replace(/[?#].*$/,"")),u=i.findIndex(U=>z(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[u-1])==null?void 0:k.docFooterText)??((V=i[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[u-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((C=i[u+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function Ut(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const F=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(s,i)=>(a(),$(W(t.value),{class:N(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?r(fe)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[l(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Gt={class:"VPLastUpdated"},jt=["datetime"],zt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=P(),i=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=y(()=>i.value.toISOString()),h=w("");return R(()=>{Z(()=>{var p,g,L;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?s.value:void 0,((L=e.value.lastUpdated)==null?void 0:L.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(i.value)})}),(p,g)=>{var L;return a(),c("p",Gt,[D(I(((L=r(e).lastUpdated)==null?void 0:L.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},I(h.value),9,jt)])}}}),qt=b(zt,[["__scopeId","data-v-19a7ae4e"]]),Ae=o=>(B("data-v-5941af80"),o=o(),H(),o),Kt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},Rt={key:0,class:"edit-link"},Jt=Ae(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Yt={key:1,class:"last-updated"},Qt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Xt=Ae(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Zt={class:"pager"},xt=["innerHTML"],eo=["innerHTML"],to={class:"pager"},oo=["innerHTML"],so=["innerHTML"],no=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=P(),s=Dt(),i=Ot(),u=y(()=>e.value.editLink&&n.value.editLink!==!1),h=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>u.value||h.value||i.value.prev||i.value.next);return(g,L)=>{var k,V,T,A;return p.value?(a(),c("footer",Kt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Wt,[u.value?(a(),c("div",Rt,[m(F,{class:"edit-link-button",href:r(s).url,"no-icon":!0},{default:d(()=>[Jt,D(" "+I(r(s).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Yt,[m(qt)])):f("",!0)])):f("",!0),(k=r(i).prev)!=null&&k.link||(V=r(i).next)!=null&&V.link?(a(),c("nav",Qt,[Xt,v("div",Zt,[(T=r(i).prev)!=null&&T.link?(a(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,xt),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,eo)]}),_:1},8,["href"])):f("",!0)]),v("div",to,[(A=r(i).next)!=null&&A.link?(a(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,oo),v("span",{class:"title",innerHTML:r(i).next.text},null,8,so)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ao=b(no,[["__scopeId","data-v-5941af80"]]),ro=o=>(B("data-v-e6f2a212"),o=o(),H(),o),io={class:"container"},lo=ro(()=>v("div",{class:"aside-curtain"},null,-1)),co={class:"aside-container"},uo={class:"aside-content"},vo={class:"content"},po={class:"content-container"},ho={class:"main"},fo=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:n,hasAside:s,leftAside:i}=O(),u=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=q("Content");return a(),c("div",{class:N(["VPDoc",{"has-sidebar":r(n),"has-aside":r(s)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",io,[r(s)?(a(),c("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[lo,v("div",co,[v("div",uo,[m(Ft,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",vo,[v("div",po,[l(h.$slots,"doc-before",{},void 0,!0),v("main",ho,[m(g,{class:N(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(ao,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),_o=b(fo,[["__scopeId","data-v-e6f2a212"]]),mo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,i)=>(a(),$(W(n.value),{class:N(["VPButton",[s.size,s.theme]]),href:s.href?r(fe)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[D(I(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),ko=b(mo,[["__scopeId","data-v-c9cf0e3c"]]),bo=["src","alt"],$o=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=q("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,bo)):(a(),c(M,{key:1},[m(n,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b($o,[["__scopeId","data-v-ab19afbb"]]),go=o=>(B("data-v-b10c5094"),o=o(),H(),o),yo={class:"container"},Po={class:"main"},Lo={key:0,class:"name"},Vo=["innerHTML"],So=["innerHTML"],To=["innerHTML"],Io={key:0,class:"actions"},wo={key:0,class:"image"},No={class:"image-container"},Mo=go(()=>v("div",{class:"image-bg"},null,-1)),Ao=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[v("div",yo,[v("div",Po,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Lo,[v("span",{innerHTML:t.name,class:"clip"},null,8,Vo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,So)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Io,[(a(!0),c(M,null,E(t.actions,s=>(a(),c("div",{key:s.link,class:"action"},[m(ko,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",wo,[v("div",No,[Mo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Co=b(Ao,[["__scopeId","data-v-b10c5094"]]),Bo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).hero?(a(),$(Co,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Ho=o=>(B("data-v-bd37d1a2"),o=o(),H(),o),Eo={class:"box"},Fo={key:0,class:"icon"},Do=["innerHTML"],Oo=["innerHTML"],Uo=["innerHTML"],Go={key:4,class:"link-text"},jo={class:"link-text-value"},zo=Ho(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),qo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Eo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Fo,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Do)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Oo),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Uo)):f("",!0),e.linkText?(a(),c("div",Go,[v("p",jo,[D(I(e.linkText)+" ",1),zo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ko=b(qo,[["__scopeId","data-v-bd37d1a2"]]),Wo={key:0,class:"VPFeatures"},Ro={class:"container"},Jo={class:"items"},Yo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),c("div",Wo,[v("div",Ro,[v("div",Jo,[(a(!0),c(M,null,E(n.features,i=>(a(),c("div",{key:i.title,class:N(["item",[t.value]])},[m(Ko,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Qo=b(Yo,[["__scopeId","data-v-b1eea84a"]]),Xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).features?(a(),$(Qo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),Zo=_({__name:"VPHomeContent",setup(o){const{width:e}=Ke({initialWidth:0,includeScrollbar:!1});return(t,n)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),xo=b(Zo,[["__scopeId","data-v-c141a4bd"]]),es={class:"VPHome"},ts=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,n)=>{const s=q("Content");return a(),c("div",es,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Bo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(Xo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(xo,{key:0},{default:d(()=>[m(s)]),_:1})):(a(),$(s,{key:1}))])}}}),os=b(ts,[["__scopeId","data-v-07b1ad08"]]),ss={},ns={class:"VPPage"};function as(o,e){const t=q("Content");return a(),c("div",ns,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const rs=b(ss,[["render",as]]),is=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>(a(),c("div",{class:N(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(s.$slots,"not-found",{key:0},()=>[m(ft)],!0):r(t).layout==="page"?(a(),$(rs,{key:1},{"page-top":d(()=>[l(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(os,{key:2},{"home-hero-before":d(()=>[l(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(W(r(t).layout),{key:3})):(a(),$(_o,{key:4},{"doc-top":d(()=>[l(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ls=b(is,[["__scopeId","data-v-9a6c75ad"]]),cs={class:"container"},us=["innerHTML"],ds=["innerHTML"],vs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(n)}])},[v("div",cs,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,us)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ds)):f("",!0)])],2)):f("",!0)}}),ps=b(vs,[["__scopeId","data-v-566314d4"]]);function hs(){const{theme:o,frontmatter:e}=P(),t=Pe([]),n=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const fs=o=>(B("data-v-883964e0"),o=o(),H(),o),_s={class:"menu-text"},ms=fs(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),ks={class:"header"},bs={class:"outline"},$s=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),n=w(!1),s=w(0),i=w(),u=w();function h(k){var V;(V=i.value)!=null&&V.contains(k.target)||(n.value=!1)}j(n,k=>{if(k){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),le("Escape",()=>{n.value=!1}),x(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function g(k){k.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),We(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,V)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":s.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(a(),c("button",{key:0,onClick:p,class:N({open:n.value})},[v("span",_s,I(r(Ne)(r(t))),1),ms],2)):(a(),c("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:d(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:g},[v("div",ks,[v("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),v("div",bs,[m(Me,{headers:k.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),gs=b($s,[["__scopeId","data-v-883964e0"]]),ys=o=>(B("data-v-2488c25a"),o=o(),H(),o),Ps={class:"container"},Ls=["aria-expanded"],Vs=ys(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Ss={class:"menu-text"},Ts=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O(),{headers:s}=hs(),{y:i}=Se(),u=w(0);R(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{s.value=_e(t.value.outline??e.value.outline)});const h=y(()=>s.value.length===0),p=y(()=>h.value&&!n.value),g=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:p.value}));return(L,k)=>r(t).layout!=="home"&&(!p.value||r(i)>=u.value)?(a(),c("div",{key:0,class:N(g.value)},[v("div",Ps,[r(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>L.$emit("open-menu"))},[Vs,v("span",Ss,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ls)):f("",!0),m(gs,{headers:r(s),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Is=b(Ts,[["__scopeId","data-v-2488c25a"]]);function ws(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const i=ee();return j(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Ns={},Ms={class:"VPSwitch",type:"button",role:"switch"},As={class:"check"},Cs={key:0,class:"icon"};function Bs(o,e){return a(),c("button",Ms,[v("span",As,[o.$slots.default?(a(),c("span",Cs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Hs=b(Ns,[["render",Bs],["__scopeId","data-v-b4ccac88"]]),Ce=o=>(B("data-v-7df97737"),o=o(),H(),o),Es=Ce(()=>v("span",{class:"vpi-sun sun"},null,-1)),Fs=Ce(()=>v("span",{class:"vpi-moon moon"},null,-1)),Ds=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),n=te("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(i,u)=>(a(),$(Hs,{title:s.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:d(()=>[Es,Fs]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Ds,[["__scopeId","data-v-7df97737"]]),Os={key:0,class:"VPNavBarAppearance"},Us=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",Os,[m(me)])):f("",!0)}}),Gs=b(Us,[["__scopeId","data-v-283b26e9"]]),ke=w();let Be=!1,re=0;function js(o){const e=w(!1);if(oe){!Be&&zs(),re++;const t=j(ke,n=>{var s,i,u;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});he(()=>{t(),re--,re||qs()})}return Re(e)}function zs(){document.addEventListener("focusin",He),Be=!0,ke.value=document.activeElement}function qs(){document.removeEventListener("focusin",He)}function He(){ke.value=document.activeElement}const Ks={class:"VPMenuLink"},Ws=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),c("div",Ks,[m(F,{class:N({active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Ws,[["__scopeId","data-v-f51f088d"]]),Rs={class:"VPMenuGroup"},Js={key:0,class:"title"},Ys=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Rs,[e.text?(a(),c("p",Js,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),c(M,null,["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),Qs=b(Ys,[["__scopeId","data-v-a6b0397c"]]),Xs={class:"VPMenu"},Zs={key:0,class:"items"},xs=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Xs,[e.items?(a(),c("div",Zs,[(a(!0),c(M,null,E(e.items,n=>(a(),c(M,{key:n.text},["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):(a(),$(Qs,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),en=b(xs,[["__scopeId","data-v-e42ed9b3"]]),tn=o=>(B("data-v-af5898d3"),o=o(),H(),o),on=["aria-expanded","aria-label"],sn={key:0,class:"text"},nn=["innerHTML"],an=tn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),rn={key:1,class:"vpi-more-horizontal icon"},ln={class:"menu"},cn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();js({el:t,onBlur:n});function n(){e.value=!1}return(s,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[s.button||s.icon?(a(),c("span",sn,[s.icon?(a(),c("span",{key:0,class:N([s.icon,"option-icon"])},null,2)):f("",!0),s.button?(a(),c("span",{key:1,innerHTML:s.button},null,8,nn)):f("",!0),an])):(a(),c("span",rn))],8,on),v("div",ln,[m(en,{items:s.items},{default:d(()=>[l(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(cn,[["__scopeId","data-v-af5898d3"]]),un=["href","aria-label","innerHTML"],dn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,un))}}),vn=b(dn,[["__scopeId","data-v-358b6670"]]),pn={class:"VPSocialLinks"},hn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",pn,[(a(!0),c(M,null,E(e.links,({link:n,icon:s,ariaLabel:i})=>(a(),$(vn,{key:n,icon:s,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(hn,[["__scopeId","data-v-e71e869c"]]),fn={key:0,class:"group translations"},_n={class:"trans-title"},mn={key:1,class:"group"},kn={class:"item appearance"},bn={class:"label"},$n={class:"appearance-action"},gn={key:2,class:"group"},yn={class:"item social-links"},Pn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:s}=J({correspondingLink:!0}),i=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[r(n).length&&r(s).label?(a(),c("div",fn,[v("p",_n,I(r(s).label),1),(a(!0),c(M,null,E(r(n),p=>(a(),$(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",mn,[v("div",kn,[v("p",bn,I(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",$n,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",gn,[v("div",yn,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ln=b(Pn,[["__scopeId","data-v-8e87c032"]]),Vn=o=>(B("data-v-6bee1efd"),o=o(),H(),o),Sn=["aria-expanded"],Tn=Vn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),In=[Tn],wn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},In,10,Sn))}}),Nn=b(wn,[["__scopeId","data-v-6bee1efd"]]),Mn=["innerHTML"],An=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),$(F,{class:N({VPNavBarMenuLink:!0,active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cn=b(An,[["__scopeId","data-v-08fbf4b6"]]),Bn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),n=i=>"link"in i?z(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),s=y(()=>n(e.item));return(i,u)=>(a(),$(be,{class:N({VPNavBarMenuGroup:!0,active:r(z)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||s.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Hn=o=>(B("data-v-f732b5d0"),o=o(),H(),o),En={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Fn=Hn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Dn=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",En,[Fn,(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Cn,{key:0,item:s},null,8,["item"])):(a(),$(Bn,{key:1,item:s},null,8,["item"]))],64))),128))])):f("",!0)}}),On=b(Dn,[["__scopeId","data-v-f732b5d0"]]);function Un(o){const{localeIndex:e,theme:t}=P();function n(s){var A,C,S;const i=s.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((S=(C=u.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,g=h&&u.translations||null;let L=p,k=g,V=o;const T=i.pop();for(const U of i){let G=null;const K=V==null?void 0:V[U];K&&(G=V=K);const ne=k==null?void 0:k[U];ne&&(G=k=ne);const ae=L==null?void 0:L[U];ae&&(G=L=ae),K||(V=G),ne||(k=G),ae||(L=G)}return(L==null?void 0:L[T])??(k==null?void 0:k[T])??(V==null?void 0:V[T])??""}return n}const Gn=["aria-label"],jn={class:"DocSearch-Button-Container"},zn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),qn={class:"DocSearch-Button-Placeholder"},Kn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Un({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",jn,[zn,v("span",qn,I(r(t)("button.buttonText")),1)]),Kn],8,Gn))}}),Wn={class:"VPNavBarSearch"},Rn={id:"local-search"},Jn={key:1,id:"docsearch"},Yn=_({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.CEyexYv2.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=P(),s=w(!1),i=w(!1);R(()=>{});function u(){s.value||(s.value=!0,setTimeout(h,16))}function h(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function p(k){const V=k.target,T=V.tagName;return V.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const g=w(!1);le("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),g.value=!0)}),le("/",k=>{p(k)||(k.preventDefault(),g.value=!0)});const L="local";return(k,V)=>{var T;return a(),c("div",Wn,[r(L)==="local"?(a(),c(M,{key:0},[g.value?(a(),$(r(e),{key:0,onClose:V[0]||(V[0]=A=>g.value=!1)})):f("",!0),v("div",Rn,[m(ge,{onClick:V[1]||(V[1]=A=>g.value=!0)})])],64)):r(L)==="algolia"?(a(),c(M,{key:1},[s.value?(a(),$(r(t),{key:0,algolia:((T=r(n).search)==null?void 0:T.options)??r(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Jn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Qn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Xn=b(Qn,[["__scopeId","data-v-ef6192dc"]]),Zn=["href","rel","target"],xn={key:1},ea={key:2},ta=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:n}=O(),{currentLang:s}=J(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(n)}])},[v("a",{class:"title",href:i.value??r(fe)(r(s).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",xn,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",ea,I(r(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Zn)],2))}}),oa=b(ta,[["__scopeId","data-v-0ad69264"]]),sa={class:"items"},na={class:"title"},aa=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:n}=J({correspondingLink:!0});return(s,i)=>r(t).length&&r(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",sa,[v("p",na,I(r(n).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ra=b(aa,[["__scopeId","data-v-acee064b"]]),ia=o=>(B("data-v-844edcde"),o=o(),H(),o),la={class:"wrapper"},ca={class:"container"},ua={class:"title"},da={class:"content"},va={class:"content-body"},pa=ia(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),ha=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{frontmatter:n}=P(),s=w({});return ye(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(i,u)=>(a(),c("div",{class:N(["VPNavBar",s.value])},[v("div",la,[v("div",ca,[v("div",ua,[m(oa,null,{"nav-bar-title-before":d(()=>[l(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",da,[v("div",va,[l(i.$slots,"nav-bar-content-before",{},void 0,!0),m(Yn,{class:"search"}),m(On,{class:"menu"}),m(ra,{class:"translations"}),m(Gs,{class:"appearance"}),m(Xn,{class:"social-links"}),m(Ln,{class:"extra"}),l(i.$slots,"nav-bar-content-after",{},void 0,!0),m(Nn,{class:"hamburger",active:i.isScreenOpen,onClick:u[0]||(u[0]=h=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),pa],2))}}),fa=b(ha,[["__scopeId","data-v-844edcde"]]),_a={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},ka=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(n,s)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",_a,[v("p",ma,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),ba=b(ka,[["__scopeId","data-v-338d9b48"]]),$a=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),ga=b($a,[["__scopeId","data-v-1a934d60"]]),ya=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=b(ya,[["__scopeId","data-v-aea78dd1"]]),Pa={class:"VPNavScreenMenuGroupSection"},La={key:0,class:"title"},Va=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Pa,[e.text?(a(),c("p",La,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),$(Ee,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Sa=b(Va,[["__scopeId","data-v-f60dbfa7"]]),Ta=o=>(B("data-v-d2212c70"),o=o(),H(),o),Ia=["aria-controls","aria-expanded"],wa=["innerHTML"],Na=Ta(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Aa={key:1,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:i.text},null,8,wa),Na],8,Ia),v("div",{id:n.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(Ee,{item:h},null,8,["item"])])):(a(),c("div",Aa,[m(Sa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ba=b(Ca,[["__scopeId","data-v-d2212c70"]]),Ha={key:0,class:"VPNavScreenMenu"},Ea=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",Ha,[(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(ga,{key:0,item:s},null,8,["item"])):(a(),$(Ba,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Fa=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(B("data-v-516e4bc3"),o=o(),H(),o),Da=Fe(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Oa=Fe(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ua={class:"list"},Ga=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),n=w(!1);function s(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:N(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[Da,D(" "+I(r(t).label)+" ",1),Oa]),v("ul",Ua,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(F,{class:"link",href:h.link},{default:d(()=>[D(I(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),ja=b(Ga,[["__scopeId","data-v-516e4bc3"]]),za={class:"container"},qa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=Te(oe?document.body:null);return(n,s)=>(a(),$(ve,{name:"fade",onEnter:s[0]||(s[0]=i=>t.value=!0),onAfterLeave:s[1]||(s[1]=i=>t.value=!1)},{default:d(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",za,[l(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Ea,{class:"menu"}),m(ja,{class:"translations"}),m(ba,{class:"appearance"}),m(Fa,{class:"social-links"}),l(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=b(qa,[["__scopeId","data-v-57cce842"]]),Wa={key:0,class:"VPNav"},Ra=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=ws(),{frontmatter:s}=P(),i=y(()=>s.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Wa,[m(fa,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:r(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ja=b(Ra,[["__scopeId","data-v-7ad780c2"]]),De=o=>(B("data-v-c24f735a"),o=o(),H(),o),Ya=["role","tabindex"],Qa=De(()=>v("div",{class:"indicator"},null,-1)),Xa=De(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Za=[Xa],xa={key:1,class:"items"},er=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:p}=bt(y(()=>e.item)),g=y(()=>h.value?"section":"div"),L=y(()=>s.value?"a":"div"),k=y(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,U)=>{const G=q("VPSidebarItem",!0);return a(),$(W(g.value),{class:N(["VPSidebarItem",T.value])},{default:d(()=>[S.item.text?(a(),c("div",Y({key:0,class:"item",role:V.value},Xe(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[Qa,S.item.link?(a(),$(F,{key:0,tag:L.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:d(()=>[(a(),$(W(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(W(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Qe(C,["enter"]),tabindex:"0"},Za,32)):f("",!0)],16,Ya)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",xa,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,K=>(a(),$(G,{key:K.text,item:K,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),tr=b(er,[["__scopeId","data-v-c24f735a"]]),Oe=o=>(B("data-v-4871f9f5"),o=o(),H(),o),or=Oe(()=>v("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},nr=Oe(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ar=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),n=o,s=w(null),i=Te(oe?document.body:null);return j([n,s],()=>{var u;n.open?(i.value=!0,(u=s.value)==null||u.focus()):i.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),c("aside",{key:0,class:N(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:h[0]||(h[0]=Ze(()=>{},["stop"]))},[or,v("nav",sr,[nr,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(r(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(tr,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),rr=b(ar,[["__scopeId","data-v-4871f9f5"]]),ir=_({__name:"VPSkipLink",setup(o){const e=ee(),t=w();j(()=>e.path,()=>t.value.focus());function n({target:s}){const i=document.getElementById(decodeURIComponent(s.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(s,i)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),lr=b(ir,[["__scopeId","data-v-c8291ffa"]]),cr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=O(),s=ee();j(()=>s.path,n),kt(e,n);const{frontmatter:i}=P(),u=xe(),h=y(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(p,g)=>{const L=q("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:N(["Layout",r(i).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(lr),m(st,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),m(Ja,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Is,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(rr,{open:r(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(ls,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(ps),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),ur=b(cr,[["__scopeId","data-v-d8b57b2d"]]),vr={Layout:ur,enhanceApp:({app:o})=>{o.component("Badge",et)}};export{Un as c,vr as t,P as u}; diff --git a/assets/en_index.md.DTm0thcd.js b/assets/en_index.md.CxPf7yrQ.js similarity index 90% rename from assets/en_index.md.DTm0thcd.js rename to assets/en_index.md.CxPf7yrQ.js index 6ee4e0c8..dbf34bd8 100644 --- a/assets/en_index.md.DTm0thcd.js +++ b/assets/en_index.md.CxPf7yrQ.js @@ -1 +1 @@ -import{_ as e,c as t,o as n}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK Doc","text":"","tagline":"English version WIP","actions":[{"theme":"brand","text":"Quick Start","link":"/en/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"WIP"},{"title":"LLVM","details":"WIP"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1719560925000}'),i={name:"en/index.md"};function a(o,r,s,d,c,l){return n(),t("div")}const u=e(i,[["render",a]]);export{p as __pageData,u as default}; +import{_ as e,c as t,o as n}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK Doc","text":"","tagline":"English version WIP","actions":[{"theme":"brand","text":"Quick Start","link":"/en/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"WIP"},{"title":"LLVM","details":"WIP"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1719824176000}'),i={name:"en/index.md"};function a(o,r,s,d,c,l){return n(),t("div")}const u=e(i,[["render",a]]);export{p as __pageData,u as default}; diff --git a/assets/en_index.md.DTm0thcd.lean.js b/assets/en_index.md.CxPf7yrQ.lean.js similarity index 90% rename from assets/en_index.md.DTm0thcd.lean.js rename to assets/en_index.md.CxPf7yrQ.lean.js index 6ee4e0c8..dbf34bd8 100644 --- a/assets/en_index.md.DTm0thcd.lean.js +++ b/assets/en_index.md.CxPf7yrQ.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as n}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK Doc","text":"","tagline":"English version WIP","actions":[{"theme":"brand","text":"Quick Start","link":"/en/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"WIP"},{"title":"LLVM","details":"WIP"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1719560925000}'),i={name:"en/index.md"};function a(o,r,s,d,c,l){return n(),t("div")}const u=e(i,[["render",a]]);export{p as __pageData,u as default}; +import{_ as e,c as t,o as n}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK Doc","text":"","tagline":"English version WIP","actions":[{"theme":"brand","text":"Quick Start","link":"/en/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"WIP"},{"title":"LLVM","details":"WIP"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1719824176000}'),i={name:"en/index.md"};function a(o,r,s,d,c,l){return n(),t("div")}const u=e(i,[["render",a]]);export{p as __pageData,u as default}; diff --git a/assets/en_introduction_index.md.ti3LgTUe.js b/assets/en_introduction_index.md.vcP4gSP7.js similarity index 77% rename from assets/en_introduction_index.md.ti3LgTUe.js rename to assets/en_introduction_index.md.vcP4gSP7.js index b1007733..c183c2d9 100644 --- a/assets/en_introduction_index.md.ti3LgTUe.js +++ b/assets/en_introduction_index.md.vcP4gSP7.js @@ -1 +1 @@ -import{_ as t,c as a,o,j as e,a as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"TODO","description":"","frontmatter":{},"headers":[],"relativePath":"en/introduction/index.md","filePath":"en/introduction/index.md","lastUpdated":1719560925000}'),d={name:"en/introduction/index.md"},r=e("h1",{id:"todo",tabindex:"-1"},[n("TODO "),e("a",{class:"header-anchor",href:"#todo","aria-label":'Permalink to "TODO"'},"​")],-1),i=[r];function s(c,_,l,p,h,m){return o(),a("div",null,i)}const u=t(d,[["render",s]]);export{x as __pageData,u as default}; +import{_ as t,c as a,o,j as e,a as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"TODO","description":"","frontmatter":{},"headers":[],"relativePath":"en/introduction/index.md","filePath":"en/introduction/index.md","lastUpdated":1719824176000}'),d={name:"en/introduction/index.md"},r=e("h1",{id:"todo",tabindex:"-1"},[n("TODO "),e("a",{class:"header-anchor",href:"#todo","aria-label":'Permalink to "TODO"'},"​")],-1),i=[r];function s(c,_,l,p,h,m){return o(),a("div",null,i)}const u=t(d,[["render",s]]);export{x as __pageData,u as default}; diff --git a/assets/en_introduction_index.md.ti3LgTUe.lean.js b/assets/en_introduction_index.md.vcP4gSP7.lean.js similarity index 77% rename from assets/en_introduction_index.md.ti3LgTUe.lean.js rename to assets/en_introduction_index.md.vcP4gSP7.lean.js index b1007733..c183c2d9 100644 --- a/assets/en_introduction_index.md.ti3LgTUe.lean.js +++ b/assets/en_introduction_index.md.vcP4gSP7.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o,j as e,a as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"TODO","description":"","frontmatter":{},"headers":[],"relativePath":"en/introduction/index.md","filePath":"en/introduction/index.md","lastUpdated":1719560925000}'),d={name:"en/introduction/index.md"},r=e("h1",{id:"todo",tabindex:"-1"},[n("TODO "),e("a",{class:"header-anchor",href:"#todo","aria-label":'Permalink to "TODO"'},"​")],-1),i=[r];function s(c,_,l,p,h,m){return o(),a("div",null,i)}const u=t(d,[["render",s]]);export{x as __pageData,u as default}; +import{_ as t,c as a,o,j as e,a as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"TODO","description":"","frontmatter":{},"headers":[],"relativePath":"en/introduction/index.md","filePath":"en/introduction/index.md","lastUpdated":1719824176000}'),d={name:"en/introduction/index.md"},r=e("h1",{id:"todo",tabindex:"-1"},[n("TODO "),e("a",{class:"header-anchor",href:"#todo","aria-label":'Permalink to "TODO"'},"​")],-1),i=[r];function s(c,_,l,p,h,m){return o(),a("div",null,i)}const u=t(d,[["render",s]]);export{x as __pageData,u as default}; diff --git a/assets/old_devices_index.md.KbkYjeSS.js b/assets/old_devices_index.md.KbkYjeSS.js new file mode 100644 index 00000000..a2866162 --- /dev/null +++ b/assets/old_devices_index.md.KbkYjeSS.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as a,a3 as l}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK集成的RISC-V设备","description":"","frontmatter":{},"headers":[],"relativePath":"old/devices/index.md","filePath":"old/devices/index.md","lastUpdated":1719824176000}'),s={name:"old/devices/index.md"},t=l('

RuyiSDK集成的RISC-V设备

RuyiSDK对RISC-V设备的集成和支持主要包括以下几个方面:

  1. 提供RISC-V 开发板适用镜像信息维护与下载、开发板系统安装引导程序,方便 RISC-V 开发者获取指定开发板可用的OS并可方便的安装OS的安装。RuyiSDK集成了多种可用的操作系统供用户选择。
  2. 提供RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加RISC-V设备专有向导页面、实现开发环境和运行环境的文件传输、支持在RISC-V设备上调试应用程序等。

支持的RISC-V设备

目前对硬件设备的集成主要体现在包管理器(设备安装器),可以通过 ruyi device provision命令查询,已经集成的RISC-V设备有:

  1. Allwinner Nezha D1
  2. Canaan Kendryte K230
  3. Milk-V Duo
  4. Milk-V Duo S
  5. Milk-V Mars
  6. Milk-V Mars CM
  7. Milk-V Meles
  8. Milk-V Pioneer Box
  9. Milk-V Vega
  10. SiFive HiFive Unmatched
  11. Sipeed Lichee RV
  12. Sipeed LicheePi 4A
  13. StarFive VisionFive
  14. StarFive VisionFive2

从RuyiSDK开始使用设备

获取并安装OS

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

',11),o=[t];function r(n,d,h,c,p,S){return a(),e("div",null,o)}const V=i(s,[["render",r]]);export{k as __pageData,V as default}; diff --git a/assets/old_devices_index.md.KbkYjeSS.lean.js b/assets/old_devices_index.md.KbkYjeSS.lean.js new file mode 100644 index 00000000..33dab1d6 --- /dev/null +++ b/assets/old_devices_index.md.KbkYjeSS.lean.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as a,a3 as l}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK集成的RISC-V设备","description":"","frontmatter":{},"headers":[],"relativePath":"old/devices/index.md","filePath":"old/devices/index.md","lastUpdated":1719824176000}'),s={name:"old/devices/index.md"},t=l("",11),o=[t];function r(n,d,h,c,p,S){return a(),e("div",null,o)}const V=i(s,[["render",r]]);export{k as __pageData,V as default}; diff --git a/assets/zh_introduction_index.md.DhOaCQwk.js b/assets/old_introduction_index.md.6tez9-Iq.js similarity index 66% rename from assets/zh_introduction_index.md.DhOaCQwk.js rename to assets/old_introduction_index.md.6tez9-Iq.js index 3af6b47f..1fe99186 100644 --- a/assets/zh_introduction_index.md.DhOaCQwk.js +++ b/assets/old_introduction_index.md.6tez9-Iq.js @@ -1,4 +1,4 @@ -import{_ as a,c as e,o as i,a3 as r}from"./chunks/framework.BKLMYXYM.js";const l="/docs/assets/ruyisdk.DlLqNkX-.png",b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/index.md","filePath":"zh/introduction/index.md","lastUpdated":1719560925000}'),t={name:"zh/introduction/index.md"},s=r(`

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK
  2. 为什么会有 RuyiSDK
  3. RuyiSDK 有什么用
  4. 我可以在什么设备上运行
  5. RuyiSDK 的原理是什么
  6. 我该从何开始

介绍

RuyiSDK 是一个由中科院软件所(ISCAS)所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在[支持的设备](## 支持的设备)中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 Cisc 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK 分为以下三个部分:

Ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
+import{_ as a,c as e,o as i,a3 as r}from"./chunks/framework.BKLMYXYM.js";const l="/docs/assets/ruyisdk.DlLqNkX-.png",b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"old/introduction/index.md","filePath":"old/introduction/index.md","lastUpdated":1719824176000}'),t={name:"old/introduction/index.md"},s=r(`

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK
  2. 为什么会有 RuyiSDK
  3. RuyiSDK 有什么用
  4. 我可以在什么设备上运行
  5. RuyiSDK 的原理是什么
  6. 我该从何开始

介绍

RuyiSDK 是一个由中科院软件所(ISCAS)所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在[支持的设备](## 支持的设备)中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 Cisc 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK 分为以下三个部分:

Ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
 2. 调试工具
 3. 模拟器
 4. 运行环境
diff --git a/assets/old_introduction_index.md.6tez9-Iq.lean.js b/assets/old_introduction_index.md.6tez9-Iq.lean.js
new file mode 100644
index 00000000..af9727e4
--- /dev/null
+++ b/assets/old_introduction_index.md.6tez9-Iq.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as e,o as i,a3 as r}from"./chunks/framework.BKLMYXYM.js";const l="/docs/assets/ruyisdk.DlLqNkX-.png",b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"old/introduction/index.md","filePath":"old/introduction/index.md","lastUpdated":1719824176000}'),t={name:"old/introduction/index.md"},s=r("",33),n=[s];function o(h,p,d,c,u,k){return i(),e("div",null,n)}const m=a(t,[["render",o]]);export{b as __pageData,m as default};
diff --git a/assets/old_introduction_requirement.md.po9Dgnk6.js b/assets/old_introduction_requirement.md.po9Dgnk6.js
new file mode 100644
index 00000000..c66a327a
--- /dev/null
+++ b/assets/old_introduction_requirement.md.po9Dgnk6.js
@@ -0,0 +1 @@
+import{_ as i,c as l,o,a3 as r}from"./chunks/framework.BKLMYXYM.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"old/introduction/requirement.md","filePath":"old/introduction/requirement.md","lastUpdated":1719824176000}'),t={name:"old/introduction/requirement.md"},e=r('

介绍

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RuyiSDK 的目标

  1. 开发者购买了 (几乎) 任何一款 RISC-V 开发板或模组,都可以通过 RuyiSDK 系统获得硬件资料说明、固件 / 软件更新、调试支持等。
  2. 开发者可以指定任何常用的 RISC-V 扩展指令集架构组合,都可以通过 RuyiSDK 系统生成客户所需的操作系统、工具链、语言执行环境 (运行时或虚拟机)、计算库、应用框架等。尤其强调 RuyiSDK 将完全支持 Vector 0.7.1 和 RVP 0.5.2 等已经大规模硅化的草案 标准 (or 厂商定制扩展)。
  3. 培育运营一个活跃全面的开发者交流社区。

RuyiSDK 架构示意图

![[1703147196780.png]]RuyiSDK 的组成

RuyiSDK 主要包含了一个组件管理器(也称为包管理器,Ruyi Repo)、一个集成开发环境(Ruyi IDE)、一个开发者交流社区;

  • 组件管理器包含一个在线软件源 (Ruyi Repo) 和 一个包管理工具(ruyi)。在线软件源即 Ruyi Repo 集中存储了RISC-V集成开发环境所需的编译工具链、调试工具、模拟器、运行环境、文档、代码、工具、target系统镜像等内容;包管理器工具则是用于与在线软件源交互的工具,它提供了一套命令行接口(ruyi)或图形用户界面(GUI未来可能提供),使开发者能够搜索、安装、更新和管理软件包。包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

  • 集成开发环境(Ruyi IDE)则是一个专门用来开发能够运行在RISC-V架构设备上的软件和应用的工具箱。可以帮助开发者编写和测试自己的程序。

    想象一下,你要做一款能够运行在RISC-V设备上的应用程序,比如用C或者C++语言开发一个图像识别的程序,Ruyi IDE 就像是一个你的工作室,里面有各种各样的工具可以帮助你完成这个任务。首先创建项目,从RuyiSDK包管理器中下载和安装所需的编译工具链、调试工具、模拟器等工具,然后在文本编辑器中完成对代码的编辑,接着对项目进行编译构建获得RISC-V架构的可执行程序,最后在模拟器或者RISC-V开发板上进行运行和测试。如果代码需要调试,也可通过调试工具进行代码调试。这一过程和x86下的开发、编译构建、调试、运行的流程是一致的,只是适用于当前开发语言及目标运行设备的RISC-V的编译工具链、模拟器等软件和工具都可以从Ruyi Repo中获取,在安装和IDE初始设置时都已经被集成到 Ruyi IDE 之中,用户无需为环境搭建耗费精力。

  • 开发者交流社区则提供文档和教程、论坛和技术讨论区、博客和文档等等功能,目的是为RISC-V开发者提供一个开放的交流平台,提供互助式技术支持和资源共享,聚集RISC-V开发者并推动RISC-V生态系统的发展。

RuyiSDK 模块需求说明

说明:这是一个初步的需求设想,具体还需要结合技术可行性等进行进一步的调整。供参考。

RUYI 包管理器

RUYI在线软件源(Ruyi Repo)

  1. 软件源的管理内容包括以下内容:
    1. GNU和LLVM编译工具链
    2. 调试工具(GDB、LLDB)
    3. 模拟器(qemu、spike,……)
    4. 运行环境(sysroot / rootfs)
    5. 工具:包括且不限于Ruyi IDE、架构图中的各种工具等
    6. 代码(库、示例 etc.)
    7. 文档
    8. 目标运行环境的RISC-V系统镜像文件
  2. 软件源内包的元数据包含并不限于:发布厂商、版本信息、资源类型、下载链接、文档资源等各种信息(支持属性扩展)等属性信息;如编译工具链有不同厂商发布的,不同版本的软件资源需要进行管理(如GNU和LLVM目前有三种类型:upstream、PLCT、xthead,随着版本的更新和发布,每种类型会产生诸如vX.X这种多个版本)。

RUYI包管理工具(ruyi)

  1. 实现一套命令行接口(CLI),用于与在线软件源交互。
    1. 使开发者能够搜索、安装、更新、卸载和管理软件包。

    2. 包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

    3. 能够支持工具自身的升级、卸载;

    4. 能够支持在线软件源中不同类型、不同版本、不同厂商、不同适用环境的软件包的搜索:

      • 按照name搜索
      • 按照版本搜索
      • 按照可支持的扩展指令集搜索
      • 按照资源类型搜索
      • 按照可适用的开发板(或目标运行环境)搜索
      • ……
  2. 实现一套图形用户界面(GUI)工具,用于与在线软件源交互。功能与上述CLI接口类似;(待定)
  3. 三架构支持:工具需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);

Ruyi IDE

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下功能:

  1. 项目管理工具:提供项目管理功能,使开发者能够轻松创建、组织和管理他们的RISC-V项目。这包括创建新项目、导入现有项目、管理依赖和库等。

  2. 代码编辑器:提供一个功能强大的代码编辑器,支持开发语言的语法高亮显示、代码自动完成、代码导航、智能感知、错误检查、代码片段管理、版本控制集成、调试支持等功能,以提高开发效率、减少错误,并提供更好的代码编写和维护体验。

    • 代码编辑器常见功能详细说明:

      1. 语法高亮(Syntax Highlighting):根据编程语言的语法规则,对代码进行着色,以增强可读性和代码理解性。
      2. 自动完成(Auto Completion):根据当前上下文,在输入代码的过程中自动弹出变量、函数、类名等的建议,以加快编码速度和减少拼写错误。
      3. 智能感知(Intelligent Code Sense):通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助开发者编写正确的代码。
      4. 代码导航(Code Navigation):提供快速导航到代码的不同部分,如跳转到定义处、跳转到引用处、跳转到函数调用等,以便快速定位和浏览代码。
      5. 重构工具(Refactoring Tools):提供一系列操作,如重命名、提取函数、提取变量等,以帮助开发者改善代码的结构和可维护性。
      6. 调试支持(Debugging Support):提供集成的调试器,使开发者能够设置断点、单步执行代码、查看变量的值等,以便调试和排查代码中的问题。
      7. 版本控制集成(Version Control Integration):与版本控制系统(如Git)集成,提供对代码版本的管理、提交、比较和合并等功能。
      8. 错误检查(Error Checking):即时检测代码中的语法错误、潜在的逻辑错误或常见的编码错误,并给出相应的警告或错误提示。
      9. 代码片段管理(Code Snippet Management):提供可重用的代码片段库,包括预定义的模板或用户自定义的代码片段,以便快速插入常用代码块。
      10. 文档生成(Documentation Generation):根据代码中的注释或特定的标记语言,自动生成代码文档或API文档。
    • 语言插件: 支持C、C++、Java、JavaScript、Python、Rust、Fortran、SAIL、Dart、Chisel等不同的语言类型;

  3. RISC-V编译器/解释器支持:集成RISC-V架构的编译器/解释器,使开发者能够编译和构建基于RISC-V指令集的应用程序。(这里不同语言存在差异,需要一一区别和定义)

  4. RISC-V模拟器和调试器:集成一个RISC-V模拟器和调试器,可以模拟和调试RISC-V指令的执行过程。开发者可以在IDE中设置断点、单步执行代码,并查看变量的值和内存的状态,以进行程序的调试和分析。

  5. 代码分析和优化:提供代码分析工具,帮助开发者发现潜在的性能问题和错误,并提供优化建议。这包括静态代码分析、性能分析和内存分析等功能,以帮助开发者编写更高效和可靠的RISC-V应用程序。

  6. 集成文档和教程:提供与RISC-V相关的文档、教程和示例代码的集成,以帮助开发者学习和使用RISC-V架构。这样,开发者可以在IDE中方便地查阅文档和学习相关知识,加快他们的开发过程。

  7. 语言虚拟机或运行时环境:一些语言需要在运行时依赖于相应的解释器或语言虚拟机。如Python需要在运行时依赖于相应的解释器或语言虚拟机(如CPython、Jython等)。因此,IDE需要与这些解释器或虚拟机进行集成,以便在IDE中直接运行和调试Python代码。

  8. 代码执行环境管理:如Python开发中通常会使用虚拟环境(Virtual Environment)来管理依赖和隔离项目环境。IDE可以提供对虚拟环境的支持,使开发者能够方便地创建、激活和管理虚拟环境。

  9. 交互式解释器和调试器:如Python具有交互式解释器(REPL)的特性,可以在命令行环境中逐行执行代码。IDE可以集成交互式解释器,使开发者能够在IDE中直接执行和调试代码片段,以便进行快速的实验和调试。

  10. 包管理和库支持:很多开发语言都有丰富的第三方库和包管理工具。如Python是pip、conda等。IDE可以提供对这些工具的集成,以便开发者能够方便地搜索、安装和管理各种Python库和依赖项。

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下特点:

  1. 可扩展性和插件支持:支持插件系统,使开发者能够根据自己的需求扩展和定制IDE。这样,他们可以集成其他工具、添加自定义功能,并与其他开发者共享他们的插件。
  2. 并行编译能力: IDE中,能够为一个项目同时生成不同的运行环境(RISC-V开发板)编译构建出适用该开发板的可执行程序。(待定)
  3. 跨平台兼容性,三架构支持: Ruyi IDE 本身的安装程序需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);
  4. 定制化: 可视化的集成开发环境的界面部分,除去继承开源软件的部分,自研发/改动部分界面需要个性化定制。
  5. 性能: 要求 Ruyi IDE 能够流畅地运行在主流的PC设备上。

我们希望,当使用 Ruyi IDE 进行例如图像识别应用程序的开发时,能够得到如下步骤所描述的功能支持:

  1. 打开 Ruyi IDE,并创建一个新的项目或工程。在项目中,你可以组织和管理你的代码文件、资源文件和配置文件等。
  2. 在集成开发环境的文本编辑器中,创建一个新的C/C++源代码文件。在该文件中,你可以编写程序,如图像识别算法的逻辑和实现。
  3. 使用语法高亮功能,集成开发环境会根据编程语言的语法规则,对你的代码进行着色,以增强可读性和代码理解性。
  4. 在编写代码的过程中,Ruyi IDE 提供自动完成功能,根据当前上下文,自动弹出变量、函数和类名的建议,以加快编码速度和减少拼写错误。
  5. 在代码编写过程中,集成开发环境提供智能感知功能,通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助你编写正确的代码。
  6. 在集成开发环境中,你可以使用代码导航功能,快速跳转到代码的不同部分,如跳转到函数的定义处、跳转到变量的引用处,以便快速定位和浏览代码。
  7. 在编写完代码后,使用集成开发环境提供的构建工具进行项目的构建。这可能涉及选择适当的编译选项、设置编译器路径和库路径,以及处理依赖关系。
  8. Ruyi IDE 通常提供调试器功能,你可以设置断点、逐行调试代码,并观察变量的值,以解决代码中的错误和问题。
  9. 如果需要提高图像识别程序的性能,你可以使用Ruyi IDE 中的性能分析工具,检查代码的瓶颈并进行优化。
  10. 一旦你完成了开发和调试,Ruyi IDE 提供了部署工具,你可以将编译好的图像识别应用程序部署到RISC-V架构的嵌入式设备上,并进行远程调试和监视。
  11. 在开发过程中,Ruyi IDE 还提供版本控制集成工具,帮助你管理代码的版本、进行代码的协作开发和团队协作。如果遇到技术问题,可以在开发者社区进行技术交流获取帮助。
  12. 最后,Ruyi IDE 还提供文档生成工具,可以自动生成代码文档或API文档,帮助你记录和分享你的代码。

通过 Ruyi IDE 的支持,你可以更高效地开发图像识别应用程序,利用其提供的各种工具和功能,加速开发过程、减少错误,并提供更好的代码编写和维护体验。

总之,RISC-V开发者的集成开发环境将提供一系列专门针对RISC-V架构的工具和功能(这些工具从包管理器中获取),以帮助开发者更轻松、高效地开发RISC-V应用程序。同时,它提供直观的用户界面、高度可定制的功能和良好的扩展性,以满足不同开发者的需求。

开发者社区

一个开发者交流社区需要具备以下功能:

  1. 主页/官方网站: 用来汇聚关于 RuyiSDK 宣发、推广、使用、交流需要的一切资源,是第一级别入口。
  2. 开发者管理: 用户的注册、登录等账号有关的管理。
  3. 统计功能: 对主页累计访问量、软件下载次数、用户注册量等信息进行统计,这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段。
  4. 文档和教程:社区可能提供详细的文档和教程,涵盖RISC-V开发环境的使用指南、编程技巧、调试技巧等方面的内容,帮助开发者快速上手和解决常见问题。
  5. 论坛和讨论区:提供一个讨论区或论坛,让开发者可以发表问题、分享经验、提供建议等。其他开发者可以回复和讨论,促进交流和知识共享。
  6. 博客和文章:提供开发者撰写博客文章的功能,可以分享技术经验、教程、最佳实践等内容。其他开发者可以浏览和评论这些文章,从中获得有价值的信息。
  7. 问答平台:类似于问答社区,开发者可以发布问题,其他开发者可以回答问题或提供解决方案。这样的平台可以快速解决开发过程中的疑问和难题。
  8. 资源共享:开发者可以共享和下载与RISC-V开发相关的资源,如代码示例、项目模板、库文件等。这有助于加快开发速度和提高效率。
  9. 活动和会议:社区可以组织定期的在线活动、研讨会或会议,让开发者聚集在一起,分享最新的技术趋势、案例研究和实践经验。
  10. 专家支持:社区可能吸引一些RISC-V领域的专家,他们可以提供指导、解答问题,甚至组织在线培训或指导课程,帮助开发者更好地利用集成开发环境进行开发。
  11. 插件和扩展:开发者可以共享和下载与RISC-V集成开发环境相关的插件和扩展,以增强开发环境的功能和灵活性。
  12. 就业和项目机会:社区可以提供就业和项目机会的发布平台,帮助开发者寻找合适的工作机会或参与感兴趣的项目。
  13. 积分和奖励机制:社区可以设立积分和奖励机制,鼓励开发者积极参与交流和贡献。例如,回答问题、分享文章或贡献代码可以获得积分或奖励,提高其在社区中的声誉。

这样的一个开发者交流社区可以促进RISC-V集成开发环境的用户之间的交流和合作,提供技术支持和资源共享,增加开发者的学习和开发效率,推动RISC-V生态系统的发展。

',28),a=[e];function n(u,p,R,s,I,y){return o(),l("div",null,a)}const S=i(t,[["render",n]]);export{d as __pageData,S as default}; diff --git a/assets/old_introduction_requirement.md.po9Dgnk6.lean.js b/assets/old_introduction_requirement.md.po9Dgnk6.lean.js new file mode 100644 index 00000000..38135786 --- /dev/null +++ b/assets/old_introduction_requirement.md.po9Dgnk6.lean.js @@ -0,0 +1 @@ +import{_ as i,c as l,o,a3 as r}from"./chunks/framework.BKLMYXYM.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"old/introduction/requirement.md","filePath":"old/introduction/requirement.md","lastUpdated":1719824176000}'),t={name:"old/introduction/requirement.md"},e=r("",28),a=[e];function n(u,p,R,s,I,y){return o(),l("div",null,a)}const S=i(t,[["render",n]]);export{d as __pageData,S as default}; diff --git a/assets/old_plan_index.md.3vjppZIg.js b/assets/old_plan_index.md.3vjppZIg.js new file mode 100644 index 00000000..35e49e21 --- /dev/null +++ b/assets/old_plan_index.md.3vjppZIg.js @@ -0,0 +1 @@ +import{_ as t,c as d,o as r,a3 as a}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"版本规划路线图","description":"","frontmatter":{},"headers":[],"relativePath":"old/plan/index.md","filePath":"old/plan/index.md","lastUpdated":1719824176000}'),i={name:"old/plan/index.md"},e=a('

版本规划路线图

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RUYISDK 版本计划

里程碑版本

RuyiSDK 计划以每半年为一个里程碑版本周期来推动 RuyiSDK 的不断完善,目前计划中的里程碑版本有:

  • 23.06 (计划发布时间:2023年6月)
  • 23.12 (计划发布时间:2023年12月)
  • 24.06 (计划发布时间:2024年6月)
  • 24.12 (计划发布时间:2024年12月)
  • 25.06 (计划发布时间:2025年6月)
  • 25.12 (计划发布时间:2025年12月)

敏捷开发版本计划

自2024年1月开始,RuyiSDK 切换为更加敏捷的开发迭代模式,预期每 2 周发布一个开发版本,提供一些新功能,如包管理器能力迭代、RuyiSDK软件源提供新的软件包或者软件包版本升级、或工具链、板卡的新增适配等等,这些更新将以 release note 的方式公开。

  • 发布日期默认每双周周二发布;发布周期内遇3日以上节假日的,延迟一周发布;

  • 敏捷开发版本执行敏捷测试方式:

    • 代码冻结日期在发布日期的上一周周四/周五;
    • 代码冻结日~发布日:执行新特性的测试验证和基础功能回归测试;
    • 发布日~下一次代码冻结日:完成回归测试用例更新和执行全面回归测试;

RUYISDK 规划

2024目标

  • RuyiSDK官网上线。
  • 支持50多种RISC-V设备。
  • 支持运行≥7个流行的Linux发行版。将增加对openKylin和Gentoo的支持。
  • 提供多种图形化IDE环境,包括对Eclipse和VSCode的支持。
  • 服务≥10000名注册开发者。
  • 支持计划于2024年发布的SG2044和SG2380。

敏捷开发版本排期

滚动发行版本号发布日期代码冻结日期备注
v0.32024.01.162024.01.12
v0.42024.01.302024.01.26
v0.52024.02.272024.02.23春节,跳过一次
v0.62024.03.122024.03.08
v0.72024.03.262024.03.22
v0.82024.04.092024.04.07
v0.92024.04.232024.04.19
v0.102024.05.142024.05.10劳动节,延迟一周发布
v0.112024.05.282024.05.24
v0.122024.06.112024.06.06端午节
v0.132024.06.252024.06.21
v0.142024.07.092024.07.05
v0.152024.07.232024.07.19
v0.162024.08.062024.08.02
v0.172024.08.202024.08.16
v0.182024.09.032024.08.30
v0.192024.09.242024.09.20中秋节,延迟一周发布
v0.202024.10.152024.10.11国庆节,延迟一周发布
v0.212024.10.292024.10.25
v0.222024.11.122024.11.08
v0.232024.11.262024.11.22
v0.242024.12.102024.12.06
v0.252024.12.242024.12.20
',14),l=[e];function o(n,h,s,u,c,_){return r(),d("div",null,l)}const S=t(i,[["render",o]]);export{v as __pageData,S as default}; diff --git a/assets/old_plan_index.md.3vjppZIg.lean.js b/assets/old_plan_index.md.3vjppZIg.lean.js new file mode 100644 index 00000000..162e8177 --- /dev/null +++ b/assets/old_plan_index.md.3vjppZIg.lean.js @@ -0,0 +1 @@ +import{_ as t,c as d,o as r,a3 as a}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"版本规划路线图","description":"","frontmatter":{},"headers":[],"relativePath":"old/plan/index.md","filePath":"old/plan/index.md","lastUpdated":1719824176000}'),i={name:"old/plan/index.md"},e=a("",14),l=[e];function o(n,h,s,u,c,_){return r(),d("div",null,l)}const S=t(i,[["render",o]]);export{v as __pageData,S as default}; diff --git a/assets/zh_ruyi_getstarted_index.md.BcWTzkN7.js b/assets/old_ruyi_getstarted_index.md.mTb3ij6X.js similarity index 89% rename from assets/zh_ruyi_getstarted_index.md.BcWTzkN7.js rename to assets/old_ruyi_getstarted_index.md.mTb3ij6X.js index 62277b63..206d96d7 100644 --- a/assets/zh_ruyi_getstarted_index.md.BcWTzkN7.js +++ b/assets/old_ruyi_getstarted_index.md.mTb3ij6X.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const c=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/getstarted/index.md","filePath":"zh/ruyi/getstarted/index.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/getstarted/index.md"},t=n(`

开始

安装依赖软件

RUYI 包管理器依赖一些外部工具,需要手动安装

Debian/Ubuntu

bash
$ sudo apt-get install wget git tar bzip2 xz-utils zstd

Fedora/openEuler

bash
$ sudo apt-get install wget git tar bzip2 xz zstd

注意从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

安装 RUYI 包管理器

GitHub ReleasesISCAS 镜像源下载最新版本,选择合适架构的预编译二进制下载,当前 RUYI 包管理支持 amd64 、arm64、 riscv64 架构编译环境。

这里以 amd64 架构环境为例进行安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const c=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/getstarted/index.md","filePath":"old/ruyi/getstarted/index.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/getstarted/index.md"},t=n(`

开始

安装依赖软件

RUYI 包管理器依赖一些外部工具,需要手动安装

Debian/Ubuntu

bash
$ sudo apt-get install wget git tar bzip2 xz-utils zstd

Fedora/openEuler

bash
$ sudo apt-get install wget git tar bzip2 xz zstd

注意从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

安装 RUYI 包管理器

GitHub ReleasesISCAS 镜像源下载最新版本,选择合适架构的预编译二进制下载,当前 RUYI 包管理支持 amd64 、arm64、 riscv64 架构编译环境。

这里以 amd64 架构环境为例进行安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
 $ chmod +x ./ruyi.amd64.20231211
 $ sudo cp ruyi.amd64.20231211 /usr/local/bin/ruyi
 $ ruyi version
diff --git a/assets/old_ruyi_getstarted_index.md.mTb3ij6X.lean.js b/assets/old_ruyi_getstarted_index.md.mTb3ij6X.lean.js
new file mode 100644
index 00000000..4e36dd78
--- /dev/null
+++ b/assets/old_ruyi_getstarted_index.md.mTb3ij6X.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const c=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/getstarted/index.md","filePath":"old/ruyi/getstarted/index.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/getstarted/index.md"},t=n("",64),l=[t];function p(e,k,F,r,d,g){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{c as __pageData,o as default};
diff --git a/assets/zh_ruyi_index.md.B85YnIFa.js b/assets/old_ruyi_index.md.CuWiQf6u.js
similarity index 66%
rename from assets/zh_ruyi_index.md.B85YnIFa.js
rename to assets/old_ruyi_index.md.CuWiQf6u.js
index 9594917a..88847132 100644
--- a/assets/zh_ruyi_index.md.B85YnIFa.js
+++ b/assets/old_ruyi_index.md.CuWiQf6u.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 包管理器","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/index.md","filePath":"zh/ruyi/index.md","lastUpdated":1719560925000}'),e={name:"zh/ruyi/index.md"},l=n(`

RUYI 包管理器

RUYI 包管理是 RuyiSDK中负责管理RuyiSDK各种软件源的工具,用于管理工具链、模拟器、源码等各种二进制软件包和源码包。

支持的发行版平台

当前 RUYI 包管理器具有良好的平台兼容性以及多发行版兼容性,目前经过测试可用的环境有(仅限验证过的):

  • x86_64 Fedora 38
  • x86_64 Ubuntu 22.04 LTS
  • x86_64 openEuler 23.09
  • riscv64 RevyOS 20231210
  • riscv64 openEuler 23.09

上述操作系统链接参考本文文末的“附:外部链接”章节。

命令

RUYI 目前支持的命令如下:

bash
# 从配置的软件源更新本地软件包缓存
+import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 包管理器","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/index.md","filePath":"old/ruyi/index.md","lastUpdated":1719824176000}'),e={name:"old/ruyi/index.md"},l=n(`

RUYI 包管理器

RUYI 包管理是 RuyiSDK中负责管理RuyiSDK各种软件源的工具,用于管理工具链、模拟器、源码等各种二进制软件包和源码包。

支持的发行版平台

当前 RUYI 包管理器具有良好的平台兼容性以及多发行版兼容性,目前经过测试可用的环境有(仅限验证过的):

  • x86_64 Fedora 38
  • x86_64 Ubuntu 22.04 LTS
  • x86_64 openEuler 23.09
  • riscv64 RevyOS 20231210
  • riscv64 openEuler 23.09

上述操作系统链接参考本文文末的“附:外部链接”章节。

命令

RUYI 目前支持的命令如下:

bash
# 从配置的软件源更新本地软件包缓存
 ruyi update
 
 # 从本地软件包缓存中列出可用软件包
diff --git a/assets/old_ruyi_index.md.CuWiQf6u.lean.js b/assets/old_ruyi_index.md.CuWiQf6u.lean.js
new file mode 100644
index 00000000..548cce3d
--- /dev/null
+++ b/assets/old_ruyi_index.md.CuWiQf6u.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 包管理器","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/index.md","filePath":"old/ruyi/index.md","lastUpdated":1719824176000}'),e={name:"old/ruyi/index.md"},l=n("",13),r=[l];function t(p,h,k,o,d,c){return i(),a("div",null,r)}const F=s(e,[["render",t]]);export{y as __pageData,F as default};
diff --git a/assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.js b/assets/old_ruyi_updates_0.10.0.md.62ycNIM2.js
similarity index 96%
rename from assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.js
rename to assets/old_ruyi_updates_0.10.0.md.62ycNIM2.js
index b4551133..e0d319bc 100644
--- a/assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.js
+++ b/assets/old_ruyi_updates_0.10.0.md.62ycNIM2.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.10.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.10.0.md","filePath":"zh/ruyi/updates/0.10.0.md","lastUpdated":1719560925000}'),i={name:"zh/ruyi/updates/0.10.0.md"},d=l(`

v0.10.0 版本新增特性

  • news items 多语言支持
  • 板卡镜像刷写/文档支持增加到 28 款

安装 v0.10.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.amd64
+import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.10.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.10.0.md","filePath":"old/ruyi/updates/0.10.0.md","lastUpdated":1719824176000}'),i={name:"old/ruyi/updates/0.10.0.md"},d=l(`

v0.10.0 版本新增特性

  • news items 多语言支持
  • 板卡镜像刷写/文档支持增加到 28 款

安装 v0.10.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.10.0.md.62ycNIM2.lean.js b/assets/old_ruyi_updates_0.10.0.md.62ycNIM2.lean.js
new file mode 100644
index 00000000..243e3f6b
--- /dev/null
+++ b/assets/old_ruyi_updates_0.10.0.md.62ycNIM2.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.10.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.10.0.md","filePath":"old/ruyi/updates/0.10.0.md","lastUpdated":1719824176000}'),i={name:"old/ruyi/updates/0.10.0.md"},d=l("",23),s=[d];function a(r,c,y,g,o,x){return n(),e("div",null,s)}const p=t(i,[["render",a]]);export{C as __pageData,p as default};
diff --git a/assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.js b/assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.js
similarity index 96%
rename from assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.js
rename to assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.js
index 7cfa9de5..e7d419c7 100644
--- a/assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.js
+++ b/assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.11.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.11.0.md","filePath":"zh/ruyi/updates/0.11.0.md","lastUpdated":1719560925000}'),i={name:"zh/ruyi/updates/0.11.0.md"},d=l(`

v0.11.0 版本新增特性

  • 板卡镜像刷写/文档支持增加到 29 款

注意 0.11.0 版本会忽略 XDG_STATE_HOME 环境变量,如果在意这个问题请跳过这个版本,具体可以查看 issue #151

安装 v0.11.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.amd64
+import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.11.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.11.0.md","filePath":"old/ruyi/updates/0.11.0.md","lastUpdated":1719824176000}'),i={name:"old/ruyi/updates/0.11.0.md"},d=l(`

v0.11.0 版本新增特性

  • 板卡镜像刷写/文档支持增加到 29 款

注意 0.11.0 版本会忽略 XDG_STATE_HOME 环境变量,如果在意这个问题请跳过这个版本,具体可以查看 issue #151

安装 v0.11.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.lean.js b/assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.lean.js
new file mode 100644
index 00000000..e4f7eb4b
--- /dev/null
+++ b/assets/old_ruyi_updates_0.11.0.md.BX-LMcVp.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.11.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.11.0.md","filePath":"old/ruyi/updates/0.11.0.md","lastUpdated":1719824176000}'),i={name:"old/ruyi/updates/0.11.0.md"},d=l("",22),a=[d];function s(r,c,y,g,o,x){return n(),e("div",null,a)}const p=t(i,[["render",s]]);export{C as __pageData,p as default};
diff --git a/assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.js b/assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.js
similarity index 83%
rename from assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.js
rename to assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.js
index 7c7e685f..88575e28 100644
--- a/assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.js
+++ b/assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.12.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.12.0.md","filePath":"zh/ruyi/updates/0.12.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.12.0.md"},t=n(`

v0.12.0 版本新增特性

  • 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
  • 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
  • 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
  • 修复了 0.11.0 版本中 XDG_STATE_HOME 环境变量被无视的问题。

安装 v0.12.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.amd64
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.12.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.12.0.md","filePath":"old/ruyi/updates/0.12.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.12.0.md"},t=n(`

v0.12.0 版本新增特性

  • 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
  • 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
  • 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
  • 修复了 0.11.0 版本中 XDG_STATE_HOME 环境变量被无视的问题。

安装 v0.12.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.lean.js b/assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.lean.js
new file mode 100644
index 00000000..bfeab31b
--- /dev/null
+++ b/assets/old_ruyi_updates_0.12.0.md.CzsTk6XM.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.12.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.12.0.md","filePath":"old/ruyi/updates/0.12.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.12.0.md"},t=n("",11),l=[t];function p(e,k,F,r,d,c){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default};
diff --git a/assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.js b/assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.js
similarity index 86%
rename from assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.js
rename to assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.js
index 3df3828f..aa08aad1 100644
--- a/assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.js
+++ b/assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.13.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.13.0.md","filePath":"zh/ruyi/updates/0.13.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.13.0.md"},t=n(`

v0.13.0 版本新增特性

  • 修复 0.12.0 遗留的版本匹配问题。
  • 修复 prerelease 版本识别。

安装 v0.13.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.amd64
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.13.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.13.0.md","filePath":"old/ruyi/updates/0.13.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.13.0.md"},t=n(`

v0.13.0 版本新增特性

  • 修复 0.12.0 遗留的版本匹配问题。
  • 修复 prerelease 版本识别。

安装 v0.13.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.lean.js b/assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.lean.js
new file mode 100644
index 00000000..4d360317
--- /dev/null
+++ b/assets/old_ruyi_updates_0.13.0.md.C2ri40Gj.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.13.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.13.0.md","filePath":"old/ruyi/updates/0.13.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.13.0.md"},t=n("",11),l=[t];function p(e,k,F,r,d,c){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default};
diff --git a/assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.js b/assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.js
similarity index 97%
rename from assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.js
rename to assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.js
index 3d4426c3..6d9094c3 100644
--- a/assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.js
+++ b/assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const E=JSON.parse('{"title":"v0.3.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.3.0.md","filePath":"zh/ruyi/updates/0.3.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.3.0.md"},l=n(`

v0.3.0 版本新增特性

bash
ruyi news
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const E=JSON.parse('{"title":"v0.3.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.3.0.md","filePath":"old/ruyi/updates/0.3.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.3.0.md"},l=n(`

v0.3.0 版本新增特性

bash
ruyi news
 # 新闻
 ruyi device
 # 板卡镜像刷写

安装 v0.3.0

v0.3.0 版本的稳定二进制为 0.3.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.3.0/ruyi.amd64
diff --git a/assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.lean.js b/assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.lean.js
new file mode 100644
index 00000000..c487edbe
--- /dev/null
+++ b/assets/old_ruyi_updates_0.3.0.md.C_dQB9Ze.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const E=JSON.parse('{"title":"v0.3.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.3.0.md","filePath":"old/ruyi/updates/0.3.0.md","lastUpdated":1719824176000}'),h={name:"old/ruyi/updates/0.3.0.md"},l=n("",24),k=[l];function p(t,e,F,d,r,y){return a(),i("div",null,k)}const C=s(h,[["render",p]]);export{E as __pageData,C as default};
diff --git a/assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.js b/assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.js
similarity index 94%
rename from assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.js
rename to assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.js
index 088f1d10..d523f269 100644
--- a/assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.js
+++ b/assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.4.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.4.0.md","filePath":"zh/ruyi/updates/0.4.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.4.0.md"},a=s(`

v0.4.0 版本新增特性

bash
ruyi device
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.4.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.4.0.md","filePath":"old/ruyi/updates/0.4.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.4.0.md"},a=s(`

v0.4.0 版本新增特性

bash
ruyi device
 # 板卡镜像刷写

安装 v0.4.0

v0.4.0 版本的稳定二进制为 0.4.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.4.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.4.0/ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.lean.js b/assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.lean.js
new file mode 100644
index 00000000..dc9a848a
--- /dev/null
+++ b/assets/old_ruyi_updates_0.4.0.md.DY6FFz7I.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.4.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.4.0.md","filePath":"old/ruyi/updates/0.4.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.4.0.md"},a=s("",17),l=[a];function d(r,h,c,p,o,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default};
diff --git a/assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.js b/assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.js
similarity index 92%
rename from assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.js
rename to assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.js
index 7e3a640d..9a5b532f 100644
--- a/assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.js
+++ b/assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.5.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.5.0.md","filePath":"zh/ruyi/updates/0.5.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.5.0.md"},a=s(`

v0.5.0 版本新增特性

  • 板卡镜像刷写支持增加到 9 款
  • 镜像源换源支持

安装 v0.5.0

v0.5.0 版本的稳定二进制为 0.5.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.amd64
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"v0.5.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.5.0.md","filePath":"old/ruyi/updates/0.5.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.5.0.md"},a=s(`

v0.5.0 版本新增特性

  • 板卡镜像刷写支持增加到 9 款
  • 镜像源换源支持

安装 v0.5.0

v0.5.0 版本的稳定二进制为 0.5.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -25,4 +25,4 @@ import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o
 $ cat > ~/.config/ruyi/config.toml <<EOF
 [repo]
 remote = "https://example.domain/path/repo.git"
-EOF
`,21),l=[a];function d(r,p,h,c,k,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{o as __pageData,F as default}; +EOF
`,21),l=[a];function d(r,p,h,c,k,o){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{g as __pageData,F as default}; diff --git a/assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.lean.js b/assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.lean.js new file mode 100644 index 00000000..41e3bc68 --- /dev/null +++ b/assets/old_ruyi_updates_0.5.0.md.RqsmkbP3.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"v0.5.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.5.0.md","filePath":"old/ruyi/updates/0.5.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.5.0.md"},a=s("",21),l=[a];function d(r,p,h,c,k,o){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{g as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.js b/assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.js similarity index 90% rename from assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.js rename to assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.js index a77b74eb..b2b8f240 100644 --- a/assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.js +++ b/assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.js @@ -1,7 +1,7 @@ -import{_ as t,c as e,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"v0.6.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.6.0.md","filePath":"zh/ruyi/updates/0.6.0.md","lastUpdated":1719560925000}'),l={name:"zh/ruyi/updates/0.6.0.md"},s=n(`

v0.6.0 版本新增特性

  • 使用 pygit2 替代对 git 的依赖
  • SiFive HiFive Unmatched 镜像支持增加到 5 种

安装 v0.6.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.6.0/ruyi.amd64
+import{_ as t,c as e,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"v0.6.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.6.0.md","filePath":"old/ruyi/updates/0.6.0.md","lastUpdated":1719824176000}'),l={name:"old/ruyi/updates/0.6.0.md"},d=n(`

v0.6.0 版本新增特性

  • 使用 pygit2 替代对 git 的依赖
  • SiFive HiFive Unmatched 镜像支持增加到 5 种

安装 v0.6.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.6.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

注意 v0.6.0 版本的 riscv64 二进制可能无法正常工作,请使用更新的版本。

检查安装版本:

bash
$ ruyi version
 Ruyi 0.6.0
 Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
 All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

依赖变化

从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

板卡镜像刷写

在 0.6.0 版本, SiFive HiFive Unmatched 镜像支持增加到 5 种。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

`,16),d=[s];function a(r,c,y,o,g,h){return i(),e("div",null,d)}const k=t(l,[["render",a]]);export{x as __pageData,k as default}; +License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

依赖变化

从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

板卡镜像刷写

在 0.6.0 版本, SiFive HiFive Unmatched 镜像支持增加到 5 种。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

`,16),s=[d];function a(r,c,y,o,g,h){return i(),e("div",null,s)}const k=t(l,[["render",a]]);export{x as __pageData,k as default}; diff --git a/assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.lean.js b/assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.lean.js new file mode 100644 index 00000000..2626d139 --- /dev/null +++ b/assets/old_ruyi_updates_0.6.0.md.C7Ymcxs9.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"v0.6.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.6.0.md","filePath":"old/ruyi/updates/0.6.0.md","lastUpdated":1719824176000}'),l={name:"old/ruyi/updates/0.6.0.md"},d=n("",16),s=[d];function a(r,c,y,o,g,h){return i(),e("div",null,s)}const k=t(l,[["render",a]]);export{x as __pageData,k as default}; diff --git a/assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.js b/assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.js similarity index 92% rename from assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.js rename to assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.js index cdcf5bc3..21fb4fc2 100644 --- a/assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.js +++ b/assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.js @@ -1,4 +1,4 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.7.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.7.0.md","filePath":"zh/ruyi/updates/0.7.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.7.0.md"},a=s(`

v0.7.0 版本新增特性

  • 板卡镜像刷写支持增加到 13 款
  • 修复 v0.6.0 版本 riscv64 二进制无法工作的问题

安装 v0.7.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.amd64
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.7.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.7.0.md","filePath":"old/ruyi/updates/0.7.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.7.0.md"},a=s(`

v0.7.0 版本新增特性

  • 板卡镜像刷写支持增加到 13 款
  • 修复 v0.6.0 版本 riscv64 二进制无法工作的问题

安装 v0.7.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.lean.js b/assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.lean.js
new file mode 100644
index 00000000..e08dfd1e
--- /dev/null
+++ b/assets/old_ruyi_updates_0.7.0.md.BTkTTIHO.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.7.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.7.0.md","filePath":"old/ruyi/updates/0.7.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.7.0.md"},a=s("",18),l=[a];function d(r,c,h,y,p,g){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default};
diff --git a/assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.js b/assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.js
similarity index 93%
rename from assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.js
rename to assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.js
index ff2e646a..debad277 100644
--- a/assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.js
+++ b/assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.8.1 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.8.1.md","filePath":"zh/ruyi/updates/0.8.1.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.8.1.md"},a=s(`

v0.8.1 版本新增特性

  • 从 0.8.0 版本开始,默认不允许以 root 用户运行 ruyi
  • 新增 Milkv-V Meles 板卡刷写,板卡镜像刷写支持增加到 14 款

安装 v0.8.1

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.amd64
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.8.1 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.8.1.md","filePath":"old/ruyi/updates/0.8.1.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.8.1.md"},a=s(`

v0.8.1 版本新增特性

  • 从 0.8.0 版本开始,默认不允许以 root 用户运行 ruyi
  • 新增 Milkv-V Meles 板卡刷写,板卡镜像刷写支持增加到 14 款

安装 v0.8.1

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.lean.js b/assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.lean.js
new file mode 100644
index 00000000..14e1e15e
--- /dev/null
+++ b/assets/old_ruyi_updates_0.8.1.md.BZJFvTTu.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.8.1 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.8.1.md","filePath":"old/ruyi/updates/0.8.1.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.8.1.md"},a=s("",19),l=[a];function d(r,h,c,p,k,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{o as __pageData,F as default};
diff --git a/assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.js b/assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.js
similarity index 94%
rename from assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.js
rename to assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.js
index b1ff72b0..19b6125c 100644
--- a/assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.js
+++ b/assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.js
@@ -1,4 +1,4 @@
-import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.9.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.9.0.md","filePath":"zh/ruyi/updates/0.9.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.9.0.md"},a=s(`

v0.9.0 版本新增特性

  • 支持了 LZ4 格式压缩文件的解包
  • RuyiSDK 自 0.9 版本开始支持矽速(Sipeed)全线 RISC-V 产品,板卡镜像刷写支持增加到 20 款

安装 v0.9.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.amd64
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.9.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.9.0.md","filePath":"old/ruyi/updates/0.9.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.9.0.md"},a=s(`

v0.9.0 版本新增特性

  • 支持了 LZ4 格式压缩文件的解包
  • RuyiSDK 自 0.9 版本开始支持矽速(Sipeed)全线 RISC-V 产品,板卡镜像刷写支持增加到 20 款

安装 v0.9.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
diff --git a/assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.lean.js b/assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.lean.js
new file mode 100644
index 00000000..d0e71ee7
--- /dev/null
+++ b/assets/old_ruyi_updates_0.9.0.md.DtHEzrmR.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.9.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"old/ruyi/updates/0.9.0.md","filePath":"old/ruyi/updates/0.9.0.md","lastUpdated":1719824176000}'),n={name:"old/ruyi/updates/0.9.0.md"},a=s("",19),l=[a];function d(r,c,h,p,y,g){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default};
diff --git a/assets/old_sdk_gnu_index.md.BRM9RWcR.js b/assets/old_sdk_gnu_index.md.BRM9RWcR.js
new file mode 100644
index 00000000..1f06eb06
--- /dev/null
+++ b/assets/old_sdk_gnu_index.md.BRM9RWcR.js
@@ -0,0 +1 @@
+import{_ as e,c as a,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"RuyiSDK GCC 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"old/sdk/gnu/index.md","filePath":"old/sdk/gnu/index.md","lastUpdated":1719824176000}'),c={name:"old/sdk/gnu/index.md"},i=r('

RuyiSDK GCC 工具链介绍

RuyiSDK GCC 工具链是专门用于 RISC-V 架构的 GNU 工具链,它包括一系列工具,如编译器、汇编器、链接器等,用于开发和构建 RISC-V 架构的软件。

模块介绍

GCC(GNU Compiler Collection)

功能: RISC-V GNU Toolchain 的核心组件之一,用于将高级编程语言(如 C、C++)的源代码翻译成 RISC-V 架构的目标代码。

支持: 提供对不同 RISC-V 位长的支持,包括 RV32(32 位)和 RV64(64 位),以及不同RISC-V 指令集扩展的支持。

详细使用说明参考: https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/

GNU Binutils

包含工具: 汇编器(as)、链接器(ld)、目标文件工具(objdump、objcopy 等),性能分析工具(gprof)。

功能: 用于处理生成 RISC-V 架构的目标文件,执行汇编和链接,反汇编等操作。

详细使用说明参考: https://sourceware.org/binutils/docs-2.41/

GDB(GNU Debugger)

功能: 提供调试功能,允许开发人员在 RISC-V 目标上调试他们的程序。

Glibc(GNU C Library)

功能: C 语言运行时库,提供许多标准 C 库函数的实现,以支持在 RISC-V 上运行的程序。

Newlib

功能: 一个小型的 C 库,适用于嵌入式系统和其他资源受限的环境。对于一些嵌入式RISC-V 系统,选择使用 Newlib 而不是 Glibc 可以更高效的利用有限的系统资源。

Libgcc

功能: 包含一些与编译**功能:**器紧密相关的支持函数,例如用于浮点数乘除法的模拟运算函数。

目前 RuyiSDK 包含三种工具链版本,分别为 GNU upstream 版本,Xuantie 版本以及RuyiSDK 版本,不同版本支持的 RISC-V 指令集有所不同。

GNU upstream 工具链适合面向最新 RISC-V 特性的开发者,Xuantie 工具链侧重于使用 Xuantie 系列 CPU 芯片的硬件,RuyiSDK 工具链侧重于提供稳定的工具链环境,尽可能的继承目前 RISC-V 的各个扩展与新特性。

使用说明

工具链中各个工具的使用方法请参考其使用说明文档,下面重点介绍 RISC-V 架构的一些常见用法:

  • -march 选项可以控制工具链开启的 RISC-V 扩展,其默认参数在 64 位工具链中为 rv64gc, 32 位工具链中为 rv32gc, 若要开启其他扩展,则需利用该选项重新向工具链指定想要开启的扩展,例如打开 V 扩展可以使用-march=rv64gcv,打开 b 扩展可以使用 -march=rv64gc_zba_zbb_zbc_zbs, RuyiSDK 中不同扩展的工具链已经在-march 中配置了其对应参数,方便用户直接使用,用户可以根据自身需求调整-march 输入,控制不同扩展的使用。
  • -mabi 选项主要控制工具链中所使用的寄存器组,其默认参数在 64 位工具链中为 lp64d,32 位工具链中为 ilp32d,嵌入式设备中为 lp64e, ilp32e, 无浮点硬件中为 lp64, ilp32, 用户可以根据自身硬件和使用场景进行选择。 使用 RVV 向量扩展时,请务必同时使用 -O3 选项,在编译器中开启 RVV 的向量化特性,一些 RVV 使用示例请参考:https://gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/testsuite/gcc.target/riscv/rvv

下面我们来介绍 RVV 使用时的两个常用参数:

  • --param=riscv-autovec-preference=用于告知编译器输入向量的长度,有已知固定向量长度的 fixed-vlmax输入与可伸缩向量不固定长度的 scalable输入,用户可以更具自己的程序进行调整,以获得更高的程序性能。
  • --param=riscv-autovec-lmul=用于指定一个循环迭代中处理的向量元素的数量,其输入参数可以参考 riscv-v-spec 手册,包括”dynamic,m1,m2,m4,m8”等,对于不熟悉参数的用户,建议使用 dynamic选项,由编译器自动配置选取合适的处理数量。

扩展支持

工具链版本扩展名称
Upstreami, m, a, f, d, c, v, e(注意指定对应的 eABI)
zicsr, zifencei, zicond, zawrs, zba, zbb, zbc, zbs
zfinx, zdinx, zhinx, zhinxmin(注意指定的 ABI 为 lp64 或 ilp32, 与 f/d 扩展不兼容)
zbkb, zbkc, zbkx, zknd, zkne, zknh, zkr, zksed, zksh, zkt
zihintntl, zihintpause, zicboz, zicbom, zicbop
zfh, zfhmin, zvfh, zvfhmin, zvbb, zvbc, zvkg, zvkned, zvknha, zvknhb, zvksed, zvksh
zvknc, zvksc, zvkt, zfa, zmmul, zca, zcb, zce, zcf(仅 RV32)
zcd, zcmp(与 zcd 不兼容), zcmt, ztso
svinval, svnapot,
xcvmac, xcvalu,
xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx, xtheadfmemidx,
xtheadmempair, xtheadsync, xventanacondops
Xuantie对 xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx,
xtheadfmemidx, xtheadmempair, xtheadsync, xtheadvector(RVV 0.7), xventanacondops
有特定优化,不支持 Zfinx, K, RVV1.0, Zc, Xcv 等系列扩展
RuyiSDK额外支持 RV64-ILP32, Profiles(RV20/22), zpn, zpsfoperand, zbpbo
',28),o=[i];function d(n,l,s,h,b,g){return t(),a("div",null,o)}const m=e(c,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/old_sdk_gnu_index.md.BRM9RWcR.lean.js b/assets/old_sdk_gnu_index.md.BRM9RWcR.lean.js new file mode 100644 index 00000000..48787340 --- /dev/null +++ b/assets/old_sdk_gnu_index.md.BRM9RWcR.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"RuyiSDK GCC 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"old/sdk/gnu/index.md","filePath":"old/sdk/gnu/index.md","lastUpdated":1719824176000}'),c={name:"old/sdk/gnu/index.md"},i=r("",28),o=[i];function d(n,l,s,h,b,g){return t(),a("div",null,o)}const m=e(c,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/old_sdk_llvm_index.md.JIPJdU7K.js b/assets/old_sdk_llvm_index.md.JIPJdU7K.js new file mode 100644 index 00000000..1020f819 --- /dev/null +++ b/assets/old_sdk_llvm_index.md.JIPJdU7K.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,j as e,a as d}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK LLVM 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"old/sdk/llvm/index.md","filePath":"old/sdk/llvm/index.md","lastUpdated":1719824176000}'),s={name:"old/sdk/llvm/index.md"},l=e("h1",{id:"ruyisdk-llvm-工具链介绍",tabindex:"-1"},[d("RuyiSDK LLVM 工具链介绍 "),e("a",{class:"header-anchor",href:"#ruyisdk-llvm-工具链介绍","aria-label":'Permalink to "RuyiSDK LLVM 工具链介绍"'},"​")],-1),n=e("blockquote",null,[e("p",null,"todo")],-1),r=[l,n];function i(c,_,m,p,u,h){return o(),a("div",null,r)}const x=t(s,[["render",i]]);export{k as __pageData,x as default}; diff --git a/assets/old_sdk_llvm_index.md.JIPJdU7K.lean.js b/assets/old_sdk_llvm_index.md.JIPJdU7K.lean.js new file mode 100644 index 00000000..1020f819 --- /dev/null +++ b/assets/old_sdk_llvm_index.md.JIPJdU7K.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,j as e,a as d}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK LLVM 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"old/sdk/llvm/index.md","filePath":"old/sdk/llvm/index.md","lastUpdated":1719824176000}'),s={name:"old/sdk/llvm/index.md"},l=e("h1",{id:"ruyisdk-llvm-工具链介绍",tabindex:"-1"},[d("RuyiSDK LLVM 工具链介绍 "),e("a",{class:"header-anchor",href:"#ruyisdk-llvm-工具链介绍","aria-label":'Permalink to "RuyiSDK LLVM 工具链介绍"'},"​")],-1),n=e("blockquote",null,[e("p",null,"todo")],-1),r=[l,n];function i(c,_,m,p,u,h){return o(),a("div",null,r)}const x=t(s,[["render",i]]);export{k as __pageData,x as default}; diff --git a/assets/old_usecase_index.md.DNPrGyOS.js b/assets/old_usecase_index.md.DNPrGyOS.js new file mode 100644 index 00000000..addce86b --- /dev/null +++ b/assets/old_usecase_index.md.DNPrGyOS.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a3 as o}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"RuyiSDK使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/index.md","filePath":"old/usecase/index.md","lastUpdated":1719824176000}'),s={name:"old/usecase/index.md"},i=o('

RuyiSDK使用示例

以下案例是使用RuyiSDK搭建相关的开发或运行环境来实现的。希望通过一些小场景让大家更多的了解RuyiSDK的使用。

除了这里列举的环境外,RuyiSDK支持的编译工具链版本、RISC-V开发板类型是丰富且不断扩展的,这里未列举所有的情况,这些典型的场景供新用户参考和体验。

案例一:x86_64 上交叉编译并模拟运行 riscv64 可执行程序

案例二:在x86_64 PC+linux 上,接入RISC-V开发板并为其安装系统镜像

案例三:RISC-V 开发板上本地编译并运行 riscv64 可执行程序

',6),r=[i];function d(c,n,_,p,l,u){return t(),a("div",null,r)}const S=e(s,[["render",d]]);export{x as __pageData,S as default}; diff --git a/assets/old_usecase_index.md.DNPrGyOS.lean.js b/assets/old_usecase_index.md.DNPrGyOS.lean.js new file mode 100644 index 00000000..5659bde9 --- /dev/null +++ b/assets/old_usecase_index.md.DNPrGyOS.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a3 as o}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"RuyiSDK使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/index.md","filePath":"old/usecase/index.md","lastUpdated":1719824176000}'),s={name:"old/usecase/index.md"},i=o("",6),r=[i];function d(c,n,_,p,l,u){return t(),a("div",null,r)}const S=e(s,[["render",d]]);export{x as __pageData,S as default}; diff --git a/assets/zh_usecase_rvbook_index.md.B_oXifIE.js b/assets/old_usecase_rvbook_index.md.DjbdQ_yW.js similarity index 83% rename from assets/zh_usecase_rvbook_index.md.B_oXifIE.js rename to assets/old_usecase_rvbook_index.md.DjbdQ_yW.js index 2f47eddd..5d465e5a 100644 --- a/assets/zh_usecase_rvbook_index.md.B_oXifIE.js +++ b/assets/old_usecase_rvbook_index.md.DjbdQ_yW.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/rvbook/index.md","filePath":"zh/usecase/rvbook/index.md","lastUpdated":1719560925000}'),l={name:"zh/usecase/rvbook/index.md"},t=e(`

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A开发板上运行的过程。

环境说明

硬件环境:Licheepi 4A开发板(th1520)

软件环境:Debian/openEuler for RISC-V

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
# 下载riscv64版本的ruyi,将其放到path路径下,并赋予其可执行权限
+import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/rvbook/index.md","filePath":"old/usecase/rvbook/index.md","lastUpdated":1719824176000}'),l={name:"old/usecase/rvbook/index.md"},t=e(`

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A开发板上运行的过程。

环境说明

硬件环境:Licheepi 4A开发板(th1520)

软件环境:Debian/openEuler for RISC-V

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
# 下载riscv64版本的ruyi,将其放到path路径下,并赋予其可执行权限
 wget https://github.com/RuyiSDK/ruyi/releases/download/0.5.0/ruyi-0.5.0.riscv64
 sudo cp ruyi-0.5.0.riscv64 /usr/local/bin/ruyi
 sudo chmod +x ruyi
diff --git a/assets/old_usecase_rvbook_index.md.DjbdQ_yW.lean.js b/assets/old_usecase_rvbook_index.md.DjbdQ_yW.lean.js
new file mode 100644
index 00000000..73ff1508
--- /dev/null
+++ b/assets/old_usecase_rvbook_index.md.DjbdQ_yW.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/rvbook/index.md","filePath":"old/usecase/rvbook/index.md","lastUpdated":1719824176000}'),l={name:"old/usecase/rvbook/index.md"},t=e("",35),n=[t];function h(p,k,r,d,c,o){return a(),i("div",null,n)}const u=s(l,[["render",h]]);export{F as __pageData,u as default};
diff --git a/assets/zh_usecase_setupos_index.md.DKdQqgns.js b/assets/old_usecase_setupos_index.md.CMsCxRTN.js
similarity index 67%
rename from assets/zh_usecase_setupos_index.md.DKdQqgns.js
rename to assets/old_usecase_setupos_index.md.CMsCxRTN.js
index 8e68a3eb..63da7120 100644
--- a/assets/zh_usecase_setupos_index.md.DKdQqgns.js
+++ b/assets/old_usecase_setupos_index.md.CMsCxRTN.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"为RISC-V开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/setupos/index.md","filePath":"zh/usecase/setupos/index.md","lastUpdated":1719560925000}'),p={name:"zh/usecase/setupos/index.md"},i=e(`

为RISC-V开发板安装操作系统

通过RuyiSDK操作系统安装器工具,为各种不同厂家、不同型号的RISC-V开发板提供镜像信息的维护与下载、开发板系统的安装引导。

环境说明

本操作在x86_64 PC & Ubuntu 22.04(linux系统皆可)下执行;RISC-V开发板以USB连接线接入PC或者RISC-V开发板的SD卡通过读卡机接入PC。

安装操作系统

ruyi 工具提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的RISC-V开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
+import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"为RISC-V开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/setupos/index.md","filePath":"old/usecase/setupos/index.md","lastUpdated":1719824176000}'),p={name:"old/usecase/setupos/index.md"},i=e(`

为RISC-V开发板安装操作系统

通过RuyiSDK操作系统安装器工具,为各种不同厂家、不同型号的RISC-V开发板提供镜像信息的维护与下载、开发板系统的安装引导。

环境说明

本操作在x86_64 PC & Ubuntu 22.04(linux系统皆可)下执行;RISC-V开发板以USB连接线接入PC或者RISC-V开发板的SD卡通过读卡机接入PC。

安装操作系统

ruyi 工具提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的RISC-V开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
 
 This is a wizard intended to help you install a system on your device for your
 development pleasure, all with ease.
diff --git a/assets/old_usecase_setupos_index.md.CMsCxRTN.lean.js b/assets/old_usecase_setupos_index.md.CMsCxRTN.lean.js
new file mode 100644
index 00000000..59022803
--- /dev/null
+++ b/assets/old_usecase_setupos_index.md.CMsCxRTN.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"为RISC-V开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/setupos/index.md","filePath":"old/usecase/setupos/index.md","lastUpdated":1719824176000}'),p={name:"old/usecase/setupos/index.md"},i=e("",12),l=[i];function o(t,c,d,r,h,u){return n(),a("div",null,l)}const g=s(p,[["render",o]]);export{y as __pageData,g as default};
diff --git a/assets/zh_usecase_x86pc_index.md.DEuhLijf.js b/assets/old_usecase_x86pc_index.md.DqkyMSFg.js
similarity index 83%
rename from assets/zh_usecase_x86pc_index.md.DEuhLijf.js
rename to assets/old_usecase_x86pc_index.md.DqkyMSFg.js
index 65b24b43..18a50079 100644
--- a/assets/zh_usecase_x86pc_index.md.DEuhLijf.js
+++ b/assets/old_usecase_x86pc_index.md.DqkyMSFg.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/x86pc/index.md","filePath":"zh/usecase/x86pc/index.md","lastUpdated":1719560925000}'),t={name:"zh/usecase/x86pc/index.md"},l=e(`

使用示例

以开源基准测试程序 coremark 为例,展示在x86_64 PC上实现从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码交叉编译并在 qemu 模拟器上成功执行的过程。

环境说明

硬件环境:x86_64

软件环境:Ubuntu 22.04

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
wget -O /usr/local/bin/ruyi https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/0.10.0-beta.20240512/ruyi.amd64
+import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/x86pc/index.md","filePath":"old/usecase/x86pc/index.md","lastUpdated":1719824176000}'),t={name:"old/usecase/x86pc/index.md"},l=e(`

使用示例

以开源基准测试程序 coremark 为例,展示在x86_64 PC上实现从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码交叉编译并在 qemu 模拟器上成功执行的过程。

环境说明

硬件环境:x86_64

软件环境:Ubuntu 22.04

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
wget -O /usr/local/bin/ruyi https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/0.10.0-beta.20240512/ruyi.amd64
 sudo chmod +x ruyi
  1. 验证ruyi可否使用
bash
ruyi --version
  1. 查看ruyi帮助
bash
ruyi --help

使用ruyi工具部署开发环境:

  1. 查看软件仓软件包索引信息
bash
ruyi list
  1. 查看详细信息
bash
ruyi list -v
  1. 安装工具链:ruyi install <package-name>
bash
ruyi install  gnu-upstream
  1. 安装qemu
bash
ruyi install qemu-user-riscv-upstream
  1. 查看预置编译环境
bash
ruyi list profiles
  1. 由指定的工具链、模拟器配置建立 RUYI 虚拟环境venv1
bash
ruyi venv --help
 ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
  1. 查看虚拟环境bin目录下已安装的工具链、模拟器
bash
ls venv1/bin
  1. 激活虚拟环境
. venv1/bin/ruyi-activate
  1. 检查虚拟环境中编译工具的版本信息
bash
riscv64-unknown-linux-gnu-gcc --version
 ruyi-qemu --version
  1. 下载解压coremark源码作为编译对象
bash
mkdir coremark && cd coremark
diff --git a/assets/old_usecase_x86pc_index.md.DqkyMSFg.lean.js b/assets/old_usecase_x86pc_index.md.DqkyMSFg.lean.js
new file mode 100644
index 00000000..9182eba4
--- /dev/null
+++ b/assets/old_usecase_x86pc_index.md.DqkyMSFg.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"old/usecase/x86pc/index.md","filePath":"old/usecase/x86pc/index.md","lastUpdated":1719824176000}'),t={name:"old/usecase/x86pc/index.md"},l=e("",47),n=[l];function h(p,r,k,d,o,c){return a(),i("div",null,n)}const F=s(t,[["render",h]]);export{u as __pageData,F as default};
diff --git a/assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.js b/assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.js
similarity index 96%
rename from assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.js
rename to assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.js
index 3f345688..e4724a86 100644
--- a/assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.js
+++ b/assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/environments/index.md","filePath":"zh/usedirection/developmentside/environments/index.md","lastUpdated":1719560925000}'),t={name:"zh/usedirection/developmentside/environments/index.md"},l=n(`

RUYI 编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/environments/index.md","filePath":"old/usedirection/developmentside/environments/index.md","lastUpdated":1719824176000}'),t={name:"old/usedirection/developmentside/environments/index.md"},l=n(`

RUYI 编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
 generic
 baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
 sipeed-lpi4a (needs flavor(s): {'xthead'})
diff --git a/assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.lean.js b/assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.lean.js
new file mode 100644
index 00000000..4544ecf6
--- /dev/null
+++ b/assets/old_usedirection_developmentside_environments_index.md.DEoUECkb.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/environments/index.md","filePath":"old/usedirection/developmentside/environments/index.md","lastUpdated":1719824176000}'),t={name:"old/usedirection/developmentside/environments/index.md"},l=n("",47),h=[l];function p(e,k,F,r,d,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default};
diff --git a/assets/zh_usedirection_developmentside_index.md.DjV6yYHk.js b/assets/old_usedirection_developmentside_index.md.RDtTrMRB.js
similarity index 86%
rename from assets/zh_usedirection_developmentside_index.md.DjV6yYHk.js
rename to assets/old_usedirection_developmentside_index.md.RDtTrMRB.js
index c4052b68..11302dcc 100644
--- a/assets/zh_usedirection_developmentside_index.md.DjV6yYHk.js
+++ b/assets/old_usedirection_developmentside_index.md.RDtTrMRB.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"准备RISC-V开发环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/index.md","filePath":"zh/usedirection/developmentside/index.md","lastUpdated":1719560925000}'),e={name:"zh/usedirection/developmentside/index.md"},l=n(`

准备RISC-V开发环境

安装 ruyi 包管理工具

RuyiSDK包管理工具目前提供了Linux系统 amd64、arm64、riscv64 三种架构平台下的安装程序,可以按需在ruyi GitHub ReleasesISCAS 镜像源下载体验。

包管理工具的安装非常简单,只需下载ruyi工具预构建的二进制文件,将下载的文件去掉后缀重命名为 ruyi,并使其具有可执行权限,最后放入 $PATH 路径下就可以开始了。具体的使用可参考ruyi仓库文档

在安装完成后最常用的命令一般需要有:

bash

+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"准备RISC-V开发环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/index.md","filePath":"old/usedirection/developmentside/index.md","lastUpdated":1719824176000}'),e={name:"old/usedirection/developmentside/index.md"},l=n(`

准备RISC-V开发环境

安装 ruyi 包管理工具

RuyiSDK包管理工具目前提供了Linux系统 amd64、arm64、riscv64 三种架构平台下的安装程序,可以按需在ruyi GitHub ReleasesISCAS 镜像源下载体验。

包管理工具的安装非常简单,只需下载ruyi工具预构建的二进制文件,将下载的文件去掉后缀重命名为 ruyi,并使其具有可执行权限,最后放入 $PATH 路径下就可以开始了。具体的使用可参考ruyi仓库文档

在安装完成后最常用的命令一般需要有:

bash

 #查看工具版本(由于ruyi滚动发版,请注意关注版本信息,建议使用最新版本)
 ruyi -V
 
diff --git a/assets/old_usedirection_developmentside_index.md.RDtTrMRB.lean.js b/assets/old_usedirection_developmentside_index.md.RDtTrMRB.lean.js
new file mode 100644
index 00000000..88f54b51
--- /dev/null
+++ b/assets/old_usedirection_developmentside_index.md.RDtTrMRB.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"准备RISC-V开发环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/index.md","filePath":"old/usedirection/developmentside/index.md","lastUpdated":1719824176000}'),e={name:"old/usedirection/developmentside/index.md"},l=n("",23),t=[l];function p(h,r,k,d,c,o){return a(),i("div",null,t)}const g=s(e,[["render",p]]);export{y as __pageData,g as default};
diff --git a/assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.js b/assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.js
similarity index 95%
rename from assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.js
rename to assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.js
index 57af085a..f54e9016 100644
--- a/assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.js
+++ b/assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/sources/coremark/index.md","filePath":"zh/usedirection/developmentside/sources/coremark/index.md","lastUpdated":1719560925000}'),k={name:"zh/usedirection/developmentside/sources/coremark/index.md"},n=h(`

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
+import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/sources/coremark/index.md","filePath":"old/usedirection/developmentside/sources/coremark/index.md","lastUpdated":1719824176000}'),k={name:"old/usedirection/developmentside/sources/coremark/index.md"},n=h(`

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
 «Ruyi milkv-venv» $

coremark 源码可以直接从 RUYI 软件仓库中下载:

bash
«Ruyi milkv-venv» $ mkdir coremark
 «Ruyi milkv-venv» $ cd coremark
 «Ruyi milkv-venv» $ ruyi extract coremark
diff --git a/assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.lean.js b/assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.lean.js
new file mode 100644
index 00000000..28dec54a
--- /dev/null
+++ b/assets/old_usedirection_developmentside_sources_coremark_index.md.9Kh1Remw.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/sources/coremark/index.md","filePath":"old/usedirection/developmentside/sources/coremark/index.md","lastUpdated":1719824176000}'),k={name:"old/usedirection/developmentside/sources/coremark/index.md"},n=h("",23),t=[n];function l(p,e,F,r,d,g){return a(),i("div",null,t)}const E=s(k,[["render",l]]);export{y as __pageData,E as default};
diff --git a/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.js b/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.js
new file mode 100644
index 00000000..6fa5a00f
--- /dev/null
+++ b/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.js
@@ -0,0 +1 @@
+import{_ as t,c as e,o as d,a3 as r}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"RuyiSDK中编译工具链类型简介","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/typeselection/index.md","filePath":"old/usedirection/developmentside/typeselection/index.md","lastUpdated":1719824176000}'),i={name:"old/usedirection/developmentside/typeselection/index.md"},a=r('

RuyiSDK中编译工具链类型简介

编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状。这种现象是由于处理器架构的发展、厂商定制和优化、标准和规范的演进以及特定应用需求等因素相互作用的结果。

  1. 处理器架构的发展:随着时间的推移,处理器架构不断演进和改进。新的处理器架构可能引入了新的指令集扩展,以提供更高的性能、更多的功能和更好的能效。为了充分利用这些新的指令集扩展,需要更新和升级编译工具链。因此,不同版本的编译工具链可以支持不同处理器架构的特定指令集,并满足不同处理器版本的需求。
  2. 厂商定制和优化:不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化。它们可能通过改进指令执行流程、优化编译器生成的代码、添加特定的硬件加速器等方式,针对自己的处理器架构实现了特定版本的编译工具链。这样可以最大限度地发挥其处理器的性能和功能,并提供与其他竞争对手不同的优势。
  3. 标准和规范的演进:某些扩展指令集是由标准和规范定义的。然而,即使在同一个指令集标准下,不同版本的工具链也可能存在细微的差异和改进,以提供更好的性能、稳定性或兼容性。
  4. 特定应用需求:某些特定的应用领域可能对扩展指令集有特殊的需求。例如,嵌入式系统、机器学习、图像处理等领域可能需要针对特定指令集的优化和定制。不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持,以满足其特定的需求。

上述原因导致了编译工具链版本的多样性,这样的多样性为开发者提供了更多选择,并可以根据具体需求和目标平台选择适合的编译工具链版本。

RuyiSDK计划为持有不同RISC-V开发板的开发者们提供支持,让他们在RuyiSDK这个中心化的工具中便捷的获取使用和开发所需的支持。目前RuyiSDK已经提供的编译工具链有如下几种:

编译工具链类型说明
GNU工具链gnu-upstream
gnu-plct'gnu-plct(==0.20240324.0)' 支持了香山南湖微架构
gnu-plct-xtheadfor xuantie
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是elf。[仓库] [文章]
LLVM工具链llvm-upstream
QEMU模拟器qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead
',6),l=[a];function s(o,n,c,p,u,_){return d(),e("div",null,l)}const f=t(i,[["render",s]]);export{m as __pageData,f as default}; diff --git a/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.lean.js b/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.lean.js new file mode 100644 index 00000000..d6770ba5 --- /dev/null +++ b/assets/old_usedirection_developmentside_typeselection_index.md.CBg07Q1X.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as d,a3 as r}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"RuyiSDK中编译工具链类型简介","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/developmentside/typeselection/index.md","filePath":"old/usedirection/developmentside/typeselection/index.md","lastUpdated":1719824176000}'),i={name:"old/usedirection/developmentside/typeselection/index.md"},a=r("",6),l=[a];function s(o,n,c,p,u,_){return d(),e("div",null,l)}const f=t(i,[["render",s]]);export{m as __pageData,f as default}; diff --git a/assets/old_usedirection_index.md.B6HxH6Rb.js b/assets/old_usedirection_index.md.B6HxH6Rb.js new file mode 100644 index 00000000..7faf0282 --- /dev/null +++ b/assets/old_usedirection_index.md.B6HxH6Rb.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as t,a3 as l}from"./chunks/framework.BKLMYXYM.js";const R=JSON.parse('{"title":"使用RuyiSDK","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/index.md","filePath":"old/usedirection/index.md","lastUpdated":1719824176000}'),a={name:"old/usedirection/index.md"},o=l('

使用RuyiSDK

开发者在进行RISC-V开发时,主要的设备包括开发侧的个人电脑(开发环境)和运行侧的RISC-V设备(运行环境)。

开发环境目前更多的是x86_64架构的个人电脑,但是一些高性能的RISC-V设备也可以。在开发侧,通常完成目标可执行程序的准备工作:

  1. 准备RISC-V开发环境,如安装编译工具链、模拟器、调试工具等等
  2. 准备代码
  3. 编译代码
  4. 模拟运行
  5. 调试

运行环境主要是RISC-V硬件设备。在运行侧,通常用来运行RISC-V架构目标可执行程序以达到验证或者使用的目的。

  1. 为RISC-V开发板安装操作系统
  2. 安装目标程序运行所需的运行时环境/语言虚拟机等软件(通常由操作系统提供)
  3. 运行RISC-V目标程序

RuyiSDK针对上述常见的需求提供了包管理器、安装器、集成开发环境来为开发者提供方便。

',7),d=[o];function r(s,n,_,c,p,S){return t(),e("div",null,d)}const h=i(a,[["render",r]]);export{R as __pageData,h as default}; diff --git a/assets/old_usedirection_index.md.B6HxH6Rb.lean.js b/assets/old_usedirection_index.md.B6HxH6Rb.lean.js new file mode 100644 index 00000000..db54f54a --- /dev/null +++ b/assets/old_usedirection_index.md.B6HxH6Rb.lean.js @@ -0,0 +1 @@ +import{_ as i,c as e,o as t,a3 as l}from"./chunks/framework.BKLMYXYM.js";const R=JSON.parse('{"title":"使用RuyiSDK","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/index.md","filePath":"old/usedirection/index.md","lastUpdated":1719824176000}'),a={name:"old/usedirection/index.md"},o=l("",7),d=[o];function r(s,n,_,c,p,S){return t(),e("div",null,d)}const h=i(a,[["render",r]]);export{R as __pageData,h as default}; diff --git a/assets/old_usedirection_operationside_index.md.DJbSo7tH.js b/assets/old_usedirection_operationside_index.md.DJbSo7tH.js new file mode 100644 index 00000000..d4092dca --- /dev/null +++ b/assets/old_usedirection_operationside_index.md.DJbSo7tH.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"准备RISC-V运行环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/operationside/index.md","filePath":"old/usedirection/operationside/index.md","lastUpdated":1719824176000}'),t={name:"old/usedirection/operationside/index.md"},n=s('

准备RISC-V运行环境

为RISC-V开发板安装操作系统

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

运行RISC-V目标程序

C程序,直接运行即可。

其它高级语言,如Java程序,python等,需要先安装运行时环境或语言虚拟机。

',8),o=[n];function r(d,c,p,h,l,_){return i(),e("div",null,o)}const v=a(t,[["render",r]]);export{k as __pageData,v as default}; diff --git a/assets/old_usedirection_operationside_index.md.DJbSo7tH.lean.js b/assets/old_usedirection_operationside_index.md.DJbSo7tH.lean.js new file mode 100644 index 00000000..0cf9167e --- /dev/null +++ b/assets/old_usedirection_operationside_index.md.DJbSo7tH.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"准备RISC-V运行环境","description":"","frontmatter":{},"headers":[],"relativePath":"old/usedirection/operationside/index.md","filePath":"old/usedirection/operationside/index.md","lastUpdated":1719824176000}'),t={name:"old/usedirection/operationside/index.md"},n=s("",8),o=[n];function r(d,c,p,h,l,_){return i(),e("div",null,o)}const v=a(t,[["render",r]]);export{k as __pageData,v as default}; diff --git a/assets/zh_Community_About-us.md.DfA_1R6i.js b/assets/zh_Community_About-us.md.DfA_1R6i.js new file mode 100644 index 00000000..02042c2a --- /dev/null +++ b/assets/zh_Community_About-us.md.DfA_1R6i.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"关于我们","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Community/About-us.md","filePath":"zh/Community/About-us.md","lastUpdated":1719824176000}'),i={name:"zh/Community/About-us.md"},l=r('

关于我们

简介

  • RuyiSDK 社区旨在建设一个开放、友善、多样化、包容、健康社区。

  • 在参与社区讨论前,请先查阅社区守则以便更好的在社区内交流。

  • 如果您有更好的建议请通过以下的联系方式与我们取得联系,谢谢!

联系

你可以通过以下方式加入我们的社区:

  • 关注微信公众号:RUYISDK
  • 微信交流群:添加小助手 ruyisdk_helper
  • 发送邮件至 contact@ruyisdk.cn
  • 加入 Telegram 进行进一步讨论
',6),o=[l];function n(s,u,c,h,_,d){return t(),e("div",null,o)}const f=a(i,[["render",n]]);export{p as __pageData,f as default}; diff --git a/assets/zh_Community_About-us.md.DfA_1R6i.lean.js b/assets/zh_Community_About-us.md.DfA_1R6i.lean.js new file mode 100644 index 00000000..62a0b029 --- /dev/null +++ b/assets/zh_Community_About-us.md.DfA_1R6i.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const p=JSON.parse('{"title":"关于我们","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Community/About-us.md","filePath":"zh/Community/About-us.md","lastUpdated":1719824176000}'),i={name:"zh/Community/About-us.md"},l=r("",6),o=[l];function n(s,u,c,h,_,d){return t(),e("div",null,o)}const f=a(i,[["render",n]]);export{p as __pageData,f as default}; diff --git a/assets/zh_Community_Rules.md.DwVs8sOY.js b/assets/zh_Community_Rules.md.DwVs8sOY.js new file mode 100644 index 00000000..c3e8f116 --- /dev/null +++ b/assets/zh_Community_Rules.md.DwVs8sOY.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as r,a3 as e}from"./chunks/framework.BKLMYXYM.js";const b=JSON.parse('{"title":"贡献者公约","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Community/Rules.md","filePath":"zh/Community/Rules.md","lastUpdated":1719824176000}'),o={name:"zh/Community/Rules.md"},n=e('

贡献者公约

我们的承诺

身为社区成员、贡献者和领袖,我们承诺使社区参与者不受骚扰,无论其年龄、体型、可见或不可见的缺陷、族裔、性征、性别认同和表达、经验水平、教育程度、社会与经济地位、国籍、相貌、种族、种姓、肤色、宗教信仰、性倾向或性取向如何。

我们承诺以有助于建立开放、友善、多样化、包容、健康社区的方式行事和互动。

我们的准则

有助于为我们的社区创造积极环境的行为例子包括但不限于:

  • 表现出对他人的同情和善意
  • 尊重不同的主张、观点和感受
  • 提出和大方接受建设性意见
  • 承担责任并向受我们错误影响的人道歉
  • 注重社区共同诉求,而非个人得失

不当行为例子包括:

  • 使用情色化的语言或图像,及性引诱或挑逗
  • 嘲弄、侮辱或诋毁性评论,以及人身或政治攻击
  • 公开或私下的骚扰行为
  • 未经他人明确许可,公布他人的私人信息,如物理或电子邮件地址
  • 其他有理由认定为违反职业操守的不当行为

责任和权力

社区领袖有责任解释和落实我们所认可的行为准则,并妥善公正地对他们认为不当、威胁、冒犯或有害的任何行为采取纠正措施。

社区领导有权力和责任删除、编辑或拒绝或拒绝与本行为准则不相符的评论(comment)、提交(commits)、代码、维基(wiki)编辑、议题(issues)或其他贡献,并在适当时机知采取措施的理由。

适用范围

本行为准则适用于所有社区场合,也适用于在公共场所代表社区时的个人。

代表社区的情形包括使用官方电子邮件地址、通过官方社交媒体帐户发帖或在线上或线下活动中担任指定代表。

监督

辱骂、骚扰或其他不可接受的行为可通过 [插入联系方式] 向负责监督的社区领袖报告。 所有投诉都将得到及时和公平的审查和调查。

所有社区领袖都有义务尊重任何事件报告者的隐私和安全。

处理方针

社区领袖将遵循下列社区处理方针来明确他们所认定违反本行为准则的行为的处理方式:

1. 纠正

社区影响:使用不恰当的语言或其他在社区中被认定为不符合职业道德或不受欢迎的行为。

处理意见:由社区领袖发出非公开的书面警告,明确说明违规行为的性质,并解释举止如何不妥。或将要求公开道歉。

2. 警告

社区影响:单个或一系列违规行为。

处理意见:警告并对连续性行为进行处理。在指定时间内,不得与相关人员互动,包括主动与行为准则执行者互动。这包括避免在社区场所和外部渠道中的互动。违反这些条款可能会导致临时或永久封禁。

3. 临时封禁

社区影响: 严重违反社区准则,包括持续的不当行为。

处理意见: 在指定时间内,暂时禁止与社区进行任何形式的互动或公开交流。在此期间,不得与相关人员进行公开或私下互动,包括主动与行为准则执行者互动。违反这些条款可能会导致永久封禁。

4. 永久封禁

社区影响:行为模式表现出违反社区准则,包括持续的不当行为、骚扰个人或攻击或贬低某个类别的个体。

处理意见:永久禁止在社区内进行任何形式的公开互动。

参见

本行为准则改编自 Contributor Covenant 2.1 版, 参见 https://www.contributor-covenant.org/version/2/1/code_of_conduct.html

社区处理方针灵感来源于 Mozilla's code of conduct enforcement ladder

有关本行为准则的常见问题的答案,参见 https://www.contributor-covenant.org/faq。 其他语言翻译参见 https://www.contributor-covenant.org/translations

',36),i=[n];function l(s,h,c,p,d,u){return r(),t("div",null,i)}const f=a(o,[["render",l]]);export{b as __pageData,f as default}; diff --git a/assets/zh_Community_Rules.md.DwVs8sOY.lean.js b/assets/zh_Community_Rules.md.DwVs8sOY.lean.js new file mode 100644 index 00000000..e251cb1f --- /dev/null +++ b/assets/zh_Community_Rules.md.DwVs8sOY.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as r,a3 as e}from"./chunks/framework.BKLMYXYM.js";const b=JSON.parse('{"title":"贡献者公约","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Community/Rules.md","filePath":"zh/Community/Rules.md","lastUpdated":1719824176000}'),o={name:"zh/Community/Rules.md"},n=e("",36),i=[n];function l(s,h,c,p,d,u){return r(),t("div",null,i)}const f=a(o,[["render",l]]);export{b as __pageData,f as default}; diff --git a/assets/zh_IDE_TODO.md.n_gwhmh_.js b/assets/zh_IDE_TODO.md.n_gwhmh_.js new file mode 100644 index 00000000..a17a8afa --- /dev/null +++ b/assets/zh_IDE_TODO.md.n_gwhmh_.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,j as s}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/IDE/TODO.md","filePath":"zh/IDE/TODO.md","lastUpdated":1719824176000}'),o={name:"zh/IDE/TODO.md"},n=s("p",null,"TODO",-1),r=[n];function c(d,_,p,i,l,O){return a(),t("div",null,r)}const D=e(o,[["render",c]]);export{m as __pageData,D as default}; diff --git a/assets/zh_IDE_TODO.md.n_gwhmh_.lean.js b/assets/zh_IDE_TODO.md.n_gwhmh_.lean.js new file mode 100644 index 00000000..a17a8afa --- /dev/null +++ b/assets/zh_IDE_TODO.md.n_gwhmh_.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,j as s}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/IDE/TODO.md","filePath":"zh/IDE/TODO.md","lastUpdated":1719824176000}'),o={name:"zh/IDE/TODO.md"},n=s("p",null,"TODO",-1),r=[n];function c(d,_,p,i,l,O){return a(),t("div",null,r)}const D=e(o,[["render",c]]);export{m as __pageData,D as default}; diff --git a/assets/zh_Other_GNU-type.md.DDZNasSC.js b/assets/zh_Other_GNU-type.md.DDZNasSC.js new file mode 100644 index 00000000..f7ed331d --- /dev/null +++ b/assets/zh_Other_GNU-type.md.DDZNasSC.js @@ -0,0 +1 @@ +import{_ as t,c as r,o as d,a3 as e}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"RuyiSDK 编译工具","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Other/GNU-type.md","filePath":"zh/Other/GNU-type.md","lastUpdated":1719824176000}'),a={name:"zh/Other/GNU-type.md"},s=e('

RuyiSDK 编译工具

RuyiSDK 提供的编译工具链

RuyiSDK 提供了多种类型的编译工具链,适用于不同的 RISC-V 开发板和应用场景。

编译工具链类型说明相关链接
GNU 工具链仓库
gnu-upstream标准 GNU 工具链
gnu-plct支持香山南湖微架构 'gnu-plct(==0.20240324.0)'
gnu-plct-xthead适用于玄铁
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是 elf仓库
文章
LLVM 工具链
llvm-upstream
QEMU 模拟器仓库
qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead

编译工具链的多样性

如上表, 目前 RuyiSDK 编译工具链由于能够实现不同扩展指令集,进而有了不同版本的情况,这也就使得编译工具链具有多样性。 原因有以下几点:

  1. 处理器架构发展:处理器架构在不断更新迭代的过程中会引进新的指令集扩展以满足不同的需求,为使得这部分新的指令集扩展能够充分运用,编译工具链也会随之进行更新,出现不同的版本。
  2. 厂商定制优化:不同的厂商会针对同一个指令集进行不同程度的定制化,进而对编译工具链进行定制化。
  3. 标准和规范的演进:扩展指令集虽被规范化,但不同版本的工具链在相同标准下也会体现出不同的性能、稳定性以及兼容性。
  4. 特定应用需求:不同的应用领域对扩展指令集有不同的需求,如嵌入式系统、机器学习、图像处理等,不同版本编译工具链会针对特定领域进行优化。

上述原因使得编译工具链出现了多样化,这样的多样化为开发者提供了更多的选择,满足更加复杂的开发场景。

',8),o=[s];function i(n,l,h,u,c,p){return d(),r("div",null,o)}const m=t(a,[["render",i]]);export{g as __pageData,m as default}; diff --git a/assets/zh_Other_GNU-type.md.DDZNasSC.lean.js b/assets/zh_Other_GNU-type.md.DDZNasSC.lean.js new file mode 100644 index 00000000..a6e90366 --- /dev/null +++ b/assets/zh_Other_GNU-type.md.DDZNasSC.lean.js @@ -0,0 +1 @@ +import{_ as t,c as r,o as d,a3 as e}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"RuyiSDK 编译工具","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Other/GNU-type.md","filePath":"zh/Other/GNU-type.md","lastUpdated":1719824176000}'),a={name:"zh/Other/GNU-type.md"},s=e("",8),o=[s];function i(n,l,h,u,c,p){return d(),r("div",null,o)}const m=t(a,[["render",i]]);export{g as __pageData,m as default}; diff --git a/assets/zh_Package-Manager_Complie.md.cxClihLX.js b/assets/zh_Package-Manager_Complie.md.cxClihLX.js new file mode 100644 index 00000000..748bbf05 --- /dev/null +++ b/assets/zh_Package-Manager_Complie.md.cxClihLX.js @@ -0,0 +1,31 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"编译工具链安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/Complie.md","filePath":"zh/Package-Manager/Complie.md","lastUpdated":1719824176000}'),e={name:"zh/Package-Manager/Complie.md"},l=n(`

编译工具链安装

通过前置步骤,你已经可以正确使用 ruyi 包管理器,在这个模块中我们更进一步的安装 RISC-V 上相关的编译器。

目前 ruyi 包管理器提供了不同组织所发布的 GNU 以及 LLVM 编译工具链,你可以通过 ruyi list 轻松的查看。

若要安装特定的安装包,请使用 ruyi installruyi i 完成安装。

其他说明

编译工具链的版本选择参考RuyiSDK 编译工具

编译

代码准备

当正确获取了编译工具链后,可以通过 git 等任何方式获取源码到本地,同时,RuyiSDK 为新用户提供了一些代码示例,方便用户可以直接从 Ruyi Repo 的软件源中获取源码,可以通过如下指令实现:

bash
# 从软件源下载并解压指定的源码包
+
+ruyi extract

获取源码后,RuyiSDK 包管理器提供了虚拟环境技术,用户可以在系统中创建独立的环境,以确保对于不同版本编译工具链以及库文件进行环境隔离。 保证了用户在同以开发环境中能够安装使用不同的编译工具链版本,提供更好的环境隔离,保证开发过程的高效性。

我们建议在虚拟环境中进行编译操作,步骤如下:

bash
# 开始编译
+# 为隔离化编译创建虚拟环境,使用 ruyi venv -h 查看如何使用
+
+ruyi venv
+
+# 举例:创建一个叫 venv1 的虚拟环境,并指定编译工具链为 gnu-upstream,sysroot 为 generic 类型,使用 qemu-user-riscv-upstream 模拟器
+
+ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
+
+
+# 激活虚拟环境
+
+.  venv1/bin/ruyi-activate  
+
+# 编译需要编译的程序源代码
+# 此部分没有统一规范,按照待编译程序自身的编译说明执行,这里以 coremark 为例:
+
+#(1)设置 coremark 源码中的编译配置信息
+sed -i 's/\\bgcc\\b/riscv64-unknown-linux-gnu-gcc/g'  linux64/core_portme.mak
+
+#(2)执行交叉编译和构建,得到可执行程序 coremark.exe
+make PORT_DIR=linux64 link
+
+#(3)查看 rv64 可执行程序文件属性信息,初步检验可执行程序是否 RISC-V 架构
+file coremark.exe

模拟运行

在进入该步骤前,请确保已经安装了编译所需的编译工具链、模拟器,并在虚拟环境中配置了 qemu 模拟器。

为确保 RISC-V 目标可执行程序的正确性,通过模拟器工具(如 qemu)模拟运行环境:

bash
#  qemu user 模式下执行 rv64 coremark 可执行程序
+ruyi-qemu   coremark.exe
+
+# 在编译和运行结束后,退出虚拟环境
+ruyi-deactivate

调试

TODO

`,19),p=[l];function t(h,k,r,c,d,o){return i(),a("div",null,p)}const F=s(e,[["render",t]]);export{u as __pageData,F as default}; diff --git a/assets/zh_Package-Manager_Complie.md.cxClihLX.lean.js b/assets/zh_Package-Manager_Complie.md.cxClihLX.lean.js new file mode 100644 index 00000000..4b576e6d --- /dev/null +++ b/assets/zh_Package-Manager_Complie.md.cxClihLX.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"编译工具链安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/Complie.md","filePath":"zh/Package-Manager/Complie.md","lastUpdated":1719824176000}'),e={name:"zh/Package-Manager/Complie.md"},l=n("",19),p=[l];function t(h,k,r,c,d,o){return i(),a("div",null,p)}const F=s(e,[["render",t]]);export{u as __pageData,F as default}; diff --git a/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.js b/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.js new file mode 100644 index 00000000..445dbf11 --- /dev/null +++ b/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.js @@ -0,0 +1,89 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"ruyi 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/Enviroment.md","filePath":"zh/Package-Manager/Enviroment.md","lastUpdated":1719824176000}'),t={name:"zh/Package-Manager/Enviroment.md"},l=n(`

ruyi 编译环境

与 python 的虚拟环境类似,ruyi 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

ruyi 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+generic
+baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
+sipeed-lpi4a (needs flavor(s): {'xthead'})
+milkv-duo

工具链与预置配置组合

ruyi 包管理在建立编译环境之前会检查该环境是否合法,但是并不保证建立成功的环境一定可用于构建。

这里列出了经过测试可用的配置组合:

工具链(toolchain)sysroot预置配置(profile)
gnu-upstream自带generic
gnu-plct自带generic
gnu-plct自带milkv-duo
gnu-plct自带xiangshan-nanhu
gnu-plct-xthead自带sipeed-lpi4a
gnu-plct-rv64ilp32-elfbaremetal-rv64ilp32
llvm-upstreamgnu-upstreamgeneric
llvm-upstreamgnu-plctgeneric

创建虚拟环境

ruyiSDK 包管理器工具可使用 ruyi venv 创建虚拟环境,具体的使用方法可通过 help 命令获得:

bash
$ ruyi venv -h
+usage: ruyi venv [-h] [--name NAME] [--toolchain TOOLCHAIN] [--emulator EMULATOR] [--with-sysroot] [--without-sysroot]
+                 [--sysroot-from SYSROOT_FROM]
+                 profile dest
+
+positional arguments:
+  profile               Profile to use for the environment
+  dest                  Path to the new virtual environment
+
+options:
+  -h, --help            show this help message and exit
+  --name NAME, -n NAME  Override the venv's name
+  --toolchain TOOLCHAIN, -t TOOLCHAIN
+                        Specifier (atom) of the toolchain package to use
+  --emulator EMULATOR, -e EMULATOR
+                        Specifier (atom) of the emulator package to use
+  --with-sysroot        Provision a fresh sysroot inside the new virtual environment (default)
+  --without-sysroot     Do not include a sysroot inside the new virtual environment
+  --sysroot-from SYSROOT_FROM
+                        Specifier (atom) of the sysroot package to use, in favor of the toolchain-included one if applicable

参考上表代入具体的参数,不同的虚拟环境创建如下:

bash
# 使用 GNU 上游工具链配置 RISC-V 编译环境:
+$ ruyi venv -t gnu-upstream generic ./generic-venv
+
+# 使用 PLCT 工具链配置 Milkv-Duo 编译环境:
+$ ruyi venv -t gnu-plct milkv-duo ./milkv-venv
+
+# 使用 PLCT 工具链配置香山南湖编译环境:
+$ ruyi venv -t gnu-plct xiangshan-nanhu ./nanhu-venv
+
+# 使用 LLVM 上游工具链配置 RISC-V 编译环境:
+$ ruyi venv -t llvm-upstream --sysroot-from gnu-upstream generic ./llvm-venv
+
+# 使用平头哥工具链配置荔枝派 4A 编译环境:
+$ ruyi venv -t gnu-plct-xthead-20231212 sipeed-lpi4a ./sipeed-venv
+
+# 使用上游 QEMU 模拟器运行交叉编译的 RISC-V 二进制
+$ ruyi venv -t gnu-plct generic -e qemu-user-riscv-upstream ./qemu-venv
+
+# 使用平头哥 QEMU 模拟器运行交叉编译的 RISC-V 二进制
+$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./xthead-qemu-venv

在虚拟环境下编译

在创建虚拟环境之前,需要先 ruyi install 安装虚拟环境中使用的编译工具链、模拟器等所需的工具。

下面以任一个编译工具链在虚拟环境中编译程序一般的操作说明操作步骤:

  1. 安装编译工具链
bash
$ ruyi install gnu-upstream
  1. 建立编译环境
bash
$ ruyi venv -t gnu-upstream generic venv
+
+# -t gnu-upstream 指定了编译工具链的类型和版本(版本除非指定,默认最新);generic 表示 generic 类型的 profile;venv是自定义的虚拟环境名(相对路径目录名)
  1. 查看可用的工具链二进制
bash
$ ls ./venv/bin/
+riscv64-unknown-linux-gnu-addr2line  riscv64-unknown-linux-gnu-gcc            riscv64-unknown-linux-gnu-gfortran  riscv64-unknown-linux-gnu-ranlib
+riscv64-unknown-linux-gnu-ar         riscv64-unknown-linux-gnu-gcc-ar         riscv64-unknown-linux-gnu-gprof     riscv64-unknown-linux-gnu-readelf
+riscv64-unknown-linux-gnu-as         riscv64-unknown-linux-gnu-gcc-nm         riscv64-unknown-linux-gnu-ld        riscv64-unknown-linux-gnu-size
+riscv64-unknown-linux-gnu-c++        riscv64-unknown-linux-gnu-gcc-ranlib     riscv64-unknown-linux-gnu-ld.bfd    riscv64-unknown-linux-gnu-strings
+riscv64-unknown-linux-gnu-cc         riscv64-unknown-linux-gnu-gcov           riscv64-unknown-linux-gnu-ldd       riscv64-unknown-linux-gnu-strip
+riscv64-unknown-linux-gnu-c++filt    riscv64-unknown-linux-gnu-gcov-dump      riscv64-unknown-linux-gnu-lto-dump  ruyi-activate
+riscv64-unknown-linux-gnu-cpp        riscv64-unknown-linux-gnu-gcov-tool      riscv64-unknown-linux-gnu-nm
+riscv64-unknown-linux-gnu-elfedit    riscv64-unknown-linux-gnu-gdb            riscv64-unknown-linux-gnu-objcopy
+riscv64-unknown-linux-gnu-g++        riscv64-unknown-linux-gnu-gdb-add-index  riscv64-unknown-linux-gnu-objdump

除了 ruyi-activate 为激活编译环境用的脚本,其他均为工具链二进制。

  1. 激活构建环境,激活方式与 python 虚拟环境类似,并且改变提示符以提示当前进入编译环境中:
bash
$ . venv/bin/ruyi-activate
+«Ruyi venv» $

也可以使用 source 命令:

bash
$ source venv/bin/ruyi-activate
+«Ruyi venv» $
  1. 调用工具链:
bash
«Ruyi venv» $ riscv64-unknown-linux-gnu-gcc --version
+riscv64-unknown-linux-gnu-gcc (RuyiSDK 20231212 Upstream-Sources) 13.2.0
+Copyright (C) 2023 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1. 编译 可按需对指定程序执行编译操作。这里跳过具体事例。
  2. 退出编译环境 在编译或者运行验证完毕后,可以执行如下命令退出编译环境,退出后环境将被还原。
bash
«Ruyi venv» $ ruyi-deactivate
+$

实际操作中请注意将上述例子中的参数替换为正确的值。

模拟运行

在 x86-64 环境下使用平头哥工具链配置带 QEMU 支持的荔枝派 4A 编译环境,并使用平头哥 QEMU 运行构建出的 RISC-V 二进制 的操作参考如下:

  1. 安装编译工具链
bash
$ ruyi install gnu-plct-xthead qemu-user-riscv-xthead
  1. 建立编译环境:
bash
$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./qemu_venv
  1. 查看可用的二进制:
bash
$ ls qemu_venv/bin/
+riscv64-plctxthead-linux-gnu-addr2line  riscv64-plctxthead-linux-gnu-gcc-ranlib     riscv64-plctxthead-linux-gnu-nm
+riscv64-plctxthead-linux-gnu-ar         riscv64-plctxthead-linux-gnu-gcov           riscv64-plctxthead-linux-gnu-objcopy
+riscv64-plctxthead-linux-gnu-as         riscv64-plctxthead-linux-gnu-gcov-dump      riscv64-plctxthead-linux-gnu-objdump
+riscv64-plctxthead-linux-gnu-c++        riscv64-plctxthead-linux-gnu-gcov-tool      riscv64-plctxthead-linux-gnu-ranlib
+riscv64-plctxthead-linux-gnu-cc         riscv64-plctxthead-linux-gnu-gdb            riscv64-plctxthead-linux-gnu-readelf
+riscv64-plctxthead-linux-gnu-c++filt    riscv64-plctxthead-linux-gnu-gdb-add-index  riscv64-plctxthead-linux-gnu-size
+riscv64-plctxthead-linux-gnu-cpp        riscv64-plctxthead-linux-gnu-gfortran       riscv64-plctxthead-linux-gnu-strings
+riscv64-plctxthead-linux-gnu-elfedit    riscv64-plctxthead-linux-gnu-gprof          riscv64-plctxthead-linux-gnu-strip
+riscv64-plctxthead-linux-gnu-g++        riscv64-plctxthead-linux-gnu-ld             ruyi-activate
+riscv64-plctxthead-linux-gnu-gcc        riscv64-plctxthead-linux-gnu-ld.bfd         ruyi-qemu
+riscv64-plctxthead-linux-gnu-gcc-ar     riscv64-plctxthead-linux-gnu-ldd
+riscv64-plctxthead-linux-gnu-gcc-nm     riscv64-plctxthead-linux-gnu-lto-dump

可以看到 QEMU 模拟器的命令为 ruyi-qemu

  1. 进入编译环境:
bash
$ . qemu_venv/bin/ruyi-activate
+«Ruyi qemu_venv» $
  1. 编译一个简单的 C 程序并使用 QEMU 运行:
bash
«Ruyi qemu_venv» $ cd qemu_venv/
+«Ruyi qemu_venv» $ cat > test.c << EOF
+#include <stdio.h>
+
+int main()
+{
+    printf("hello, ruyi");
+    putchar('\\n');
+
+    return 0;
+}
+EOF
+«Ruyi qemu_venv» $ riscv64-plctxthead-linux-gnu-gcc -O3 test.c -o test
+«Ruyi qemu_venv» $ ruyi-qemu ./test
+hello, ruyi
  1. 退出编译环境:
bash
«Ruyi qemu_venv» $ ruyi-deactivate
+$
`,47),h=[l];function p(e,k,F,r,d,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default}; diff --git a/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.lean.js b/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.lean.js new file mode 100644 index 00000000..14653afc --- /dev/null +++ b/assets/zh_Package-Manager_Enviroment.md.CCLLVnEM.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"ruyi 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/Enviroment.md","filePath":"zh/Package-Manager/Enviroment.md","lastUpdated":1719824176000}'),t={name:"zh/Package-Manager/Enviroment.md"},l=n("",47),h=[l];function p(e,k,F,r,d,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default}; diff --git a/assets/zh_Package-Manager_index.md.C5Fb473n.js b/assets/zh_Package-Manager_index.md.C5Fb473n.js new file mode 100644 index 00000000..f8bf30b7 --- /dev/null +++ b/assets/zh_Package-Manager_index.md.C5Fb473n.js @@ -0,0 +1,39 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"ruyi 包管理器功能说明","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/index.md","filePath":"zh/Package-Manager/index.md","lastUpdated":1719824176000}'),n={name:"zh/Package-Manager/index.md"},e=t(`

ruyi 包管理器功能说明

ruyi 包管理器提供以下功能。

命令查询

命令含义注意事项
ruyi update更新软件包缓存,使用默认镜像。软件包缓存将存放在用户目录中,通常为 ~/.cache/ruyi
ruyi news list -h查看新闻命令的帮助信息。
ruyi news list列出所有新闻。
ruyi news list --new仅列出未读新闻。
ruyi news read -h查看新闻阅读命令的帮助信息。
ruyi news read 1读取特定序号的新闻。1 为要读取的新闻条目的序号或 ID。
ruyi news read读取下一条新闻。
ruyi news read --quiet标记新闻为已读,不输出任何信息。不输出任何东西,只标记为已读。
ruyi list列出所有可用软件包。
ruyi list -v列出所有软件包的详细信息。
ruyi list profiles查看预置的编译环境配置。与 Python 虚拟环境类似。
ruyi install gnu-upstream安装最新的 GNU 上游工具链。默认安装最新版本的 gnu-upstream。
ruyi install 'gnu-upstream(0.20231118.0)'安装指定版本的 GNU 上游工具链。通过指定版本号安装历史版本。
ruyi install 'gnu-upstream(==0.20231118.0)'安装特定版本的 GNU 上游工具链。版本匹配格式应为 <op><ver>
ruyi install --reinstall gnu-upstream重新安装 GNU 上游工具链。
ruyi extract ruyisdk-demo下载并解包ruyisdk-demo 源码包。解包到当前目录。
ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv在指定目录建立包含工具链和模拟器的编译环境。使用预置的 generic 配置。
ruyi self uninstall卸载 ruyi 包管理器。命令会询问确认操作。
ruyi self uninstall -y无需确认直接卸载 ruyi 包管理器。无需确认直接执行。
ruyi self uninstall --purge彻底卸载 ruyi 包管理器,包括缓存和安装的软件包。包括缓存和已安装的软件包。
ruyi self uninstall --purge -y无需确认彻底卸载 ruyi 包管理器。无需确认直接执行。
ruyi device provision下载所需系统镜像,并为设备安装系统。按照引导进行系统安装。

以下内容为表格内容详细说明。

刷新软件包缓存

更新软件包缓存,使用默认镜像即可:

bash
$ ruyi update

软件包缓存将存放在用户目录中,通常为 ~/.cache/ruyi ;在 XDG_CACHE_HOME 环境变量被设置时,目录为 $XDG_CACHE_HOME/ruyi 。 在本文档中家目录为 /home/myon

查询包管理器更新内容

查看 ruyi 包管理器的更新信息、阅读新闻或将信息设置为已读:

bash
$ ruyi news list -h
+$ ruyi news list
+$ ruyi news list --new		  # 仅列出未读新闻
+
+$ ruyi news read -h
+$ ruyi news read 1 		      # 1为要读取的新闻条目的序号或ID
+$ ruyi news read   		      # 读取下一条新闻
+$ ruyi news read --quiet  	# 不输出任何东西,只标记为已读

查询可用软件包

查看可用的软件包,该命令将列出所有可用的软件包:

bash
$ ruyi list
+List of available packages:
+
+* source/ruyisdk-demo
+  - 0.20231114.0 (latest)
+* source/coremark
+  - 1.0.2-pre.20230125 (prerelease, latest-prerelease)
+  - 1.0.1 (latest)
+* emulator/qemu-user-riscv-xthead
+  - 6.1.0-ruyi.20231207+g03813c9fe8 (latest)
+* emulator/qemu-user-riscv-upstream
+  - 8.1.2-ruyi.20231121 (latest)
+* toolchain/gnu-plct
+  - 0.20231212.0 (latest) slug: gnu-plct-20231212
+  - 0.20231118.0 () slug: gnu-plct-20231118
+* toolchain/gnu-plct-xthead
+  - 0.20231212.0 (latest) slug: gnu-plct-xthead-20231212
+  - 0.20231118.0 () slug: gnu-plct-xthead-20231118
+* toolchain/gnu-upstream
+  - 0.20231212.0 (latest) slug: gnu-upstream-20231212
+  - 0.20231118.0 () slug: gnu-upstream-20231118
+* toolchain/llvm-upstream
+  - 17.0.5-ruyi.20231121 (latest) slug: llvm-upstream-20231121

软件包前缀表示分类,其中 source 代表软件源码包, toolchain 代表工具链二进制包, emulator 代表模拟器二进制包,board-image 代表开发板镜像,analyzer 代表分析工具。

如果软件包显示 “no binary for current host” 则该软件包的当前版本不支持本机架构。

列出所有软件包的详细信息:

bash
$ ruyi list -v

查询可用编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+generic
+baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
+sipeed-lpi4a (needs flavor(s): {'xthead'})
+milkv-duo

安装软件包

使用 install 命令安装软件包,如 GNU 上游工具链:

bash
$ ruyi install gnu-upstream

上述通过指定软件包名安装的方式默认会安装 latest 的 gnu-upstream,如果想安装某个历史版本的 gnu-upstream,则可以通过指定版本来安装:

bash
$ ruyi install 'gnu-upstream(0.20231118.0)'
+$ ruyi install 'gnu-upstream(==0.20231118.0)'
+
+# match_expr parameter should be in format \`<op><ver>\`, where \`<op>\` is one of ['<', '>', '==', '<=', '>=', '!='].

若希望重装一个软件包,则可以加上 --reinstall 参数:

bash
$ ruyi install --reinstall gnu-upstream

安装源码包

ruyi 包管理器同时管理一些源码包,使用 extract 命令下载一个源码包并解包到当前目录:

bash
$ ruyi extract ruyisdk-demo
+$ ls
+README.md  rvv-autovec

搭建编译环境

已经安装的工具链与模拟器需要在 ruyi 编译环境中使用,这和 python 的虚拟环境十分类似。 这是由 venv 命令实现的:

bash
$ ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv

这个命令使用预置的 generic 配置,在 ./ruyi_venv 目录建立包含 gnu-upstream 工具链和 qemu-user-riscv-upstream 模拟器的编译环境。

具体使用参见“编译环境”与“具有 QEMU 支持的编译环境”章节。

卸载软件包

注意 ruyi 包管理器没有实现卸载 ruyi 软件包的功能。若您强制中断 ruyi 软件包安装进程或做了其他非预期操作 而会导致软件包功能异常时,请使用 install --reinstall 以尝试重试安装该软件包。

卸载 RUYI 包管理器

使用下面的命令卸载 Ruyi 包管理器:

bash
$ ruyi self uninstall

这个命令将会询问您以二次确认该操作,如果希望 Ruyi 包管理不询问而直接执行:

bash
$ ruyi self uninstall -y

上面的命令只是删除 Ruyi 本身,并不会删除软件包缓存和安装的 Ruyi 软件包。

如果希望删除所有缓存和安装了的软件包以实现干净的卸载:

bash
$ ruyi self uninstall --purge

同样的这个命令将会询问您以二次确认该操作,如果希望 Ruyi 包管理不询问而直接执行:

bash
$ ruyi self uninstall --purge -y

实现 Ruyi 包管理自身的升级可能会需要 sudo,而 Ruyi 包管理被设计为避免进行需要超级用户权限的操作。 故在需要升级 Ruyi 包管理时您需要手动进行该操作,即首先卸载 Ruyi 包管理器,再执行安装 Ruyi 包管理器的过程, 这个过程中您可以自主选择是否保留旧的软件包缓存和 Ruyi 软件包。

镜像信息的维护与下载、开发板系统的安装引导

执行如下命令并按照引导执行即可下载所需系统镜像,为设备安装系统:

bash
$ ruyi device provision
`,55),h=[e];function l(p,k,d,r,F,c){return a(),i("div",null,h)}const y=s(n,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/zh_Package-Manager_index.md.C5Fb473n.lean.js b/assets/zh_Package-Manager_index.md.C5Fb473n.lean.js new file mode 100644 index 00000000..c50e3484 --- /dev/null +++ b/assets/zh_Package-Manager_index.md.C5Fb473n.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.BKLMYXYM.js";const g=JSON.parse('{"title":"ruyi 包管理器功能说明","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/index.md","filePath":"zh/Package-Manager/index.md","lastUpdated":1719824176000}'),n={name:"zh/Package-Manager/index.md"},e=t("",55),h=[e];function l(p,k,d,r,F,c){return a(),i("div",null,h)}const y=s(n,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/zh_Package-Manager_installation.md.neusiCNS.js b/assets/zh_Package-Manager_installation.md.neusiCNS.js new file mode 100644 index 00000000..520e5670 --- /dev/null +++ b/assets/zh_Package-Manager_installation.md.neusiCNS.js @@ -0,0 +1,25 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"ruyi 包管理器安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/installation.md","filePath":"zh/Package-Manager/installation.md","lastUpdated":1719824176000}'),h={name:"zh/Package-Manager/installation.md"},t=n(`

ruyi 包管理器安装

让我们从 RuyiSDK 包管理器的安装开始:

获取 ruyi 包管理器

目前 RuyiSDK 包管理器工具目前能在 amd64arm64riscv64 三种架构在 Linux 系统下运行,可以从如下链接中下载:

你可以首先使用 ruyi update 从配置的软件源中获得本地软件包缓存的更新,再使用 ruyi list 查看目前所支持的包。

若还有其余相关问题可以访问 ruyi 包管理器仓库文档(目前仅支持英文)参阅。

amd64 架构示例

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
+$ chmod +x ./ruyi.amd64.20231211
+$ sudo cp ruyi.amd64.20231211 /usr/local/bin/ruyi
+$ ruyi version
+Ruyi 0.2.0-beta.20231211
+Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
+All rights reserved.
+License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

ruyi version 应当可以正常打印版本信息。注意二进制的文件名必须为 ruyi。

列出帮助信息:

bash
$ ruyi --help
+
+RuyiSDK Package Manager 0.2.0-beta.20231211
+
+options:
+  -h, --help            show this help message and exit
+  -V, --version         Print version information
+
+subcommands:
+  {extract,install,i,list,update,venv,admin,self,version}
+    extract             Fetch package(s) then extract to current directory
+    install (i)         Install package from configured repository
+    list                List available packages in configured repository
+    update              Update RuyiSDK repo and packages
+    venv                Generate a virtual environment adapted to the chosen toolchain and profile
+    admin               (NOT FOR REGULAR USERS) Subcommands for managing Ruyi Repos
+    self                Manage this Ruyi installation
+    version             Print version information

其他说明

  1. 由于目前软件包索引信息托管于 GitHub 仓库,国内访问可能会产生不稳定等问题,若出现 ruyi update 执行时连续报错,可将仓库更换成 备用仓库

  2. 具体操作:参考 ruyi 仓库文档在 ruyi 包管理工具默认的配置目录 ~/.config/ruyi 下通过 config.toml 文件配置(不同linux发行版可能不同,如果无可自己创建)。

总结

以上场景介绍了 ruyi 包管理器和工具的基本使用,包括:

  • 安装 ruyi
  • 使用 ruyi list ruyi update ruyi install 功能
  • 若出现网络不稳定的备用方案

ruyi 包管理器相关的更多命令以及命令具体使用方法请参阅功能介绍

使用案例

目前有一些简单的使用案例提供参考,请参阅使用案例栏目。

`,20),l=[t];function e(k,p,r,F,d,g){return a(),i("div",null,l)}const c=s(h,[["render",e]]);export{o as __pageData,c as default}; diff --git a/assets/zh_Package-Manager_installation.md.neusiCNS.lean.js b/assets/zh_Package-Manager_installation.md.neusiCNS.lean.js new file mode 100644 index 00000000..050fc99a --- /dev/null +++ b/assets/zh_Package-Manager_installation.md.neusiCNS.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"ruyi 包管理器安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh/Package-Manager/installation.md","filePath":"zh/Package-Manager/installation.md","lastUpdated":1719824176000}'),h={name:"zh/Package-Manager/installation.md"},t=n("",20),l=[t];function e(k,p,r,F,d,g){return a(),i("div",null,l)}const c=s(h,[["render",e]]);export{o as __pageData,c as default}; diff --git a/assets/zh_RuyiSDK_case1.md.DVbagFWH.js b/assets/zh_RuyiSDK_case1.md.DVbagFWH.js new file mode 100644 index 00000000..a1560b9f --- /dev/null +++ b/assets/zh_RuyiSDK_case1.md.DVbagFWH.js @@ -0,0 +1,37 @@ +import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case1.md","filePath":"zh/RuyiSDK/case1.md","lastUpdated":1719824176000}'),k={name:"zh/RuyiSDK/case1.md"},n=h(`

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
+«Ruyi milkv-venv» $

coremark 源码可以直接从 Ruyi 软件仓库中下载:

bash
«Ruyi milkv-venv» $ mkdir coremark
+«Ruyi milkv-venv» $ cd coremark
+«Ruyi milkv-venv» $ ruyi extract coremark
+info: downloading https://mirror.iscas.ac.cn/RuyiSDK/dist/coremark-1.01.tar.gz to /home/myon/.cache/ruyi/distfiles/coremark-1.01.tar.gz
+  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
+                                 Dload  Upload   Total   Spent    Left  Speed
+100  391k  100  391k    0     0  1400k      0 --:--:-- --:--:-- --:--:-- 1404k
+info: extracting coremark-1.01.tar.gz for package coremark-1.0.1
+info: package coremark-1.0.1 extracted to current working directory

这个操作将从 Ruyi 软件源中下载 coremark 源码并解包到当前目录

由于使用的工具链为 riscv64-plct-linux-gnu-gcc ,需要编辑构建脚本:

bash
«Ruyi milkv-venv» $ sed -i 's/\\bgcc\\b/riscv64-plct-linux-gnu-gcc/g' linux64/core_portme.mak

构建 coremark:

bash
«Ruyi milkv-venv» $ make PORT_DIR=linux64 link
+riscv64-plct-linux-gnu-gcc -O2 -Ilinux64 -I. -DFLAGS_STR=\\""-O2   -lrt"\\" -DITERATIONS=0  core_list_join.c core_main.c core_matrix.c core_state.c core_util.c linux64/core_portme.c -o ./coremark.exe -lrt
+Link performed along with compile
+«Ruyi milkv-venv» $ file coremark.exe
+coremark.exe: ELF 64-bit LSB executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=d9dbc7115d07d1953087dd2c1e5d46adc2ab0d4f, for GNU/Linux 4.15.0, with debug_info, not stripped

可以看到成功构建 RISC-V 架构的二进制。注意这整个过程如果在 riscv64 环境则不是交叉编译。

退出虚拟环境

bash
«Ruyi milkv-venv» $ ruyi-deactivate
+$

在最新的 Milkv Duo 镜像上运行

传送 coremark 二进制的 Milkv Duo, Milkv Duo 的 IP 地址请按实际情况更改。

bash
$ scp -O ./coremark.exe root@192.168.42.1:~

在 Milkv Duo 上运行

bash
[root@milkv-duo]~# ./coremark.exe
+-sh: ./coremark.exe: not found

若出现这样的错误,则需要静态链接的二进制。

bash
«Ruyi milkv-venv» $ make PORT_DIR=linux64 LFLAGS_END=-static link
+riscv64-plct-linux-gnu-gcc -O2 -Ilinux64 -I. -DFLAGS_STR=\\""-O2   -static"\\" -DITERATIONS=0  core_list_join.c core_main.c core_matrix.c core_state.c core_util.c linux64/core_portme.c -o ./coremark.exe -static
+Link performed along with compile
+«Ruyi milkv-venv» $ file coremark.exe
+coremark.exe: ELF 64-bit LSB executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), statically linked, BuildID[sha1]=1548f6b30560e1ca6f3fa8ba3ef6aea4188feacf, for GNU/Linux 4.15.0, with debug_info, not stripped

重新上传后运行

bash
[root@milkv-duo]~# ./coremark.exe
+2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 14911
+Total time (secs): 14.911000
+Iterations/Sec   : 2011.937496
+Iterations       : 30000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2   -static
+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      : 0x5275
+Correct operation validated. See readme.txt for run and reporting rules.
+CoreMark 1.0 : 2011.937496 / GCC13.1.0 -O2   -static / Heap
`,23),t=[n];function l(p,F,e,r,d,g){return a(),i("div",null,t)}const E=s(k,[["render",l]]);export{y as __pageData,E as default}; diff --git a/assets/zh_RuyiSDK_case1.md.DVbagFWH.lean.js b/assets/zh_RuyiSDK_case1.md.DVbagFWH.lean.js new file mode 100644 index 00000000..15fec20c --- /dev/null +++ b/assets/zh_RuyiSDK_case1.md.DVbagFWH.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case1.md","filePath":"zh/RuyiSDK/case1.md","lastUpdated":1719824176000}'),k={name:"zh/RuyiSDK/case1.md"},n=h("",23),t=[n];function l(p,F,e,r,d,g){return a(),i("div",null,t)}const E=s(k,[["render",l]]);export{y as __pageData,E as default}; diff --git a/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.js b/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.js new file mode 100644 index 00000000..c34dc6ae --- /dev/null +++ b/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.js @@ -0,0 +1,53 @@ +import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"为 RISC-V 开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case2.md","filePath":"zh/RuyiSDK/case2.md","lastUpdated":1719824176000}'),p={name:"zh/RuyiSDK/case2.md"},i=e(`

为 RISC-V 开发板安装操作系统

目前 ruyi 包管理器提供了更为简便的操作系统安装方式,通过以下步骤以及相关引导即可完成安装。

环境

本文基于以下环境进行操作:

  • 硬件:x86_64 PC
  • 软件:Ubuntu 22.04

其他说明

  • 在任意 Linux 系统下皆可完成下文操作

连接方式,以下任选:

  1. RISC-V 开发板以 USB 连接线接入 PC(若可以连接,推荐该方式)
  2. 将 RISC-V 开发板 SD 卡通过读卡器接入 PC

安装操作系统

在确保已安装 ruyi 包管理器,并且测试 ruyi -V 正常输出版本相关信息后,请继续以下操作。

ruyi 包管理器提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的 RISC-V 开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
+
+This is a wizard intended to help you install a system on your device for your
+development pleasure, all with ease.
+
+You will be asked some questions that help RuyiSDK understand your device and
+your intended configuration, then packages will be downloaded and flashed onto
+the device's storage, that you should somehow make available on this host
+system beforehand.
+
+Note that, as Ruyi does not run as root, but raw disk access is most likely
+required to flash images, you should arrange to allow your user account sudo
+access to necessary commands such as dd. Flashing will fail if the sudo
+configuration does not allow so.
+
+Continue? (y/N) y
+
+The following devices are currently supported by the wizard. Please pick your device:
+
+1. Allwinner Nezha D1
+2. Canaan Kendryte K230
+3. Milk-V Duo
+4. Milk-V Pioneer Box
+5. SiFive HiFive Unmatched
+6. Sipeed Lichee RV
+7. Sipeed LicheePi 4A
+8. StarFive VisionFive
+9. StarFive VisionFive2
+
+Choice? (1-9)

以上,以 Sipeed LicheePi 4A 为例,需要为其安装镜像,只需要输入对应的序号:7

Choice? (1-9) 7
+
+The device has the following variants. Please choose the one corresponding to your hardware at hand:
+
+  1. Sipeed LicheePi 4A (8G RAM)
+  2. Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-2) 2
+
+The following system configurations are supported by the device variant you have chosen. Please pick the one you want 
+to put on the device:
+
+  1. openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)
+  2. openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)
+  3. RevyOS for Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-3) 3
+
+We are about to download and install the following packages for your device:
+
+ * board-image/revyos-sipeed-lpi4a
+ * board-image/uboot-revyos-sipeed-lpi4a-16g
+
+Proceed? (y/N)

您只需要按照引导提示一步步执行即可。

其他说明

相关的系统刷写问题可以访问对应开发板官网以获取针对性的帮助。

`,20),l=[i];function o(c,t,d,r,h,u){return n(),a("div",null,l)}const g=s(p,[["render",o]]);export{v as __pageData,g as default}; diff --git a/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.lean.js b/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.lean.js new file mode 100644 index 00000000..affdd8b6 --- /dev/null +++ b/assets/zh_RuyiSDK_case2.md.BVpgbRPQ.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"为 RISC-V 开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case2.md","filePath":"zh/RuyiSDK/case2.md","lastUpdated":1719824176000}'),p={name:"zh/RuyiSDK/case2.md"},i=e("",20),l=[i];function o(c,t,d,r,h,u){return n(),a("div",null,l)}const g=s(p,[["render",o]]);export{v as __pageData,g as default}; diff --git a/assets/zh_RuyiSDK_case3.md.CQoxUcG2.js b/assets/zh_RuyiSDK_case3.md.CQoxUcG2.js new file mode 100644 index 00000000..800455a4 --- /dev/null +++ b/assets/zh_RuyiSDK_case3.md.CQoxUcG2.js @@ -0,0 +1,22 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case3.md","filePath":"zh/RuyiSDK/case3.md","lastUpdated":1719824176000}'),l={name:"zh/RuyiSDK/case3.md"},t=e(`

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 包管理器安装到使用 ruyi 包管理器搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A 开发板上运行的过程。

环境说明

  • 硬件环境:Licheepi 4A 开发板(th1520)
  • 软件环境:Debian/openEuler for RISC-V

ruyi 包管理器的安装

  1. [可选] 清除当前已经安装的 ruyi 包管理器及其所有数据。
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的 ruyi 工具。
bash
# 下载 riscv64 版本的 ruyi 包管理器,将其放到 path 路径下,并赋予其可执行权限
+wget https://github.com/RuyiSDK/ruyi/releases/download/0.5.0/ruyi-0.5.0.riscv64
+sudo cp ruyi-0.5.0.riscv64 /usr/local/bin/ruyi
+sudo chmod +x ruyi
+cd
  1. 验证 ruyi 包管理器可否使用
bash
ruyi --version
  1. 更新最新的软件源索引
bash
ruyi update

详细请见此处

使用 ruyi 包管理器部署开发环境:

  1. 查看软件仓软件包索引信息
bash
ruyi list
  1. 安装 gnu:ruyi install <package-name>
bash
#安装适用于 Licheepi 4A 的编译工具链 gnu-plct-xthead 
+ruyi install gnu-plct-xthead
  1. 查看预置编译环境
bash
ruyi list profiles
  1. 由指定的工具链、模拟器配置建立 Ruyi 虚拟环境 venv-sipeed。

    注意在虚拟环境创建时,需要指定正确的编译器版本和 sysroot 类型。

bash
ruyi venv -h
+
+##创建虚拟环境 venv-sipeed
+ruyi venv -t gnu-plct-xthead sipeed-lpi4a venv-sipeed 
+
+#查看编译环境中得工具
+ls venv-sipeed/bin/ 
+
+#激活虚拟环境(虚拟环境可以理解成一个容器,实现运行环境隔离的设计,激活后,在 venv-sipeed 这个环境中,使用的就是 gnu-plct-xthead 版本工具链。不创建虚拟环境也可以为 /home/sipeed/.local/share/ruyi/binaries/riscv64/gnu-plct-xthead-2.8.0-ruyi.20240222/bin 配置环境变量,直接使用环境变量指定的gcc编译)
+. venv-sipeed/bin/ruyi-activate 
+
+#查看当前虚拟环境下的 gcc 是否可用
+«Ruyi venv-sipeed» sipeed@lpi4a1590:~$ riscv64-plctxthead-linux-gnu-gcc --version
  1. 下载解压 coremark 源码作为编译对象
bash
mkdir coremark && cd coremark
+ruyi extract coremark
+ls -al

交叉编译 coremark

  1. 设置 coremark 源码中的编译配置信息(参考 coremark 仓库自述文档)
bash
sed -i 's/\\bgcc\\b/riscv64-plctxthead-linux-gnu-gcc/g' linux64/core_portme.mak
  1. 执行交叉编译和构建,得到可执行程序 coremark.exe
bash
make PORT_DIR=linux64 link
+ls -al    #新增可执行程序coremark.exe
  1. 查看 rv64 可执行程序文件属性信息。
bash
file coremark.exe
+# 命令回显信息显示了文件的架构相关信息

运行验证

  1. 直接运行 riscv64 coremark 可执行程序
bash
./coremark.exe
`,35),n=[t];function h(p,k,r,d,c,o){return a(),i("div",null,n)}const u=s(l,[["render",h]]);export{F as __pageData,u as default}; diff --git a/assets/zh_RuyiSDK_case3.md.CQoxUcG2.lean.js b/assets/zh_RuyiSDK_case3.md.CQoxUcG2.lean.js new file mode 100644 index 00000000..8e246335 --- /dev/null +++ b/assets/zh_RuyiSDK_case3.md.CQoxUcG2.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/RuyiSDK/case3.md","filePath":"zh/RuyiSDK/case3.md","lastUpdated":1719824176000}'),l={name:"zh/RuyiSDK/case3.md"},t=e("",35),n=[t];function h(p,k,r,d,c,o){return a(),i("div",null,n)}const u=s(l,[["render",h]]);export{F as __pageData,u as default}; diff --git a/assets/zh_devices_index.md.D2s-V8ZB.js b/assets/zh_devices_index.md.D2s-V8ZB.js deleted file mode 100644 index 641a621f..00000000 --- a/assets/zh_devices_index.md.D2s-V8ZB.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as a,a3 as l}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK集成的RISC-V设备","description":"","frontmatter":{},"headers":[],"relativePath":"zh/devices/index.md","filePath":"zh/devices/index.md","lastUpdated":1719560925000}'),s={name:"zh/devices/index.md"},t=l('

RuyiSDK集成的RISC-V设备

RuyiSDK对RISC-V设备的集成和支持主要包括以下几个方面:

  1. 提供RISC-V 开发板适用镜像信息维护与下载、开发板系统安装引导程序,方便 RISC-V 开发者获取指定开发板可用的OS并可方便的安装OS的安装。RuyiSDK集成了多种可用的操作系统供用户选择。
  2. 提供RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加RISC-V设备专有向导页面、实现开发环境和运行环境的文件传输、支持在RISC-V设备上调试应用程序等。

支持的RISC-V设备

目前对硬件设备的集成主要体现在包管理器(设备安装器),可以通过 ruyi device provision命令查询,已经集成的RISC-V设备有:

  1. Allwinner Nezha D1
  2. Canaan Kendryte K230
  3. Milk-V Duo
  4. Milk-V Duo S
  5. Milk-V Mars
  6. Milk-V Mars CM
  7. Milk-V Meles
  8. Milk-V Pioneer Box
  9. Milk-V Vega
  10. SiFive HiFive Unmatched
  11. Sipeed Lichee RV
  12. Sipeed LicheePi 4A
  13. StarFive VisionFive
  14. StarFive VisionFive2

从RuyiSDK开始使用设备

获取并安装OS

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

',11),r=[t];function o(n,d,h,c,p,S){return a(),e("div",null,r)}const V=i(s,[["render",o]]);export{k as __pageData,V as default}; diff --git a/assets/zh_devices_index.md.D2s-V8ZB.lean.js b/assets/zh_devices_index.md.D2s-V8ZB.lean.js deleted file mode 100644 index 7c6deae2..00000000 --- a/assets/zh_devices_index.md.D2s-V8ZB.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as a,a3 as l}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK集成的RISC-V设备","description":"","frontmatter":{},"headers":[],"relativePath":"zh/devices/index.md","filePath":"zh/devices/index.md","lastUpdated":1719560925000}'),s={name:"zh/devices/index.md"},t=l("",11),r=[t];function o(n,d,h,c,p,S){return a(),e("div",null,r)}const V=i(s,[["render",o]]);export{k as __pageData,V as default}; diff --git a/assets/zh_index.md.B91jVbT0.js b/assets/zh_index.md.CeTHT3CI.js similarity index 91% rename from assets/zh_index.md.B91jVbT0.js rename to assets/zh_index.md.CeTHT3CI.js index dbc1a5f5..9674849d 100644 --- a/assets/zh_index.md.B91jVbT0.js +++ b/assets/zh_index.md.CeTHT3CI.js @@ -1 +1 @@ -import{_ as t,c as e,o as a}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK 文档","text":"","tagline":"本手册包含了 RuyiSDK 如何构建、如何使用的相关内容。","actions":[{"theme":"brand","text":"快速开始","link":"/zh/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"TODO"},{"title":"LLVM","details":"TODO"}]},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1719560925000}'),i={name:"zh/index.md"};function n(o,r,s,d,c,l){return a(),e("div")}const p=t(i,[["render",n]]);export{m as __pageData,p as default}; +import{_ as t,c as e,o as a}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK 文档","text":"","tagline":"本手册包含了 RuyiSDK 如何构建、如何使用的相关内容。","actions":[{"theme":"brand","text":"快速开始","link":"/zh/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"TODO"},{"title":"LLVM","details":"TODO"}]},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1719824176000}'),i={name:"zh/index.md"};function n(o,r,s,d,c,l){return a(),e("div")}const p=t(i,[["render",n]]);export{m as __pageData,p as default}; diff --git a/assets/zh_index.md.B91jVbT0.lean.js b/assets/zh_index.md.CeTHT3CI.lean.js similarity index 91% rename from assets/zh_index.md.B91jVbT0.lean.js rename to assets/zh_index.md.CeTHT3CI.lean.js index dbc1a5f5..9674849d 100644 --- a/assets/zh_index.md.B91jVbT0.lean.js +++ b/assets/zh_index.md.CeTHT3CI.lean.js @@ -1 +1 @@ -import{_ as t,c as e,o as a}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK 文档","text":"","tagline":"本手册包含了 RuyiSDK 如何构建、如何使用的相关内容。","actions":[{"theme":"brand","text":"快速开始","link":"/zh/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"TODO"},{"title":"LLVM","details":"TODO"}]},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1719560925000}'),i={name:"zh/index.md"};function n(o,r,s,d,c,l){return a(),e("div")}const p=t(i,[["render",n]]);export{m as __pageData,p as default}; +import{_ as t,c as e,o as a}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"RuyiSDK 文档","text":"","tagline":"本手册包含了 RuyiSDK 如何构建、如何使用的相关内容。","actions":[{"theme":"brand","text":"快速开始","link":"/zh/introduction/index"},{"theme":"alt","text":"Github","link":"https://github.com/RuyiSDK/ruyi"}]},"features":[{"title":"RISCV-GCC","details":"TODO"},{"title":"LLVM","details":"TODO"}]},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1719824176000}'),i={name:"zh/index.md"};function n(o,r,s,d,c,l){return a(),e("div")}const p=t(i,[["render",n]]);export{m as __pageData,p as default}; diff --git a/assets/zh_introduction_index.md.DC_JrWBs.js b/assets/zh_introduction_index.md.DC_JrWBs.js new file mode 100644 index 00000000..8f0f107e --- /dev/null +++ b/assets/zh_introduction_index.md.DC_JrWBs.js @@ -0,0 +1,8 @@ +import{_ as t,c as a,o as e,a3 as i}from"./chunks/framework.BKLMYXYM.js";const d="/docs/assets/RuyiSDK.Cr9Gr74Z.png",r="/docs/assets/Structure-RuyiSDK.DpdJ4nSb.png",k=JSON.parse('{"title":"Hello Ruyi","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/index.md","filePath":"zh/introduction/index.md","lastUpdated":1719824176000}'),n={name:"zh/introduction/index.md"},s=i('

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK -> 介绍
  2. 为什么会有 RuyiSDK -> 背景
  3. RuyiSDK 有什么用 -> 功能
  4. 我可以在什么设备上运行 -> 支持的设备
  5. RuyiSDK 的原理是什么 -> RuyiSDK-架构示意图
  6. 我该从何开始 -> 让我们开始吧!

介绍

RuyiSDK 是一个由 PLCT Lab 所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在支持的设备中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 CISC 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK

RuyiSDK 分为以下三个部分:

ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
+2. 调试工具
+3. 模拟器
+4. 运行环境
+5. 文档
+6. 源码
+7. 工具、系统镜像
+8. GUI(TODO)

Ruyi IDE

该 IDE 是一个为 RISC-V 架构设计的开发工具箱,开发者可以轻松的通过 ruyi 包管理器获取,可以对于实际的开发场景对于代码的编写以及调试。 使用包管理器开发者可以获取该工具箱中的编译工具链、调试工具和模拟器,开发者可以使用模拟器或者在 RISC-V 开发板上对自身的程序进行编写以及调试。

Community

在我们的社区当中,提供了大量的相关技术文章、代码、教程视频,以及我们会举办一定的线下活动获得来自用户的反馈,在线上也会有相应的论坛提供给开发者进行技术交流。


RuyiSDK 对 RISC-V 设备的集成和支持主要包括以下几个方面:

  1. RISC-V 开发板镜像相关信息以及下载、安装教程,便于开发者获取相关镜像(换而言之提供一个镜像站),其中涵盖多种操作系统(如基于 Debian 的 RevyOS、openEuler RISC-V 等)提供给开发者使用。
  2. 提供 RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加 RISC-V 设备专有向导页面、实现开发环境和运行环境的文件传输、支持在 RISC-V 设备上调试应用程序等。

支持的设备

目前 RuyiSDK 支持的设备如下:

型号
100ASK-V853-PROAllWinner V853BananaPi BPI-F3BeagleV-Ahead
BeagleV-FireCanMV K230Canaan K510-CRB-V1.2 KITCH32V103-EVT
CH32V203-EVTCH32V208-EVTCH32V303-EVTCH32V305-EVT
CH32V307-EVTCH573F-EVTCH582F-EVTCH592X-EVT
D1s NeZhaDongshanPI-Nezha STUDongShanPI D1sHiFive Unmatched
Lichee Cluster 4ALichee Console 4ALicheePi 4ALicheeRV/AWOL Nezha
LicheeRV NanoLongan NanoMangoPi MQMangoPi MQ Pro
Milk-V Duo 64MMilk-V Duo 256MMilk-V Duo SMilk-V Mars
Milk-V MelesMilk-V VegaNuclei DDR200TPioneer Box
PolarFire FPGA SoC Icicle KitRV-STARSipeed Maix-BitSipeed M0 sense
Sipeed M0P DockSipeed M0s DockSipeed M1s DockStar64
Tang Mega 138KTinyVisionVisionFiveVisionFive 2
YuzukiHD-Lizard

文档可能更新不及时,查看最新支持的设备请通过指令 ruyi device provision 查询。

RuyiSDK-架构示意图

Structure-RuyiSDK.png

让我们开始吧!

从 RuyiSDK 开始使用设备!

获取并安装 ruyi

具体请参考这里

获取并安装 OS

开始的第一步:

bash
$ ruyi device provision

该指令会识别硬件信息,并且开始自动执行对应程序为用户自动部署 RISC-V 开发环境,按照引导信息一步步执行即可。

具体请参考这里这里

',37),l=[s];function o(h,p,u,c,y,S){return e(),a("div",null,l)}const m=t(n,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/zh_introduction_index.md.DC_JrWBs.lean.js b/assets/zh_introduction_index.md.DC_JrWBs.lean.js new file mode 100644 index 00000000..198da10a --- /dev/null +++ b/assets/zh_introduction_index.md.DC_JrWBs.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as e,a3 as i}from"./chunks/framework.BKLMYXYM.js";const d="/docs/assets/RuyiSDK.Cr9Gr74Z.png",r="/docs/assets/Structure-RuyiSDK.DpdJ4nSb.png",k=JSON.parse('{"title":"Hello Ruyi","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/index.md","filePath":"zh/introduction/index.md","lastUpdated":1719824176000}'),n={name:"zh/introduction/index.md"},s=i("",37),l=[s];function o(h,p,u,c,y,S){return e(),a("div",null,l)}const m=t(n,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/zh_introduction_index.md.DhOaCQwk.lean.js b/assets/zh_introduction_index.md.DhOaCQwk.lean.js deleted file mode 100644 index 56e9855a..00000000 --- a/assets/zh_introduction_index.md.DhOaCQwk.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as i,a3 as r}from"./chunks/framework.BKLMYXYM.js";const l="/docs/assets/ruyisdk.DlLqNkX-.png",b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/index.md","filePath":"zh/introduction/index.md","lastUpdated":1719560925000}'),t={name:"zh/introduction/index.md"},s=r("",33),n=[s];function o(h,p,d,c,u,k){return i(),e("div",null,n)}const m=a(t,[["render",o]]);export{b as __pageData,m as default}; diff --git a/assets/zh_introduction_requirement.md.CJ2q0Y-9.js b/assets/zh_introduction_requirement.md.CJ2q0Y-9.js deleted file mode 100644 index d328c07f..00000000 --- a/assets/zh_introduction_requirement.md.CJ2q0Y-9.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as l,o,a3 as r}from"./chunks/framework.BKLMYXYM.js";const S=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/requirement.md","filePath":"zh/introduction/requirement.md","lastUpdated":1719560925000}'),t={name:"zh/introduction/requirement.md"},e=r('

介绍

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RuyiSDK 的目标

  1. 开发者购买了 (几乎) 任何一款 RISC-V 开发板或模组,都可以通过 RuyiSDK 系统获得硬件资料说明、固件 / 软件更新、调试支持等。
  2. 开发者可以指定任何常用的 RISC-V 扩展指令集架构组合,都可以通过 RuyiSDK 系统生成客户所需的操作系统、工具链、语言执行环境 (运行时或虚拟机)、计算库、应用框架等。尤其强调 RuyiSDK 将完全支持 Vector 0.7.1 和 RVP 0.5.2 等已经大规模硅化的草案 标准 (or 厂商定制扩展)。
  3. 培育运营一个活跃全面的开发者交流社区。

RuyiSDK 架构示意图

![[1703147196780.png]]RuyiSDK 的组成

RuyiSDK 主要包含了一个组件管理器(也称为包管理器,Ruyi Repo)、一个集成开发环境(Ruyi IDE)、一个开发者交流社区;

  • 组件管理器包含一个在线软件源 (Ruyi Repo) 和 一个包管理工具(ruyi)。在线软件源即 Ruyi Repo 集中存储了RISC-V集成开发环境所需的编译工具链、调试工具、模拟器、运行环境、文档、代码、工具、target系统镜像等内容;包管理器工具则是用于与在线软件源交互的工具,它提供了一套命令行接口(ruyi)或图形用户界面(GUI未来可能提供),使开发者能够搜索、安装、更新和管理软件包。包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

  • 集成开发环境(Ruyi IDE)则是一个专门用来开发能够运行在RISC-V架构设备上的软件和应用的工具箱。可以帮助开发者编写和测试自己的程序。

    想象一下,你要做一款能够运行在RISC-V设备上的应用程序,比如用C或者C++语言开发一个图像识别的程序,Ruyi IDE 就像是一个你的工作室,里面有各种各样的工具可以帮助你完成这个任务。首先创建项目,从RuyiSDK包管理器中下载和安装所需的编译工具链、调试工具、模拟器等工具,然后在文本编辑器中完成对代码的编辑,接着对项目进行编译构建获得RISC-V架构的可执行程序,最后在模拟器或者RISC-V开发板上进行运行和测试。如果代码需要调试,也可通过调试工具进行代码调试。这一过程和x86下的开发、编译构建、调试、运行的流程是一致的,只是适用于当前开发语言及目标运行设备的RISC-V的编译工具链、模拟器等软件和工具都可以从Ruyi Repo中获取,在安装和IDE初始设置时都已经被集成到 Ruyi IDE 之中,用户无需为环境搭建耗费精力。

  • 开发者交流社区则提供文档和教程、论坛和技术讨论区、博客和文档等等功能,目的是为RISC-V开发者提供一个开放的交流平台,提供互助式技术支持和资源共享,聚集RISC-V开发者并推动RISC-V生态系统的发展。

RuyiSDK 模块需求说明

说明:这是一个初步的需求设想,具体还需要结合技术可行性等进行进一步的调整。供参考。

RUYI 包管理器

RUYI在线软件源(Ruyi Repo)

  1. 软件源的管理内容包括以下内容:
    1. GNU和LLVM编译工具链
    2. 调试工具(GDB、LLDB)
    3. 模拟器(qemu、spike,……)
    4. 运行环境(sysroot / rootfs)
    5. 工具:包括且不限于Ruyi IDE、架构图中的各种工具等
    6. 代码(库、示例 etc.)
    7. 文档
    8. 目标运行环境的RISC-V系统镜像文件
  2. 软件源内包的元数据包含并不限于:发布厂商、版本信息、资源类型、下载链接、文档资源等各种信息(支持属性扩展)等属性信息;如编译工具链有不同厂商发布的,不同版本的软件资源需要进行管理(如GNU和LLVM目前有三种类型:upstream、PLCT、xthead,随着版本的更新和发布,每种类型会产生诸如vX.X这种多个版本)。

RUYI包管理工具(ruyi)

  1. 实现一套命令行接口(CLI),用于与在线软件源交互。
    1. 使开发者能够搜索、安装、更新、卸载和管理软件包。

    2. 包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

    3. 能够支持工具自身的升级、卸载;

    4. 能够支持在线软件源中不同类型、不同版本、不同厂商、不同适用环境的软件包的搜索:

      • 按照name搜索
      • 按照版本搜索
      • 按照可支持的扩展指令集搜索
      • 按照资源类型搜索
      • 按照可适用的开发板(或目标运行环境)搜索
      • ……
  2. 实现一套图形用户界面(GUI)工具,用于与在线软件源交互。功能与上述CLI接口类似;(待定)
  3. 三架构支持:工具需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);

Ruyi IDE

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下功能:

  1. 项目管理工具:提供项目管理功能,使开发者能够轻松创建、组织和管理他们的RISC-V项目。这包括创建新项目、导入现有项目、管理依赖和库等。

  2. 代码编辑器:提供一个功能强大的代码编辑器,支持开发语言的语法高亮显示、代码自动完成、代码导航、智能感知、错误检查、代码片段管理、版本控制集成、调试支持等功能,以提高开发效率、减少错误,并提供更好的代码编写和维护体验。

    • 代码编辑器常见功能详细说明:

      1. 语法高亮(Syntax Highlighting):根据编程语言的语法规则,对代码进行着色,以增强可读性和代码理解性。
      2. 自动完成(Auto Completion):根据当前上下文,在输入代码的过程中自动弹出变量、函数、类名等的建议,以加快编码速度和减少拼写错误。
      3. 智能感知(Intelligent Code Sense):通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助开发者编写正确的代码。
      4. 代码导航(Code Navigation):提供快速导航到代码的不同部分,如跳转到定义处、跳转到引用处、跳转到函数调用等,以便快速定位和浏览代码。
      5. 重构工具(Refactoring Tools):提供一系列操作,如重命名、提取函数、提取变量等,以帮助开发者改善代码的结构和可维护性。
      6. 调试支持(Debugging Support):提供集成的调试器,使开发者能够设置断点、单步执行代码、查看变量的值等,以便调试和排查代码中的问题。
      7. 版本控制集成(Version Control Integration):与版本控制系统(如Git)集成,提供对代码版本的管理、提交、比较和合并等功能。
      8. 错误检查(Error Checking):即时检测代码中的语法错误、潜在的逻辑错误或常见的编码错误,并给出相应的警告或错误提示。
      9. 代码片段管理(Code Snippet Management):提供可重用的代码片段库,包括预定义的模板或用户自定义的代码片段,以便快速插入常用代码块。
      10. 文档生成(Documentation Generation):根据代码中的注释或特定的标记语言,自动生成代码文档或API文档。
    • 语言插件: 支持C、C++、Java、JavaScript、Python、Rust、Fortran、SAIL、Dart、Chisel等不同的语言类型;

  3. RISC-V编译器/解释器支持:集成RISC-V架构的编译器/解释器,使开发者能够编译和构建基于RISC-V指令集的应用程序。(这里不同语言存在差异,需要一一区别和定义)

  4. RISC-V模拟器和调试器:集成一个RISC-V模拟器和调试器,可以模拟和调试RISC-V指令的执行过程。开发者可以在IDE中设置断点、单步执行代码,并查看变量的值和内存的状态,以进行程序的调试和分析。

  5. 代码分析和优化:提供代码分析工具,帮助开发者发现潜在的性能问题和错误,并提供优化建议。这包括静态代码分析、性能分析和内存分析等功能,以帮助开发者编写更高效和可靠的RISC-V应用程序。

  6. 集成文档和教程:提供与RISC-V相关的文档、教程和示例代码的集成,以帮助开发者学习和使用RISC-V架构。这样,开发者可以在IDE中方便地查阅文档和学习相关知识,加快他们的开发过程。

  7. 语言虚拟机或运行时环境:一些语言需要在运行时依赖于相应的解释器或语言虚拟机。如Python需要在运行时依赖于相应的解释器或语言虚拟机(如CPython、Jython等)。因此,IDE需要与这些解释器或虚拟机进行集成,以便在IDE中直接运行和调试Python代码。

  8. 代码执行环境管理:如Python开发中通常会使用虚拟环境(Virtual Environment)来管理依赖和隔离项目环境。IDE可以提供对虚拟环境的支持,使开发者能够方便地创建、激活和管理虚拟环境。

  9. 交互式解释器和调试器:如Python具有交互式解释器(REPL)的特性,可以在命令行环境中逐行执行代码。IDE可以集成交互式解释器,使开发者能够在IDE中直接执行和调试代码片段,以便进行快速的实验和调试。

  10. 包管理和库支持:很多开发语言都有丰富的第三方库和包管理工具。如Python是pip、conda等。IDE可以提供对这些工具的集成,以便开发者能够方便地搜索、安装和管理各种Python库和依赖项。

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下特点:

  1. 可扩展性和插件支持:支持插件系统,使开发者能够根据自己的需求扩展和定制IDE。这样,他们可以集成其他工具、添加自定义功能,并与其他开发者共享他们的插件。
  2. 并行编译能力: IDE中,能够为一个项目同时生成不同的运行环境(RISC-V开发板)编译构建出适用该开发板的可执行程序。(待定)
  3. 跨平台兼容性,三架构支持: Ruyi IDE 本身的安装程序需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);
  4. 定制化: 可视化的集成开发环境的界面部分,除去继承开源软件的部分,自研发/改动部分界面需要个性化定制。
  5. 性能: 要求 Ruyi IDE 能够流畅地运行在主流的PC设备上。

我们希望,当使用 Ruyi IDE 进行例如图像识别应用程序的开发时,能够得到如下步骤所描述的功能支持:

  1. 打开 Ruyi IDE,并创建一个新的项目或工程。在项目中,你可以组织和管理你的代码文件、资源文件和配置文件等。
  2. 在集成开发环境的文本编辑器中,创建一个新的C/C++源代码文件。在该文件中,你可以编写程序,如图像识别算法的逻辑和实现。
  3. 使用语法高亮功能,集成开发环境会根据编程语言的语法规则,对你的代码进行着色,以增强可读性和代码理解性。
  4. 在编写代码的过程中,Ruyi IDE 提供自动完成功能,根据当前上下文,自动弹出变量、函数和类名的建议,以加快编码速度和减少拼写错误。
  5. 在代码编写过程中,集成开发环境提供智能感知功能,通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助你编写正确的代码。
  6. 在集成开发环境中,你可以使用代码导航功能,快速跳转到代码的不同部分,如跳转到函数的定义处、跳转到变量的引用处,以便快速定位和浏览代码。
  7. 在编写完代码后,使用集成开发环境提供的构建工具进行项目的构建。这可能涉及选择适当的编译选项、设置编译器路径和库路径,以及处理依赖关系。
  8. Ruyi IDE 通常提供调试器功能,你可以设置断点、逐行调试代码,并观察变量的值,以解决代码中的错误和问题。
  9. 如果需要提高图像识别程序的性能,你可以使用Ruyi IDE 中的性能分析工具,检查代码的瓶颈并进行优化。
  10. 一旦你完成了开发和调试,Ruyi IDE 提供了部署工具,你可以将编译好的图像识别应用程序部署到RISC-V架构的嵌入式设备上,并进行远程调试和监视。
  11. 在开发过程中,Ruyi IDE 还提供版本控制集成工具,帮助你管理代码的版本、进行代码的协作开发和团队协作。如果遇到技术问题,可以在开发者社区进行技术交流获取帮助。
  12. 最后,Ruyi IDE 还提供文档生成工具,可以自动生成代码文档或API文档,帮助你记录和分享你的代码。

通过 Ruyi IDE 的支持,你可以更高效地开发图像识别应用程序,利用其提供的各种工具和功能,加速开发过程、减少错误,并提供更好的代码编写和维护体验。

总之,RISC-V开发者的集成开发环境将提供一系列专门针对RISC-V架构的工具和功能(这些工具从包管理器中获取),以帮助开发者更轻松、高效地开发RISC-V应用程序。同时,它提供直观的用户界面、高度可定制的功能和良好的扩展性,以满足不同开发者的需求。

开发者社区

一个开发者交流社区需要具备以下功能:

  1. 主页/官方网站: 用来汇聚关于 RuyiSDK 宣发、推广、使用、交流需要的一切资源,是第一级别入口。
  2. 开发者管理: 用户的注册、登录等账号有关的管理。
  3. 统计功能: 对主页累计访问量、软件下载次数、用户注册量等信息进行统计,这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段。
  4. 文档和教程:社区可能提供详细的文档和教程,涵盖RISC-V开发环境的使用指南、编程技巧、调试技巧等方面的内容,帮助开发者快速上手和解决常见问题。
  5. 论坛和讨论区:提供一个讨论区或论坛,让开发者可以发表问题、分享经验、提供建议等。其他开发者可以回复和讨论,促进交流和知识共享。
  6. 博客和文章:提供开发者撰写博客文章的功能,可以分享技术经验、教程、最佳实践等内容。其他开发者可以浏览和评论这些文章,从中获得有价值的信息。
  7. 问答平台:类似于问答社区,开发者可以发布问题,其他开发者可以回答问题或提供解决方案。这样的平台可以快速解决开发过程中的疑问和难题。
  8. 资源共享:开发者可以共享和下载与RISC-V开发相关的资源,如代码示例、项目模板、库文件等。这有助于加快开发速度和提高效率。
  9. 活动和会议:社区可以组织定期的在线活动、研讨会或会议,让开发者聚集在一起,分享最新的技术趋势、案例研究和实践经验。
  10. 专家支持:社区可能吸引一些RISC-V领域的专家,他们可以提供指导、解答问题,甚至组织在线培训或指导课程,帮助开发者更好地利用集成开发环境进行开发。
  11. 插件和扩展:开发者可以共享和下载与RISC-V集成开发环境相关的插件和扩展,以增强开发环境的功能和灵活性。
  12. 就业和项目机会:社区可以提供就业和项目机会的发布平台,帮助开发者寻找合适的工作机会或参与感兴趣的项目。
  13. 积分和奖励机制:社区可以设立积分和奖励机制,鼓励开发者积极参与交流和贡献。例如,回答问题、分享文章或贡献代码可以获得积分或奖励,提高其在社区中的声誉。

这样的一个开发者交流社区可以促进RISC-V集成开发环境的用户之间的交流和合作,提供技术支持和资源共享,增加开发者的学习和开发效率,推动RISC-V生态系统的发展。

',28),a=[e];function n(u,p,R,s,I,y){return o(),l("div",null,a)}const d=i(t,[["render",n]]);export{S as __pageData,d as default}; diff --git a/assets/zh_introduction_requirement.md.CJ2q0Y-9.lean.js b/assets/zh_introduction_requirement.md.CJ2q0Y-9.lean.js deleted file mode 100644 index 4fddcd94..00000000 --- a/assets/zh_introduction_requirement.md.CJ2q0Y-9.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as l,o,a3 as r}from"./chunks/framework.BKLMYXYM.js";const S=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"zh/introduction/requirement.md","filePath":"zh/introduction/requirement.md","lastUpdated":1719560925000}'),t={name:"zh/introduction/requirement.md"},e=r("",28),a=[e];function n(u,p,R,s,I,y){return o(),l("div",null,a)}const d=i(t,[["render",n]]);export{S as __pageData,d as default}; diff --git a/assets/zh_plan_index.md.DvsrCd89.js b/assets/zh_plan_index.md.DvsrCd89.js deleted file mode 100644 index 5d53e9c5..00000000 --- a/assets/zh_plan_index.md.DvsrCd89.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as d,o as r,a3 as a}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"版本规划路线图","description":"","frontmatter":{},"headers":[],"relativePath":"zh/plan/index.md","filePath":"zh/plan/index.md","lastUpdated":1719560925000}'),i={name:"zh/plan/index.md"},e=a('

版本规划路线图

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RUYISDK 版本计划

里程碑版本

RuyiSDK 计划以每半年为一个里程碑版本周期来推动 RuyiSDK 的不断完善,目前计划中的里程碑版本有:

  • 23.06 (计划发布时间:2023年6月)
  • 23.12 (计划发布时间:2023年12月)
  • 24.06 (计划发布时间:2024年6月)
  • 24.12 (计划发布时间:2024年12月)
  • 25.06 (计划发布时间:2025年6月)
  • 25.12 (计划发布时间:2025年12月)

敏捷开发版本计划

自2024年1月开始,RuyiSDK 切换为更加敏捷的开发迭代模式,预期每 2 周发布一个开发版本,提供一些新功能,如包管理器能力迭代、RuyiSDK软件源提供新的软件包或者软件包版本升级、或工具链、板卡的新增适配等等,这些更新将以 release note 的方式公开。

  • 发布日期默认每双周周二发布;发布周期内遇3日以上节假日的,延迟一周发布;

  • 敏捷开发版本执行敏捷测试方式:

    • 代码冻结日期在发布日期的上一周周四/周五;
    • 代码冻结日~发布日:执行新特性的测试验证和基础功能回归测试;
    • 发布日~下一次代码冻结日:完成回归测试用例更新和执行全面回归测试;

RUYISDK 规划

2024目标

  • RuyiSDK官网上线。
  • 支持50多种RISC-V设备。
  • 支持运行≥7个流行的Linux发行版。将增加对openKylin和Gentoo的支持。
  • 提供多种图形化IDE环境,包括对Eclipse和VSCode的支持。
  • 服务≥10000名注册开发者。
  • 支持计划于2024年发布的SG2044和SG2380。

敏捷开发版本排期

滚动发行版本号发布日期代码冻结日期备注
v0.32024.01.162024.01.12
v0.42024.01.302024.01.26
v0.52024.02.272024.02.23春节,跳过一次
v0.62024.03.122024.03.08
v0.72024.03.262024.03.22
v0.82024.04.092024.04.07
v0.92024.04.232024.04.19
v0.102024.05.142024.05.10劳动节,延迟一周发布
v0.112024.05.282024.05.24
v0.122024.06.112024.06.06端午节
v0.132024.06.252024.06.21
v0.142024.07.092024.07.05
v0.152024.07.232024.07.19
v0.162024.08.062024.08.02
v0.172024.08.202024.08.16
v0.182024.09.032024.08.30
v0.192024.09.242024.09.20中秋节,延迟一周发布
v0.202024.10.152024.10.11国庆节,延迟一周发布
v0.212024.10.292024.10.25
v0.222024.11.122024.11.08
v0.232024.11.262024.11.22
v0.242024.12.102024.12.06
v0.252024.12.242024.12.20
',14),l=[e];function o(n,h,s,u,c,_){return r(),d("div",null,l)}const S=t(i,[["render",o]]);export{v as __pageData,S as default}; diff --git a/assets/zh_plan_index.md.DvsrCd89.lean.js b/assets/zh_plan_index.md.DvsrCd89.lean.js deleted file mode 100644 index 6e600603..00000000 --- a/assets/zh_plan_index.md.DvsrCd89.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as d,o as r,a3 as a}from"./chunks/framework.BKLMYXYM.js";const v=JSON.parse('{"title":"版本规划路线图","description":"","frontmatter":{},"headers":[],"relativePath":"zh/plan/index.md","filePath":"zh/plan/index.md","lastUpdated":1719560925000}'),i={name:"zh/plan/index.md"},e=a("",14),l=[e];function o(n,h,s,u,c,_){return r(),d("div",null,l)}const S=t(i,[["render",o]]);export{v as __pageData,S as default}; diff --git a/assets/zh_ruyi_getstarted_index.md.BcWTzkN7.lean.js b/assets/zh_ruyi_getstarted_index.md.BcWTzkN7.lean.js deleted file mode 100644 index 477a6bfd..00000000 --- a/assets/zh_ruyi_getstarted_index.md.BcWTzkN7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const c=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/getstarted/index.md","filePath":"zh/ruyi/getstarted/index.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/getstarted/index.md"},t=n("",64),l=[t];function p(e,k,F,r,d,g){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{c as __pageData,o as default}; diff --git a/assets/zh_ruyi_index.md.B85YnIFa.lean.js b/assets/zh_ruyi_index.md.B85YnIFa.lean.js deleted file mode 100644 index 8c878568..00000000 --- a/assets/zh_ruyi_index.md.B85YnIFa.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 包管理器","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/index.md","filePath":"zh/ruyi/index.md","lastUpdated":1719560925000}'),e={name:"zh/ruyi/index.md"},l=n("",13),r=[l];function t(p,h,k,o,d,c){return i(),a("div",null,r)}const F=s(e,[["render",t]]);export{y as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.lean.js b/assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.lean.js deleted file mode 100644 index 12444d68..00000000 --- a/assets/zh_ruyi_updates_0.10.0.md.BczUYJ95.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.10.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.10.0.md","filePath":"zh/ruyi/updates/0.10.0.md","lastUpdated":1719560925000}'),i={name:"zh/ruyi/updates/0.10.0.md"},d=l("",23),s=[d];function a(r,c,y,g,o,x){return n(),e("div",null,s)}const p=t(i,[["render",a]]);export{C as __pageData,p as default}; diff --git a/assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.lean.js b/assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.lean.js deleted file mode 100644 index 631f3502..00000000 --- a/assets/zh_ruyi_updates_0.11.0.md.DtSk3EI-.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as n,a3 as l}from"./chunks/framework.BKLMYXYM.js";const C=JSON.parse('{"title":"v0.11.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.11.0.md","filePath":"zh/ruyi/updates/0.11.0.md","lastUpdated":1719560925000}'),i={name:"zh/ruyi/updates/0.11.0.md"},d=l("",22),a=[d];function s(r,c,y,g,o,x){return n(),e("div",null,a)}const p=t(i,[["render",s]]);export{C as __pageData,p as default}; diff --git a/assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.lean.js b/assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.lean.js deleted file mode 100644 index 77756eee..00000000 --- a/assets/zh_ruyi_updates_0.12.0.md.nuMQydAy.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.12.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.12.0.md","filePath":"zh/ruyi/updates/0.12.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.12.0.md"},t=n("",11),l=[t];function p(e,k,F,r,d,c){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default}; diff --git a/assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.lean.js b/assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.lean.js deleted file mode 100644 index 93ffe259..00000000 --- a/assets/zh_ruyi_updates_0.13.0.md.DFCXaJsc.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"v0.13.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.13.0.md","filePath":"zh/ruyi/updates/0.13.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.13.0.md"},t=n("",11),l=[t];function p(e,k,F,r,d,c){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default}; diff --git a/assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.lean.js b/assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.lean.js deleted file mode 100644 index 3624d817..00000000 --- a/assets/zh_ruyi_updates_0.3.0.md.Dkt3qj7N.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const E=JSON.parse('{"title":"v0.3.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.3.0.md","filePath":"zh/ruyi/updates/0.3.0.md","lastUpdated":1719560925000}'),h={name:"zh/ruyi/updates/0.3.0.md"},l=n("",24),k=[l];function p(t,e,F,d,r,y){return a(),i("div",null,k)}const C=s(h,[["render",p]]);export{E as __pageData,C as default}; diff --git a/assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.lean.js b/assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.lean.js deleted file mode 100644 index 12bf3e41..00000000 --- a/assets/zh_ruyi_updates_0.4.0.md.Dy7_eDyw.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.4.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.4.0.md","filePath":"zh/ruyi/updates/0.4.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.4.0.md"},a=s("",17),l=[a];function d(r,h,c,p,o,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.lean.js b/assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.lean.js deleted file mode 100644 index c67393e9..00000000 --- a/assets/zh_ruyi_updates_0.5.0.md.C7qJRSmc.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.5.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.5.0.md","filePath":"zh/ruyi/updates/0.5.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.5.0.md"},a=s("",21),l=[a];function d(r,p,h,c,k,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{o as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.lean.js b/assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.lean.js deleted file mode 100644 index 7e3ec222..00000000 --- a/assets/zh_ruyi_updates_0.6.0.md.b1cLa9QQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as n}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"v0.6.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.6.0.md","filePath":"zh/ruyi/updates/0.6.0.md","lastUpdated":1719560925000}'),l={name:"zh/ruyi/updates/0.6.0.md"},s=n("",16),d=[s];function a(r,c,y,o,g,h){return i(),e("div",null,d)}const k=t(l,[["render",a]]);export{x as __pageData,k as default}; diff --git a/assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.lean.js b/assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.lean.js deleted file mode 100644 index 2a85ff51..00000000 --- a/assets/zh_ruyi_updates_0.7.0.md.f_CgF3-_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.7.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.7.0.md","filePath":"zh/ruyi/updates/0.7.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.7.0.md"},a=s("",18),l=[a];function d(r,c,h,y,p,g){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.lean.js b/assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.lean.js deleted file mode 100644 index cfd7a7bd..00000000 --- a/assets/zh_ruyi_updates_0.8.1.md.D3HX4EfH.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const o=JSON.parse('{"title":"v0.8.1 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.8.1.md","filePath":"zh/ruyi/updates/0.8.1.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.8.1.md"},a=s("",19),l=[a];function d(r,h,c,p,k,y){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{o as __pageData,F as default}; diff --git a/assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.lean.js b/assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.lean.js deleted file mode 100644 index f29c7bda..00000000 --- a/assets/zh_ruyi_updates_0.9.0.md.B9G6MaK8.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"v0.9.0 版本新增特性","description":"","frontmatter":{},"headers":[],"relativePath":"zh/ruyi/updates/0.9.0.md","filePath":"zh/ruyi/updates/0.9.0.md","lastUpdated":1719560925000}'),n={name:"zh/ruyi/updates/0.9.0.md"},a=s("",19),l=[a];function d(r,c,h,p,y,g){return i(),e("div",null,l)}const F=t(n,[["render",d]]);export{k as __pageData,F as default}; diff --git a/assets/zh_sdk_gnu_index.md.BJi5DjGX.js b/assets/zh_sdk_gnu_index.md.BJi5DjGX.js deleted file mode 100644 index 94c19443..00000000 --- a/assets/zh_sdk_gnu_index.md.BJi5DjGX.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"RuyiSDK GCC 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh/sdk/gnu/index.md","filePath":"zh/sdk/gnu/index.md","lastUpdated":1719560925000}'),c={name:"zh/sdk/gnu/index.md"},i=r('

RuyiSDK GCC 工具链介绍

RuyiSDK GCC 工具链是专门用于 RISC-V 架构的 GNU 工具链,它包括一系列工具,如编译器、汇编器、链接器等,用于开发和构建 RISC-V 架构的软件。

模块介绍

GCC(GNU Compiler Collection)

功能: RISC-V GNU Toolchain 的核心组件之一,用于将高级编程语言(如 C、C++)的源代码翻译成 RISC-V 架构的目标代码。

支持: 提供对不同 RISC-V 位长的支持,包括 RV32(32 位)和 RV64(64 位),以及不同RISC-V 指令集扩展的支持。

详细使用说明参考: https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/

GNU Binutils

包含工具: 汇编器(as)、链接器(ld)、目标文件工具(objdump、objcopy 等),性能分析工具(gprof)。

功能: 用于处理生成 RISC-V 架构的目标文件,执行汇编和链接,反汇编等操作。

详细使用说明参考: https://sourceware.org/binutils/docs-2.41/

GDB(GNU Debugger)

功能: 提供调试功能,允许开发人员在 RISC-V 目标上调试他们的程序。

Glibc(GNU C Library)

功能: C 语言运行时库,提供许多标准 C 库函数的实现,以支持在 RISC-V 上运行的程序。

Newlib

功能: 一个小型的 C 库,适用于嵌入式系统和其他资源受限的环境。对于一些嵌入式RISC-V 系统,选择使用 Newlib 而不是 Glibc 可以更高效的利用有限的系统资源。

Libgcc

功能: 包含一些与编译**功能:**器紧密相关的支持函数,例如用于浮点数乘除法的模拟运算函数。

目前 RuyiSDK 包含三种工具链版本,分别为 GNU upstream 版本,Xuantie 版本以及RuyiSDK 版本,不同版本支持的 RISC-V 指令集有所不同。

GNU upstream 工具链适合面向最新 RISC-V 特性的开发者,Xuantie 工具链侧重于使用 Xuantie 系列 CPU 芯片的硬件,RuyiSDK 工具链侧重于提供稳定的工具链环境,尽可能的继承目前 RISC-V 的各个扩展与新特性。

使用说明

工具链中各个工具的使用方法请参考其使用说明文档,下面重点介绍 RISC-V 架构的一些常见用法:

  • -march 选项可以控制工具链开启的 RISC-V 扩展,其默认参数在 64 位工具链中为 rv64gc, 32 位工具链中为 rv32gc, 若要开启其他扩展,则需利用该选项重新向工具链指定想要开启的扩展,例如打开 V 扩展可以使用-march=rv64gcv,打开 b 扩展可以使用 -march=rv64gc_zba_zbb_zbc_zbs, RuyiSDK 中不同扩展的工具链已经在-march 中配置了其对应参数,方便用户直接使用,用户可以根据自身需求调整-march 输入,控制不同扩展的使用。
  • -mabi 选项主要控制工具链中所使用的寄存器组,其默认参数在 64 位工具链中为 lp64d,32 位工具链中为 ilp32d,嵌入式设备中为 lp64e, ilp32e, 无浮点硬件中为 lp64, ilp32, 用户可以根据自身硬件和使用场景进行选择。 使用 RVV 向量扩展时,请务必同时使用 -O3 选项,在编译器中开启 RVV 的向量化特性,一些 RVV 使用示例请参考:https://gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/testsuite/gcc.target/riscv/rvv

下面我们来介绍 RVV 使用时的两个常用参数:

  • --param=riscv-autovec-preference=用于告知编译器输入向量的长度,有已知固定向量长度的 fixed-vlmax输入与可伸缩向量不固定长度的 scalable输入,用户可以更具自己的程序进行调整,以获得更高的程序性能。
  • --param=riscv-autovec-lmul=用于指定一个循环迭代中处理的向量元素的数量,其输入参数可以参考 riscv-v-spec 手册,包括”dynamic,m1,m2,m4,m8”等,对于不熟悉参数的用户,建议使用 dynamic选项,由编译器自动配置选取合适的处理数量。

扩展支持

工具链版本扩展名称
Upstreami, m, a, f, d, c, v, e(注意指定对应的 eABI)
zicsr, zifencei, zicond, zawrs, zba, zbb, zbc, zbs
zfinx, zdinx, zhinx, zhinxmin(注意指定的 ABI 为 lp64 或 ilp32, 与 f/d 扩展不兼容)
zbkb, zbkc, zbkx, zknd, zkne, zknh, zkr, zksed, zksh, zkt
zihintntl, zihintpause, zicboz, zicbom, zicbop
zfh, zfhmin, zvfh, zvfhmin, zvbb, zvbc, zvkg, zvkned, zvknha, zvknhb, zvksed, zvksh
zvknc, zvksc, zvkt, zfa, zmmul, zca, zcb, zce, zcf(仅 RV32)
zcd, zcmp(与 zcd 不兼容), zcmt, ztso
svinval, svnapot,
xcvmac, xcvalu,
xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx, xtheadfmemidx,
xtheadmempair, xtheadsync, xventanacondops
Xuantie对 xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx,
xtheadfmemidx, xtheadmempair, xtheadsync, xtheadvector(RVV 0.7), xventanacondops
有特定优化,不支持 Zfinx, K, RVV1.0, Zc, Xcv 等系列扩展
RuyiSDK额外支持 RV64-ILP32, Profiles(RV20/22), zpn, zpsfoperand, zbpbo
',28),o=[i];function d(n,l,s,h,b,g){return t(),a("div",null,o)}const m=e(c,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/zh_sdk_gnu_index.md.BJi5DjGX.lean.js b/assets/zh_sdk_gnu_index.md.BJi5DjGX.lean.js deleted file mode 100644 index 00742260..00000000 --- a/assets/zh_sdk_gnu_index.md.BJi5DjGX.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a3 as r}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"RuyiSDK GCC 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh/sdk/gnu/index.md","filePath":"zh/sdk/gnu/index.md","lastUpdated":1719560925000}'),c={name:"zh/sdk/gnu/index.md"},i=r("",28),o=[i];function d(n,l,s,h,b,g){return t(),a("div",null,o)}const m=e(c,[["render",d]]);export{u as __pageData,m as default}; diff --git a/assets/zh_sdk_llvm_index.md.B3S4tgTq.js b/assets/zh_sdk_llvm_index.md.B3S4tgTq.js deleted file mode 100644 index 5d2030d0..00000000 --- a/assets/zh_sdk_llvm_index.md.B3S4tgTq.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK LLVM 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh/sdk/llvm/index.md","filePath":"zh/sdk/llvm/index.md","lastUpdated":1719560925000}'),d={name:"zh/sdk/llvm/index.md"},l=e("h1",{id:"ruyisdk-llvm-工具链介绍",tabindex:"-1"},[o("RuyiSDK LLVM 工具链介绍 "),e("a",{class:"header-anchor",href:"#ruyisdk-llvm-工具链介绍","aria-label":'Permalink to "RuyiSDK LLVM 工具链介绍"'},"​")],-1),n=e("blockquote",null,[e("p",null,"todo")],-1),r=[l,n];function i(c,_,m,h,p,u){return s(),a("div",null,r)}const x=t(d,[["render",i]]);export{k as __pageData,x as default}; diff --git a/assets/zh_sdk_llvm_index.md.B3S4tgTq.lean.js b/assets/zh_sdk_llvm_index.md.B3S4tgTq.lean.js deleted file mode 100644 index 5d2030d0..00000000 --- a/assets/zh_sdk_llvm_index.md.B3S4tgTq.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"RuyiSDK LLVM 工具链介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh/sdk/llvm/index.md","filePath":"zh/sdk/llvm/index.md","lastUpdated":1719560925000}'),d={name:"zh/sdk/llvm/index.md"},l=e("h1",{id:"ruyisdk-llvm-工具链介绍",tabindex:"-1"},[o("RuyiSDK LLVM 工具链介绍 "),e("a",{class:"header-anchor",href:"#ruyisdk-llvm-工具链介绍","aria-label":'Permalink to "RuyiSDK LLVM 工具链介绍"'},"​")],-1),n=e("blockquote",null,[e("p",null,"todo")],-1),r=[l,n];function i(c,_,m,h,p,u){return s(),a("div",null,r)}const x=t(d,[["render",i]]);export{k as __pageData,x as default}; diff --git a/assets/zh_usecase_index.md.CWXIOyvO.js b/assets/zh_usecase_index.md.CWXIOyvO.js deleted file mode 100644 index fda91cc1..00000000 --- a/assets/zh_usecase_index.md.CWXIOyvO.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a3 as s}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"RuyiSDK使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/index.md","filePath":"zh/usecase/index.md","lastUpdated":1719560925000}'),i={name:"zh/usecase/index.md"},o=s('

RuyiSDK使用示例

以下案例是使用RuyiSDK搭建相关的开发或运行环境来实现的。希望通过一些小场景让大家更多的了解RuyiSDK的使用。

除了这里列举的环境外,RuyiSDK支持的编译工具链版本、RISC-V开发板类型是丰富且不断扩展的,这里未列举所有的情况,这些典型的场景供新用户参考和体验。

案例一:x86_64 上交叉编译并模拟运行 riscv64 可执行程序

案例二:在x86_64 PC+linux 上,接入RISC-V开发板并为其安装系统镜像

案例三:RISC-V 开发板上本地编译并运行 riscv64 可执行程序

',6),r=[o];function c(n,_,d,p,u,h){return t(),a("div",null,r)}const S=e(i,[["render",c]]);export{x as __pageData,S as default}; diff --git a/assets/zh_usecase_index.md.CWXIOyvO.lean.js b/assets/zh_usecase_index.md.CWXIOyvO.lean.js deleted file mode 100644 index 64a584e8..00000000 --- a/assets/zh_usecase_index.md.CWXIOyvO.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as a,o as t,a3 as s}from"./chunks/framework.BKLMYXYM.js";const x=JSON.parse('{"title":"RuyiSDK使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/index.md","filePath":"zh/usecase/index.md","lastUpdated":1719560925000}'),i={name:"zh/usecase/index.md"},o=s("",6),r=[o];function c(n,_,d,p,u,h){return t(),a("div",null,r)}const S=e(i,[["render",c]]);export{x as __pageData,S as default}; diff --git a/assets/zh_usecase_rvbook_index.md.B_oXifIE.lean.js b/assets/zh_usecase_rvbook_index.md.B_oXifIE.lean.js deleted file mode 100644 index 6208e936..00000000 --- a/assets/zh_usecase_rvbook_index.md.B_oXifIE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const F=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/rvbook/index.md","filePath":"zh/usecase/rvbook/index.md","lastUpdated":1719560925000}'),l={name:"zh/usecase/rvbook/index.md"},t=e("",35),n=[t];function h(p,k,r,d,c,o){return a(),i("div",null,n)}const u=s(l,[["render",h]]);export{F as __pageData,u as default}; diff --git a/assets/zh_usecase_setupos_index.md.DKdQqgns.lean.js b/assets/zh_usecase_setupos_index.md.DKdQqgns.lean.js deleted file mode 100644 index 9ff3088e..00000000 --- a/assets/zh_usecase_setupos_index.md.DKdQqgns.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as n,a3 as e}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"为RISC-V开发板安装操作系统","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/setupos/index.md","filePath":"zh/usecase/setupos/index.md","lastUpdated":1719560925000}'),p={name:"zh/usecase/setupos/index.md"},i=e("",12),l=[i];function o(t,c,d,r,h,u){return n(),a("div",null,l)}const g=s(p,[["render",o]]);export{y as __pageData,g as default}; diff --git a/assets/zh_usecase_x86pc_index.md.DEuhLijf.lean.js b/assets/zh_usecase_x86pc_index.md.DEuhLijf.lean.js deleted file mode 100644 index 926354ed..00000000 --- a/assets/zh_usecase_x86pc_index.md.DEuhLijf.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.BKLMYXYM.js";const u=JSON.parse('{"title":"使用示例","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usecase/x86pc/index.md","filePath":"zh/usecase/x86pc/index.md","lastUpdated":1719560925000}'),t={name:"zh/usecase/x86pc/index.md"},l=e("",47),n=[l];function h(p,r,k,d,o,c){return a(),i("div",null,n)}const F=s(t,[["render",h]]);export{u as __pageData,F as default}; diff --git a/assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.lean.js b/assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.lean.js deleted file mode 100644 index 8dc00546..00000000 --- a/assets/zh_usedirection_developmentside_environments_index.md.DZsOZmyi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"RUYI 编译环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/environments/index.md","filePath":"zh/usedirection/developmentside/environments/index.md","lastUpdated":1719560925000}'),t={name:"zh/usedirection/developmentside/environments/index.md"},l=n("",47),h=[l];function p(e,k,F,r,d,g){return a(),i("div",null,h)}const u=s(t,[["render",p]]);export{y as __pageData,u as default}; diff --git a/assets/zh_usedirection_developmentside_index.md.DjV6yYHk.lean.js b/assets/zh_usedirection_developmentside_index.md.DjV6yYHk.lean.js deleted file mode 100644 index 6fe9d507..00000000 --- a/assets/zh_usedirection_developmentside_index.md.DjV6yYHk.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"准备RISC-V开发环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/index.md","filePath":"zh/usedirection/developmentside/index.md","lastUpdated":1719560925000}'),e={name:"zh/usedirection/developmentside/index.md"},l=n("",23),t=[l];function p(h,r,k,d,c,o){return a(),i("div",null,t)}const g=s(e,[["render",p]]);export{y as __pageData,g as default}; diff --git a/assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.lean.js b/assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.lean.js deleted file mode 100644 index e9476c06..00000000 --- a/assets/zh_usedirection_developmentside_sources_coremark_index.md.DJF6rDUY.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a3 as h}from"./chunks/framework.BKLMYXYM.js";const y=JSON.parse('{"title":"使用编译环境进行 Coremark 构建","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/sources/coremark/index.md","filePath":"zh/usedirection/developmentside/sources/coremark/index.md","lastUpdated":1719560925000}'),k={name:"zh/usedirection/developmentside/sources/coremark/index.md"},n=h("",23),t=[n];function l(p,e,F,r,d,g){return a(),i("div",null,t)}const E=s(k,[["render",l]]);export{y as __pageData,E as default}; diff --git a/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.js b/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.js deleted file mode 100644 index 9810da95..00000000 --- a/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as d,a3 as r}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"RuyiSDK中编译工具链类型简介","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/typeselection/index.md","filePath":"zh/usedirection/developmentside/typeselection/index.md","lastUpdated":1719560925000}'),i={name:"zh/usedirection/developmentside/typeselection/index.md"},a=r('

RuyiSDK中编译工具链类型简介

编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状。这种现象是由于处理器架构的发展、厂商定制和优化、标准和规范的演进以及特定应用需求等因素相互作用的结果。

  1. 处理器架构的发展:随着时间的推移,处理器架构不断演进和改进。新的处理器架构可能引入了新的指令集扩展,以提供更高的性能、更多的功能和更好的能效。为了充分利用这些新的指令集扩展,需要更新和升级编译工具链。因此,不同版本的编译工具链可以支持不同处理器架构的特定指令集,并满足不同处理器版本的需求。
  2. 厂商定制和优化:不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化。它们可能通过改进指令执行流程、优化编译器生成的代码、添加特定的硬件加速器等方式,针对自己的处理器架构实现了特定版本的编译工具链。这样可以最大限度地发挥其处理器的性能和功能,并提供与其他竞争对手不同的优势。
  3. 标准和规范的演进:某些扩展指令集是由标准和规范定义的。然而,即使在同一个指令集标准下,不同版本的工具链也可能存在细微的差异和改进,以提供更好的性能、稳定性或兼容性。
  4. 特定应用需求:某些特定的应用领域可能对扩展指令集有特殊的需求。例如,嵌入式系统、机器学习、图像处理等领域可能需要针对特定指令集的优化和定制。不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持,以满足其特定的需求。

上述原因导致了编译工具链版本的多样性,这样的多样性为开发者提供了更多选择,并可以根据具体需求和目标平台选择适合的编译工具链版本。

RuyiSDK计划为持有不同RISC-V开发板的开发者们提供支持,让他们在RuyiSDK这个中心化的工具中便捷的获取使用和开发所需的支持。目前RuyiSDK已经提供的编译工具链有如下几种:

编译工具链类型说明
GNU工具链gnu-upstream
gnu-plct'gnu-plct(==0.20240324.0)' 支持了香山南湖微架构
gnu-plct-xtheadfor xuantie
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是elf。[仓库] [文章]
LLVM工具链llvm-upstream
QEMU模拟器qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead
',6),s=[a];function l(n,o,c,p,u,h){return d(),e("div",null,s)}const f=t(i,[["render",l]]);export{m as __pageData,f as default}; diff --git a/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.lean.js b/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.lean.js deleted file mode 100644 index 8ad936bf..00000000 --- a/assets/zh_usedirection_developmentside_typeselection_index.md.DlNoMFlG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as e,o as d,a3 as r}from"./chunks/framework.BKLMYXYM.js";const m=JSON.parse('{"title":"RuyiSDK中编译工具链类型简介","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/developmentside/typeselection/index.md","filePath":"zh/usedirection/developmentside/typeselection/index.md","lastUpdated":1719560925000}'),i={name:"zh/usedirection/developmentside/typeselection/index.md"},a=r("",6),s=[a];function l(n,o,c,p,u,h){return d(),e("div",null,s)}const f=t(i,[["render",l]]);export{m as __pageData,f as default}; diff --git a/assets/zh_usedirection_index.md.BLg_7HS6.js b/assets/zh_usedirection_index.md.BLg_7HS6.js deleted file mode 100644 index 0195d205..00000000 --- a/assets/zh_usedirection_index.md.BLg_7HS6.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as t,a3 as a}from"./chunks/framework.BKLMYXYM.js";const h=JSON.parse('{"title":"使用RuyiSDK","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/index.md","filePath":"zh/usedirection/index.md","lastUpdated":1719560925000}'),l={name:"zh/usedirection/index.md"},o=a('

使用RuyiSDK

开发者在进行RISC-V开发时,主要的设备包括开发侧的个人电脑(开发环境)和运行侧的RISC-V设备(运行环境)。

开发环境目前更多的是x86_64架构的个人电脑,但是一些高性能的RISC-V设备也可以。在开发侧,通常完成目标可执行程序的准备工作:

  1. 准备RISC-V开发环境,如安装编译工具链、模拟器、调试工具等等
  2. 准备代码
  3. 编译代码
  4. 模拟运行
  5. 调试

运行环境主要是RISC-V硬件设备。在运行侧,通常用来运行RISC-V架构目标可执行程序以达到验证或者使用的目的。

  1. 为RISC-V开发板安装操作系统
  2. 安装目标程序运行所需的运行时环境/语言虚拟机等软件(通常由操作系统提供)
  3. 运行RISC-V目标程序

RuyiSDK针对上述常见的需求提供了包管理器、安装器、集成开发环境来为开发者提供方便。

',7),r=[o];function s(n,_,d,c,p,S){return t(),e("div",null,r)}const R=i(l,[["render",s]]);export{h as __pageData,R as default}; diff --git a/assets/zh_usedirection_index.md.BLg_7HS6.lean.js b/assets/zh_usedirection_index.md.BLg_7HS6.lean.js deleted file mode 100644 index c9d58bb3..00000000 --- a/assets/zh_usedirection_index.md.BLg_7HS6.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as e,o as t,a3 as a}from"./chunks/framework.BKLMYXYM.js";const h=JSON.parse('{"title":"使用RuyiSDK","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/index.md","filePath":"zh/usedirection/index.md","lastUpdated":1719560925000}'),l={name:"zh/usedirection/index.md"},o=a("",7),r=[o];function s(n,_,d,c,p,S){return t(),e("div",null,r)}const R=i(l,[["render",s]]);export{h as __pageData,R as default}; diff --git a/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.js b/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.js deleted file mode 100644 index a11247e0..00000000 --- a/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"准备RISC-V运行环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/operationside/index.md","filePath":"zh/usedirection/operationside/index.md","lastUpdated":1719560925000}'),t={name:"zh/usedirection/operationside/index.md"},n=s('

准备RISC-V运行环境

为RISC-V开发板安装操作系统

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

运行RISC-V目标程序

C程序,直接运行即可。

其它高级语言,如Java程序,python等,需要先安装运行时环境或语言虚拟机。

',8),r=[n];function o(d,h,c,p,l,_){return i(),e("div",null,r)}const v=a(t,[["render",o]]);export{k as __pageData,v as default}; diff --git a/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.lean.js b/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.lean.js deleted file mode 100644 index 1155eb95..00000000 --- a/assets/zh_usedirection_operationside_index.md.C4u0H7Lz.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as e,o as i,a3 as s}from"./chunks/framework.BKLMYXYM.js";const k=JSON.parse('{"title":"准备RISC-V运行环境","description":"","frontmatter":{},"headers":[],"relativePath":"zh/usedirection/operationside/index.md","filePath":"zh/usedirection/operationside/index.md","lastUpdated":1719560925000}'),t={name:"zh/usedirection/operationside/index.md"},n=s("",8),r=[n];function o(d,h,c,p,l,_){return i(),e("div",null,r)}const v=a(t,[["render",o]]);export{k as __pageData,v as default}; diff --git a/en/index.html b/en/index.html index ab50173a..06a676a9 100644 --- a/en/index.html +++ b/en/index.html @@ -8,17 +8,17 @@ - + - - + +
Skip to content

RuyiSDK Doc

English version WIP

- + \ No newline at end of file diff --git a/en/introduction/index.html b/en/introduction/index.html index 6105d98e..0bbe8eaf 100644 --- a/en/introduction/index.html +++ b/en/introduction/index.html @@ -8,17 +8,17 @@ - + - - + + -
Skip to content

TODO

Last updated:

- +
Skip to content

TODO

Last updated:

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index e8ac9d94..402b3d6b 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"en_introduction_index.md":"ti3LgTUe","zh_plan_index.md":"DvsrCd89","zh_introduction_requirement.md":"CJ2q0Y-9","zh_devices_index.md":"D2s-V8ZB","zh_ruyi_index.md":"B85YnIFa","zh_ruyi_updates_0.12.0.md":"nuMQydAy","zh_ruyi_updates_0.11.0.md":"DtSk3EI-","en_index.md":"DTm0thcd","zh_ruyi_updates_0.4.0.md":"Dy7_eDyw","zh_ruyi_updates_0.10.0.md":"BczUYJ95","zh_ruyi_updates_0.5.0.md":"C7qJRSmc","zh_ruyi_updates_0.7.0.md":"f_CgF3-_","zh_ruyi_updates_0.8.1.md":"D3HX4EfH","zh_ruyi_updates_0.6.0.md":"b1cLa9QQ","zh_ruyi_updates_0.9.0.md":"B9G6MaK8","zh_usedirection_developmentside_typeselection_index.md":"DlNoMFlG","zh_usedirection_index.md":"BLg_7HS6","zh_usecase_index.md":"CWXIOyvO","zh_usecase_setupos_index.md":"DKdQqgns","zh_usedirection_developmentside_sources_coremark_index.md":"DJF6rDUY","zh_ruyi_getstarted_index.md":"BcWTzkN7","zh_ruyi_updates_0.13.0.md":"DFCXaJsc","zh_ruyi_updates_0.3.0.md":"Dkt3qj7N","zh_usedirection_developmentside_index.md":"DjV6yYHk","zh_index.md":"B91jVbT0","zh_usecase_rvbook_index.md":"B_oXifIE","zh_usedirection_operationside_index.md":"C4u0H7Lz","zh_usedirection_developmentside_environments_index.md":"DZsOZmyi","zh_sdk_gnu_index.md":"BJi5DjGX","zh_sdk_llvm_index.md":"B3S4tgTq","zh_introduction_index.md":"DhOaCQwk","zh_usecase_x86pc_index.md":"DEuhLijf"} +{"old_ruyi_updates_0.6.0.md":"C7Ymcxs9","old_introduction_requirement.md":"po9Dgnk6","old_usedirection_developmentside_typeselection_index.md":"CBg07Q1X","en_introduction_index.md":"vcP4gSP7","old_usedirection_index.md":"B6HxH6Rb","old_usecase_setupos_index.md":"CMsCxRTN","zh_community_about-us.md":"DfA_1R6i","old_ruyi_updates_0.4.0.md":"DY6FFz7I","zh_community_rules.md":"DwVs8sOY","old_usedirection_operationside_index.md":"DJbSo7tH","zh_ide_todo.md":"n_gwhmh_","zh_other_gnu-type.md":"DDZNasSC","old_usecase_index.md":"DNPrGyOS","old_ruyi_updates_0.12.0.md":"CzsTk6XM","old_ruyi_updates_0.13.0.md":"C2ri40Gj","en_index.md":"CxPf7yrQ","old_ruyi_updates_0.7.0.md":"BTkTTIHO","old_usecase_x86pc_index.md":"DqkyMSFg","old_ruyi_updates_0.9.0.md":"DtHEzrmR","old_usedirection_developmentside_sources_coremark_index.md":"9Kh1Remw","old_usedirection_developmentside_index.md":"RDtTrMRB","old_introduction_index.md":"6tez9-Iq","old_sdk_gnu_index.md":"BRM9RWcR","old_ruyi_updates_0.3.0.md":"C_dQB9Ze","old_ruyi_updates_0.5.0.md":"RqsmkbP3","old_ruyi_updates_0.11.0.md":"BX-LMcVp","old_usecase_rvbook_index.md":"DjbdQ_yW","old_ruyi_index.md":"CuWiQf6u","old_usedirection_developmentside_environments_index.md":"DEoUECkb","old_ruyi_updates_0.8.1.md":"BZJFvTTu","zh_ruyisdk_case2.md":"BVpgbRPQ","zh_package-manager_installation.md":"neusiCNS","zh_index.md":"CeTHT3CI","old_ruyi_getstarted_index.md":"mTb3ij6X","zh_introduction_index.md":"DC_JrWBs","old_plan_index.md":"3vjppZIg","zh_package-manager_complie.md":"cxClihLX","old_ruyi_updates_0.10.0.md":"62ycNIM2","old_devices_index.md":"KbkYjeSS","old_sdk_llvm_index.md":"JIPJdU7K","zh_ruyisdk_case3.md":"CQoxUcG2","zh_package-manager_index.md":"C5Fb473n","zh_ruyisdk_case1.md":"DVbagFWH","zh_package-manager_enviroment.md":"CCLLVnEM"} diff --git a/old/devices/index.html b/old/devices/index.html new file mode 100644 index 00000000..2703e584 --- /dev/null +++ b/old/devices/index.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK集成的RISC-V设备 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK集成的RISC-V设备

RuyiSDK对RISC-V设备的集成和支持主要包括以下几个方面:

  1. 提供RISC-V 开发板适用镜像信息维护与下载、开发板系统安装引导程序,方便 RISC-V 开发者获取指定开发板可用的OS并可方便的安装OS的安装。RuyiSDK集成了多种可用的操作系统供用户选择。
  2. 提供RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加RISC-V设备专有向导页面、实现开发环境和运行环境的文件传输、支持在RISC-V设备上调试应用程序等。

支持的RISC-V设备

目前对硬件设备的集成主要体现在包管理器(设备安装器),可以通过 ruyi device provision命令查询,已经集成的RISC-V设备有:

  1. Allwinner Nezha D1
  2. Canaan Kendryte K230
  3. Milk-V Duo
  4. Milk-V Duo S
  5. Milk-V Mars
  6. Milk-V Mars CM
  7. Milk-V Meles
  8. Milk-V Pioneer Box
  9. Milk-V Vega
  10. SiFive HiFive Unmatched
  11. Sipeed Lichee RV
  12. Sipeed LicheePi 4A
  13. StarFive VisionFive
  14. StarFive VisionFive2

从RuyiSDK开始使用设备

获取并安装OS

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

+ + + + \ No newline at end of file diff --git a/old/introduction/index.html b/old/introduction/index.html new file mode 100644 index 00000000..9f91883f --- /dev/null +++ b/old/introduction/index.html @@ -0,0 +1,31 @@ + + + + + + RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK
  2. 为什么会有 RuyiSDK
  3. RuyiSDK 有什么用
  4. 我可以在什么设备上运行
  5. RuyiSDK 的原理是什么
  6. 我该从何开始

介绍

RuyiSDK 是一个由中科院软件所(ISCAS)所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在[支持的设备](## 支持的设备)中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 Cisc 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK 分为以下三个部分:

Ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
+2. 调试工具
+3. 模拟器
+4. 运行环境
+5. 文档
+6. 源码
+7. 工具、系统镜像
+8. GUI(TODO)

Ruyi IDE

该 IDE 是一个为 RISC-V 架构设计的开发工具箱,开发者可以轻松的通过 Ruyi 包管理器获取,可以对于实际的开发场景对于代码的编写以及调试。 使用包管理器开发者可以获取该工具箱中的编译工具链、调试工具和模拟器,开发者可以使用模拟器或者在 RISC-V 开发板上对自身的程序进行编写以及调试。

Community

在我们的社区当中,提供了大量的相关技术文章、代码、教程视频,以及我们会举办一定的线下活动获得来自用户的反馈,在线上也会有相应的论坛提供给开发者进行技术交流。


RuyiSDK 对 RISC-V 设备的集成和支持主要包括以下几个方面:

  1. RISC-V 开发板镜像相关信息以及下载、安装教程,便于开发者获取相关镜像(换而言之提供一个镜像站),其中涵盖多种操作系统(如基于 Debian 的 RevyOS、openEuler riscv64等)提供给开发者使用。
  2. 提供 RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加 RISC-V 设备专有向导页面、实现开发环境和运行环境的文件传输、支持在 RISC-V 设备上调试应用程序等。

支持的设备

目前 RuyiSDK 支持的设备如下:

  1. Allwinner Nezha D1:适用于入门级开发和教育用途。
  2. Canaan Kendryte K230:专为 AI 应用设计。
  3. Milk-V Duo:小巧灵活,适合嵌入式应用。
  4. Milk-V Duo S:提供更强的处理能力。
  5. Milk-V Mars:适合物联网应用。
  6. Milk-V Mars CM:集成多种通信接口。
  7. Milk-V Meles:高性能嵌入式开发。
  8. Milk-V Pioneer Box:适用于边缘计算。
  9. Milk-V Vega:高性能计算设备。
  10. SiFive HiFive Unmatched:适合高性能开发和研究。
  11. Sipeed Lichee RV:适合入门和教育。
  12. Sipeed LicheePi 4A:提供更高的性能和更多的接口。
  13. StarFive VisionFive:支持多种 AI 和物联网应用。
  14. StarFive VisionFive2:升级版,提供更强的计算能力。

文档可能更新不及时,查看最新支持的设备请通过指令ruyi device provision查询。

RuyiSDK-架构示意图

image

让我们开始吧!

从 RuyiSDK 开始使用设备!

获取并安装OS

开始的第一步:

bash
$ ruyi device provision

该指令会识别硬件信息,并且开始自动执行对应程序为用户自动部署 RISC-V 开发环境,按照引导信息一步步执行即可。

+ + + + \ No newline at end of file diff --git a/old/introduction/requirement.html b/old/introduction/requirement.html new file mode 100644 index 00000000..a83fc5ff --- /dev/null +++ b/old/introduction/requirement.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

介绍

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RuyiSDK 的目标

  1. 开发者购买了 (几乎) 任何一款 RISC-V 开发板或模组,都可以通过 RuyiSDK 系统获得硬件资料说明、固件 / 软件更新、调试支持等。
  2. 开发者可以指定任何常用的 RISC-V 扩展指令集架构组合,都可以通过 RuyiSDK 系统生成客户所需的操作系统、工具链、语言执行环境 (运行时或虚拟机)、计算库、应用框架等。尤其强调 RuyiSDK 将完全支持 Vector 0.7.1 和 RVP 0.5.2 等已经大规模硅化的草案 标准 (or 厂商定制扩展)。
  3. 培育运营一个活跃全面的开发者交流社区。

RuyiSDK 架构示意图

![[1703147196780.png]]RuyiSDK 的组成

RuyiSDK 主要包含了一个组件管理器(也称为包管理器,Ruyi Repo)、一个集成开发环境(Ruyi IDE)、一个开发者交流社区;

  • 组件管理器包含一个在线软件源 (Ruyi Repo) 和 一个包管理工具(ruyi)。在线软件源即 Ruyi Repo 集中存储了RISC-V集成开发环境所需的编译工具链、调试工具、模拟器、运行环境、文档、代码、工具、target系统镜像等内容;包管理器工具则是用于与在线软件源交互的工具,它提供了一套命令行接口(ruyi)或图形用户界面(GUI未来可能提供),使开发者能够搜索、安装、更新和管理软件包。包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

  • 集成开发环境(Ruyi IDE)则是一个专门用来开发能够运行在RISC-V架构设备上的软件和应用的工具箱。可以帮助开发者编写和测试自己的程序。

    想象一下,你要做一款能够运行在RISC-V设备上的应用程序,比如用C或者C++语言开发一个图像识别的程序,Ruyi IDE 就像是一个你的工作室,里面有各种各样的工具可以帮助你完成这个任务。首先创建项目,从RuyiSDK包管理器中下载和安装所需的编译工具链、调试工具、模拟器等工具,然后在文本编辑器中完成对代码的编辑,接着对项目进行编译构建获得RISC-V架构的可执行程序,最后在模拟器或者RISC-V开发板上进行运行和测试。如果代码需要调试,也可通过调试工具进行代码调试。这一过程和x86下的开发、编译构建、调试、运行的流程是一致的,只是适用于当前开发语言及目标运行设备的RISC-V的编译工具链、模拟器等软件和工具都可以从Ruyi Repo中获取,在安装和IDE初始设置时都已经被集成到 Ruyi IDE 之中,用户无需为环境搭建耗费精力。

  • 开发者交流社区则提供文档和教程、论坛和技术讨论区、博客和文档等等功能,目的是为RISC-V开发者提供一个开放的交流平台,提供互助式技术支持和资源共享,聚集RISC-V开发者并推动RISC-V生态系统的发展。

RuyiSDK 模块需求说明

说明:这是一个初步的需求设想,具体还需要结合技术可行性等进行进一步的调整。供参考。

RUYI 包管理器

RUYI在线软件源(Ruyi Repo)

  1. 软件源的管理内容包括以下内容:
    1. GNU和LLVM编译工具链
    2. 调试工具(GDB、LLDB)
    3. 模拟器(qemu、spike,……)
    4. 运行环境(sysroot / rootfs)
    5. 工具:包括且不限于Ruyi IDE、架构图中的各种工具等
    6. 代码(库、示例 etc.)
    7. 文档
    8. 目标运行环境的RISC-V系统镜像文件
  2. 软件源内包的元数据包含并不限于:发布厂商、版本信息、资源类型、下载链接、文档资源等各种信息(支持属性扩展)等属性信息;如编译工具链有不同厂商发布的,不同版本的软件资源需要进行管理(如GNU和LLVM目前有三种类型:upstream、PLCT、xthead,随着版本的更新和发布,每种类型会产生诸如vX.X这种多个版本)。

RUYI包管理工具(ruyi)

  1. 实现一套命令行接口(CLI),用于与在线软件源交互。
    1. 使开发者能够搜索、安装、更新、卸载和管理软件包。

    2. 包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

    3. 能够支持工具自身的升级、卸载;

    4. 能够支持在线软件源中不同类型、不同版本、不同厂商、不同适用环境的软件包的搜索:

      • 按照name搜索
      • 按照版本搜索
      • 按照可支持的扩展指令集搜索
      • 按照资源类型搜索
      • 按照可适用的开发板(或目标运行环境)搜索
      • ……
  2. 实现一套图形用户界面(GUI)工具,用于与在线软件源交互。功能与上述CLI接口类似;(待定)
  3. 三架构支持:工具需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);

Ruyi IDE

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下功能:

  1. 项目管理工具:提供项目管理功能,使开发者能够轻松创建、组织和管理他们的RISC-V项目。这包括创建新项目、导入现有项目、管理依赖和库等。

  2. 代码编辑器:提供一个功能强大的代码编辑器,支持开发语言的语法高亮显示、代码自动完成、代码导航、智能感知、错误检查、代码片段管理、版本控制集成、调试支持等功能,以提高开发效率、减少错误,并提供更好的代码编写和维护体验。

    • 代码编辑器常见功能详细说明:

      1. 语法高亮(Syntax Highlighting):根据编程语言的语法规则,对代码进行着色,以增强可读性和代码理解性。
      2. 自动完成(Auto Completion):根据当前上下文,在输入代码的过程中自动弹出变量、函数、类名等的建议,以加快编码速度和减少拼写错误。
      3. 智能感知(Intelligent Code Sense):通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助开发者编写正确的代码。
      4. 代码导航(Code Navigation):提供快速导航到代码的不同部分,如跳转到定义处、跳转到引用处、跳转到函数调用等,以便快速定位和浏览代码。
      5. 重构工具(Refactoring Tools):提供一系列操作,如重命名、提取函数、提取变量等,以帮助开发者改善代码的结构和可维护性。
      6. 调试支持(Debugging Support):提供集成的调试器,使开发者能够设置断点、单步执行代码、查看变量的值等,以便调试和排查代码中的问题。
      7. 版本控制集成(Version Control Integration):与版本控制系统(如Git)集成,提供对代码版本的管理、提交、比较和合并等功能。
      8. 错误检查(Error Checking):即时检测代码中的语法错误、潜在的逻辑错误或常见的编码错误,并给出相应的警告或错误提示。
      9. 代码片段管理(Code Snippet Management):提供可重用的代码片段库,包括预定义的模板或用户自定义的代码片段,以便快速插入常用代码块。
      10. 文档生成(Documentation Generation):根据代码中的注释或特定的标记语言,自动生成代码文档或API文档。
    • 语言插件: 支持C、C++、Java、JavaScript、Python、Rust、Fortran、SAIL、Dart、Chisel等不同的语言类型;

  3. RISC-V编译器/解释器支持:集成RISC-V架构的编译器/解释器,使开发者能够编译和构建基于RISC-V指令集的应用程序。(这里不同语言存在差异,需要一一区别和定义)

  4. RISC-V模拟器和调试器:集成一个RISC-V模拟器和调试器,可以模拟和调试RISC-V指令的执行过程。开发者可以在IDE中设置断点、单步执行代码,并查看变量的值和内存的状态,以进行程序的调试和分析。

  5. 代码分析和优化:提供代码分析工具,帮助开发者发现潜在的性能问题和错误,并提供优化建议。这包括静态代码分析、性能分析和内存分析等功能,以帮助开发者编写更高效和可靠的RISC-V应用程序。

  6. 集成文档和教程:提供与RISC-V相关的文档、教程和示例代码的集成,以帮助开发者学习和使用RISC-V架构。这样,开发者可以在IDE中方便地查阅文档和学习相关知识,加快他们的开发过程。

  7. 语言虚拟机或运行时环境:一些语言需要在运行时依赖于相应的解释器或语言虚拟机。如Python需要在运行时依赖于相应的解释器或语言虚拟机(如CPython、Jython等)。因此,IDE需要与这些解释器或虚拟机进行集成,以便在IDE中直接运行和调试Python代码。

  8. 代码执行环境管理:如Python开发中通常会使用虚拟环境(Virtual Environment)来管理依赖和隔离项目环境。IDE可以提供对虚拟环境的支持,使开发者能够方便地创建、激活和管理虚拟环境。

  9. 交互式解释器和调试器:如Python具有交互式解释器(REPL)的特性,可以在命令行环境中逐行执行代码。IDE可以集成交互式解释器,使开发者能够在IDE中直接执行和调试代码片段,以便进行快速的实验和调试。

  10. 包管理和库支持:很多开发语言都有丰富的第三方库和包管理工具。如Python是pip、conda等。IDE可以提供对这些工具的集成,以便开发者能够方便地搜索、安装和管理各种Python库和依赖项。

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下特点:

  1. 可扩展性和插件支持:支持插件系统,使开发者能够根据自己的需求扩展和定制IDE。这样,他们可以集成其他工具、添加自定义功能,并与其他开发者共享他们的插件。
  2. 并行编译能力: IDE中,能够为一个项目同时生成不同的运行环境(RISC-V开发板)编译构建出适用该开发板的可执行程序。(待定)
  3. 跨平台兼容性,三架构支持: Ruyi IDE 本身的安装程序需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);
  4. 定制化: 可视化的集成开发环境的界面部分,除去继承开源软件的部分,自研发/改动部分界面需要个性化定制。
  5. 性能: 要求 Ruyi IDE 能够流畅地运行在主流的PC设备上。

我们希望,当使用 Ruyi IDE 进行例如图像识别应用程序的开发时,能够得到如下步骤所描述的功能支持:

  1. 打开 Ruyi IDE,并创建一个新的项目或工程。在项目中,你可以组织和管理你的代码文件、资源文件和配置文件等。
  2. 在集成开发环境的文本编辑器中,创建一个新的C/C++源代码文件。在该文件中,你可以编写程序,如图像识别算法的逻辑和实现。
  3. 使用语法高亮功能,集成开发环境会根据编程语言的语法规则,对你的代码进行着色,以增强可读性和代码理解性。
  4. 在编写代码的过程中,Ruyi IDE 提供自动完成功能,根据当前上下文,自动弹出变量、函数和类名的建议,以加快编码速度和减少拼写错误。
  5. 在代码编写过程中,集成开发环境提供智能感知功能,通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助你编写正确的代码。
  6. 在集成开发环境中,你可以使用代码导航功能,快速跳转到代码的不同部分,如跳转到函数的定义处、跳转到变量的引用处,以便快速定位和浏览代码。
  7. 在编写完代码后,使用集成开发环境提供的构建工具进行项目的构建。这可能涉及选择适当的编译选项、设置编译器路径和库路径,以及处理依赖关系。
  8. Ruyi IDE 通常提供调试器功能,你可以设置断点、逐行调试代码,并观察变量的值,以解决代码中的错误和问题。
  9. 如果需要提高图像识别程序的性能,你可以使用Ruyi IDE 中的性能分析工具,检查代码的瓶颈并进行优化。
  10. 一旦你完成了开发和调试,Ruyi IDE 提供了部署工具,你可以将编译好的图像识别应用程序部署到RISC-V架构的嵌入式设备上,并进行远程调试和监视。
  11. 在开发过程中,Ruyi IDE 还提供版本控制集成工具,帮助你管理代码的版本、进行代码的协作开发和团队协作。如果遇到技术问题,可以在开发者社区进行技术交流获取帮助。
  12. 最后,Ruyi IDE 还提供文档生成工具,可以自动生成代码文档或API文档,帮助你记录和分享你的代码。

通过 Ruyi IDE 的支持,你可以更高效地开发图像识别应用程序,利用其提供的各种工具和功能,加速开发过程、减少错误,并提供更好的代码编写和维护体验。

总之,RISC-V开发者的集成开发环境将提供一系列专门针对RISC-V架构的工具和功能(这些工具从包管理器中获取),以帮助开发者更轻松、高效地开发RISC-V应用程序。同时,它提供直观的用户界面、高度可定制的功能和良好的扩展性,以满足不同开发者的需求。

开发者社区

一个开发者交流社区需要具备以下功能:

  1. 主页/官方网站: 用来汇聚关于 RuyiSDK 宣发、推广、使用、交流需要的一切资源,是第一级别入口。
  2. 开发者管理: 用户的注册、登录等账号有关的管理。
  3. 统计功能: 对主页累计访问量、软件下载次数、用户注册量等信息进行统计,这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段。
  4. 文档和教程:社区可能提供详细的文档和教程,涵盖RISC-V开发环境的使用指南、编程技巧、调试技巧等方面的内容,帮助开发者快速上手和解决常见问题。
  5. 论坛和讨论区:提供一个讨论区或论坛,让开发者可以发表问题、分享经验、提供建议等。其他开发者可以回复和讨论,促进交流和知识共享。
  6. 博客和文章:提供开发者撰写博客文章的功能,可以分享技术经验、教程、最佳实践等内容。其他开发者可以浏览和评论这些文章,从中获得有价值的信息。
  7. 问答平台:类似于问答社区,开发者可以发布问题,其他开发者可以回答问题或提供解决方案。这样的平台可以快速解决开发过程中的疑问和难题。
  8. 资源共享:开发者可以共享和下载与RISC-V开发相关的资源,如代码示例、项目模板、库文件等。这有助于加快开发速度和提高效率。
  9. 活动和会议:社区可以组织定期的在线活动、研讨会或会议,让开发者聚集在一起,分享最新的技术趋势、案例研究和实践经验。
  10. 专家支持:社区可能吸引一些RISC-V领域的专家,他们可以提供指导、解答问题,甚至组织在线培训或指导课程,帮助开发者更好地利用集成开发环境进行开发。
  11. 插件和扩展:开发者可以共享和下载与RISC-V集成开发环境相关的插件和扩展,以增强开发环境的功能和灵活性。
  12. 就业和项目机会:社区可以提供就业和项目机会的发布平台,帮助开发者寻找合适的工作机会或参与感兴趣的项目。
  13. 积分和奖励机制:社区可以设立积分和奖励机制,鼓励开发者积极参与交流和贡献。例如,回答问题、分享文章或贡献代码可以获得积分或奖励,提高其在社区中的声誉。

这样的一个开发者交流社区可以促进RISC-V集成开发环境的用户之间的交流和合作,提供技术支持和资源共享,增加开发者的学习和开发效率,推动RISC-V生态系统的发展。

+ + + + \ No newline at end of file diff --git a/old/plan/index.html b/old/plan/index.html new file mode 100644 index 00000000..62f452e9 --- /dev/null +++ b/old/plan/index.html @@ -0,0 +1,24 @@ + + + + + + 版本规划路线图 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

版本规划路线图

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RUYISDK 版本计划

里程碑版本

RuyiSDK 计划以每半年为一个里程碑版本周期来推动 RuyiSDK 的不断完善,目前计划中的里程碑版本有:

  • 23.06 (计划发布时间:2023年6月)
  • 23.12 (计划发布时间:2023年12月)
  • 24.06 (计划发布时间:2024年6月)
  • 24.12 (计划发布时间:2024年12月)
  • 25.06 (计划发布时间:2025年6月)
  • 25.12 (计划发布时间:2025年12月)

敏捷开发版本计划

自2024年1月开始,RuyiSDK 切换为更加敏捷的开发迭代模式,预期每 2 周发布一个开发版本,提供一些新功能,如包管理器能力迭代、RuyiSDK软件源提供新的软件包或者软件包版本升级、或工具链、板卡的新增适配等等,这些更新将以 release note 的方式公开。

  • 发布日期默认每双周周二发布;发布周期内遇3日以上节假日的,延迟一周发布;

  • 敏捷开发版本执行敏捷测试方式:

    • 代码冻结日期在发布日期的上一周周四/周五;
    • 代码冻结日~发布日:执行新特性的测试验证和基础功能回归测试;
    • 发布日~下一次代码冻结日:完成回归测试用例更新和执行全面回归测试;

RUYISDK 规划

2024目标

  • RuyiSDK官网上线。
  • 支持50多种RISC-V设备。
  • 支持运行≥7个流行的Linux发行版。将增加对openKylin和Gentoo的支持。
  • 提供多种图形化IDE环境,包括对Eclipse和VSCode的支持。
  • 服务≥10000名注册开发者。
  • 支持计划于2024年发布的SG2044和SG2380。

敏捷开发版本排期

滚动发行版本号发布日期代码冻结日期备注
v0.32024.01.162024.01.12
v0.42024.01.302024.01.26
v0.52024.02.272024.02.23春节,跳过一次
v0.62024.03.122024.03.08
v0.72024.03.262024.03.22
v0.82024.04.092024.04.07
v0.92024.04.232024.04.19
v0.102024.05.142024.05.10劳动节,延迟一周发布
v0.112024.05.282024.05.24
v0.122024.06.112024.06.06端午节
v0.132024.06.252024.06.21
v0.142024.07.092024.07.05
v0.152024.07.232024.07.19
v0.162024.08.062024.08.02
v0.172024.08.202024.08.16
v0.182024.09.032024.08.30
v0.192024.09.242024.09.20中秋节,延迟一周发布
v0.202024.10.152024.10.11国庆节,延迟一周发布
v0.212024.10.292024.10.25
v0.222024.11.122024.11.08
v0.232024.11.262024.11.22
v0.242024.12.102024.12.06
v0.252024.12.242024.12.20
+ + + + \ No newline at end of file diff --git a/zh/ruyi/getstarted/index.html b/old/ruyi/getstarted/index.html similarity index 67% rename from zh/ruyi/getstarted/index.html rename to old/ruyi/getstarted/index.html index 151e9dd6..4c922f64 100644 --- a/zh/ruyi/getstarted/index.html +++ b/old/ruyi/getstarted/index.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

开始

安装依赖软件

RUYI 包管理器依赖一些外部工具,需要手动安装

Debian/Ubuntu

bash
$ sudo apt-get install wget git tar bzip2 xz-utils zstd

Fedora/openEuler

bash
$ sudo apt-get install wget git tar bzip2 xz zstd

注意从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

安装 RUYI 包管理器

GitHub ReleasesISCAS 镜像源下载最新版本,选择合适架构的预编译二进制下载,当前 RUYI 包管理支持 amd64 、arm64、 riscv64 架构编译环境。

这里以 amd64 架构环境为例进行安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
+    
Skip to content

开始

安装依赖软件

RUYI 包管理器依赖一些外部工具,需要手动安装

Debian/Ubuntu

bash
$ sudo apt-get install wget git tar bzip2 xz-utils zstd

Fedora/openEuler

bash
$ sudo apt-get install wget git tar bzip2 xz zstd

注意从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

安装 RUYI 包管理器

GitHub ReleasesISCAS 镜像源下载最新版本,选择合适架构的预编译二进制下载,当前 RUYI 包管理支持 amd64 、arm64、 riscv64 架构编译环境。

这里以 amd64 架构环境为例进行安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
 $ chmod +x ./ruyi.amd64.20231211
 $ sudo cp ruyi.amd64.20231211 /usr/local/bin/ruyi
 $ ruyi version
@@ -79,8 +79,8 @@
 
 # match_expr parameter should be in format `<op><ver>`, where `<op>` is one of ['<', '>', '==', '<=', '>=', '!='].

若希望重装一个软件包,则可以加上 --reinstall 参数:

bash
$ ruyi install --reinstall gnu-upstream

安装源码包

RUYI 包管理器同时管理一些源码包,使用 extract 命令下载一个源码包并解包到当前目录:

bash
$ ruyi extract ruyisdk-demo
 $ ls
-README.md  rvv-autovec

搭建编译环境

已经安装的工具链与模拟器需要在 RUYI 编译环境中使用,这和 python 的虚拟环境十分类似。 这是由 venv 命令实现的:

bash
$ ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv

这个命令使用预置的 generic 配置,在 ./ruyi_venv 目录建立包含 gnu-upstream 工具链和 qemu-user-riscv-upstream 模拟器的编译环境。

具体使用参见“编译环境”与“具有 QEMU 支持的编译环境”章节。

卸载软件包

注意 RUYI 包管理器没有实现卸载 RUYI 软件包的功能。若您强制中断 RUYI 软件包安装进程或做了其他非预期操作 而会导致软件包功能异常时,请使用 install --reinstall 以尝试重试安装该软件包。

卸载 RUYI 包管理器

使用下面的命令卸载 RUYI 包管理器:

bash
$ ruyi self uninstall

这个命令将会询问您以二次确认该操作,如果希望 RUYI 包管理不询问而直接执行:

bash
$ ruyi self uninstall -y

上面的命令只是删除 RUYI 本身,并不会删除软件包缓存和安装的 RUYI 软件包。

如果希望删除所有缓存和安装了的软件包以实现干净的卸载:

bash
$ ruyi self uninstall --purge

同样的这个命令将会询问您以二次确认该操作,如果希望 RUYI 包管理不询问而直接执行:

bash
$ ruyi self uninstall --purge -y

实现 RUYI 包管理自身的升级可能会需要超级用户权限,而 RUYI 包管理被设计为避免进行需要超级用户权限的操作。 故在需要升级 RUYI 包管理时您需要手动进行该操作,即首先卸载 RUYI 包管理器,再执行安装 RUYI 包管理器的过程, 这个过程中您可以自主选择是否保留旧的软件包缓存和 RUYI 软件包。

镜像信息的维护与下载、开发板系统的安装引导

执行如下命令并按照引导执行即可下载所需系统镜像,为设备安装系统:

bash
$ ruyi device provision
- +README.md rvv-autovec

搭建编译环境

已经安装的工具链与模拟器需要在 RUYI 编译环境中使用,这和 python 的虚拟环境十分类似。 这是由 venv 命令实现的:

bash
$ ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv

这个命令使用预置的 generic 配置,在 ./ruyi_venv 目录建立包含 gnu-upstream 工具链和 qemu-user-riscv-upstream 模拟器的编译环境。

具体使用参见“编译环境”与“具有 QEMU 支持的编译环境”章节。

卸载软件包

注意 RUYI 包管理器没有实现卸载 RUYI 软件包的功能。若您强制中断 RUYI 软件包安装进程或做了其他非预期操作 而会导致软件包功能异常时,请使用 install --reinstall 以尝试重试安装该软件包。

卸载 RUYI 包管理器

使用下面的命令卸载 RUYI 包管理器:

bash
$ ruyi self uninstall

这个命令将会询问您以二次确认该操作,如果希望 RUYI 包管理不询问而直接执行:

bash
$ ruyi self uninstall -y

上面的命令只是删除 RUYI 本身,并不会删除软件包缓存和安装的 RUYI 软件包。

如果希望删除所有缓存和安装了的软件包以实现干净的卸载:

bash
$ ruyi self uninstall --purge

同样的这个命令将会询问您以二次确认该操作,如果希望 RUYI 包管理不询问而直接执行:

bash
$ ruyi self uninstall --purge -y

实现 RUYI 包管理自身的升级可能会需要超级用户权限,而 RUYI 包管理被设计为避免进行需要超级用户权限的操作。 故在需要升级 RUYI 包管理时您需要手动进行该操作,即首先卸载 RUYI 包管理器,再执行安装 RUYI 包管理器的过程, 这个过程中您可以自主选择是否保留旧的软件包缓存和 RUYI 软件包。

镜像信息的维护与下载、开发板系统的安装引导

执行如下命令并按照引导执行即可下载所需系统镜像,为设备安装系统:

bash
$ ruyi device provision
+ \ No newline at end of file diff --git a/old/ruyi/index.html b/old/ruyi/index.html new file mode 100644 index 00000000..f6f6e7fc --- /dev/null +++ b/old/ruyi/index.html @@ -0,0 +1,52 @@ + + + + + + RUYI 包管理器 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RUYI 包管理器

RUYI 包管理是 RuyiSDK中负责管理RuyiSDK各种软件源的工具,用于管理工具链、模拟器、源码等各种二进制软件包和源码包。

支持的发行版平台

当前 RUYI 包管理器具有良好的平台兼容性以及多发行版兼容性,目前经过测试可用的环境有(仅限验证过的):

  • x86_64 Fedora 38
  • x86_64 Ubuntu 22.04 LTS
  • x86_64 openEuler 23.09
  • riscv64 RevyOS 20231210
  • riscv64 openEuler 23.09

上述操作系统链接参考本文文末的“附:外部链接”章节。

命令

RUYI 目前支持的命令如下:

bash
# 从配置的软件源更新本地软件包缓存
+ruyi update
+
+# 从本地软件包缓存中列出可用软件包
+ruyi list
+
+# 下载并安装指定的软件包
+ruyi install
+
+# 列出已安装的配置
+ruyi list profiles
+
+# 由指定的工具链和配置建立 RUYI 虚拟环境
+ruyi venv
+
+# 下载并解包指定的源码包
+ruyi extract
+
+# 获取并查看更新信息
+ruyi news
+
+# 镜像信息的维护与下载、开发板系统的安装引导
+ruyi device
+
+# ruyi 镜像搭建工具(完善中)
+ruyi admin
+
+# 卸载 RUYI 包管理器
+ruyi self uninstall

功能持续更新中,可以通过 ruyi -h 查看 ruyi 支持的命令。

附:外部链接

+ + + + \ No newline at end of file diff --git a/zh/ruyi/updates/0.10.0.html b/old/ruyi/updates/0.10.0.html similarity index 70% rename from zh/ruyi/updates/0.10.0.html rename to old/ruyi/updates/0.10.0.html index f97ff9a4..c7b190eb 100644 --- a/zh/ruyi/updates/0.10.0.html +++ b/old/ruyi/updates/0.10.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.10.0 版本新增特性

  • news items 多语言支持
  • 板卡镜像刷写/文档支持增加到 28 款

安装 v0.10.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.amd64
+    
Skip to content

v0.10.0 版本新增特性

  • news items 多语言支持
  • 板卡镜像刷写/文档支持增加到 28 款

安装 v0.10.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.10.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -37,8 +37,8 @@
 project's sources from the project's official website:
 
 * certifi: https://github.com/certifi/python-certifi

i18n 支持

从 0.10.0 版本开始, ruyi news items 将根据运行环境 locales 自动选择显示的语言。

板卡镜像刷写

从 0.10.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 28 款。

本次主要增加了沁恒 RISC-V 单片机系列的文档支持。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K510Canaan Kendryte K510 (generic variant)Canaan Kendryte K510 Official Buildroot SDK (documentation-only)
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee Cluster 4ASipeed Lichee Cluster 4A (8G RAM)RevyOS for Sipeed Lichee Cluster 4A (8G RAM)fastboot
Sipeed Lichee Cluster 4A (16G RAM)RevyOS for Sipeed Lichee Cluster 4A (16G RAM)fastboot
Sipeed Lichee Console 4ASipeed Lichee Console 4A (8G RAM)RevyOS for Sipeed Lichee Console 4A (8G RAM)fastboot
Sipeed Lichee Console 4A (16G RAM)RevyOS for Sipeed Lichee Console 4A (16G RAM)fastboot
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheeRV NanoSipeed LicheeRV Nano (generic variant)Sipeed LicheeRV Nano Official buildroot SDK (Linux & FreeRTOS)dd
Debian for Sipeed LicheeRV Nano (from https://github.com/Fishwaldo)dd
Sipeed Maix-ISipeed Maix-I (generic variant)Sipeed Maix-I Official FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K ProSipeed Tang Mega 138K Pro (generic variant)Sipeed Tang Mega 138K Pro FPGA & FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K Pro FPGA & RT-Thread SDK (documentation-only)
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd
WCH CH32V103 EVBWCH CH32V103 EVB (CH32V103C6T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103C8T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103C8U6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103R8T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVBWCH CH32V203 EVB (CH32V203C6T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203C8T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203C8U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F6P6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F8P6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F8U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203G6U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203G8R6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203K6T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203K8T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203RBT6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVBWCH CH32V208 EVB (CH32V208CBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208GBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208RBT6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208WBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVBWCH CH32V303 EVB (CH32V303CBT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303RBT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303RCT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303VCT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V305 EVBWCH CH32V305 EVB (CH32V305FBP6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB (CH32V305GBU6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB (CH32V305RBT6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVBWCH CH32V307 EVB (CH32V307RCT6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH32V307 EVB (CH32V307WCU6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH32V307 EVB (CH32V307VCT6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH582F EVBWCH CH582F EVB (generic variant)WCH CH582F EVB FreeRTOS SDK (documentation-only)
WCH CH582F EVB RT-Thread SDK (documentation-only)
WCH CH592X EVBWCH CH592X EVB (generic variant)WCH CH592X EVB FreeRTOS SDK (documentation-only)
WCH CH592X EVB RT-Thread SDK (documentation-only)

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。这里提供示例规则仅供参考:

SUBSYSTEM=="usb", ATTR{idVendor}="2345", ATTR{idProduct}=="7654", MODE="0666", GROUP="plugdev"
-SUBSYSTEM=="usb", ATTR{idVendor}="1234", ATTR{idProduct}=="8888", MODE="0666", GROUP="plugdev"

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +SUBSYSTEM=="usb", ATTR{idVendor}="1234", ATTR{idProduct}=="8888", MODE="0666", GROUP="plugdev"

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.11.0.html b/old/ruyi/updates/0.11.0.html similarity index 70% rename from zh/ruyi/updates/0.11.0.html rename to old/ruyi/updates/0.11.0.html index 7bd51502..1ade8337 100644 --- a/zh/ruyi/updates/0.11.0.html +++ b/old/ruyi/updates/0.11.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.11.0 版本新增特性

  • 板卡镜像刷写/文档支持增加到 29 款

注意 0.11.0 版本会忽略 XDG_STATE_HOME 环境变量,如果在意这个问题请跳过这个版本,具体可以查看 issue #151

安装 v0.11.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.amd64
+    
Skip to content

v0.11.0 版本新增特性

  • 板卡镜像刷写/文档支持增加到 29 款

注意 0.11.0 版本会忽略 XDG_STATE_HOME 环境变量,如果在意这个问题请跳过这个版本,具体可以查看 issue #151

安装 v0.11.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.11.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -37,8 +37,8 @@
 project's sources from the project's official website:
 
 * certifi: https://github.com/certifi/python-certifi

板卡镜像刷写

从 0.11.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 29 款。

新增 Pine64 Star64 的 Armbian 镜像。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K510Canaan Kendryte K510 (generic variant)Canaan Kendryte K510 Official Buildroot SDK (documentation-only)
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Pine64 Star64Pine64 Star64 (generic variant)Armbian for Pine64 Star64dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee Cluster 4ASipeed Lichee Cluster 4A (8G RAM)RevyOS for Sipeed Lichee Cluster 4A (8G RAM)fastboot
Sipeed Lichee Cluster 4A (16G RAM)RevyOS for Sipeed Lichee Cluster 4A (16G RAM)fastboot
Sipeed Lichee Console 4ASipeed Lichee Console 4A (8G RAM)RevyOS for Sipeed Lichee Console 4A (8G RAM)fastboot
Sipeed Lichee Console 4A (16G RAM)RevyOS for Sipeed Lichee Console 4A (16G RAM)fastboot
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheeRV NanoSipeed LicheeRV Nano (generic variant)Sipeed LicheeRV Nano Official buildroot SDK (Linux & FreeRTOS)dd
Debian for Sipeed LicheeRV Nano (from https://github.com/Fishwaldo)dd
Sipeed Maix-ISipeed Maix-I (generic variant)Sipeed Maix-I Official FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K ProSipeed Tang Mega 138K Pro (generic variant)Sipeed Tang Mega 138K Pro FPGA & FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K Pro FPGA & RT-Thread SDK (documentation-only)
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd
WCH CH32V103 EVBWCH CH32V103 EVB (CH32V103C6T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103C8T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103C8U6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V103 EVB (CH32V103R8T6)WCH CH32V103 EVB FreeRTOS SDK (documentation-only)
WCH CH32V103 EVB FreeRTOS PlatformIO SDK (documentation-only)
WCH CH32V103 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVBWCH CH32V203 EVB (CH32V203C6T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203C8T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203C8U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F6P6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F8P6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203F8U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203G6U6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203G8R6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203K6T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203K8T6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V203 EVB (CH32V203RBT6)WCH CH32V203 EVB FreeRTOS SDK (documentation-only)
WCH CH32V203 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVBWCH CH32V208 EVB (CH32V208CBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208GBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208RBT6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V208 EVB (CH32V208WBU6)WCH CH32V208 EVB FreeRTOS SDK (documentation-only)
WCH CH32V208 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVBWCH CH32V303 EVB (CH32V303CBT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303RBT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303RCT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V303 EVB (CH32V303VCT6)WCH CH32V303 EVB FreeRTOS SDK (documentation-only)
WCH CH32V303 EVB RT-Thread SDK (documentation-only)
WCH CH32V305 EVBWCH CH32V305 EVB (CH32V305FBP6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB (CH32V305GBU6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB (CH32V305RBT6)WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V305 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVBWCH CH32V307 EVB (CH32V307RCT6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH32V307 EVB (CH32V307WCU6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH32V307 EVB (CH32V307VCT6)WCH CH32V307 EVB FreeRTOS SDK (documentation-only)
WCH CH32V307 EVB RT-Thread SDK (documentation-only)
WCH CH582F EVBWCH CH582F EVB (generic variant)WCH CH582F EVB FreeRTOS SDK (documentation-only)
WCH CH582F EVB RT-Thread SDK (documentation-only)
WCH CH592X EVBWCH CH592X EVB (generic variant)WCH CH592X EVB FreeRTOS SDK (documentation-only)
WCH CH592X EVB RT-Thread SDK (documentation-only)

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。这里提供示例规则仅供参考:

SUBSYSTEM=="usb", ATTR{idVendor}="2345", ATTR{idProduct}=="7654", MODE="0666", GROUP="plugdev"
-SUBSYSTEM=="usb", ATTR{idVendor}="1234", ATTR{idProduct}=="8888", MODE="0666", GROUP="plugdev"

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +SUBSYSTEM=="usb", ATTR{idVendor}="1234", ATTR{idProduct}=="8888", MODE="0666", GROUP="plugdev"

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/old/ruyi/updates/0.12.0.html b/old/ruyi/updates/0.12.0.html new file mode 100644 index 00000000..e89da441 --- /dev/null +++ b/old/ruyi/updates/0.12.0.html @@ -0,0 +1,43 @@ + + + + + + v0.12.0 版本新增特性 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

v0.12.0 版本新增特性

  • 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
  • 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
  • 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
  • 修复了 0.11.0 版本中 XDG_STATE_HOME 环境变量被无视的问题。

安装 v0.12.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.amd64
+$ chmod +x ./ruyi.amd64
+$ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.riscv64
+$ chmod +x ./ruyi.riscv64
+$ sudo cp ./ruyi.riscv64 /usr/local/bin/ruyi

在 arm64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.arm64
+$ chmod +x ./ruyi.arm64
+$ sudo cp ./ruyi.arm64 /usr/local/bin/ruyi

检查安装版本:

bash
$ ruyi version
+Ruyi 0.12.0
+
+Running on linux/x86_64.
+
+Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
+All rights reserved.
+License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>
+
+This version of ruyi makes use of code licensed under the Mozilla Public
+License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
+project's sources from the project's official website:
+
+* certifi: https://github.com/certifi/python-certifi
+ + + + \ No newline at end of file diff --git a/old/ruyi/updates/0.13.0.html b/old/ruyi/updates/0.13.0.html new file mode 100644 index 00000000..6ef0ddf6 --- /dev/null +++ b/old/ruyi/updates/0.13.0.html @@ -0,0 +1,43 @@ + + + + + + v0.13.0 版本新增特性 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

v0.13.0 版本新增特性

  • 修复 0.12.0 遗留的版本匹配问题。
  • 修复 prerelease 版本识别。

安装 v0.13.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.amd64
+$ chmod +x ./ruyi.amd64
+$ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.riscv64
+$ chmod +x ./ruyi.riscv64
+$ sudo cp ./ruyi.riscv64 /usr/local/bin/ruyi

在 arm64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.arm64
+$ chmod +x ./ruyi.arm64
+$ sudo cp ./ruyi.arm64 /usr/local/bin/ruyi

检查安装版本:

bash
$ ruyi version
+Ruyi 0.13.0
+
+Running on linux/x86_64.
+
+Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
+All rights reserved.
+License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>
+
+This version of ruyi makes use of code licensed under the Mozilla Public
+License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
+project's sources from the project's official website:
+
+* certifi: https://github.com/certifi/python-certifi
+ + + + \ No newline at end of file diff --git a/zh/ruyi/updates/0.3.0.html b/old/ruyi/updates/0.3.0.html similarity index 70% rename from zh/ruyi/updates/0.3.0.html rename to old/ruyi/updates/0.3.0.html index 87df0a00..d51c0a4d 100644 --- a/zh/ruyi/updates/0.3.0.html +++ b/old/ruyi/updates/0.3.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.3.0 版本新增特性

bash
ruyi news
+    
Skip to content

v0.3.0 版本新增特性

bash
ruyi news
 # 新闻
 ruyi device
 # 板卡镜像刷写

安装 v0.3.0

v0.3.0 版本的稳定二进制为 0.3.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.3.0/ruyi.amd64
@@ -114,8 +114,8 @@
   2. Milk-V Pioneer Box
   3. Sipeed LicheePi 4A
 
-Choice? (1-3)

注意刷写镜像的操作需要调用 sudo 以提权。除了荔枝派 4A 由 fastboot 自动识别设备,当前支持的其他设备镜像均需要用户手动指定目标刷写设备以执行 dd 命令。

- +Choice? (1-3)

注意刷写镜像的操作需要调用 sudo 以提权。除了荔枝派 4A 由 fastboot 自动识别设备,当前支持的其他设备镜像均需要用户手动指定目标刷写设备以执行 dd 命令。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.4.0.html b/old/ruyi/updates/0.4.0.html similarity index 53% rename from zh/ruyi/updates/0.4.0.html rename to old/ruyi/updates/0.4.0.html index 83aee059..cd62240a 100644 --- a/zh/ruyi/updates/0.4.0.html +++ b/old/ruyi/updates/0.4.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.4.0 版本新增特性

bash
ruyi device
+    
Skip to content

v0.4.0 版本新增特性

bash
ruyi device
 # 板卡镜像刷写

安装 v0.4.0

v0.4.0 版本的稳定二进制为 0.4.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.4.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.4.0/ruyi.riscv64
@@ -26,8 +26,8 @@
 Ruyi 0.4.0
 Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
 All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

从 0.4.0 开始使用 GitHub 托管默认软件源。

板卡镜像刷写

在 0.4.0 版本,板卡镜像刷写功能所支持的板卡增加到 7 款,同时优化了命令逻辑。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

从 0.4.0 开始使用 GitHub 托管默认软件源。

板卡镜像刷写

在 0.4.0 版本,板卡镜像刷写功能所支持的板卡增加到 7 款,同时优化了命令逻辑。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.5.0.html b/old/ruyi/updates/0.5.0.html similarity index 57% rename from zh/ruyi/updates/0.5.0.html rename to old/ruyi/updates/0.5.0.html index e457c756..69f0f063 100644 --- a/zh/ruyi/updates/0.5.0.html +++ b/old/ruyi/updates/0.5.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.5.0 版本新增特性

  • 板卡镜像刷写支持增加到 9 款
  • 镜像源换源支持

安装 v0.5.0

v0.5.0 版本的稳定二进制为 0.5.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.amd64
+    
Skip to content

v0.5.0 版本新增特性

  • 板卡镜像刷写支持增加到 9 款
  • 镜像源换源支持

安装 v0.5.0

v0.5.0 版本的稳定二进制为 0.5.0 。

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.5.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -44,8 +44,8 @@
 $ cat > ~/.config/ruyi/config.toml <<EOF
 [repo]
 remote = "https://example.domain/path/repo.git"
-EOF
- +EOF
+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.6.0.html b/old/ruyi/updates/0.6.0.html similarity index 52% rename from zh/ruyi/updates/0.6.0.html rename to old/ruyi/updates/0.6.0.html index c09ba57d..dedc04bb 100644 --- a/zh/ruyi/updates/0.6.0.html +++ b/old/ruyi/updates/0.6.0.html @@ -8,23 +8,23 @@ - + - - + + -
Skip to content

v0.6.0 版本新增特性

  • 使用 pygit2 替代对 git 的依赖
  • SiFive HiFive Unmatched 镜像支持增加到 5 种

安装 v0.6.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.6.0/ruyi.amd64
+    
Skip to content

v0.6.0 版本新增特性

  • 使用 pygit2 替代对 git 的依赖
  • SiFive HiFive Unmatched 镜像支持增加到 5 种

安装 v0.6.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.6.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

注意 v0.6.0 版本的 riscv64 二进制可能无法正常工作,请使用更新的版本。

检查安装版本:

bash
$ ruyi version
 Ruyi 0.6.0
 Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
 All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

依赖变化

从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

板卡镜像刷写

在 0.6.0 版本, SiFive HiFive Unmatched 镜像支持增加到 5 种。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

依赖变化

从 v0.6.0 版本开始 RUYI 包管理不再依赖 git,而是使用 pygit2 作为替代方案。

板卡镜像刷写

在 0.6.0 版本, SiFive HiFive Unmatched 镜像支持增加到 5 种。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.7.0.html b/old/ruyi/updates/0.7.0.html similarity index 55% rename from zh/ruyi/updates/0.7.0.html rename to old/ruyi/updates/0.7.0.html index fa4145bc..c38b53de 100644 --- a/zh/ruyi/updates/0.7.0.html +++ b/old/ruyi/updates/0.7.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.7.0 版本新增特性

  • 板卡镜像刷写支持增加到 13 款
  • 修复 v0.6.0 版本 riscv64 二进制无法工作的问题

安装 v0.7.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.amd64
+    
Skip to content

v0.7.0 版本新增特性

  • 板卡镜像刷写支持增加到 13 款
  • 修复 v0.6.0 版本 riscv64 二进制无法工作的问题

安装 v0.7.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.7.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -27,8 +27,8 @@
 Ruyi 0.7.0
 Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
 All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

板卡镜像刷写

在 0.7.0 版本,板卡镜像刷写功能所支持的板卡增加到 13 款。

注意 Milkv-V Vega 暂时没有提供官方镜像下载,故此处只提供了文档链接而没有刷写支持。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

板卡镜像刷写

在 0.7.0 版本,板卡镜像刷写功能所支持的板卡增加到 13 款。

注意 Milkv-V Vega 暂时没有提供官方镜像下载,故此处只提供了文档链接而没有刷写支持。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令, RUYI 将自动调用 sudo 提权。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.8.1.html b/old/ruyi/updates/0.8.1.html similarity index 58% rename from zh/ruyi/updates/0.8.1.html rename to old/ruyi/updates/0.8.1.html index 9d6cae4e..c94dd8d1 100644 --- a/zh/ruyi/updates/0.8.1.html +++ b/old/ruyi/updates/0.8.1.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.8.1 版本新增特性

  • 从 0.8.0 版本开始,默认不允许以 root 用户运行 ruyi
  • 新增 Milkv-V Meles 板卡刷写,板卡镜像刷写支持增加到 14 款

安装 v0.8.1

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.amd64
+    
Skip to content

v0.8.1 版本新增特性

  • 从 0.8.0 版本开始,默认不允许以 root 用户运行 ruyi
  • 新增 Milkv-V Meles 板卡刷写,板卡镜像刷写支持增加到 14 款

安装 v0.8.1

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.8.1/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -36,8 +36,8 @@
 License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
 project's sources from the project's official website:
 
-* certifi: https://github.com/certifi/python-certifi

板卡镜像刷写

从 0.8.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 14 款。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +* certifi: https://github.com/certifi/python-certifi

板卡镜像刷写

从 0.8.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 14 款。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/zh/ruyi/updates/0.9.0.html b/old/ruyi/updates/0.9.0.html similarity index 61% rename from zh/ruyi/updates/0.9.0.html rename to old/ruyi/updates/0.9.0.html index 2c72dbd0..417ff563 100644 --- a/zh/ruyi/updates/0.9.0.html +++ b/old/ruyi/updates/0.9.0.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

v0.9.0 版本新增特性

  • 支持了 LZ4 格式压缩文件的解包
  • RuyiSDK 自 0.9 版本开始支持矽速(Sipeed)全线 RISC-V 产品,板卡镜像刷写支持增加到 20 款

安装 v0.9.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.amd64
+    
Skip to content

v0.9.0 版本新增特性

  • 支持了 LZ4 格式压缩文件的解包
  • RuyiSDK 自 0.9 版本开始支持矽速(Sipeed)全线 RISC-V 产品,板卡镜像刷写支持增加到 20 款

安装 v0.9.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.amd64
 $ chmod +x ./ruyi.amd64
 $ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.9.0/ruyi.riscv64
 $ chmod +x ./ruyi.riscv64
@@ -36,8 +36,8 @@
 License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
 project's sources from the project's official website:
 
-* certifi: https://github.com/certifi/python-certifi

板卡镜像刷写

从 0.9.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 20 款。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K510Canaan Kendryte K510 (generic variant)Canaan Kendryte K510 Official Buildroot SDK (documentation-only)
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee Cluster 4ASipeed Lichee Cluster 4A (8G RAM)RevyOS for Sipeed Lichee Cluster 4A (8G RAM)fastboot
Sipeed Lichee Cluster 4A (16G RAM)RevyOS for Sipeed Lichee Cluster 4A (16G RAM)fastboot
Sipeed Lichee Console 4ASipeed Lichee Console 4A (8G RAM)RevyOS for Sipeed Lichee Console 4A (8G RAM)fastboot
Sipeed Lichee Console 4A (16G RAM)RevyOS for Sipeed Lichee Console 4A (16G RAM)fastboot
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheeRV NanoSipeed LicheeRV Nano (generic variant)Sipeed LicheeRV Nano Official buildroot SDK (Linux & FreeRTOS)dd
Debian for Sipeed LicheeRV Nano (from https://github.com/Fishwaldo)dd
Sipeed Maix-ISipeed Maix-I (generic variant)Sipeed Maix-I Official FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K ProSipeed Tang Mega 138K Pro (generic variant)Sipeed Tang Mega 138K Pro FPGA & FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K Pro FPGA & RT-Thread SDK (documentation-only)
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

- +* certifi: https://github.com/certifi/python-certifi

板卡镜像刷写

从 0.9.0 版本开始,板卡镜像刷写功能所支持的板卡增加到 20 款。

板卡支持列表:

开发板版本镜像刷写方式
Allwinner Nezha D1Allwinner Nezha D1 (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Canaan Kendryte K230Canaan Kendryte K230 (generic variant)Canaan Kendryte K230 Official CanMV Debian SDKdd
Canaan Kendryte K510Canaan Kendryte K510 (generic variant)Canaan Kendryte K510 Official Buildroot SDK (documentation-only)
Canaan Kendryte K230 Official CanMV Ubuntu SDKdd
Milk-V DuoMilk-V Duo (64M RAM)Milk-V Duo Official buildroot SDK (64M RAM)dd
Milk-V Duo Official buildroot SDK (64M RAM, with Python)dd
Milk-V Duo (256M RAM)Milk-V Duo Official buildroot SDK (256M RAM)dd
Milk-V Duo Official buildroot SDK (256M RAM, with Python)dd
Milk-V Duo SMilk-V Duo S (generic variant)Milk-V Duo S Official buildroot SDK (FreeRTOS, on SD card)dd
Milk-V MarsMilk-V Mars (generic variant)Milk-V Mars Official Debian Desktop SDK (on SD card)dd
Milk-V Mars CMMilk-V Mars CM (generic variant)Milk-V Mars CM Official Debian Desktop SDK (on SD card)dd
Milk-V MelesMilk-V Meles (4G RAM)RevyOS for Milk-V Meles (4G RAM)fastboot
Milk-V Meles (8G RAM)RevyOS for Milk-V Meles (8G RAM)fastboot
Milk-V VegaMilk-V Vega (generic variant)Milk-V Vega Official Buildroot SDK (documentation-only)
Milk-V Pioneer BoxMilk-V Pioneer Box (v1.3)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
RevyOS for Milk-V Pioneerdd
Milk-V Pioneer Box (v1.2)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
Milk-V Pioneer Box (v1.1)openEuler RISC-V (base system) for Milk-V Pioneer (rootfs on NVMe)dd
openEuler RISC-V (XFCE) for Milk-V Pioneer (rootfs on NVMe)dd
SiFive HiFive UnmatchedSiFive HiFive Unmatched (generic variant)openEuler RISC-V (base system) for SiFive HiFive Unmatcheddd
openKylin for SiFive HiFive Unmatcheddd
openEuler RISC-V (XFCE) for SiFive HiFive Unmatcheddd
OpenWrt for SiFive HiFive Unmatcheddd
Ubuntu Server for SiFive HiFive Unmatcheddd
Sipeed Lichee Cluster 4ASipeed Lichee Cluster 4A (8G RAM)RevyOS for Sipeed Lichee Cluster 4A (8G RAM)fastboot
Sipeed Lichee Cluster 4A (16G RAM)RevyOS for Sipeed Lichee Cluster 4A (16G RAM)fastboot
Sipeed Lichee Console 4ASipeed Lichee Console 4A (8G RAM)RevyOS for Sipeed Lichee Console 4A (8G RAM)fastboot
Sipeed Lichee Console 4A (16G RAM)RevyOS for Sipeed Lichee Console 4A (16G RAM)fastboot
Sipeed Lichee RVSipeed Lichee RV (generic variant)openEuler RISC-V (base system) for Allwinner D1dd
openEuler RISC-V (XFCE) for Allwinner D1dd
Sipeed LicheeRV NanoSipeed LicheeRV Nano (generic variant)Sipeed LicheeRV Nano Official buildroot SDK (Linux & FreeRTOS)dd
Debian for Sipeed LicheeRV Nano (from https://github.com/Fishwaldo)dd
Sipeed Maix-ISipeed Maix-I (generic variant)Sipeed Maix-I Official FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K ProSipeed Tang Mega 138K Pro (generic variant)Sipeed Tang Mega 138K Pro FPGA & FreeRTOS SDK (documentation-only)
Sipeed Tang Mega 138K Pro FPGA & RT-Thread SDK (documentation-only)
Sipeed LicheePi 4ASipeed LicheePi 4A (8G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (8G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (8G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (8G RAM)fastboot
Sipeed LicheePi 4A (16G RAM)openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)fastboot
openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)fastboot
RevyOS for Sipeed LicheePi 4A (16G RAM)fastboot
StarFive VisionFiveStarFive VisionFive (generic variant)openEuler RISC-V (base system) for StarFive VisionFivedd
openEuler RISC-V (XFCE) for StarFive VisionFivedd
StarFive VisionFive2StarFive VisionFive2 (generic variant)openEuler RISC-V (base system) for StarFive VisionFive2dd
openEuler RISC-V (XFCE) for StarFive VisionFive2dd

刷写工具根据板卡的不同依赖 ddfastboot 命令。

在使用普通用户调用 dd 命令刷写镜像失败时,RUYI 将尝试调用 sudo 提权。

在使用 fastboot 工具刷写镜像时, RUYI 则只会使用当前普通用户,故需要用户自行配置 udev 规则。

需要注意的是一些镜像的解包需要占用大量的磁盘空间,使用 RUYI 工具刷写镜像前请务必留足磁盘空间; 一些厂家提供的镜像在刷写后并不会自动扩展分区来充分利用整块磁盘,而需要用户自行扩展磁盘分区大小。

+ \ No newline at end of file diff --git a/old/sdk/gnu/index.html b/old/sdk/gnu/index.html new file mode 100644 index 00000000..6bc64e89 --- /dev/null +++ b/old/sdk/gnu/index.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK GCC 工具链介绍 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK GCC 工具链介绍

RuyiSDK GCC 工具链是专门用于 RISC-V 架构的 GNU 工具链,它包括一系列工具,如编译器、汇编器、链接器等,用于开发和构建 RISC-V 架构的软件。

模块介绍

GCC(GNU Compiler Collection)

功能: RISC-V GNU Toolchain 的核心组件之一,用于将高级编程语言(如 C、C++)的源代码翻译成 RISC-V 架构的目标代码。

支持: 提供对不同 RISC-V 位长的支持,包括 RV32(32 位)和 RV64(64 位),以及不同RISC-V 指令集扩展的支持。

详细使用说明参考: https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/

GNU Binutils

包含工具: 汇编器(as)、链接器(ld)、目标文件工具(objdump、objcopy 等),性能分析工具(gprof)。

功能: 用于处理生成 RISC-V 架构的目标文件,执行汇编和链接,反汇编等操作。

详细使用说明参考: https://sourceware.org/binutils/docs-2.41/

GDB(GNU Debugger)

功能: 提供调试功能,允许开发人员在 RISC-V 目标上调试他们的程序。

Glibc(GNU C Library)

功能: C 语言运行时库,提供许多标准 C 库函数的实现,以支持在 RISC-V 上运行的程序。

Newlib

功能: 一个小型的 C 库,适用于嵌入式系统和其他资源受限的环境。对于一些嵌入式RISC-V 系统,选择使用 Newlib 而不是 Glibc 可以更高效的利用有限的系统资源。

Libgcc

功能: 包含一些与编译**功能:**器紧密相关的支持函数,例如用于浮点数乘除法的模拟运算函数。

目前 RuyiSDK 包含三种工具链版本,分别为 GNU upstream 版本,Xuantie 版本以及RuyiSDK 版本,不同版本支持的 RISC-V 指令集有所不同。

GNU upstream 工具链适合面向最新 RISC-V 特性的开发者,Xuantie 工具链侧重于使用 Xuantie 系列 CPU 芯片的硬件,RuyiSDK 工具链侧重于提供稳定的工具链环境,尽可能的继承目前 RISC-V 的各个扩展与新特性。

使用说明

工具链中各个工具的使用方法请参考其使用说明文档,下面重点介绍 RISC-V 架构的一些常见用法:

  • -march 选项可以控制工具链开启的 RISC-V 扩展,其默认参数在 64 位工具链中为 rv64gc, 32 位工具链中为 rv32gc, 若要开启其他扩展,则需利用该选项重新向工具链指定想要开启的扩展,例如打开 V 扩展可以使用-march=rv64gcv,打开 b 扩展可以使用 -march=rv64gc_zba_zbb_zbc_zbs, RuyiSDK 中不同扩展的工具链已经在-march 中配置了其对应参数,方便用户直接使用,用户可以根据自身需求调整-march 输入,控制不同扩展的使用。
  • -mabi 选项主要控制工具链中所使用的寄存器组,其默认参数在 64 位工具链中为 lp64d,32 位工具链中为 ilp32d,嵌入式设备中为 lp64e, ilp32e, 无浮点硬件中为 lp64, ilp32, 用户可以根据自身硬件和使用场景进行选择。 使用 RVV 向量扩展时,请务必同时使用 -O3 选项,在编译器中开启 RVV 的向量化特性,一些 RVV 使用示例请参考:https://gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/testsuite/gcc.target/riscv/rvv

下面我们来介绍 RVV 使用时的两个常用参数:

  • --param=riscv-autovec-preference=用于告知编译器输入向量的长度,有已知固定向量长度的 fixed-vlmax输入与可伸缩向量不固定长度的 scalable输入,用户可以更具自己的程序进行调整,以获得更高的程序性能。
  • --param=riscv-autovec-lmul=用于指定一个循环迭代中处理的向量元素的数量,其输入参数可以参考 riscv-v-spec 手册,包括”dynamic,m1,m2,m4,m8”等,对于不熟悉参数的用户,建议使用 dynamic选项,由编译器自动配置选取合适的处理数量。

扩展支持

工具链版本扩展名称
Upstreami, m, a, f, d, c, v, e(注意指定对应的 eABI)
zicsr, zifencei, zicond, zawrs, zba, zbb, zbc, zbs
zfinx, zdinx, zhinx, zhinxmin(注意指定的 ABI 为 lp64 或 ilp32, 与 f/d 扩展不兼容)
zbkb, zbkc, zbkx, zknd, zkne, zknh, zkr, zksed, zksh, zkt
zihintntl, zihintpause, zicboz, zicbom, zicbop
zfh, zfhmin, zvfh, zvfhmin, zvbb, zvbc, zvkg, zvkned, zvknha, zvknhb, zvksed, zvksh
zvknc, zvksc, zvkt, zfa, zmmul, zca, zcb, zce, zcf(仅 RV32)
zcd, zcmp(与 zcd 不兼容), zcmt, ztso
svinval, svnapot,
xcvmac, xcvalu,
xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx, xtheadfmemidx,
xtheadmempair, xtheadsync, xventanacondops
Xuantie对 xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx,
xtheadfmemidx, xtheadmempair, xtheadsync, xtheadvector(RVV 0.7), xventanacondops
有特定优化,不支持 Zfinx, K, RVV1.0, Zc, Xcv 等系列扩展
RuyiSDK额外支持 RV64-ILP32, Profiles(RV20/22), zpn, zpsfoperand, zbpbo
+ + + + \ No newline at end of file diff --git a/old/sdk/llvm/index.html b/old/sdk/llvm/index.html new file mode 100644 index 00000000..3a418926 --- /dev/null +++ b/old/sdk/llvm/index.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK LLVM 工具链介绍 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK LLVM 工具链介绍

todo

+ + + + \ No newline at end of file diff --git a/old/usecase/index.html b/old/usecase/index.html new file mode 100644 index 00000000..7cdccff7 --- /dev/null +++ b/old/usecase/index.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK使用示例 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK使用示例

以下案例是使用RuyiSDK搭建相关的开发或运行环境来实现的。希望通过一些小场景让大家更多的了解RuyiSDK的使用。

除了这里列举的环境外,RuyiSDK支持的编译工具链版本、RISC-V开发板类型是丰富且不断扩展的,这里未列举所有的情况,这些典型的场景供新用户参考和体验。

案例一:x86_64 上交叉编译并模拟运行 riscv64 可执行程序

案例二:在x86_64 PC+linux 上,接入RISC-V开发板并为其安装系统镜像

案例三:RISC-V 开发板上本地编译并运行 riscv64 可执行程序

+ + + + \ No newline at end of file diff --git a/zh/usecase/rvbook/index.html b/old/usecase/rvbook/index.html similarity index 50% rename from zh/usecase/rvbook/index.html rename to old/usecase/rvbook/index.html index 25b12447..c0ae1906 100644 --- a/zh/usecase/rvbook/index.html +++ b/old/usecase/rvbook/index.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A开发板上运行的过程。

环境说明

硬件环境:Licheepi 4A开发板(th1520)

软件环境:Debian/openEuler for RISC-V

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
# 下载riscv64版本的ruyi,将其放到path路径下,并赋予其可执行权限
+    
Skip to content

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A开发板上运行的过程。

环境说明

硬件环境:Licheepi 4A开发板(th1520)

软件环境:Debian/openEuler for RISC-V

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
# 下载riscv64版本的ruyi,将其放到path路径下,并赋予其可执行权限
 wget https://github.com/RuyiSDK/ruyi/releases/download/0.5.0/ruyi-0.5.0.riscv64
 sudo cp ruyi-0.5.0.riscv64 /usr/local/bin/ruyi
 sudo chmod +x ruyi
@@ -38,8 +38,8 @@
 ruyi extract coremark
 ls -al

交叉编译coremark

  1. 设置coremark源码中的编译配置信息(参考coremark仓库自述文档)
bash
sed -i 's/\bgcc\b/riscv64-plctxthead-linux-gnu-gcc/g' linux64/core_portme.mak
  1. 执行交叉编译和构建,得到可执行程序coremark.exe
bash
make PORT_DIR=linux64 link
 ls -al    #新增可执行程序coremark.exe
  1. 查看rv64可执行程序文件属性信息。
bash
file coremark.exe
-# 命令回显信息显示了文件的架构相关信息

运行验证

  1. 直接运行riscv64 coremark可执行程序
bash
./coremark.exe
- +# 命令回显信息显示了文件的架构相关信息

运行验证

  1. 直接运行riscv64 coremark可执行程序
bash
./coremark.exe
+ \ No newline at end of file diff --git a/old/usecase/setupos/index.html b/old/usecase/setupos/index.html new file mode 100644 index 00000000..d7ccc5f5 --- /dev/null +++ b/old/usecase/setupos/index.html @@ -0,0 +1,76 @@ + + + + + + 为RISC-V开发板安装操作系统 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

为RISC-V开发板安装操作系统

通过RuyiSDK操作系统安装器工具,为各种不同厂家、不同型号的RISC-V开发板提供镜像信息的维护与下载、开发板系统的安装引导。

环境说明

本操作在x86_64 PC & Ubuntu 22.04(linux系统皆可)下执行;RISC-V开发板以USB连接线接入PC或者RISC-V开发板的SD卡通过读卡机接入PC。

安装操作系统

ruyi 工具提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的RISC-V开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
+
+This is a wizard intended to help you install a system on your device for your
+development pleasure, all with ease.
+
+You will be asked some questions that help RuyiSDK understand your device and
+your intended configuration, then packages will be downloaded and flashed onto
+the device's storage, that you should somehow make available on this host
+system beforehand.
+
+Note that, as Ruyi does not run as root, but raw disk access is most likely
+required to flash images, you should arrange to allow your user account sudo
+access to necessary commands such as dd. Flashing will fail if the sudo
+configuration does not allow so.
+
+Continue? (y/N) y
+
+The following devices are currently supported by the wizard. Please pick your device:
+
+1. Allwinner Nezha D1
+2. Canaan Kendryte K230
+3. Milk-V Duo
+4. Milk-V Pioneer Box
+5. SiFive HiFive Unmatched
+6. Sipeed Lichee RV
+7. Sipeed LicheePi 4A
+8. StarFive VisionFive
+9. StarFive VisionFive2
+
+Choice? (1-9)

以上,以 Sipeed LicheePi 4A 为例,需要为其安装镜像,只需要输入对应的序号:7

Choice? (1-9) 7
+
+The device has the following variants. Please choose the one corresponding to your hardware at hand:
+
+  1. Sipeed LicheePi 4A (8G RAM)
+  2. Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-2) 2
+
+The following system configurations are supported by the device variant you have chosen. Please pick the one you want 
+to put on the device:
+
+  1. openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)
+  2. openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)
+  3. RevyOS for Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-3) 3
+
+We are about to download and install the following packages for your device:
+
+ * board-image/revyos-sipeed-lpi4a
+ * board-image/uboot-revyos-sipeed-lpi4a-16g
+
+Proceed? (y/N)

您只需要按照引导提示一步步执行即可。

+ + + + \ No newline at end of file diff --git a/zh/usecase/x86pc/index.html b/old/usecase/x86pc/index.html similarity index 50% rename from zh/usecase/x86pc/index.html rename to old/usecase/x86pc/index.html index e5a959ae..e529bc60 100644 --- a/zh/usecase/x86pc/index.html +++ b/old/usecase/x86pc/index.html @@ -8,24 +8,24 @@ - + - - + + -
Skip to content

使用示例

以开源基准测试程序 coremark 为例,展示在x86_64 PC上实现从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码交叉编译并在 qemu 模拟器上成功执行的过程。

环境说明

硬件环境:x86_64

软件环境:Ubuntu 22.04

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
wget -O /usr/local/bin/ruyi https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/0.10.0-beta.20240512/ruyi.amd64
+    
Skip to content

使用示例

以开源基准测试程序 coremark 为例,展示在x86_64 PC上实现从 ruyi 工具安装到使用 ruyi 工具搭建 RISC-V 的编译、模拟环境,完成 coremark 源码交叉编译并在 qemu 模拟器上成功执行的过程。

环境说明

硬件环境:x86_64

软件环境:Ubuntu 22.04

ruyi工具的安装

  1. [可选] 清除当前已经安装的 ruyi 工具及其所有数据
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的ruyi工具。
bash
wget -O /usr/local/bin/ruyi https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/0.10.0-beta.20240512/ruyi.amd64
 sudo chmod +x ruyi
  1. 验证ruyi可否使用
bash
ruyi --version
  1. 查看ruyi帮助
bash
ruyi --help

使用ruyi工具部署开发环境:

  1. 查看软件仓软件包索引信息
bash
ruyi list
  1. 查看详细信息
bash
ruyi list -v
  1. 安装工具链:ruyi install <package-name>
bash
ruyi install  gnu-upstream
  1. 安装qemu
bash
ruyi install qemu-user-riscv-upstream
  1. 查看预置编译环境
bash
ruyi list profiles
  1. 由指定的工具链、模拟器配置建立 RUYI 虚拟环境venv1
bash
ruyi venv --help
 ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
  1. 查看虚拟环境bin目录下已安装的工具链、模拟器
bash
ls venv1/bin
  1. 激活虚拟环境
. venv1/bin/ruyi-activate
  1. 检查虚拟环境中编译工具的版本信息
bash
riscv64-unknown-linux-gnu-gcc --version
 ruyi-qemu --version
  1. 下载解压coremark源码作为编译对象
bash
mkdir coremark && cd coremark
 ruyi extract coremark
 ls -al

交叉编译coremark

  1. 设置coremark源码中的编译配置信息(参考coremark仓库自述文档)
bash
sed -i 's/\bgcc\b/riscv64-unknown-linux-gnu-gcc/g'  linux64/core_portme.mak
  1. 执行交叉编译和构建,得到可执行程序coremark.exe
bash
make PORT_DIR=linux64 link
 ls -al    #新增可执行程序coremark.exe
  1. 查看rv64可执行程序文件属性信息。
bash
file coremark.exe
-# 命令回显信息显示了文件的架构相关信息

qemu-user 模式下运行 riscv64 coremark 可执行程序

  1. qemu user模式下执行riscv64 coremark可执行程序
bash
ruyi-qemu coremark.exe
  1. 退出虚拟环境
bash
ruyi-deactivate
- +# 命令回显信息显示了文件的架构相关信息

qemu-user 模式下运行 riscv64 coremark 可执行程序

  1. qemu user模式下执行riscv64 coremark可执行程序
bash
ruyi-qemu coremark.exe
  1. 退出虚拟环境
bash
ruyi-deactivate
+ \ No newline at end of file diff --git a/zh/usedirection/developmentside/environments/index.html b/old/usedirection/developmentside/environments/index.html similarity index 71% rename from zh/usedirection/developmentside/environments/index.html rename to old/usedirection/developmentside/environments/index.html index bdc0bbca..e1cfd354 100644 --- a/zh/usedirection/developmentside/environments/index.html +++ b/old/usedirection/developmentside/environments/index.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

RUYI 编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+    
Skip to content

RUYI 编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
 generic
 baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
 sipeed-lpi4a (needs flavor(s): {'xthead'})
@@ -105,8 +105,8 @@
 «Ruyi qemu_venv» $ riscv64-plctxthead-linux-gnu-gcc -O3 test.c -o test
 «Ruyi qemu_venv» $ ruyi-qemu ./test
 hello, ruyi
  1. 退出编译环境:
bash
«Ruyi qemu_venv» $ ruyi-deactivate
-$
- +$
+ \ No newline at end of file diff --git a/old/usedirection/developmentside/index.html b/old/usedirection/developmentside/index.html new file mode 100644 index 00000000..3a2bcb17 --- /dev/null +++ b/old/usedirection/developmentside/index.html @@ -0,0 +1,58 @@ + + + + + + 准备RISC-V开发环境 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

准备RISC-V开发环境

安装 ruyi 包管理工具

RuyiSDK包管理工具目前提供了Linux系统 amd64、arm64、riscv64 三种架构平台下的安装程序,可以按需在ruyi GitHub ReleasesISCAS 镜像源下载体验。

包管理工具的安装非常简单,只需下载ruyi工具预构建的二进制文件,将下载的文件去掉后缀重命名为 ruyi,并使其具有可执行权限,最后放入 $PATH 路径下就可以开始了。具体的使用可参考ruyi仓库文档

在安装完成后最常用的命令一般需要有:

bash

+#查看工具版本(由于ruyi滚动发版,请注意关注版本信息,建议使用最新版本)
+ruyi -V
+
+#从配置的软件源更新本地软件包缓存(获取最新缓存才能获取软件仓库最新的软件包资源,保证ruyi list 命令返回的数据最新)
+ruyi update

说明:由于软件包索引信息目前托管的github仓库国内访问的网络不稳定性,因此如果存在ruyi update执行报连接错误,可将仓库切换到备用仓库,具体操作参考 ruyi 仓库文档在 ruyi 包管理工具默认的配置目录 ~/.config/ruyi 下通过 config.toml 文件配置(不同linux发行版可能不同,如果无可自己创建)。

安装编译工具链

ruyi 包管理器提供了不同组织发布的不同版本的GNU和LLVM编译工具链;可以使用 ruyi 包管理工具快速查询和安装:

bash
#从本地软件包缓存中列出可用软件包
+ruyi list
+
+#下载并安装指定的软件包
+ruyi install ruyi i

编译工具链的版本选择参考“编译工具链的不同扩展指令集实现与选择”章节。

准备代码

开发者往往都有自己的开发需求,对于有开发经验或者开发目标的开发者而言,可以使用 git 或者任何你习惯的方式将代码下载到本地。RuyiSDK 为新人用户提供了一些代码示例,方便新手直接从Ruyi Repo 软件源下载编译。

bash
#从软件源下载并解压指定的源码包
+ruyi extract

编译

RuyiSDK包管理器提供了虚拟环境技术,允许用户在系统中创建独立的环境,以隔离不同版本的编译工具链及库文件等。这样可以支持同一个开发环境中同时安装不同的编译工具链版本,并且相互不冲突和影响,提供更好的环境隔离。我们建议创建虚拟环境并在虚拟环境中进行编译操作,大致操作步骤如下:

bash
#前提:已经安装了所需的编译工具链
+
+#为隔离化编译创建虚拟环境,使用 ruyi venv -h 查看如何使用
+ruyi venv
+#举例:创建一个叫venv1的虚拟环境,并指定编译工具链为gnu-upstream,sysroot为generic类型,使用qemu-user-riscv-upstream模拟器
+ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
+
+
+#激活虚拟环境
+.  venv1/bin/ruyi-activate  
+
+#编译需要编译的程序源代码
+#此部分没有统一规范,按照待编译程序自身的编译说明执行,这里以coremark为例:
+#(1)设置coremark源码中的编译配置信息
+sed -i 's/\bgcc\b/riscv64-unknown-linux-gnu-gcc/g'  linux64/core_portme.mak
+#(2)执行交叉编译和构建,得到可执行程序coremark.exe
+make PORT_DIR=linux64 link
+#(3)查看rv64可执行程序文件属性信息,初步检验可执行程序是否RISC-V架构
+file coremark.exe

模拟运行

为了方便验证RISC-V目标可执行程序的正确性,一般通过模拟器工具来模拟运行环境:

bash
#前提:已经提前安装了所需的编译工具链、模拟器,并在虚拟环境中配置了qemu模拟器
+
+#qemu user模式下执行rv64 coremark可执行程序
+ruyi-qemu   coremark.exe
+
+#在编译和运行结束后,退出虚拟环境
+ruyi-deactivate

调试

TODO

上述结合使用场景简单的介绍了 RuyiSDK 包管理器和工具的使用,ruyi 的更多命令和命令具体使用方法详见“RUYI 包管理器”章节介绍。此外,目前也有一些简单的使用案例供参考。

+ + + + \ No newline at end of file diff --git a/zh/usedirection/developmentside/sources/coremark/index.html b/old/usedirection/developmentside/sources/coremark/index.html similarity index 65% rename from zh/usedirection/developmentside/sources/coremark/index.html rename to old/usedirection/developmentside/sources/coremark/index.html index dd13ef5e..663401ab 100644 --- a/zh/usedirection/developmentside/sources/coremark/index.html +++ b/old/usedirection/developmentside/sources/coremark/index.html @@ -8,16 +8,16 @@ - + - - + + -
Skip to content

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
+    
Skip to content

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
 «Ruyi milkv-venv» $

coremark 源码可以直接从 RUYI 软件仓库中下载:

bash
«Ruyi milkv-venv» $ mkdir coremark
 «Ruyi milkv-venv» $ cd coremark
 «Ruyi milkv-venv» $ ruyi extract coremark
@@ -53,8 +53,8 @@
 [0]crcstate      : 0x8e3a
 [0]crcfinal      : 0x5275
 Correct operation validated. See readme.txt for run and reporting rules.
-CoreMark 1.0 : 2011.937496 / GCC13.1.0 -O2   -static / Heap
- +CoreMark 1.0 : 2011.937496 / GCC13.1.0 -O2 -static / Heap
+ \ No newline at end of file diff --git a/old/usedirection/developmentside/typeselection/index.html b/old/usedirection/developmentside/typeselection/index.html new file mode 100644 index 00000000..6c4781e1 --- /dev/null +++ b/old/usedirection/developmentside/typeselection/index.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK中编译工具链类型简介 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK中编译工具链类型简介

编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状。这种现象是由于处理器架构的发展、厂商定制和优化、标准和规范的演进以及特定应用需求等因素相互作用的结果。

  1. 处理器架构的发展:随着时间的推移,处理器架构不断演进和改进。新的处理器架构可能引入了新的指令集扩展,以提供更高的性能、更多的功能和更好的能效。为了充分利用这些新的指令集扩展,需要更新和升级编译工具链。因此,不同版本的编译工具链可以支持不同处理器架构的特定指令集,并满足不同处理器版本的需求。
  2. 厂商定制和优化:不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化。它们可能通过改进指令执行流程、优化编译器生成的代码、添加特定的硬件加速器等方式,针对自己的处理器架构实现了特定版本的编译工具链。这样可以最大限度地发挥其处理器的性能和功能,并提供与其他竞争对手不同的优势。
  3. 标准和规范的演进:某些扩展指令集是由标准和规范定义的。然而,即使在同一个指令集标准下,不同版本的工具链也可能存在细微的差异和改进,以提供更好的性能、稳定性或兼容性。
  4. 特定应用需求:某些特定的应用领域可能对扩展指令集有特殊的需求。例如,嵌入式系统、机器学习、图像处理等领域可能需要针对特定指令集的优化和定制。不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持,以满足其特定的需求。

上述原因导致了编译工具链版本的多样性,这样的多样性为开发者提供了更多选择,并可以根据具体需求和目标平台选择适合的编译工具链版本。

RuyiSDK计划为持有不同RISC-V开发板的开发者们提供支持,让他们在RuyiSDK这个中心化的工具中便捷的获取使用和开发所需的支持。目前RuyiSDK已经提供的编译工具链有如下几种:

编译工具链类型说明
GNU工具链gnu-upstream
gnu-plct'gnu-plct(==0.20240324.0)' 支持了香山南湖微架构
gnu-plct-xtheadfor xuantie
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是elf。[仓库] [文章]
LLVM工具链llvm-upstream
QEMU模拟器qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead
+ + + + \ No newline at end of file diff --git a/old/usedirection/index.html b/old/usedirection/index.html new file mode 100644 index 00000000..5af08d50 --- /dev/null +++ b/old/usedirection/index.html @@ -0,0 +1,24 @@ + + + + + + 使用RuyiSDK | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

使用RuyiSDK

开发者在进行RISC-V开发时,主要的设备包括开发侧的个人电脑(开发环境)和运行侧的RISC-V设备(运行环境)。

开发环境目前更多的是x86_64架构的个人电脑,但是一些高性能的RISC-V设备也可以。在开发侧,通常完成目标可执行程序的准备工作:

  1. 准备RISC-V开发环境,如安装编译工具链、模拟器、调试工具等等
  2. 准备代码
  3. 编译代码
  4. 模拟运行
  5. 调试

运行环境主要是RISC-V硬件设备。在运行侧,通常用来运行RISC-V架构目标可执行程序以达到验证或者使用的目的。

  1. 为RISC-V开发板安装操作系统
  2. 安装目标程序运行所需的运行时环境/语言虚拟机等软件(通常由操作系统提供)
  3. 运行RISC-V目标程序

RuyiSDK针对上述常见的需求提供了包管理器、安装器、集成开发环境来为开发者提供方便。

+ + + + \ No newline at end of file diff --git a/old/usedirection/operationside/index.html b/old/usedirection/operationside/index.html new file mode 100644 index 00000000..05958dae --- /dev/null +++ b/old/usedirection/operationside/index.html @@ -0,0 +1,24 @@ + + + + + + 准备RISC-V运行环境 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

准备RISC-V运行环境

为RISC-V开发板安装操作系统

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

运行RISC-V目标程序

C程序,直接运行即可。

其它高级语言,如Java程序,python等,需要先安装运行时环境或语言虚拟机。

+ + + + \ No newline at end of file diff --git a/zh/Community/About-us.html b/zh/Community/About-us.html new file mode 100644 index 00000000..edc772b8 --- /dev/null +++ b/zh/Community/About-us.html @@ -0,0 +1,24 @@ + + + + + + 关于我们 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

关于我们

简介

  • RuyiSDK 社区旨在建设一个开放、友善、多样化、包容、健康社区。

  • 在参与社区讨论前,请先查阅社区守则以便更好的在社区内交流。

  • 如果您有更好的建议请通过以下的联系方式与我们取得联系,谢谢!

联系

你可以通过以下方式加入我们的社区:

  • 关注微信公众号:RUYISDK
  • 微信交流群:添加小助手 ruyisdk_helper
  • 发送邮件至 contact@ruyisdk.cn
  • 加入 Telegram 进行进一步讨论
+ + + + \ No newline at end of file diff --git a/zh/Community/Rules.html b/zh/Community/Rules.html new file mode 100644 index 00000000..38afbccd --- /dev/null +++ b/zh/Community/Rules.html @@ -0,0 +1,24 @@ + + + + + + 贡献者公约 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

贡献者公约

我们的承诺

身为社区成员、贡献者和领袖,我们承诺使社区参与者不受骚扰,无论其年龄、体型、可见或不可见的缺陷、族裔、性征、性别认同和表达、经验水平、教育程度、社会与经济地位、国籍、相貌、种族、种姓、肤色、宗教信仰、性倾向或性取向如何。

我们承诺以有助于建立开放、友善、多样化、包容、健康社区的方式行事和互动。

我们的准则

有助于为我们的社区创造积极环境的行为例子包括但不限于:

  • 表现出对他人的同情和善意
  • 尊重不同的主张、观点和感受
  • 提出和大方接受建设性意见
  • 承担责任并向受我们错误影响的人道歉
  • 注重社区共同诉求,而非个人得失

不当行为例子包括:

  • 使用情色化的语言或图像,及性引诱或挑逗
  • 嘲弄、侮辱或诋毁性评论,以及人身或政治攻击
  • 公开或私下的骚扰行为
  • 未经他人明确许可,公布他人的私人信息,如物理或电子邮件地址
  • 其他有理由认定为违反职业操守的不当行为

责任和权力

社区领袖有责任解释和落实我们所认可的行为准则,并妥善公正地对他们认为不当、威胁、冒犯或有害的任何行为采取纠正措施。

社区领导有权力和责任删除、编辑或拒绝或拒绝与本行为准则不相符的评论(comment)、提交(commits)、代码、维基(wiki)编辑、议题(issues)或其他贡献,并在适当时机知采取措施的理由。

适用范围

本行为准则适用于所有社区场合,也适用于在公共场所代表社区时的个人。

代表社区的情形包括使用官方电子邮件地址、通过官方社交媒体帐户发帖或在线上或线下活动中担任指定代表。

监督

辱骂、骚扰或其他不可接受的行为可通过 [插入联系方式] 向负责监督的社区领袖报告。 所有投诉都将得到及时和公平的审查和调查。

所有社区领袖都有义务尊重任何事件报告者的隐私和安全。

处理方针

社区领袖将遵循下列社区处理方针来明确他们所认定违反本行为准则的行为的处理方式:

1. 纠正

社区影响:使用不恰当的语言或其他在社区中被认定为不符合职业道德或不受欢迎的行为。

处理意见:由社区领袖发出非公开的书面警告,明确说明违规行为的性质,并解释举止如何不妥。或将要求公开道歉。

2. 警告

社区影响:单个或一系列违规行为。

处理意见:警告并对连续性行为进行处理。在指定时间内,不得与相关人员互动,包括主动与行为准则执行者互动。这包括避免在社区场所和外部渠道中的互动。违反这些条款可能会导致临时或永久封禁。

3. 临时封禁

社区影响: 严重违反社区准则,包括持续的不当行为。

处理意见: 在指定时间内,暂时禁止与社区进行任何形式的互动或公开交流。在此期间,不得与相关人员进行公开或私下互动,包括主动与行为准则执行者互动。违反这些条款可能会导致永久封禁。

4. 永久封禁

社区影响:行为模式表现出违反社区准则,包括持续的不当行为、骚扰个人或攻击或贬低某个类别的个体。

处理意见:永久禁止在社区内进行任何形式的公开互动。

参见

本行为准则改编自 Contributor Covenant 2.1 版, 参见 https://www.contributor-covenant.org/version/2/1/code_of_conduct.html

社区处理方针灵感来源于 Mozilla's code of conduct enforcement ladder

有关本行为准则的常见问题的答案,参见 https://www.contributor-covenant.org/faq。 其他语言翻译参见 https://www.contributor-covenant.org/translations

+ + + + \ No newline at end of file diff --git a/zh/IDE/TODO.html b/zh/IDE/TODO.html new file mode 100644 index 00000000..bd1613ea --- /dev/null +++ b/zh/IDE/TODO.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

TODO

+ + + + \ No newline at end of file diff --git a/zh/Other/GNU-type.html b/zh/Other/GNU-type.html new file mode 100644 index 00000000..33b17684 --- /dev/null +++ b/zh/Other/GNU-type.html @@ -0,0 +1,24 @@ + + + + + + RuyiSDK 编译工具 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

RuyiSDK 编译工具

RuyiSDK 提供的编译工具链

RuyiSDK 提供了多种类型的编译工具链,适用于不同的 RISC-V 开发板和应用场景。

编译工具链类型说明相关链接
GNU 工具链仓库
gnu-upstream标准 GNU 工具链
gnu-plct支持香山南湖微架构 'gnu-plct(==0.20240324.0)'
gnu-plct-xthead适用于玄铁
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是 elf仓库
文章
LLVM 工具链
llvm-upstream
QEMU 模拟器仓库
qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead

编译工具链的多样性

如上表, 目前 RuyiSDK 编译工具链由于能够实现不同扩展指令集,进而有了不同版本的情况,这也就使得编译工具链具有多样性。 原因有以下几点:

  1. 处理器架构发展:处理器架构在不断更新迭代的过程中会引进新的指令集扩展以满足不同的需求,为使得这部分新的指令集扩展能够充分运用,编译工具链也会随之进行更新,出现不同的版本。
  2. 厂商定制优化:不同的厂商会针对同一个指令集进行不同程度的定制化,进而对编译工具链进行定制化。
  3. 标准和规范的演进:扩展指令集虽被规范化,但不同版本的工具链在相同标准下也会体现出不同的性能、稳定性以及兼容性。
  4. 特定应用需求:不同的应用领域对扩展指令集有不同的需求,如嵌入式系统、机器学习、图像处理等,不同版本编译工具链会针对特定领域进行优化。

上述原因使得编译工具链出现了多样化,这样的多样化为开发者提供了更多的选择,满足更加复杂的开发场景。

+ + + + \ No newline at end of file diff --git a/zh/Package-Manager/Complie.html b/zh/Package-Manager/Complie.html new file mode 100644 index 00000000..e3b884c1 --- /dev/null +++ b/zh/Package-Manager/Complie.html @@ -0,0 +1,54 @@ + + + + + + 编译工具链安装 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

编译工具链安装

通过前置步骤,你已经可以正确使用 ruyi 包管理器,在这个模块中我们更进一步的安装 RISC-V 上相关的编译器。

目前 ruyi 包管理器提供了不同组织所发布的 GNU 以及 LLVM 编译工具链,你可以通过 ruyi list 轻松的查看。

若要安装特定的安装包,请使用 ruyi installruyi i 完成安装。

其他说明

编译工具链的版本选择参考RuyiSDK 编译工具

编译

代码准备

当正确获取了编译工具链后,可以通过 git 等任何方式获取源码到本地,同时,RuyiSDK 为新用户提供了一些代码示例,方便用户可以直接从 Ruyi Repo 的软件源中获取源码,可以通过如下指令实现:

bash
# 从软件源下载并解压指定的源码包
+
+ruyi extract

获取源码后,RuyiSDK 包管理器提供了虚拟环境技术,用户可以在系统中创建独立的环境,以确保对于不同版本编译工具链以及库文件进行环境隔离。 保证了用户在同以开发环境中能够安装使用不同的编译工具链版本,提供更好的环境隔离,保证开发过程的高效性。

我们建议在虚拟环境中进行编译操作,步骤如下:

bash
# 开始编译
+# 为隔离化编译创建虚拟环境,使用 ruyi venv -h 查看如何使用
+
+ruyi venv
+
+# 举例:创建一个叫 venv1 的虚拟环境,并指定编译工具链为 gnu-upstream,sysroot 为 generic 类型,使用 qemu-user-riscv-upstream 模拟器
+
+ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
+
+
+# 激活虚拟环境
+
+.  venv1/bin/ruyi-activate  
+
+# 编译需要编译的程序源代码
+# 此部分没有统一规范,按照待编译程序自身的编译说明执行,这里以 coremark 为例:
+
+#(1)设置 coremark 源码中的编译配置信息
+sed -i 's/\bgcc\b/riscv64-unknown-linux-gnu-gcc/g'  linux64/core_portme.mak
+
+#(2)执行交叉编译和构建,得到可执行程序 coremark.exe
+make PORT_DIR=linux64 link
+
+#(3)查看 rv64 可执行程序文件属性信息,初步检验可执行程序是否 RISC-V 架构
+file coremark.exe

模拟运行

在进入该步骤前,请确保已经安装了编译所需的编译工具链、模拟器,并在虚拟环境中配置了 qemu 模拟器。

为确保 RISC-V 目标可执行程序的正确性,通过模拟器工具(如 qemu)模拟运行环境:

bash
#  qemu user 模式下执行 rv64 coremark 可执行程序
+ruyi-qemu   coremark.exe
+
+# 在编译和运行结束后,退出虚拟环境
+ruyi-deactivate

调试

TODO

+ + + + \ No newline at end of file diff --git a/zh/Package-Manager/Enviroment.html b/zh/Package-Manager/Enviroment.html new file mode 100644 index 00000000..cd7c3a8b --- /dev/null +++ b/zh/Package-Manager/Enviroment.html @@ -0,0 +1,112 @@ + + + + + + ruyi 编译环境 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

ruyi 编译环境

与 python 的虚拟环境类似,ruyi 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

ruyi 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+generic
+baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
+sipeed-lpi4a (needs flavor(s): {'xthead'})
+milkv-duo

工具链与预置配置组合

ruyi 包管理在建立编译环境之前会检查该环境是否合法,但是并不保证建立成功的环境一定可用于构建。

这里列出了经过测试可用的配置组合:

工具链(toolchain)sysroot预置配置(profile)
gnu-upstream自带generic
gnu-plct自带generic
gnu-plct自带milkv-duo
gnu-plct自带xiangshan-nanhu
gnu-plct-xthead自带sipeed-lpi4a
gnu-plct-rv64ilp32-elfbaremetal-rv64ilp32
llvm-upstreamgnu-upstreamgeneric
llvm-upstreamgnu-plctgeneric

创建虚拟环境

ruyiSDK 包管理器工具可使用 ruyi venv 创建虚拟环境,具体的使用方法可通过 help 命令获得:

bash
$ ruyi venv -h
+usage: ruyi venv [-h] [--name NAME] [--toolchain TOOLCHAIN] [--emulator EMULATOR] [--with-sysroot] [--without-sysroot]
+                 [--sysroot-from SYSROOT_FROM]
+                 profile dest
+
+positional arguments:
+  profile               Profile to use for the environment
+  dest                  Path to the new virtual environment
+
+options:
+  -h, --help            show this help message and exit
+  --name NAME, -n NAME  Override the venv's name
+  --toolchain TOOLCHAIN, -t TOOLCHAIN
+                        Specifier (atom) of the toolchain package to use
+  --emulator EMULATOR, -e EMULATOR
+                        Specifier (atom) of the emulator package to use
+  --with-sysroot        Provision a fresh sysroot inside the new virtual environment (default)
+  --without-sysroot     Do not include a sysroot inside the new virtual environment
+  --sysroot-from SYSROOT_FROM
+                        Specifier (atom) of the sysroot package to use, in favor of the toolchain-included one if applicable

参考上表代入具体的参数,不同的虚拟环境创建如下:

bash
# 使用 GNU 上游工具链配置 RISC-V 编译环境:
+$ ruyi venv -t gnu-upstream generic ./generic-venv
+
+# 使用 PLCT 工具链配置 Milkv-Duo 编译环境:
+$ ruyi venv -t gnu-plct milkv-duo ./milkv-venv
+
+# 使用 PLCT 工具链配置香山南湖编译环境:
+$ ruyi venv -t gnu-plct xiangshan-nanhu ./nanhu-venv
+
+# 使用 LLVM 上游工具链配置 RISC-V 编译环境:
+$ ruyi venv -t llvm-upstream --sysroot-from gnu-upstream generic ./llvm-venv
+
+# 使用平头哥工具链配置荔枝派 4A 编译环境:
+$ ruyi venv -t gnu-plct-xthead-20231212 sipeed-lpi4a ./sipeed-venv
+
+# 使用上游 QEMU 模拟器运行交叉编译的 RISC-V 二进制
+$ ruyi venv -t gnu-plct generic -e qemu-user-riscv-upstream ./qemu-venv
+
+# 使用平头哥 QEMU 模拟器运行交叉编译的 RISC-V 二进制
+$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./xthead-qemu-venv

在虚拟环境下编译

在创建虚拟环境之前,需要先 ruyi install 安装虚拟环境中使用的编译工具链、模拟器等所需的工具。

下面以任一个编译工具链在虚拟环境中编译程序一般的操作说明操作步骤:

  1. 安装编译工具链
bash
$ ruyi install gnu-upstream
  1. 建立编译环境
bash
$ ruyi venv -t gnu-upstream generic venv
+
+# -t gnu-upstream 指定了编译工具链的类型和版本(版本除非指定,默认最新);generic 表示 generic 类型的 profile;venv是自定义的虚拟环境名(相对路径目录名)
  1. 查看可用的工具链二进制
bash
$ ls ./venv/bin/
+riscv64-unknown-linux-gnu-addr2line  riscv64-unknown-linux-gnu-gcc            riscv64-unknown-linux-gnu-gfortran  riscv64-unknown-linux-gnu-ranlib
+riscv64-unknown-linux-gnu-ar         riscv64-unknown-linux-gnu-gcc-ar         riscv64-unknown-linux-gnu-gprof     riscv64-unknown-linux-gnu-readelf
+riscv64-unknown-linux-gnu-as         riscv64-unknown-linux-gnu-gcc-nm         riscv64-unknown-linux-gnu-ld        riscv64-unknown-linux-gnu-size
+riscv64-unknown-linux-gnu-c++        riscv64-unknown-linux-gnu-gcc-ranlib     riscv64-unknown-linux-gnu-ld.bfd    riscv64-unknown-linux-gnu-strings
+riscv64-unknown-linux-gnu-cc         riscv64-unknown-linux-gnu-gcov           riscv64-unknown-linux-gnu-ldd       riscv64-unknown-linux-gnu-strip
+riscv64-unknown-linux-gnu-c++filt    riscv64-unknown-linux-gnu-gcov-dump      riscv64-unknown-linux-gnu-lto-dump  ruyi-activate
+riscv64-unknown-linux-gnu-cpp        riscv64-unknown-linux-gnu-gcov-tool      riscv64-unknown-linux-gnu-nm
+riscv64-unknown-linux-gnu-elfedit    riscv64-unknown-linux-gnu-gdb            riscv64-unknown-linux-gnu-objcopy
+riscv64-unknown-linux-gnu-g++        riscv64-unknown-linux-gnu-gdb-add-index  riscv64-unknown-linux-gnu-objdump

除了 ruyi-activate 为激活编译环境用的脚本,其他均为工具链二进制。

  1. 激活构建环境,激活方式与 python 虚拟环境类似,并且改变提示符以提示当前进入编译环境中:
bash
$ . venv/bin/ruyi-activate
+«Ruyi venv» $

也可以使用 source 命令:

bash
$ source venv/bin/ruyi-activate
+«Ruyi venv» $
  1. 调用工具链:
bash
«Ruyi venv» $ riscv64-unknown-linux-gnu-gcc --version
+riscv64-unknown-linux-gnu-gcc (RuyiSDK 20231212 Upstream-Sources) 13.2.0
+Copyright (C) 2023 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1. 编译 可按需对指定程序执行编译操作。这里跳过具体事例。
  2. 退出编译环境 在编译或者运行验证完毕后,可以执行如下命令退出编译环境,退出后环境将被还原。
bash
«Ruyi venv» $ ruyi-deactivate
+$

实际操作中请注意将上述例子中的参数替换为正确的值。

模拟运行

在 x86-64 环境下使用平头哥工具链配置带 QEMU 支持的荔枝派 4A 编译环境,并使用平头哥 QEMU 运行构建出的 RISC-V 二进制 的操作参考如下:

  1. 安装编译工具链
bash
$ ruyi install gnu-plct-xthead qemu-user-riscv-xthead
  1. 建立编译环境:
bash
$ ruyi venv -t gnu-plct-xthead sipeed-lpi4a -e qemu-user-riscv-xthead ./qemu_venv
  1. 查看可用的二进制:
bash
$ ls qemu_venv/bin/
+riscv64-plctxthead-linux-gnu-addr2line  riscv64-plctxthead-linux-gnu-gcc-ranlib     riscv64-plctxthead-linux-gnu-nm
+riscv64-plctxthead-linux-gnu-ar         riscv64-plctxthead-linux-gnu-gcov           riscv64-plctxthead-linux-gnu-objcopy
+riscv64-plctxthead-linux-gnu-as         riscv64-plctxthead-linux-gnu-gcov-dump      riscv64-plctxthead-linux-gnu-objdump
+riscv64-plctxthead-linux-gnu-c++        riscv64-plctxthead-linux-gnu-gcov-tool      riscv64-plctxthead-linux-gnu-ranlib
+riscv64-plctxthead-linux-gnu-cc         riscv64-plctxthead-linux-gnu-gdb            riscv64-plctxthead-linux-gnu-readelf
+riscv64-plctxthead-linux-gnu-c++filt    riscv64-plctxthead-linux-gnu-gdb-add-index  riscv64-plctxthead-linux-gnu-size
+riscv64-plctxthead-linux-gnu-cpp        riscv64-plctxthead-linux-gnu-gfortran       riscv64-plctxthead-linux-gnu-strings
+riscv64-plctxthead-linux-gnu-elfedit    riscv64-plctxthead-linux-gnu-gprof          riscv64-plctxthead-linux-gnu-strip
+riscv64-plctxthead-linux-gnu-g++        riscv64-plctxthead-linux-gnu-ld             ruyi-activate
+riscv64-plctxthead-linux-gnu-gcc        riscv64-plctxthead-linux-gnu-ld.bfd         ruyi-qemu
+riscv64-plctxthead-linux-gnu-gcc-ar     riscv64-plctxthead-linux-gnu-ldd
+riscv64-plctxthead-linux-gnu-gcc-nm     riscv64-plctxthead-linux-gnu-lto-dump

可以看到 QEMU 模拟器的命令为 ruyi-qemu

  1. 进入编译环境:
bash
$ . qemu_venv/bin/ruyi-activate
+«Ruyi qemu_venv» $
  1. 编译一个简单的 C 程序并使用 QEMU 运行:
bash
«Ruyi qemu_venv» $ cd qemu_venv/
+«Ruyi qemu_venv» $ cat > test.c << EOF
+#include <stdio.h>
+
+int main()
+{
+    printf("hello, ruyi");
+    putchar('\n');
+
+    return 0;
+}
+EOF
+«Ruyi qemu_venv» $ riscv64-plctxthead-linux-gnu-gcc -O3 test.c -o test
+«Ruyi qemu_venv» $ ruyi-qemu ./test
+hello, ruyi
  1. 退出编译环境:
bash
«Ruyi qemu_venv» $ ruyi-deactivate
+$
+ + + + \ No newline at end of file diff --git a/zh/Package-Manager/index.html b/zh/Package-Manager/index.html new file mode 100644 index 00000000..b096d510 --- /dev/null +++ b/zh/Package-Manager/index.html @@ -0,0 +1,62 @@ + + + + + + ruyi 包管理器功能说明 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

ruyi 包管理器功能说明

ruyi 包管理器提供以下功能。

命令查询

命令含义注意事项
ruyi update更新软件包缓存,使用默认镜像。软件包缓存将存放在用户目录中,通常为 ~/.cache/ruyi
ruyi news list -h查看新闻命令的帮助信息。
ruyi news list列出所有新闻。
ruyi news list --new仅列出未读新闻。
ruyi news read -h查看新闻阅读命令的帮助信息。
ruyi news read 1读取特定序号的新闻。1 为要读取的新闻条目的序号或 ID。
ruyi news read读取下一条新闻。
ruyi news read --quiet标记新闻为已读,不输出任何信息。不输出任何东西,只标记为已读。
ruyi list列出所有可用软件包。
ruyi list -v列出所有软件包的详细信息。
ruyi list profiles查看预置的编译环境配置。与 Python 虚拟环境类似。
ruyi install gnu-upstream安装最新的 GNU 上游工具链。默认安装最新版本的 gnu-upstream。
ruyi install 'gnu-upstream(0.20231118.0)'安装指定版本的 GNU 上游工具链。通过指定版本号安装历史版本。
ruyi install 'gnu-upstream(==0.20231118.0)'安装特定版本的 GNU 上游工具链。版本匹配格式应为 <op><ver>
ruyi install --reinstall gnu-upstream重新安装 GNU 上游工具链。
ruyi extract ruyisdk-demo下载并解包ruyisdk-demo 源码包。解包到当前目录。
ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv在指定目录建立包含工具链和模拟器的编译环境。使用预置的 generic 配置。
ruyi self uninstall卸载 ruyi 包管理器。命令会询问确认操作。
ruyi self uninstall -y无需确认直接卸载 ruyi 包管理器。无需确认直接执行。
ruyi self uninstall --purge彻底卸载 ruyi 包管理器,包括缓存和安装的软件包。包括缓存和已安装的软件包。
ruyi self uninstall --purge -y无需确认彻底卸载 ruyi 包管理器。无需确认直接执行。
ruyi device provision下载所需系统镜像,并为设备安装系统。按照引导进行系统安装。

以下内容为表格内容详细说明。

刷新软件包缓存

更新软件包缓存,使用默认镜像即可:

bash
$ ruyi update

软件包缓存将存放在用户目录中,通常为 ~/.cache/ruyi ;在 XDG_CACHE_HOME 环境变量被设置时,目录为 $XDG_CACHE_HOME/ruyi 。 在本文档中家目录为 /home/myon

查询包管理器更新内容

查看 ruyi 包管理器的更新信息、阅读新闻或将信息设置为已读:

bash
$ ruyi news list -h
+$ ruyi news list
+$ ruyi news list --new		  # 仅列出未读新闻
+
+$ ruyi news read -h
+$ ruyi news read 1 		      # 1为要读取的新闻条目的序号或ID
+$ ruyi news read   		      # 读取下一条新闻
+$ ruyi news read --quiet  	# 不输出任何东西,只标记为已读

查询可用软件包

查看可用的软件包,该命令将列出所有可用的软件包:

bash
$ ruyi list
+List of available packages:
+
+* source/ruyisdk-demo
+  - 0.20231114.0 (latest)
+* source/coremark
+  - 1.0.2-pre.20230125 (prerelease, latest-prerelease)
+  - 1.0.1 (latest)
+* emulator/qemu-user-riscv-xthead
+  - 6.1.0-ruyi.20231207+g03813c9fe8 (latest)
+* emulator/qemu-user-riscv-upstream
+  - 8.1.2-ruyi.20231121 (latest)
+* toolchain/gnu-plct
+  - 0.20231212.0 (latest) slug: gnu-plct-20231212
+  - 0.20231118.0 () slug: gnu-plct-20231118
+* toolchain/gnu-plct-xthead
+  - 0.20231212.0 (latest) slug: gnu-plct-xthead-20231212
+  - 0.20231118.0 () slug: gnu-plct-xthead-20231118
+* toolchain/gnu-upstream
+  - 0.20231212.0 (latest) slug: gnu-upstream-20231212
+  - 0.20231118.0 () slug: gnu-upstream-20231118
+* toolchain/llvm-upstream
+  - 17.0.5-ruyi.20231121 (latest) slug: llvm-upstream-20231121

软件包前缀表示分类,其中 source 代表软件源码包, toolchain 代表工具链二进制包, emulator 代表模拟器二进制包,board-image 代表开发板镜像,analyzer 代表分析工具。

如果软件包显示 “no binary for current host” 则该软件包的当前版本不支持本机架构。

列出所有软件包的详细信息:

bash
$ ruyi list -v

查询可用编译环境

与python 的虚拟环境类似,RUYI 包管理器工具使用 venv 命令应用配置到指定的工具链以建立编译环境。

RUYI 包管理预置的配置可以使用 ruyi list profiles 命令查看:

bash
$ ruyi list profiles
+generic
+baremetal-rv64ilp32 (needs flavor(s): {'rv64ilp32'})
+sipeed-lpi4a (needs flavor(s): {'xthead'})
+milkv-duo

安装软件包

使用 install 命令安装软件包,如 GNU 上游工具链:

bash
$ ruyi install gnu-upstream

上述通过指定软件包名安装的方式默认会安装 latest 的 gnu-upstream,如果想安装某个历史版本的 gnu-upstream,则可以通过指定版本来安装:

bash
$ ruyi install 'gnu-upstream(0.20231118.0)'
+$ ruyi install 'gnu-upstream(==0.20231118.0)'
+
+# match_expr parameter should be in format `<op><ver>`, where `<op>` is one of ['<', '>', '==', '<=', '>=', '!='].

若希望重装一个软件包,则可以加上 --reinstall 参数:

bash
$ ruyi install --reinstall gnu-upstream

安装源码包

ruyi 包管理器同时管理一些源码包,使用 extract 命令下载一个源码包并解包到当前目录:

bash
$ ruyi extract ruyisdk-demo
+$ ls
+README.md  rvv-autovec

搭建编译环境

已经安装的工具链与模拟器需要在 ruyi 编译环境中使用,这和 python 的虚拟环境十分类似。 这是由 venv 命令实现的:

bash
$ ruyi venv --toolchain gnu-upstream --emulator qemu-user-riscv-upstream generic ./ruyi_venv

这个命令使用预置的 generic 配置,在 ./ruyi_venv 目录建立包含 gnu-upstream 工具链和 qemu-user-riscv-upstream 模拟器的编译环境。

具体使用参见“编译环境”与“具有 QEMU 支持的编译环境”章节。

卸载软件包

注意 ruyi 包管理器没有实现卸载 ruyi 软件包的功能。若您强制中断 ruyi 软件包安装进程或做了其他非预期操作 而会导致软件包功能异常时,请使用 install --reinstall 以尝试重试安装该软件包。

卸载 RUYI 包管理器

使用下面的命令卸载 Ruyi 包管理器:

bash
$ ruyi self uninstall

这个命令将会询问您以二次确认该操作,如果希望 Ruyi 包管理不询问而直接执行:

bash
$ ruyi self uninstall -y

上面的命令只是删除 Ruyi 本身,并不会删除软件包缓存和安装的 Ruyi 软件包。

如果希望删除所有缓存和安装了的软件包以实现干净的卸载:

bash
$ ruyi self uninstall --purge

同样的这个命令将会询问您以二次确认该操作,如果希望 Ruyi 包管理不询问而直接执行:

bash
$ ruyi self uninstall --purge -y

实现 Ruyi 包管理自身的升级可能会需要 sudo,而 Ruyi 包管理被设计为避免进行需要超级用户权限的操作。 故在需要升级 Ruyi 包管理时您需要手动进行该操作,即首先卸载 Ruyi 包管理器,再执行安装 Ruyi 包管理器的过程, 这个过程中您可以自主选择是否保留旧的软件包缓存和 Ruyi 软件包。

镜像信息的维护与下载、开发板系统的安装引导

执行如下命令并按照引导执行即可下载所需系统镜像,为设备安装系统:

bash
$ ruyi device provision
+ + + + \ No newline at end of file diff --git a/zh/Package-Manager/installation.html b/zh/Package-Manager/installation.html new file mode 100644 index 00000000..9ec57850 --- /dev/null +++ b/zh/Package-Manager/installation.html @@ -0,0 +1,48 @@ + + + + + + ruyi 包管理器安装 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

ruyi 包管理器安装

让我们从 RuyiSDK 包管理器的安装开始:

获取 ruyi 包管理器

目前 RuyiSDK 包管理器工具目前能在 amd64arm64riscv64 三种架构在 Linux 系统下运行,可以从如下链接中下载:

你可以首先使用 ruyi update 从配置的软件源中获得本地软件包缓存的更新,再使用 ruyi list 查看目前所支持的包。

若还有其余相关问题可以访问 ruyi 包管理器仓库文档(目前仅支持英文)参阅。

amd64 架构示例

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/testing/ruyi.amd64.20231211
+$ chmod +x ./ruyi.amd64.20231211
+$ sudo cp ruyi.amd64.20231211 /usr/local/bin/ruyi
+$ ruyi version
+Ruyi 0.2.0-beta.20231211
+Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
+All rights reserved.
+License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>

ruyi version 应当可以正常打印版本信息。注意二进制的文件名必须为 ruyi。

列出帮助信息:

bash
$ ruyi --help
+
+RuyiSDK Package Manager 0.2.0-beta.20231211
+
+options:
+  -h, --help            show this help message and exit
+  -V, --version         Print version information
+
+subcommands:
+  {extract,install,i,list,update,venv,admin,self,version}
+    extract             Fetch package(s) then extract to current directory
+    install (i)         Install package from configured repository
+    list                List available packages in configured repository
+    update              Update RuyiSDK repo and packages
+    venv                Generate a virtual environment adapted to the chosen toolchain and profile
+    admin               (NOT FOR REGULAR USERS) Subcommands for managing Ruyi Repos
+    self                Manage this Ruyi installation
+    version             Print version information

其他说明

  1. 由于目前软件包索引信息托管于 GitHub 仓库,国内访问可能会产生不稳定等问题,若出现 ruyi update 执行时连续报错,可将仓库更换成 备用仓库

  2. 具体操作:参考 ruyi 仓库文档在 ruyi 包管理工具默认的配置目录 ~/.config/ruyi 下通过 config.toml 文件配置(不同linux发行版可能不同,如果无可自己创建)。

总结

以上场景介绍了 ruyi 包管理器和工具的基本使用,包括:

  • 安装 ruyi
  • 使用 ruyi list ruyi update ruyi install 功能
  • 若出现网络不稳定的备用方案

ruyi 包管理器相关的更多命令以及命令具体使用方法请参阅功能介绍

使用案例

目前有一些简单的使用案例提供参考,请参阅使用案例栏目。

+ + + + \ No newline at end of file diff --git a/zh/RuyiSDK/case1.html b/zh/RuyiSDK/case1.html new file mode 100644 index 00000000..74544a80 --- /dev/null +++ b/zh/RuyiSDK/case1.html @@ -0,0 +1,60 @@ + + + + + + 使用编译环境进行 Coremark 构建 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

使用编译环境进行 Coremark 构建

本文使用 Milkv-Duo 编译环境,构建 coremark 。

首先进入编译环境:

bash
$ . milkv-venv/bin/ruyi-activate
+«Ruyi milkv-venv» $

coremark 源码可以直接从 Ruyi 软件仓库中下载:

bash
«Ruyi milkv-venv» $ mkdir coremark
+«Ruyi milkv-venv» $ cd coremark
+«Ruyi milkv-venv» $ ruyi extract coremark
+info: downloading https://mirror.iscas.ac.cn/RuyiSDK/dist/coremark-1.01.tar.gz to /home/myon/.cache/ruyi/distfiles/coremark-1.01.tar.gz
+  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
+                                 Dload  Upload   Total   Spent    Left  Speed
+100  391k  100  391k    0     0  1400k      0 --:--:-- --:--:-- --:--:-- 1404k
+info: extracting coremark-1.01.tar.gz for package coremark-1.0.1
+info: package coremark-1.0.1 extracted to current working directory

这个操作将从 Ruyi 软件源中下载 coremark 源码并解包到当前目录

由于使用的工具链为 riscv64-plct-linux-gnu-gcc ,需要编辑构建脚本:

bash
«Ruyi milkv-venv» $ sed -i 's/\bgcc\b/riscv64-plct-linux-gnu-gcc/g' linux64/core_portme.mak

构建 coremark:

bash
«Ruyi milkv-venv» $ make PORT_DIR=linux64 link
+riscv64-plct-linux-gnu-gcc -O2 -Ilinux64 -I. -DFLAGS_STR=\""-O2   -lrt"\" -DITERATIONS=0  core_list_join.c core_main.c core_matrix.c core_state.c core_util.c linux64/core_portme.c -o ./coremark.exe -lrt
+Link performed along with compile
+«Ruyi milkv-venv» $ file coremark.exe
+coremark.exe: ELF 64-bit LSB executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=d9dbc7115d07d1953087dd2c1e5d46adc2ab0d4f, for GNU/Linux 4.15.0, with debug_info, not stripped

可以看到成功构建 RISC-V 架构的二进制。注意这整个过程如果在 riscv64 环境则不是交叉编译。

退出虚拟环境

bash
«Ruyi milkv-venv» $ ruyi-deactivate
+$

在最新的 Milkv Duo 镜像上运行

传送 coremark 二进制的 Milkv Duo, Milkv Duo 的 IP 地址请按实际情况更改。

bash
$ scp -O ./coremark.exe root@192.168.42.1:~

在 Milkv Duo 上运行

bash
[root@milkv-duo]~# ./coremark.exe
+-sh: ./coremark.exe: not found

若出现这样的错误,则需要静态链接的二进制。

bash
«Ruyi milkv-venv» $ make PORT_DIR=linux64 LFLAGS_END=-static link
+riscv64-plct-linux-gnu-gcc -O2 -Ilinux64 -I. -DFLAGS_STR=\""-O2   -static"\" -DITERATIONS=0  core_list_join.c core_main.c core_matrix.c core_state.c core_util.c linux64/core_portme.c -o ./coremark.exe -static
+Link performed along with compile
+«Ruyi milkv-venv» $ file coremark.exe
+coremark.exe: ELF 64-bit LSB executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), statically linked, BuildID[sha1]=1548f6b30560e1ca6f3fa8ba3ef6aea4188feacf, for GNU/Linux 4.15.0, with debug_info, not stripped

重新上传后运行

bash
[root@milkv-duo]~# ./coremark.exe
+2K performance run parameters for coremark.
+CoreMark Size    : 666
+Total ticks      : 14911
+Total time (secs): 14.911000
+Iterations/Sec   : 2011.937496
+Iterations       : 30000
+Compiler version : GCC13.1.0
+Compiler flags   : -O2   -static
+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      : 0x5275
+Correct operation validated. See readme.txt for run and reporting rules.
+CoreMark 1.0 : 2011.937496 / GCC13.1.0 -O2   -static / Heap
+ + + + \ No newline at end of file diff --git a/zh/RuyiSDK/case2.html b/zh/RuyiSDK/case2.html new file mode 100644 index 00000000..ba156ec3 --- /dev/null +++ b/zh/RuyiSDK/case2.html @@ -0,0 +1,76 @@ + + + + + + 为 RISC-V 开发板安装操作系统 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

为 RISC-V 开发板安装操作系统

目前 ruyi 包管理器提供了更为简便的操作系统安装方式,通过以下步骤以及相关引导即可完成安装。

环境

本文基于以下环境进行操作:

  • 硬件:x86_64 PC
  • 软件:Ubuntu 22.04

其他说明

  • 在任意 Linux 系统下皆可完成下文操作

连接方式,以下任选:

  1. RISC-V 开发板以 USB 连接线接入 PC(若可以连接,推荐该方式)
  2. 将 RISC-V 开发板 SD 卡通过读卡器接入 PC

安装操作系统

在确保已安装 ruyi 包管理器,并且测试 ruyi -V 正常输出版本相关信息后,请继续以下操作。

ruyi 包管理器提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的 RISC-V 开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
+
+This is a wizard intended to help you install a system on your device for your
+development pleasure, all with ease.
+
+You will be asked some questions that help RuyiSDK understand your device and
+your intended configuration, then packages will be downloaded and flashed onto
+the device's storage, that you should somehow make available on this host
+system beforehand.
+
+Note that, as Ruyi does not run as root, but raw disk access is most likely
+required to flash images, you should arrange to allow your user account sudo
+access to necessary commands such as dd. Flashing will fail if the sudo
+configuration does not allow so.
+
+Continue? (y/N) y
+
+The following devices are currently supported by the wizard. Please pick your device:
+
+1. Allwinner Nezha D1
+2. Canaan Kendryte K230
+3. Milk-V Duo
+4. Milk-V Pioneer Box
+5. SiFive HiFive Unmatched
+6. Sipeed Lichee RV
+7. Sipeed LicheePi 4A
+8. StarFive VisionFive
+9. StarFive VisionFive2
+
+Choice? (1-9)

以上,以 Sipeed LicheePi 4A 为例,需要为其安装镜像,只需要输入对应的序号:7

Choice? (1-9) 7
+
+The device has the following variants. Please choose the one corresponding to your hardware at hand:
+
+  1. Sipeed LicheePi 4A (8G RAM)
+  2. Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-2) 2
+
+The following system configurations are supported by the device variant you have chosen. Please pick the one you want 
+to put on the device:
+
+  1. openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)
+  2. openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)
+  3. RevyOS for Sipeed LicheePi 4A (16G RAM)
+
+Choice? (1-3) 3
+
+We are about to download and install the following packages for your device:
+
+ * board-image/revyos-sipeed-lpi4a
+ * board-image/uboot-revyos-sipeed-lpi4a-16g
+
+Proceed? (y/N)

您只需要按照引导提示一步步执行即可。

其他说明

相关的系统刷写问题可以访问对应开发板官网以获取针对性的帮助。

+ + + + \ No newline at end of file diff --git a/zh/RuyiSDK/case3.html b/zh/RuyiSDK/case3.html new file mode 100644 index 00000000..7a69a6ef --- /dev/null +++ b/zh/RuyiSDK/case3.html @@ -0,0 +1,45 @@ + + + + + + 使用示例 | RuyiSDK documentation + + + + + + + + + + + + + +
Skip to content

使用示例

以开源基准测试程序 coremark 为例,展示从 ruyi 包管理器安装到使用 ruyi 包管理器搭建 RISC-V 的编译、模拟环境,完成 coremark 源码本地编译并在 Licheepi 4A 开发板上运行的过程。

环境说明

  • 硬件环境:Licheepi 4A 开发板(th1520)
  • 软件环境:Debian/openEuler for RISC-V

ruyi 包管理器的安装

  1. [可选] 清除当前已经安装的 ruyi 包管理器及其所有数据。
bash
ruyi self uninstall --purge
  1. 下载 ruyi 工具并为其赋可执行权限并配置到环境变量中:从ruyi GitHub ReleasesISCAS 镜像源下载最新的 ruyi 工具。
bash
# 下载 riscv64 版本的 ruyi 包管理器,将其放到 path 路径下,并赋予其可执行权限
+wget https://github.com/RuyiSDK/ruyi/releases/download/0.5.0/ruyi-0.5.0.riscv64
+sudo cp ruyi-0.5.0.riscv64 /usr/local/bin/ruyi
+sudo chmod +x ruyi
+cd
  1. 验证 ruyi 包管理器可否使用
bash
ruyi --version
  1. 更新最新的软件源索引
bash
ruyi update

详细请见此处

使用 ruyi 包管理器部署开发环境:

  1. 查看软件仓软件包索引信息
bash
ruyi list
  1. 安装 gnu:ruyi install <package-name>
bash
#安装适用于 Licheepi 4A 的编译工具链 gnu-plct-xthead 
+ruyi install gnu-plct-xthead
  1. 查看预置编译环境
bash
ruyi list profiles
  1. 由指定的工具链、模拟器配置建立 Ruyi 虚拟环境 venv-sipeed。

    注意在虚拟环境创建时,需要指定正确的编译器版本和 sysroot 类型。

bash
ruyi venv -h
+
+##创建虚拟环境 venv-sipeed
+ruyi venv -t gnu-plct-xthead sipeed-lpi4a venv-sipeed 
+
+#查看编译环境中得工具
+ls venv-sipeed/bin/ 
+
+#激活虚拟环境(虚拟环境可以理解成一个容器,实现运行环境隔离的设计,激活后,在 venv-sipeed 这个环境中,使用的就是 gnu-plct-xthead 版本工具链。不创建虚拟环境也可以为 /home/sipeed/.local/share/ruyi/binaries/riscv64/gnu-plct-xthead-2.8.0-ruyi.20240222/bin 配置环境变量,直接使用环境变量指定的gcc编译)
+. venv-sipeed/bin/ruyi-activate 
+
+#查看当前虚拟环境下的 gcc 是否可用
+«Ruyi venv-sipeed» sipeed@lpi4a1590:~$ riscv64-plctxthead-linux-gnu-gcc --version
  1. 下载解压 coremark 源码作为编译对象
bash
mkdir coremark && cd coremark
+ruyi extract coremark
+ls -al

交叉编译 coremark

  1. 设置 coremark 源码中的编译配置信息(参考 coremark 仓库自述文档)
bash
sed -i 's/\bgcc\b/riscv64-plctxthead-linux-gnu-gcc/g' linux64/core_portme.mak
  1. 执行交叉编译和构建,得到可执行程序 coremark.exe
bash
make PORT_DIR=linux64 link
+ls -al    #新增可执行程序coremark.exe
  1. 查看 rv64 可执行程序文件属性信息。
bash
file coremark.exe
+# 命令回显信息显示了文件的架构相关信息

运行验证

  1. 直接运行 riscv64 coremark 可执行程序
bash
./coremark.exe
+ + + + \ No newline at end of file diff --git a/zh/devices/index.html b/zh/devices/index.html deleted file mode 100644 index f5627adf..00000000 --- a/zh/devices/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK集成的RISC-V设备 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

RuyiSDK集成的RISC-V设备

RuyiSDK对RISC-V设备的集成和支持主要包括以下几个方面:

  1. 提供RISC-V 开发板适用镜像信息维护与下载、开发板系统安装引导程序,方便 RISC-V 开发者获取指定开发板可用的OS并可方便的安装OS的安装。RuyiSDK集成了多种可用的操作系统供用户选择。
  2. 提供RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加RISC-V设备专有向导页面、实现开发环境和运行环境的文件传输、支持在RISC-V设备上调试应用程序等。

支持的RISC-V设备

目前对硬件设备的集成主要体现在包管理器(设备安装器),可以通过 ruyi device provision命令查询,已经集成的RISC-V设备有:

  1. Allwinner Nezha D1
  2. Canaan Kendryte K230
  3. Milk-V Duo
  4. Milk-V Duo S
  5. Milk-V Mars
  6. Milk-V Mars CM
  7. Milk-V Meles
  8. Milk-V Pioneer Box
  9. Milk-V Vega
  10. SiFive HiFive Unmatched
  11. Sipeed Lichee RV
  12. Sipeed LicheePi 4A
  13. StarFive VisionFive
  14. StarFive VisionFive2

从RuyiSDK开始使用设备

获取并安装OS

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

- - - - \ No newline at end of file diff --git a/zh/index.html b/zh/index.html index da1404de..adaadcc6 100644 --- a/zh/index.html +++ b/zh/index.html @@ -8,17 +8,17 @@ - + - - + +
Skip to content

RuyiSDK 文档

本手册包含了 RuyiSDK 如何构建、如何使用的相关内容。

- + \ No newline at end of file diff --git a/zh/introduction/index.html b/zh/introduction/index.html index d4c16e1c..b1f99409 100644 --- a/zh/introduction/index.html +++ b/zh/introduction/index.html @@ -3,29 +3,29 @@ - RuyiSDK documentation + Hello Ruyi | RuyiSDK documentation - + - - + + -
Skip to content

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK
  2. 为什么会有 RuyiSDK
  3. RuyiSDK 有什么用
  4. 我可以在什么设备上运行
  5. RuyiSDK 的原理是什么
  6. 我该从何开始

介绍

RuyiSDK 是一个由中科院软件所(ISCAS)所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在[支持的设备](## 支持的设备)中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 Cisc 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK 分为以下三个部分:

Ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
+    
Skip to content

Hello Ruyi

欢迎来到 RuyiSDK 相关介绍内容,以下是本文相关内容:

  1. 什么是 RuyiSDK -> 介绍
  2. 为什么会有 RuyiSDK -> 背景
  3. RuyiSDK 有什么用 -> 功能
  4. 我可以在什么设备上运行 -> 支持的设备
  5. RuyiSDK 的原理是什么 -> RuyiSDK-架构示意图
  6. 我该从何开始 -> 让我们开始吧!

介绍

RuyiSDK 是一个由 PLCT Lab 所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个便捷、完善的开发环境。其提供了相关最新的硬件信息、软件支持,例如在支持的设备中有提供相关支持硬件情况;软件层面提供了镜像(如 RevyOS)、工具链、包管理器等。

其最终目标是希望为 RISC-V 开发者提供一个完善、便捷的开发环境,使得 RISC-V 成为主流架构,以及建设并运营一个完善的社区以便开发者交流。最终希望 RuyiSDK 可以走向国际化,为全球的 RISC-V 开发者提供开发的便捷。

背景

RISC-V 是第五代精简指令集,由加州伯克利分校所发起的一个开源项目,相比 CISC 而言更具精简性,指令执行效率更高。开源使其能够更加方便的运用在不同的领域,目前在 IoT、智能家居、芯片设计、操作系统、软件开发等领域都有应用。

而在过往针对 RISC-V 的开发面临的问题在于相关资讯没有统一的平台,使得开发者从最开始的学习、再到开发应用的效率大幅降低,而 RuyiSDK 的出现就是为了解决这些问题。

功能

RuyiSDK

RuyiSDK 分为以下三个部分:

ruyi 包管理器

该包管理器是一个在线的软件源,在该包管理器中,我们提供了如下内容:

1. 工具链
 2. 调试工具
 3. 模拟器
 4. 运行环境
 5. 文档
 6. 源码
 7. 工具、系统镜像
-8. GUI(TODO)

Ruyi IDE

该 IDE 是一个为 RISC-V 架构设计的开发工具箱,开发者可以轻松的通过 Ruyi 包管理器获取,可以对于实际的开发场景对于代码的编写以及调试。 使用包管理器开发者可以获取该工具箱中的编译工具链、调试工具和模拟器,开发者可以使用模拟器或者在 RISC-V 开发板上对自身的程序进行编写以及调试。

Community

在我们的社区当中,提供了大量的相关技术文章、代码、教程视频,以及我们会举办一定的线下活动获得来自用户的反馈,在线上也会有相应的论坛提供给开发者进行技术交流。


RuyiSDK 对 RISC-V 设备的集成和支持主要包括以下几个方面:

  1. RISC-V 开发板镜像相关信息以及下载、安装教程,便于开发者获取相关镜像(换而言之提供一个镜像站),其中涵盖多种操作系统(如基于 Debian 的 RevyOS、openEuler riscv64等)提供给开发者使用。
  2. 提供 RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加 RISC-V 设备专有向导页面、实现开发环境和运行环境的文件传输、支持在 RISC-V 设备上调试应用程序等。

支持的设备

目前 RuyiSDK 支持的设备如下:

  1. Allwinner Nezha D1:适用于入门级开发和教育用途。
  2. Canaan Kendryte K230:专为 AI 应用设计。
  3. Milk-V Duo:小巧灵活,适合嵌入式应用。
  4. Milk-V Duo S:提供更强的处理能力。
  5. Milk-V Mars:适合物联网应用。
  6. Milk-V Mars CM:集成多种通信接口。
  7. Milk-V Meles:高性能嵌入式开发。
  8. Milk-V Pioneer Box:适用于边缘计算。
  9. Milk-V Vega:高性能计算设备。
  10. SiFive HiFive Unmatched:适合高性能开发和研究。
  11. Sipeed Lichee RV:适合入门和教育。
  12. Sipeed LicheePi 4A:提供更高的性能和更多的接口。
  13. StarFive VisionFive:支持多种 AI 和物联网应用。
  14. StarFive VisionFive2:升级版,提供更强的计算能力。

文档可能更新不及时,查看最新支持的设备请通过指令ruyi device provision查询。

RuyiSDK-架构示意图

image

让我们开始吧!

从 RuyiSDK 开始使用设备!

获取并安装OS

开始的第一步:

bash
$ ruyi device provision

该指令会识别硬件信息,并且开始自动执行对应程序为用户自动部署 RISC-V 开发环境,按照引导信息一步步执行即可。

- +8. GUI(TODO)

Ruyi IDE

该 IDE 是一个为 RISC-V 架构设计的开发工具箱,开发者可以轻松的通过 ruyi 包管理器获取,可以对于实际的开发场景对于代码的编写以及调试。 使用包管理器开发者可以获取该工具箱中的编译工具链、调试工具和模拟器,开发者可以使用模拟器或者在 RISC-V 开发板上对自身的程序进行编写以及调试。

Community

在我们的社区当中,提供了大量的相关技术文章、代码、教程视频,以及我们会举办一定的线下活动获得来自用户的反馈,在线上也会有相应的论坛提供给开发者进行技术交流。


RuyiSDK 对 RISC-V 设备的集成和支持主要包括以下几个方面:

  1. RISC-V 开发板镜像相关信息以及下载、安装教程,便于开发者获取相关镜像(换而言之提供一个镜像站),其中涵盖多种操作系统(如基于 Debian 的 RevyOS、openEuler RISC-V 等)提供给开发者使用。
  2. 提供 RISC-V 开发板对应的演示程序、开发资料和相关工具(含适用的编译工具链、模拟器等)的信息维护和下载,方便 RISC-V 开发者快速上手。
  3. 在集成开发环境中增加 RISC-V 设备专有向导页面、实现开发环境和运行环境的文件传输、支持在 RISC-V 设备上调试应用程序等。

支持的设备

目前 RuyiSDK 支持的设备如下:

型号
100ASK-V853-PROAllWinner V853BananaPi BPI-F3BeagleV-Ahead
BeagleV-FireCanMV K230Canaan K510-CRB-V1.2 KITCH32V103-EVT
CH32V203-EVTCH32V208-EVTCH32V303-EVTCH32V305-EVT
CH32V307-EVTCH573F-EVTCH582F-EVTCH592X-EVT
D1s NeZhaDongshanPI-Nezha STUDongShanPI D1sHiFive Unmatched
Lichee Cluster 4ALichee Console 4ALicheePi 4ALicheeRV/AWOL Nezha
LicheeRV NanoLongan NanoMangoPi MQMangoPi MQ Pro
Milk-V Duo 64MMilk-V Duo 256MMilk-V Duo SMilk-V Mars
Milk-V MelesMilk-V VegaNuclei DDR200TPioneer Box
PolarFire FPGA SoC Icicle KitRV-STARSipeed Maix-BitSipeed M0 sense
Sipeed M0P DockSipeed M0s DockSipeed M1s DockStar64
Tang Mega 138KTinyVisionVisionFiveVisionFive 2
YuzukiHD-Lizard

文档可能更新不及时,查看最新支持的设备请通过指令 ruyi device provision 查询。

RuyiSDK-架构示意图

Structure-RuyiSDK.png

让我们开始吧!

从 RuyiSDK 开始使用设备!

获取并安装 ruyi

具体请参考这里

获取并安装 OS

开始的第一步:

bash
$ ruyi device provision

该指令会识别硬件信息,并且开始自动执行对应程序为用户自动部署 RISC-V 开发环境,按照引导信息一步步执行即可。

具体请参考这里这里

+ \ No newline at end of file diff --git a/zh/introduction/requirement.html b/zh/introduction/requirement.html deleted file mode 100644 index c4a44980..00000000 --- a/zh/introduction/requirement.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

介绍

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RuyiSDK 的目标

  1. 开发者购买了 (几乎) 任何一款 RISC-V 开发板或模组,都可以通过 RuyiSDK 系统获得硬件资料说明、固件 / 软件更新、调试支持等。
  2. 开发者可以指定任何常用的 RISC-V 扩展指令集架构组合,都可以通过 RuyiSDK 系统生成客户所需的操作系统、工具链、语言执行环境 (运行时或虚拟机)、计算库、应用框架等。尤其强调 RuyiSDK 将完全支持 Vector 0.7.1 和 RVP 0.5.2 等已经大规模硅化的草案 标准 (or 厂商定制扩展)。
  3. 培育运营一个活跃全面的开发者交流社区。

RuyiSDK 架构示意图

![[1703147196780.png]]RuyiSDK 的组成

RuyiSDK 主要包含了一个组件管理器(也称为包管理器,Ruyi Repo)、一个集成开发环境(Ruyi IDE)、一个开发者交流社区;

  • 组件管理器包含一个在线软件源 (Ruyi Repo) 和 一个包管理工具(ruyi)。在线软件源即 Ruyi Repo 集中存储了RISC-V集成开发环境所需的编译工具链、调试工具、模拟器、运行环境、文档、代码、工具、target系统镜像等内容;包管理器工具则是用于与在线软件源交互的工具,它提供了一套命令行接口(ruyi)或图形用户界面(GUI未来可能提供),使开发者能够搜索、安装、更新和管理软件包。包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

  • 集成开发环境(Ruyi IDE)则是一个专门用来开发能够运行在RISC-V架构设备上的软件和应用的工具箱。可以帮助开发者编写和测试自己的程序。

    想象一下,你要做一款能够运行在RISC-V设备上的应用程序,比如用C或者C++语言开发一个图像识别的程序,Ruyi IDE 就像是一个你的工作室,里面有各种各样的工具可以帮助你完成这个任务。首先创建项目,从RuyiSDK包管理器中下载和安装所需的编译工具链、调试工具、模拟器等工具,然后在文本编辑器中完成对代码的编辑,接着对项目进行编译构建获得RISC-V架构的可执行程序,最后在模拟器或者RISC-V开发板上进行运行和测试。如果代码需要调试,也可通过调试工具进行代码调试。这一过程和x86下的开发、编译构建、调试、运行的流程是一致的,只是适用于当前开发语言及目标运行设备的RISC-V的编译工具链、模拟器等软件和工具都可以从Ruyi Repo中获取,在安装和IDE初始设置时都已经被集成到 Ruyi IDE 之中,用户无需为环境搭建耗费精力。

  • 开发者交流社区则提供文档和教程、论坛和技术讨论区、博客和文档等等功能,目的是为RISC-V开发者提供一个开放的交流平台,提供互助式技术支持和资源共享,聚集RISC-V开发者并推动RISC-V生态系统的发展。

RuyiSDK 模块需求说明

说明:这是一个初步的需求设想,具体还需要结合技术可行性等进行进一步的调整。供参考。

RUYI 包管理器

RUYI在线软件源(Ruyi Repo)

  1. 软件源的管理内容包括以下内容:
    1. GNU和LLVM编译工具链
    2. 调试工具(GDB、LLDB)
    3. 模拟器(qemu、spike,……)
    4. 运行环境(sysroot / rootfs)
    5. 工具:包括且不限于Ruyi IDE、架构图中的各种工具等
    6. 代码(库、示例 etc.)
    7. 文档
    8. 目标运行环境的RISC-V系统镜像文件
  2. 软件源内包的元数据包含并不限于:发布厂商、版本信息、资源类型、下载链接、文档资源等各种信息(支持属性扩展)等属性信息;如编译工具链有不同厂商发布的,不同版本的软件资源需要进行管理(如GNU和LLVM目前有三种类型:upstream、PLCT、xthead,随着版本的更新和发布,每种类型会产生诸如vX.X这种多个版本)。

RUYI包管理工具(ruyi)

  1. 实现一套命令行接口(CLI),用于与在线软件源交互。
    1. 使开发者能够搜索、安装、更新、卸载和管理软件包。

    2. 包管理工具负责从在线软件源中获取软件包的信息,解析软件包的依赖关系,并自动处理依赖关系的下载和安装。

    3. 能够支持工具自身的升级、卸载;

    4. 能够支持在线软件源中不同类型、不同版本、不同厂商、不同适用环境的软件包的搜索:

      • 按照name搜索
      • 按照版本搜索
      • 按照可支持的扩展指令集搜索
      • 按照资源类型搜索
      • 按照可适用的开发板(或目标运行环境)搜索
      • ……
  2. 实现一套图形用户界面(GUI)工具,用于与在线软件源交互。功能与上述CLI接口类似;(待定)
  3. 三架构支持:工具需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);

Ruyi IDE

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下功能:

  1. 项目管理工具:提供项目管理功能,使开发者能够轻松创建、组织和管理他们的RISC-V项目。这包括创建新项目、导入现有项目、管理依赖和库等。

  2. 代码编辑器:提供一个功能强大的代码编辑器,支持开发语言的语法高亮显示、代码自动完成、代码导航、智能感知、错误检查、代码片段管理、版本控制集成、调试支持等功能,以提高开发效率、减少错误,并提供更好的代码编写和维护体验。

    • 代码编辑器常见功能详细说明:

      1. 语法高亮(Syntax Highlighting):根据编程语言的语法规则,对代码进行着色,以增强可读性和代码理解性。
      2. 自动完成(Auto Completion):根据当前上下文,在输入代码的过程中自动弹出变量、函数、类名等的建议,以加快编码速度和减少拼写错误。
      3. 智能感知(Intelligent Code Sense):通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助开发者编写正确的代码。
      4. 代码导航(Code Navigation):提供快速导航到代码的不同部分,如跳转到定义处、跳转到引用处、跳转到函数调用等,以便快速定位和浏览代码。
      5. 重构工具(Refactoring Tools):提供一系列操作,如重命名、提取函数、提取变量等,以帮助开发者改善代码的结构和可维护性。
      6. 调试支持(Debugging Support):提供集成的调试器,使开发者能够设置断点、单步执行代码、查看变量的值等,以便调试和排查代码中的问题。
      7. 版本控制集成(Version Control Integration):与版本控制系统(如Git)集成,提供对代码版本的管理、提交、比较和合并等功能。
      8. 错误检查(Error Checking):即时检测代码中的语法错误、潜在的逻辑错误或常见的编码错误,并给出相应的警告或错误提示。
      9. 代码片段管理(Code Snippet Management):提供可重用的代码片段库,包括预定义的模板或用户自定义的代码片段,以便快速插入常用代码块。
      10. 文档生成(Documentation Generation):根据代码中的注释或特定的标记语言,自动生成代码文档或API文档。
    • 语言插件: 支持C、C++、Java、JavaScript、Python、Rust、Fortran、SAIL、Dart、Chisel等不同的语言类型;

  3. RISC-V编译器/解释器支持:集成RISC-V架构的编译器/解释器,使开发者能够编译和构建基于RISC-V指令集的应用程序。(这里不同语言存在差异,需要一一区别和定义)

  4. RISC-V模拟器和调试器:集成一个RISC-V模拟器和调试器,可以模拟和调试RISC-V指令的执行过程。开发者可以在IDE中设置断点、单步执行代码,并查看变量的值和内存的状态,以进行程序的调试和分析。

  5. 代码分析和优化:提供代码分析工具,帮助开发者发现潜在的性能问题和错误,并提供优化建议。这包括静态代码分析、性能分析和内存分析等功能,以帮助开发者编写更高效和可靠的RISC-V应用程序。

  6. 集成文档和教程:提供与RISC-V相关的文档、教程和示例代码的集成,以帮助开发者学习和使用RISC-V架构。这样,开发者可以在IDE中方便地查阅文档和学习相关知识,加快他们的开发过程。

  7. 语言虚拟机或运行时环境:一些语言需要在运行时依赖于相应的解释器或语言虚拟机。如Python需要在运行时依赖于相应的解释器或语言虚拟机(如CPython、Jython等)。因此,IDE需要与这些解释器或虚拟机进行集成,以便在IDE中直接运行和调试Python代码。

  8. 代码执行环境管理:如Python开发中通常会使用虚拟环境(Virtual Environment)来管理依赖和隔离项目环境。IDE可以提供对虚拟环境的支持,使开发者能够方便地创建、激活和管理虚拟环境。

  9. 交互式解释器和调试器:如Python具有交互式解释器(REPL)的特性,可以在命令行环境中逐行执行代码。IDE可以集成交互式解释器,使开发者能够在IDE中直接执行和调试代码片段,以便进行快速的实验和调试。

  10. 包管理和库支持:很多开发语言都有丰富的第三方库和包管理工具。如Python是pip、conda等。IDE可以提供对这些工具的集成,以便开发者能够方便地搜索、安装和管理各种Python库和依赖项。

针对RISC-V开发者使用的集成开发环境(IDE)需要具备如下特点:

  1. 可扩展性和插件支持:支持插件系统,使开发者能够根据自己的需求扩展和定制IDE。这样,他们可以集成其他工具、添加自定义功能,并与其他开发者共享他们的插件。
  2. 并行编译能力: IDE中,能够为一个项目同时生成不同的运行环境(RISC-V开发板)编译构建出适用该开发板的可执行程序。(待定)
  3. 跨平台兼容性,三架构支持: Ruyi IDE 本身的安装程序需要支持x86、aarch64、RISC-V三种架构的主流Linux系统(包含但不限于openEuler、Debian、Ubuntu、Fedora等);
  4. 定制化: 可视化的集成开发环境的界面部分,除去继承开源软件的部分,自研发/改动部分界面需要个性化定制。
  5. 性能: 要求 Ruyi IDE 能够流畅地运行在主流的PC设备上。

我们希望,当使用 Ruyi IDE 进行例如图像识别应用程序的开发时,能够得到如下步骤所描述的功能支持:

  1. 打开 Ruyi IDE,并创建一个新的项目或工程。在项目中,你可以组织和管理你的代码文件、资源文件和配置文件等。
  2. 在集成开发环境的文本编辑器中,创建一个新的C/C++源代码文件。在该文件中,你可以编写程序,如图像识别算法的逻辑和实现。
  3. 使用语法高亮功能,集成开发环境会根据编程语言的语法规则,对你的代码进行着色,以增强可读性和代码理解性。
  4. 在编写代码的过程中,Ruyi IDE 提供自动完成功能,根据当前上下文,自动弹出变量、函数和类名的建议,以加快编码速度和减少拼写错误。
  5. 在代码编写过程中,集成开发环境提供智能感知功能,通过静态分析和语义理解,提供关于代码中变量、函数、类等的详细信息,如类型、参数列表、返回值等,以帮助你编写正确的代码。
  6. 在集成开发环境中,你可以使用代码导航功能,快速跳转到代码的不同部分,如跳转到函数的定义处、跳转到变量的引用处,以便快速定位和浏览代码。
  7. 在编写完代码后,使用集成开发环境提供的构建工具进行项目的构建。这可能涉及选择适当的编译选项、设置编译器路径和库路径,以及处理依赖关系。
  8. Ruyi IDE 通常提供调试器功能,你可以设置断点、逐行调试代码,并观察变量的值,以解决代码中的错误和问题。
  9. 如果需要提高图像识别程序的性能,你可以使用Ruyi IDE 中的性能分析工具,检查代码的瓶颈并进行优化。
  10. 一旦你完成了开发和调试,Ruyi IDE 提供了部署工具,你可以将编译好的图像识别应用程序部署到RISC-V架构的嵌入式设备上,并进行远程调试和监视。
  11. 在开发过程中,Ruyi IDE 还提供版本控制集成工具,帮助你管理代码的版本、进行代码的协作开发和团队协作。如果遇到技术问题,可以在开发者社区进行技术交流获取帮助。
  12. 最后,Ruyi IDE 还提供文档生成工具,可以自动生成代码文档或API文档,帮助你记录和分享你的代码。

通过 Ruyi IDE 的支持,你可以更高效地开发图像识别应用程序,利用其提供的各种工具和功能,加速开发过程、减少错误,并提供更好的代码编写和维护体验。

总之,RISC-V开发者的集成开发环境将提供一系列专门针对RISC-V架构的工具和功能(这些工具从包管理器中获取),以帮助开发者更轻松、高效地开发RISC-V应用程序。同时,它提供直观的用户界面、高度可定制的功能和良好的扩展性,以满足不同开发者的需求。

开发者社区

一个开发者交流社区需要具备以下功能:

  1. 主页/官方网站: 用来汇聚关于 RuyiSDK 宣发、推广、使用、交流需要的一切资源,是第一级别入口。
  2. 开发者管理: 用户的注册、登录等账号有关的管理。
  3. 统计功能: 对主页累计访问量、软件下载次数、用户注册量等信息进行统计,这是用户维护方持续了解开发者社区活跃程度的一种技术支持手段。
  4. 文档和教程:社区可能提供详细的文档和教程,涵盖RISC-V开发环境的使用指南、编程技巧、调试技巧等方面的内容,帮助开发者快速上手和解决常见问题。
  5. 论坛和讨论区:提供一个讨论区或论坛,让开发者可以发表问题、分享经验、提供建议等。其他开发者可以回复和讨论,促进交流和知识共享。
  6. 博客和文章:提供开发者撰写博客文章的功能,可以分享技术经验、教程、最佳实践等内容。其他开发者可以浏览和评论这些文章,从中获得有价值的信息。
  7. 问答平台:类似于问答社区,开发者可以发布问题,其他开发者可以回答问题或提供解决方案。这样的平台可以快速解决开发过程中的疑问和难题。
  8. 资源共享:开发者可以共享和下载与RISC-V开发相关的资源,如代码示例、项目模板、库文件等。这有助于加快开发速度和提高效率。
  9. 活动和会议:社区可以组织定期的在线活动、研讨会或会议,让开发者聚集在一起,分享最新的技术趋势、案例研究和实践经验。
  10. 专家支持:社区可能吸引一些RISC-V领域的专家,他们可以提供指导、解答问题,甚至组织在线培训或指导课程,帮助开发者更好地利用集成开发环境进行开发。
  11. 插件和扩展:开发者可以共享和下载与RISC-V集成开发环境相关的插件和扩展,以增强开发环境的功能和灵活性。
  12. 就业和项目机会:社区可以提供就业和项目机会的发布平台,帮助开发者寻找合适的工作机会或参与感兴趣的项目。
  13. 积分和奖励机制:社区可以设立积分和奖励机制,鼓励开发者积极参与交流和贡献。例如,回答问题、分享文章或贡献代码可以获得积分或奖励,提高其在社区中的声誉。

这样的一个开发者交流社区可以促进RISC-V集成开发环境的用户之间的交流和合作,提供技术支持和资源共享,增加开发者的学习和开发效率,推动RISC-V生态系统的发展。

- - - - \ No newline at end of file diff --git a/zh/plan/index.html b/zh/plan/index.html deleted file mode 100644 index c2de1f38..00000000 --- a/zh/plan/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - 版本规划路线图 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

版本规划路线图

RuyiSDK 是一个旨在提供给一个一体化集成开发环境的产品计划。从 2023 年开始筹备,计划用三年时间为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境。

RUYISDK 版本计划

里程碑版本

RuyiSDK 计划以每半年为一个里程碑版本周期来推动 RuyiSDK 的不断完善,目前计划中的里程碑版本有:

  • 23.06 (计划发布时间:2023年6月)
  • 23.12 (计划发布时间:2023年12月)
  • 24.06 (计划发布时间:2024年6月)
  • 24.12 (计划发布时间:2024年12月)
  • 25.06 (计划发布时间:2025年6月)
  • 25.12 (计划发布时间:2025年12月)

敏捷开发版本计划

自2024年1月开始,RuyiSDK 切换为更加敏捷的开发迭代模式,预期每 2 周发布一个开发版本,提供一些新功能,如包管理器能力迭代、RuyiSDK软件源提供新的软件包或者软件包版本升级、或工具链、板卡的新增适配等等,这些更新将以 release note 的方式公开。

  • 发布日期默认每双周周二发布;发布周期内遇3日以上节假日的,延迟一周发布;

  • 敏捷开发版本执行敏捷测试方式:

    • 代码冻结日期在发布日期的上一周周四/周五;
    • 代码冻结日~发布日:执行新特性的测试验证和基础功能回归测试;
    • 发布日~下一次代码冻结日:完成回归测试用例更新和执行全面回归测试;

RUYISDK 规划

2024目标

  • RuyiSDK官网上线。
  • 支持50多种RISC-V设备。
  • 支持运行≥7个流行的Linux发行版。将增加对openKylin和Gentoo的支持。
  • 提供多种图形化IDE环境,包括对Eclipse和VSCode的支持。
  • 服务≥10000名注册开发者。
  • 支持计划于2024年发布的SG2044和SG2380。

敏捷开发版本排期

滚动发行版本号发布日期代码冻结日期备注
v0.32024.01.162024.01.12
v0.42024.01.302024.01.26
v0.52024.02.272024.02.23春节,跳过一次
v0.62024.03.122024.03.08
v0.72024.03.262024.03.22
v0.82024.04.092024.04.07
v0.92024.04.232024.04.19
v0.102024.05.142024.05.10劳动节,延迟一周发布
v0.112024.05.282024.05.24
v0.122024.06.112024.06.06端午节
v0.132024.06.252024.06.21
v0.142024.07.092024.07.05
v0.152024.07.232024.07.19
v0.162024.08.062024.08.02
v0.172024.08.202024.08.16
v0.182024.09.032024.08.30
v0.192024.09.242024.09.20中秋节,延迟一周发布
v0.202024.10.152024.10.11国庆节,延迟一周发布
v0.212024.10.292024.10.25
v0.222024.11.122024.11.08
v0.232024.11.262024.11.22
v0.242024.12.102024.12.06
v0.252024.12.242024.12.20
- - - - \ No newline at end of file diff --git a/zh/ruyi/index.html b/zh/ruyi/index.html deleted file mode 100644 index b2c6ab1b..00000000 --- a/zh/ruyi/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - RUYI 包管理器 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

RUYI 包管理器

RUYI 包管理是 RuyiSDK中负责管理RuyiSDK各种软件源的工具,用于管理工具链、模拟器、源码等各种二进制软件包和源码包。

支持的发行版平台

当前 RUYI 包管理器具有良好的平台兼容性以及多发行版兼容性,目前经过测试可用的环境有(仅限验证过的):

  • x86_64 Fedora 38
  • x86_64 Ubuntu 22.04 LTS
  • x86_64 openEuler 23.09
  • riscv64 RevyOS 20231210
  • riscv64 openEuler 23.09

上述操作系统链接参考本文文末的“附:外部链接”章节。

命令

RUYI 目前支持的命令如下:

bash
# 从配置的软件源更新本地软件包缓存
-ruyi update
-
-# 从本地软件包缓存中列出可用软件包
-ruyi list
-
-# 下载并安装指定的软件包
-ruyi install
-
-# 列出已安装的配置
-ruyi list profiles
-
-# 由指定的工具链和配置建立 RUYI 虚拟环境
-ruyi venv
-
-# 下载并解包指定的源码包
-ruyi extract
-
-# 获取并查看更新信息
-ruyi news
-
-# 镜像信息的维护与下载、开发板系统的安装引导
-ruyi device
-
-# ruyi 镜像搭建工具(完善中)
-ruyi admin
-
-# 卸载 RUYI 包管理器
-ruyi self uninstall

功能持续更新中,可以通过 ruyi -h 查看 ruyi 支持的命令。

附:外部链接

- - - - \ No newline at end of file diff --git a/zh/ruyi/updates/0.12.0.html b/zh/ruyi/updates/0.12.0.html deleted file mode 100644 index 472f8b00..00000000 --- a/zh/ruyi/updates/0.12.0.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - v0.12.0 版本新增特性 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

v0.12.0 版本新增特性

  • 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
  • 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
  • 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
  • 修复了 0.11.0 版本中 XDG_STATE_HOME 环境变量被无视的问题。

安装 v0.12.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.amd64
-$ chmod +x ./ruyi.amd64
-$ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.riscv64
-$ chmod +x ./ruyi.riscv64
-$ sudo cp ./ruyi.riscv64 /usr/local/bin/ruyi

在 arm64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.12.0/ruyi.arm64
-$ chmod +x ./ruyi.arm64
-$ sudo cp ./ruyi.arm64 /usr/local/bin/ruyi

检查安装版本:

bash
$ ruyi version
-Ruyi 0.12.0
-
-Running on linux/x86_64.
-
-Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
-All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>
-
-This version of ruyi makes use of code licensed under the Mozilla Public
-License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
-project's sources from the project's official website:
-
-* certifi: https://github.com/certifi/python-certifi
- - - - \ No newline at end of file diff --git a/zh/ruyi/updates/0.13.0.html b/zh/ruyi/updates/0.13.0.html deleted file mode 100644 index c8a55193..00000000 --- a/zh/ruyi/updates/0.13.0.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - v0.13.0 版本新增特性 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

v0.13.0 版本新增特性

  • 修复 0.12.0 遗留的版本匹配问题。
  • 修复 prerelease 版本识别。

安装 v0.13.0

在 amd64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.amd64
-$ chmod +x ./ruyi.amd64
-$ sudo cp ./ruyi.amd64 /usr/local/bin/ruyi

在 riscv64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.riscv64
-$ chmod +x ./ruyi.riscv64
-$ sudo cp ./ruyi.riscv64 /usr/local/bin/ruyi

在 arm64 架构环境安装:

bash
$ wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/releases/0.13.0/ruyi.arm64
-$ chmod +x ./ruyi.arm64
-$ sudo cp ./ruyi.arm64 /usr/local/bin/ruyi

检查安装版本:

bash
$ ruyi version
-Ruyi 0.13.0
-
-Running on linux/x86_64.
-
-Copyright (C) 2023 Institute of Software, Chinese Academy of Sciences (ISCAS).
-All rights reserved.
-License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>
-
-This version of ruyi makes use of code licensed under the Mozilla Public
-License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
-project's sources from the project's official website:
-
-* certifi: https://github.com/certifi/python-certifi
- - - - \ No newline at end of file diff --git a/zh/sdk/gnu/index.html b/zh/sdk/gnu/index.html deleted file mode 100644 index 78bcadfe..00000000 --- a/zh/sdk/gnu/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK GCC 工具链介绍 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

RuyiSDK GCC 工具链介绍

RuyiSDK GCC 工具链是专门用于 RISC-V 架构的 GNU 工具链,它包括一系列工具,如编译器、汇编器、链接器等,用于开发和构建 RISC-V 架构的软件。

模块介绍

GCC(GNU Compiler Collection)

功能: RISC-V GNU Toolchain 的核心组件之一,用于将高级编程语言(如 C、C++)的源代码翻译成 RISC-V 架构的目标代码。

支持: 提供对不同 RISC-V 位长的支持,包括 RV32(32 位)和 RV64(64 位),以及不同RISC-V 指令集扩展的支持。

详细使用说明参考: https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/

GNU Binutils

包含工具: 汇编器(as)、链接器(ld)、目标文件工具(objdump、objcopy 等),性能分析工具(gprof)。

功能: 用于处理生成 RISC-V 架构的目标文件,执行汇编和链接,反汇编等操作。

详细使用说明参考: https://sourceware.org/binutils/docs-2.41/

GDB(GNU Debugger)

功能: 提供调试功能,允许开发人员在 RISC-V 目标上调试他们的程序。

Glibc(GNU C Library)

功能: C 语言运行时库,提供许多标准 C 库函数的实现,以支持在 RISC-V 上运行的程序。

Newlib

功能: 一个小型的 C 库,适用于嵌入式系统和其他资源受限的环境。对于一些嵌入式RISC-V 系统,选择使用 Newlib 而不是 Glibc 可以更高效的利用有限的系统资源。

Libgcc

功能: 包含一些与编译**功能:**器紧密相关的支持函数,例如用于浮点数乘除法的模拟运算函数。

目前 RuyiSDK 包含三种工具链版本,分别为 GNU upstream 版本,Xuantie 版本以及RuyiSDK 版本,不同版本支持的 RISC-V 指令集有所不同。

GNU upstream 工具链适合面向最新 RISC-V 特性的开发者,Xuantie 工具链侧重于使用 Xuantie 系列 CPU 芯片的硬件,RuyiSDK 工具链侧重于提供稳定的工具链环境,尽可能的继承目前 RISC-V 的各个扩展与新特性。

使用说明

工具链中各个工具的使用方法请参考其使用说明文档,下面重点介绍 RISC-V 架构的一些常见用法:

  • -march 选项可以控制工具链开启的 RISC-V 扩展,其默认参数在 64 位工具链中为 rv64gc, 32 位工具链中为 rv32gc, 若要开启其他扩展,则需利用该选项重新向工具链指定想要开启的扩展,例如打开 V 扩展可以使用-march=rv64gcv,打开 b 扩展可以使用 -march=rv64gc_zba_zbb_zbc_zbs, RuyiSDK 中不同扩展的工具链已经在-march 中配置了其对应参数,方便用户直接使用,用户可以根据自身需求调整-march 输入,控制不同扩展的使用。
  • -mabi 选项主要控制工具链中所使用的寄存器组,其默认参数在 64 位工具链中为 lp64d,32 位工具链中为 ilp32d,嵌入式设备中为 lp64e, ilp32e, 无浮点硬件中为 lp64, ilp32, 用户可以根据自身硬件和使用场景进行选择。 使用 RVV 向量扩展时,请务必同时使用 -O3 选项,在编译器中开启 RVV 的向量化特性,一些 RVV 使用示例请参考:https://gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/testsuite/gcc.target/riscv/rvv

下面我们来介绍 RVV 使用时的两个常用参数:

  • --param=riscv-autovec-preference=用于告知编译器输入向量的长度,有已知固定向量长度的 fixed-vlmax输入与可伸缩向量不固定长度的 scalable输入,用户可以更具自己的程序进行调整,以获得更高的程序性能。
  • --param=riscv-autovec-lmul=用于指定一个循环迭代中处理的向量元素的数量,其输入参数可以参考 riscv-v-spec 手册,包括”dynamic,m1,m2,m4,m8”等,对于不熟悉参数的用户,建议使用 dynamic选项,由编译器自动配置选取合适的处理数量。

扩展支持

工具链版本扩展名称
Upstreami, m, a, f, d, c, v, e(注意指定对应的 eABI)
zicsr, zifencei, zicond, zawrs, zba, zbb, zbc, zbs
zfinx, zdinx, zhinx, zhinxmin(注意指定的 ABI 为 lp64 或 ilp32, 与 f/d 扩展不兼容)
zbkb, zbkc, zbkx, zknd, zkne, zknh, zkr, zksed, zksh, zkt
zihintntl, zihintpause, zicboz, zicbom, zicbop
zfh, zfhmin, zvfh, zvfhmin, zvbb, zvbc, zvkg, zvkned, zvknha, zvknhb, zvksed, zvksh
zvknc, zvksc, zvkt, zfa, zmmul, zca, zcb, zce, zcf(仅 RV32)
zcd, zcmp(与 zcd 不兼容), zcmt, ztso
svinval, svnapot,
xcvmac, xcvalu,
xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx, xtheadfmemidx,
xtheadmempair, xtheadsync, xventanacondops
Xuantie对 xtheadba, xtheadbb, xtheadbs, xtheadcmo, xtheadcondmov, xtheadfmv,
xtheadint, xtheadmac, xtheadmemidx,
xtheadfmemidx, xtheadmempair, xtheadsync, xtheadvector(RVV 0.7), xventanacondops
有特定优化,不支持 Zfinx, K, RVV1.0, Zc, Xcv 等系列扩展
RuyiSDK额外支持 RV64-ILP32, Profiles(RV20/22), zpn, zpsfoperand, zbpbo
- - - - \ No newline at end of file diff --git a/zh/sdk/llvm/index.html b/zh/sdk/llvm/index.html deleted file mode 100644 index 5f54baab..00000000 --- a/zh/sdk/llvm/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK LLVM 工具链介绍 | RuyiSDK documentation - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/zh/usecase/index.html b/zh/usecase/index.html deleted file mode 100644 index 891e1638..00000000 --- a/zh/usecase/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK使用示例 | RuyiSDK documentation - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/zh/usecase/setupos/index.html b/zh/usecase/setupos/index.html deleted file mode 100644 index 1b8a3425..00000000 --- a/zh/usecase/setupos/index.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - 为RISC-V开发板安装操作系统 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

为RISC-V开发板安装操作系统

通过RuyiSDK操作系统安装器工具,为各种不同厂家、不同型号的RISC-V开发板提供镜像信息的维护与下载、开发板系统的安装引导。

环境说明

本操作在x86_64 PC & Ubuntu 22.04(linux系统皆可)下执行;RISC-V开发板以USB连接线接入PC或者RISC-V开发板的SD卡通过读卡机接入PC。

安装操作系统

ruyi 工具提供了为 RISC-V 开发板安装操作系统的功能,为任一型号的 RISC-V 开发板安装镜像都只需要执行:

bash
ruyi device provision

该命令将会返回工具目前所支持的RISC-V开发板,选择开发板后将返回所有支持指定开发板的操作系统:

RuyiSDK Device Provisioning Wizard
-
-This is a wizard intended to help you install a system on your device for your
-development pleasure, all with ease.
-
-You will be asked some questions that help RuyiSDK understand your device and
-your intended configuration, then packages will be downloaded and flashed onto
-the device's storage, that you should somehow make available on this host
-system beforehand.
-
-Note that, as Ruyi does not run as root, but raw disk access is most likely
-required to flash images, you should arrange to allow your user account sudo
-access to necessary commands such as dd. Flashing will fail if the sudo
-configuration does not allow so.
-
-Continue? (y/N) y
-
-The following devices are currently supported by the wizard. Please pick your device:
-
-1. Allwinner Nezha D1
-2. Canaan Kendryte K230
-3. Milk-V Duo
-4. Milk-V Pioneer Box
-5. SiFive HiFive Unmatched
-6. Sipeed Lichee RV
-7. Sipeed LicheePi 4A
-8. StarFive VisionFive
-9. StarFive VisionFive2
-
-Choice? (1-9)

以上,以 Sipeed LicheePi 4A 为例,需要为其安装镜像,只需要输入对应的序号:7

Choice? (1-9) 7
-
-The device has the following variants. Please choose the one corresponding to your hardware at hand:
-
-  1. Sipeed LicheePi 4A (8G RAM)
-  2. Sipeed LicheePi 4A (16G RAM)
-
-Choice? (1-2) 2
-
-The following system configurations are supported by the device variant you have chosen. Please pick the one you want 
-to put on the device:
-
-  1. openEuler RISC-V (headless) for Sipeed LicheePi 4A (16G RAM)
-  2. openEuler RISC-V (XFCE) for Sipeed LicheePi 4A (16G RAM)
-  3. RevyOS for Sipeed LicheePi 4A (16G RAM)
-
-Choice? (1-3) 3
-
-We are about to download and install the following packages for your device:
-
- * board-image/revyos-sipeed-lpi4a
- * board-image/uboot-revyos-sipeed-lpi4a-16g
-
-Proceed? (y/N)

您只需要按照引导提示一步步执行即可。

- - - - \ No newline at end of file diff --git a/zh/usedirection/developmentside/index.html b/zh/usedirection/developmentside/index.html deleted file mode 100644 index 99507a07..00000000 --- a/zh/usedirection/developmentside/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 准备RISC-V开发环境 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

准备RISC-V开发环境

安装 ruyi 包管理工具

RuyiSDK包管理工具目前提供了Linux系统 amd64、arm64、riscv64 三种架构平台下的安装程序,可以按需在ruyi GitHub ReleasesISCAS 镜像源下载体验。

包管理工具的安装非常简单,只需下载ruyi工具预构建的二进制文件,将下载的文件去掉后缀重命名为 ruyi,并使其具有可执行权限,最后放入 $PATH 路径下就可以开始了。具体的使用可参考ruyi仓库文档

在安装完成后最常用的命令一般需要有:

bash

-#查看工具版本(由于ruyi滚动发版,请注意关注版本信息,建议使用最新版本)
-ruyi -V
-
-#从配置的软件源更新本地软件包缓存(获取最新缓存才能获取软件仓库最新的软件包资源,保证ruyi list 命令返回的数据最新)
-ruyi update

说明:由于软件包索引信息目前托管的github仓库国内访问的网络不稳定性,因此如果存在ruyi update执行报连接错误,可将仓库切换到备用仓库,具体操作参考 ruyi 仓库文档在 ruyi 包管理工具默认的配置目录 ~/.config/ruyi 下通过 config.toml 文件配置(不同linux发行版可能不同,如果无可自己创建)。

安装编译工具链

ruyi 包管理器提供了不同组织发布的不同版本的GNU和LLVM编译工具链;可以使用 ruyi 包管理工具快速查询和安装:

bash
#从本地软件包缓存中列出可用软件包
-ruyi list
-
-#下载并安装指定的软件包
-ruyi install ruyi i

编译工具链的版本选择参考“编译工具链的不同扩展指令集实现与选择”章节。

准备代码

开发者往往都有自己的开发需求,对于有开发经验或者开发目标的开发者而言,可以使用 git 或者任何你习惯的方式将代码下载到本地。RuyiSDK 为新人用户提供了一些代码示例,方便新手直接从Ruyi Repo 软件源下载编译。

bash
#从软件源下载并解压指定的源码包
-ruyi extract

编译

RuyiSDK包管理器提供了虚拟环境技术,允许用户在系统中创建独立的环境,以隔离不同版本的编译工具链及库文件等。这样可以支持同一个开发环境中同时安装不同的编译工具链版本,并且相互不冲突和影响,提供更好的环境隔离。我们建议创建虚拟环境并在虚拟环境中进行编译操作,大致操作步骤如下:

bash
#前提:已经安装了所需的编译工具链
-
-#为隔离化编译创建虚拟环境,使用 ruyi venv -h 查看如何使用
-ruyi venv
-#举例:创建一个叫venv1的虚拟环境,并指定编译工具链为gnu-upstream,sysroot为generic类型,使用qemu-user-riscv-upstream模拟器
-ruyi venv -t gnu-upstream -e qemu-user-riscv-upstream   generic  venv1
-
-
-#激活虚拟环境
-.  venv1/bin/ruyi-activate  
-
-#编译需要编译的程序源代码
-#此部分没有统一规范,按照待编译程序自身的编译说明执行,这里以coremark为例:
-#(1)设置coremark源码中的编译配置信息
-sed -i 's/\bgcc\b/riscv64-unknown-linux-gnu-gcc/g'  linux64/core_portme.mak
-#(2)执行交叉编译和构建,得到可执行程序coremark.exe
-make PORT_DIR=linux64 link
-#(3)查看rv64可执行程序文件属性信息,初步检验可执行程序是否RISC-V架构
-file coremark.exe

模拟运行

为了方便验证RISC-V目标可执行程序的正确性,一般通过模拟器工具来模拟运行环境:

bash
#前提:已经提前安装了所需的编译工具链、模拟器,并在虚拟环境中配置了qemu模拟器
-
-#qemu user模式下执行rv64 coremark可执行程序
-ruyi-qemu   coremark.exe
-
-#在编译和运行结束后,退出虚拟环境
-ruyi-deactivate

调试

TODO

上述结合使用场景简单的介绍了 RuyiSDK 包管理器和工具的使用,ruyi 的更多命令和命令具体使用方法详见“RUYI 包管理器”章节介绍。此外,目前也有一些简单的使用案例供参考。

- - - - \ No newline at end of file diff --git a/zh/usedirection/developmentside/typeselection/index.html b/zh/usedirection/developmentside/typeselection/index.html deleted file mode 100644 index 179fd3a0..00000000 --- a/zh/usedirection/developmentside/typeselection/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - RuyiSDK中编译工具链类型简介 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

RuyiSDK中编译工具链类型简介

编译工具链存在实现了不同扩展指令集而形成不同版本实现的现状。这种现象是由于处理器架构的发展、厂商定制和优化、标准和规范的演进以及特定应用需求等因素相互作用的结果。

  1. 处理器架构的发展:随着时间的推移,处理器架构不断演进和改进。新的处理器架构可能引入了新的指令集扩展,以提供更高的性能、更多的功能和更好的能效。为了充分利用这些新的指令集扩展,需要更新和升级编译工具链。因此,不同版本的编译工具链可以支持不同处理器架构的特定指令集,并满足不同处理器版本的需求。
  2. 厂商定制和优化:不同的处理器厂商可能对同一个扩展指令集进行了不同程度的定制和优化。它们可能通过改进指令执行流程、优化编译器生成的代码、添加特定的硬件加速器等方式,针对自己的处理器架构实现了特定版本的编译工具链。这样可以最大限度地发挥其处理器的性能和功能,并提供与其他竞争对手不同的优势。
  3. 标准和规范的演进:某些扩展指令集是由标准和规范定义的。然而,即使在同一个指令集标准下,不同版本的工具链也可能存在细微的差异和改进,以提供更好的性能、稳定性或兼容性。
  4. 特定应用需求:某些特定的应用领域可能对扩展指令集有特殊的需求。例如,嵌入式系统、机器学习、图像处理等领域可能需要针对特定指令集的优化和定制。不同版本的编译工具链可以提供针对这些特定应用领域的优化和支持,以满足其特定的需求。

上述原因导致了编译工具链版本的多样性,这样的多样性为开发者提供了更多选择,并可以根据具体需求和目标平台选择适合的编译工具链版本。

RuyiSDK计划为持有不同RISC-V开发板的开发者们提供支持,让他们在RuyiSDK这个中心化的工具中便捷的获取使用和开发所需的支持。目前RuyiSDK已经提供的编译工具链有如下几种:

编译工具链类型说明
GNU工具链gnu-upstream
gnu-plct'gnu-plct(==0.20240324.0)' 支持了香山南湖微架构
gnu-plct-xtheadfor xuantie
gnu-plct-rv64ilp32-elf非通用工具链,支持 rv64ilp32 的裸机工具链,目标代码格式是elf。[仓库] [文章]
LLVM工具链llvm-upstream
QEMU模拟器qemu-system-riscv-upstream
qemu-user-riscv-upstream
qemu-user-riscv-xthead
- - - - \ No newline at end of file diff --git a/zh/usedirection/index.html b/zh/usedirection/index.html deleted file mode 100644 index c7e3ea1d..00000000 --- a/zh/usedirection/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - 使用RuyiSDK | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

使用RuyiSDK

开发者在进行RISC-V开发时,主要的设备包括开发侧的个人电脑(开发环境)和运行侧的RISC-V设备(运行环境)。

开发环境目前更多的是x86_64架构的个人电脑,但是一些高性能的RISC-V设备也可以。在开发侧,通常完成目标可执行程序的准备工作:

  1. 准备RISC-V开发环境,如安装编译工具链、模拟器、调试工具等等
  2. 准备代码
  3. 编译代码
  4. 模拟运行
  5. 调试

运行环境主要是RISC-V硬件设备。在运行侧,通常用来运行RISC-V架构目标可执行程序以达到验证或者使用的目的。

  1. 为RISC-V开发板安装操作系统
  2. 安装目标程序运行所需的运行时环境/语言虚拟机等软件(通常由操作系统提供)
  3. 运行RISC-V目标程序

RuyiSDK针对上述常见的需求提供了包管理器、安装器、集成开发环境来为开发者提供方便。

- - - - \ No newline at end of file diff --git a/zh/usedirection/operationside/index.html b/zh/usedirection/operationside/index.html deleted file mode 100644 index b92042da..00000000 --- a/zh/usedirection/operationside/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - 准备RISC-V运行环境 | RuyiSDK documentation - - - - - - - - - - - - - -
Skip to content

准备RISC-V运行环境

为RISC-V开发板安装操作系统

可以通过下载安装最新的 ruyi 包管理器工具并执行以下命令为设备安装系统:

bash
$ ruyi device provision

按照引导信息一步步执行即可。

运行RISC-V目标程序

C程序,直接运行即可。

其它高级语言,如Java程序,python等,需要先安装运行时环境或语言虚拟机。

- - - - \ No newline at end of file