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

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

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

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

RISCV的模塊化的概念及編譯開發(fā)riscv gcc相關(guān)

嵌入式小作坊 ? 來源:嵌入式IoT ? 作者: bigmagic ? 2021-08-10 10:03 ? 次閱讀

1.概述由于RISCV的模塊化的指令集的定義,各家都有著自己的實現(xiàn)方式。從當(dāng)前看來,除了標(biāo)準(zhǔn)的CSR外,很多都實現(xiàn)了自己的CSR指令擴展。如何自定義CSR并且讓編譯器能夠識別,本文將進行一定的分析,同時從riscv gcc開發(fā)的角度出發(fā),來分析編譯器開發(fā)的流程。

2.不改變編譯工具鏈實現(xiàn)CSR添加如果想讀寫CSR,可以使用匯編指令進行操作。

void test_csr()

{

int a = 0x00200;

asm volatile(“csrw 0x307,%0”::“r”(a));

}

通過反匯編

riscv32-unknown-elf-objdump -D virt_test.elf 》 1.txt

得到該函數(shù)的匯編代碼

c8a2b35c-f86c-11eb-9bcf-12bb97331649.png

由于編號為0x307的CSR沒有標(biāo)準(zhǔn)定義,所以會直接會體現(xiàn)在匯編函數(shù)中。但是這樣并不會影響功能的使用。

對于這些非標(biāo)準(zhǔn)的CSR的讀寫操作,RISCV GCC并不會根據(jù)特定的編碼序號生成相應(yīng)的名稱。

比如芯來科技為其eclic定義的一條CSR。

如果用標(biāo)準(zhǔn)的GCC進行編譯,那么需要給定CSR地址(0x7ed)。

這樣的實現(xiàn),在寫匯編函數(shù)的時候,給定CSR的地址即可,不能寫名字。比如:

csrw 0x7ed,zero

通過上述的方式,可以完成不改變編譯器的情況下,實現(xiàn)非標(biāo)準(zhǔn)的CSR的操作。

3.在編譯器中集成CSR名稱往往通過匯編去查看時,若沒有CSR名稱,直接去查看CSR的地址,有時候還需要通過CSR的地址,查閱相關(guān)的寄存器手冊,才能明白讀寫哪個寄存器。為了簡化這種操作,可以將CSR的名稱添加到gcc中。這里借用玄鐵C906上的擴展指令進行實驗。

如果不想改變gcc,那么實現(xiàn)上直接可以通過內(nèi)聯(lián)匯編。

void test_csr()

{

int a = 0x00200;

asm volatile(“csrw 0x7c0,%0”::“r”(a));

}

那么最后反匯編得到結(jié)果如下:

c9b764e0-f86c-11eb-9bcf-12bb97331649.png

這顯然還是不夠直觀。

為了讓其更加的直觀,可以修改RISCV工具鏈。

這里使用的是riscv-gnu-toolchain,目前做編譯器開發(fā)需要對該倉庫的使用非常熟悉。

https://github.com/riscv/riscv-gnu-toolchain.git

將代碼進行clone后,更新子模塊。

git submodule init

git submodule update

其中需要修改的是riscv-gnu-toolchain/riscv-binutils/include/opcode/riscv-opc.h

同時將MXSTATUS的地址添加進去。

這樣就能夠,編譯工具鏈,用生成的編譯工具鏈去編譯代碼,就能夠正常的看到反匯編的執(zhí)行效果了。

這樣,無論是傳遞地址csrw 0x7c0,zero,還是傳遞名稱csrw mxstatus,zero,匯編器都能夠正常的輸出CSR名稱。

通過對編譯器的修改,也是非常的簡單的實現(xiàn)了這個功能。

4.編譯開發(fā)riscv gcc相關(guān)如果要研究riscv gcc的開發(fā)工作,搭建環(huán)境,加快編譯效率很關(guān)鍵。由于編譯工具鏈很大,涉及到的模塊很多,而且編譯的過程很復(fù)雜,為了節(jié)省編譯的時間,可以通過編譯選項來進行約束。

通常情況下,編譯全功能的gcc,可以采用

。/configure --prefix=$PREFIX --enable-multilib --with-cmodel=medany

當(dāng)使能了--enable-multilib,就能夠編譯很多版本的lib庫。

。/riscv64-unknown-elf-gcc --print-multi-lib

。;

rv32i/ilp32;@march=rv32i@mabi=ilp32

rv32ic/ilp32;@march=rv32ic@mabi=ilp32

