最近点亮的技能树

1 篇文章 0 订阅

有时候真是怀疑自己的智商,用了两周谷歌出来了一个GRUB实现的bootloader。
原来github上的代码这么有用。
linux命令行的cd,vim操作
C语言asm volatile函数的用法
qemu,vnc viewer的使用
2020/5/4

C语言宏定义 va_start(ap, last) (真惨啊,上了三年大学到现在还在学C语言的宏定义)
ls -R
gdb
2020/5/6

gdb调试
找到了清华大学的操作系统课,打算跟着学,估计会少走很多弯路。。。(即使我已经走了三周弯路)
2020/5/7

安装nightly rust,利用cargo创建了二进制项目
移除项目对现有操作系统的依赖,通过:移除项目的标准库依赖和运行函数依赖,并且编写了panic函数(虽然并没有功能)
开始用notion记笔记了
2020/5/09

改用riscv64编译项目
为项目设置了默认的目标三元组
生成了内核镜像(没有调试信息,不解析elf文件)
通过编写连接脚本指定内核镜像的内存布局,再生成指定内存布局的内核镜像
重写程序的入口点_start,使其指定了内核的栈,然后使用call指令进入rust_main函数
~~ ~~
Qemu内置了OpenSBI(主要功能是硬件初始化和加载操作系统(就是一个bootloader))
我们使用qemu内置的

qemu-system-riscv64 \
  --machine virt \
  --nographic \
  --bios default
  -device loader,file=$(bin),addr=0x80200000

命令运行OpenSBI,并且指定我们生成的内核镜像

通过封装此命令到Makefile中,可以简单地使用make run 来运行此命令
~~ ~~
我们使用内联汇编,通过ecall发起系统调用,使用opensbi为我们提供的扩展sbi_console_putchar,来实现向屏幕实处字符的功能
~~ ~~
内联汇编
makefile 文件格式

实现了println!函数,格式化输出,具体的语法还需要学习
rust use和extern的用法
rust impl

还需要回顾的地方:实现格式化输出
2020/5/10

添加了保护现场的汇编代码。。。。。
触发中断时先保存现场然后进入rust_trap,最后恢复现场。。。。
我真是个菜鸡。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值