本文来源电子发烧友社区,作者:jf_06445065, 帖子地址:https://bbs.elecfans.com/jishu_2293504_1_1.html
因为starfive是riscv的指令集,所以也就需要了解一下寄存器和常用的指令。
主要是参考这里:https://en.wikipedia.org/wiki/RISC-V
主要就这么一个表格。
但是在srs的statethread里面sp被移动了一个位置,便于修改,所以稍微修改一下位置即可:
.file "md_linux.S"
.text
/* _st_md_cxt_save(__jmp_buf env) */ /* The env is $a0, https://en.wikipedia.org/wiki/MIPS_architecture#Calling_conventions */
.globl _st_md_cxt_save
.type _st_md_cxt_save, %function
.align 2
_st_md_cxt_save:
sd sp,0(a0)
sd ra,8(a0)
sd s0,16(a0)
sd s1,24(a0)
sd s2,32(a0)
sd s3,40(a0)
sd s4,48(a0)
sd s5,56(a0)
sd s6,64(a0)
sd s7,72(a0)
sd s8,80(a0)
sd s9,88(a0)
sd s10,96(a0)
sd s11,104(a0)
li a0,0
jr ra
.size _st_md_cxt_save, .-_st_md_cxt_save
/****************************************************************/
/* _st_md_cxt_restore(__jmp_buf env, int val) */
.globl _st_md_cxt_restore
.type _st_md_cxt_restore, %function
.align 2
_st_md_cxt_restore:
ld sp,0(a0)
ld ra,8(a0)
ld s0,16(a0)
ld s1,24(a0)
ld s2,32(a0)
ld s3,40(a0)
ld s4,48(a0)
ld s5,56(a0)
ld s6,64(a0)
ld s7,72(a0)
ld s8,80(a0)
ld s9,88(a0)
ld s10,96(a0)
ld s11,104(a0)
li a0,1
jr ra
.size _st_md_cxt_restore, .-_st_md_cxt_restore
然后就放到srs目录里面就可以编译SRS跑功能强大的流媒体直播服务器了,甚至支持WebRTC。
不过starfive提供的fedora在编译环境方面好像略有些别扭,不过也还勉强可以用:
[riscv@fedora-starfive helloworld]$ g++ -dM -E - null | grep riscv
#define __riscv 1
#define __riscv_atomic 1
#define __riscv_cmodel_medlow 1
#define __riscv_fdiv 1
#define __riscv_float_abi_double 1
#define __riscv_mul 1
#define __riscv_muldiv 1
#define __riscv_xlen 64
#define __riscv_fsqrt 1
#define __riscv_compressed 1
#define __riscv_flen 64
#define __riscv_div 1
[riscv@fedora-starfive helloworld]$
后来我是用__riscv来做环境分析的,然后不影响其他平台编译兼容了。
全部0条评论
快来发表一下你的评论吧 !