rv32im/ilp32;@march=rv32im@mabi=ilp32

rv32imc/ilp32;@march=rv32imc@mabi=ilp32

rv32iac/ilp32;@march=rv32iac@mabi=ilp32

rv32imac/ilp32;@march=rv32imac@mabi=ilp32

rv32imafc/ilp32f;@march=rv32imafc@mabi=ilp32f

rv32imafdc/ilp32d;@march=rv32imafdc@mabi=ilp32d

rv32e/ilp32e;@march=rv32e@mabi=ilp32e

rv32ec/ilp32e;@march=rv32ec@mabi=ilp32e

rv32emc/ilp32e;@march=rv32emc@mabi=ilp32e

rv32ema/ilp32e;@march=rv32ema@mabi=ilp32e

rv32emac/ilp32e;@march=rv32emac@mabi=ilp32e

rv32eac/ilp32e;@march=rv32eac@mabi=ilp32e

rv64i/lp64;@march=rv64i@mabi=lp64

rv64im/lp64;@march=rv64im@mabi=lp64

rv64imc/lp64;@march=rv64imc@mabi=lp64

rv64imac/lp64;@march=rv64imac@mabi=lp64

rv64imafc/lp64f;@march=rv64imafc@mabi=lp64f

這樣實際上也是消耗了很多時間,為了解決這個問題,可以指定特定的march和mabi進行編譯和測試,待開發(fā)完成后,發(fā)布時在進行整體編譯。這樣開發(fā)效率會高出很多。

make clean

。/configure --prefix=$RISCV/0727/rv32 --with-arch=rv32gc --with-abi=ilp32d --disable-gdb

make -j8

例如上面的命令,只編譯march為rv32gc,abi為ilp32d的gcc模型。省略掉很多庫的編譯,讓編譯的時間縮短了不少。

5.小結(jié)為自己的處理器添加特定的CSR支持,一種情況下可以使用CSR的地址進行,另外一種就是修改匯編器,前一種方法比較直觀,適合使用riscv通用編譯器的開發(fā)方式進行開發(fā),但是不夠直觀。后一種則需要修改匯編器,并且需要自己編譯工具鏈,比較復(fù)雜,但是使用起來直觀,簡單。

編輯:jq

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

    關(guān)注

    3

    文章

    118

    瀏覽量

    69968
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4361

    瀏覽量

    63668
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1649

    瀏覽量

    49682

原文標(biāo)題:riscv gcc中添加自定義的csr支持

文章出處:【微信號:gh_390c588e521e,微信公眾號:嵌入式小作坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    HBird SDK設(shè)置構(gòu)建環(huán)境時找不到riscv-nuclei-elf-gcc,且編譯HelloWorld示例時出現(xiàn)error,怎么解決?

    如圖,HBird SDK設(shè)置構(gòu)建環(huán)境時,顯示找不到riscv-nuclei-elf-gcc。 后續(xù)編譯HelloWorld示例程序時,顯示error如下 請問是安裝工具gcc的問題嗎,文件夾目錄結(jié)構(gòu)如下 初學(xué)者不太會,多謝
    發(fā)表于 04-17 07:57

    ubuntu24.04上安裝gcc工具鏈出現(xiàn)報錯怎么解決?

    虛擬機安裝的ubuntu24.04.1,默認gcc版本13,從芯來官網(wǎng)下載了對應(yīng)的gcc版本的工具鏈,到最后編譯報錯: riscv64-unknown-linux-gnu-gcc: f
    發(fā)表于 03-07 12:39

    HBird SDK設(shè)置構(gòu)建環(huán)境時,顯示找不到riscv-nuclei-elf-gcc,為什么?

    如圖,HBird SDK設(shè)置構(gòu)建環(huán)境時,顯示找不到riscv-nuclei-elf-gcc。 后續(xù)編譯HelloWorld示例程序時,顯示error如下 請問是安裝工具gcc的問題嗎,文件夾目錄結(jié)構(gòu)如下 初學(xué)者不太會,多謝大佬指
    發(fā)表于 03-07 09:51

    RISCV 操作常見問題集 - v4

    /riscv-xpack-toolchain_8.3.0-2.3_windows/bin/../lib/gcc/riscv-none-embed/8.3.0/../../../../riscv
    的頭像 發(fā)表于 11-01 11:06 ?719次閱讀

    諧波的概念及應(yīng)用

    本文簡單介紹了諧波的概念及應(yīng)用。
    的頭像 發(fā)表于 10-18 14:14 ?1022次閱讀
    諧波的<b class='flag-5'>概念及</b>應(yīng)用

    riscv架構(gòu)和arm的區(qū)別是什么

    都可以自由地使用、修改和分發(fā)RISC-V的設(shè)計,而不需要支付許可費用。 2. 模塊化: RISC-V的設(shè)計非常模塊化,它提供了基本的指令集(RV32I/RV64I)以及可選的擴展,如浮點運算(F)、向量處理(V)、原子操作(A)等。這種
    的頭像 發(fā)表于 09-07 09:37 ?2853次閱讀

    RISCV的主流指令集有哪些?

    如題,就像X86中指令集有MMX,SSE,SSE2等,就像ARM指令集有ARM和Thumb等,但是總是感覺RISCV特別亂,可能是廠商比較多的緣故吧,我知道的有WCH的青稞RISC-V,玄鐵
    發(fā)表于 08-29 13:49

    在ubuntu 24.04下嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核出現(xiàn)報錯的原因?

    在ubuntu 24.04下嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核,結(jié)果出現(xiàn)如下報錯: /home
    發(fā)表于 07-16 08:20

    https_server編譯報錯的原因?

    /riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/8.4.
    發(fā)表于 06-26 07:05

    ESP-IDF 4.4例程hello_world編譯失敗的原因?

    32-esp-elf/esp-2021r2-patch2-8.4.0/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/8.4.0/../../../../
    發(fā)表于 06-17 06:41

    Eclipse IDE+IDF- 藍牙例程“A2DP_Source\"編譯錯誤:undefined reference to...\"怎么解決?

    大家好,最近因為需要選擇藍牙音頻例程a2dp_source作為基本模板做開發(fā),但是第一步就卡住了。 在eclipse IDE中導(dǎo)入例程,編譯的時候出錯,很多undefined reference
    發(fā)表于 06-11 07:00

    使用ESP32 h2開發(fā)低功耗的過程中,無法調(diào)用低功耗接口的API如何解決?

    /riscv32-esp-elf/esp-12.2.0_20230208/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/12.2.0
    發(fā)表于 06-07 06:57

    國產(chǎn)riscv芯片大匯總?

    請問有統(tǒng)計國產(chǎn)的riscv芯片的嗎?能匯總一下嗎?
    發(fā)表于 04-27 11:53

    RISCV Debug連接報錯問題

    今天有同事反饋出這樣一個在使用RISCV 調(diào)試時的問題: Error:?no?device?found Error:?unable?to?open?ftdi?device?with?vid?0403
    的頭像 發(fā)表于 04-23 14:49 ?1737次閱讀
    <b class='flag-5'>RISCV</b> Debug連接報錯問題

    RISCV soft JTAG調(diào)試_v1.2

    因為目前軟件的限制,RISCV的邏輯不能同時共用JTAG,所以如果想要同時去調(diào)試邏輯和RISCV的話,可以通過RISCV的soft Jtag來實現(xiàn)。soft Jtag就是通過GPIO來實現(xiàn)的軟件
    的頭像 發(fā)表于 04-23 08:38 ?1309次閱讀
    主站蜘蛛池模板: 午夜激情福利网 | 中国日韩欧美中文日韩欧美色 | 禁漫画羞羞动漫入口 | 爽好舒服快小柔小说 | 免费看大黄 | 天天做天天爱天天做天天吃中 | 国产精品香蕉成人网在线观看 | 五月天婷婷在线观看视频 | 日韩色区| 国产在线观看网址你懂得 | 成人免费淫片95视频观看网站 | 性视频软件 | 欧美性猛交xxxx黑人猛交 | 一级看片免费视频囗交 | 欧美三级欧美一级 | 精品伊人久久香线蕉 | 毛片123| 国产毛片毛片精品天天看 | 99插插| 日本黄色高清视频网站 | 久久最新精品 | 亚洲香蕉久久一区二区三区四区 | 国产免费黄视频 | 韩国韩宝贝2020vip福利视频 | 成人午夜啪啪免费网站 | 成人亚洲视频 | 成人看片免费无限观看视频 | 97干干 | 色宅男看片午夜大片免费看 | 久久久精品久久久久久久久久久 | caoporn97人人做人人爱最新 | 热久久这里只有精品 | www国产永久免费视频看看 | 日韩aa| 日本黄色免费网站 | 极品美女啪啪 | 欧美一级特黄aaaaaa在线看首页 | 亚洲精品一卡2卡3卡三卡四卡 | 天天舔| 最近国语剧情视频在线观看 | 四虎海外在线永久免费看 |