rCore-Tutorial-Book-v3 icon indicating copy to clipboard operation
rCore-Tutorial-Book-v3 copied to clipboard

rCore-Tutorial-Book-v3/chapter1/3-2-mini-rt-baremetal

Open utterances-bot opened this issue 4 years ago • 46 comments

构建裸机运行时执行环境 — rCore-Tutorial-Book-v3 0.1 文档

https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter1/3-2-mini-rt-baremetal.html

utterances-bot avatar Feb 03 '21 07:02 utterances-bot

章末的练习题怎么没了o(TヘTo)

chenzhiy2001 avatar Feb 03 '21 07:02 chenzhiy2001

章末的练习题怎么没了o(TヘTo)

目前习题仍在准备中,敬请期待~

wyfcyx avatar Feb 03 '21 08:02 wyfcyx

请问什么是 “链接脚本的优先匹配原则”,没看懂

DylanYangYuchen avatar Feb 21 '21 12:02 DylanYangYuchen

请问什么是 “链接脚本的优先匹配原则”,没看懂

意思是某个目标文件的 .bss.stack 段既可以被通配符 *(.bss.stack) 匹配,也可以被通配符 *(.bss.*) 匹配,但由于 *(.bss.stack) 出现在链接脚本中较前的位置,因此链接器会将 .bss.stack 段放到链接脚本中 *(.bss.stack) 的那个位置。

wyfcyx avatar Feb 21 '21 12:02 wyfcyx

也就是说,即便显式地写了两遍同一个目标文件的同一个分段,链接器也只会链接一次对吗

DylanYangYuchen avatar Feb 22 '21 00:02 DylanYangYuchen

sbi_call的实现貌似忘贴上去了,搜了下以前版本的rCore教学里有

DylanYangYuchen avatar Feb 22 '21 08:02 DylanYangYuchen

我觉得这里面的地址0x80020000都应该改成0x80200000?

Tokubara avatar Mar 01 '21 14:03 Tokubara

我觉得这里面的地址0x80020000都应该改成0x80200000?

2021-02-07的更新 中 Qemu 的 base address 从 0x80020000 改成 0x80200000 ,k210 则保持不变。目前文档还没来得及更新。

wyfcyx avatar Mar 01 '21 15:03 wyfcyx

额,添加裸机打印相关函数章节的pub fn console_putchar没有把syscall改成sbi_call ....

aabbcco avatar Mar 02 '21 11:03 aabbcco

问个链接语法问题:

    stext = .;
    .text : {
        *(.text.entry)
        *(.text .text.*)
    }

这个stext = .是不是不影响链接过程啊? 我觉得把.text{}放在这个位置已经能达到放置.text段的效果了, 我觉得这是不是只是为了定义一个全局可见的symbol啊. 我的这种感觉来自于

fn clear_bss() {
    extern "C" {
        fn sbss();
        fn ebss();
    }
    (sbss as usize..ebss as usize).for_each(|a| {
        unsafe { (a as *mut u8).write_volatile(0) }
    });
}

这里用到了符号sbss, 所以我猜测链接脚本中这些stext等都是起符号作用.

Tokubara avatar Mar 02 '21 14:03 Tokubara

问个链接语法问题:

    stext = .;
    .text : {
        *(.text.entry)
        *(.text .text.*)
    }

这个stext = .是不是不影响链接过程啊? 我觉得把.text{}放在这个位置已经能达到放置.text段的效果了, 我觉得这是不是只是为了定义一个全局可见的symbol啊. 我的这种感觉来自于

fn clear_bss() {
    extern "C" {
        fn sbss();
        fn ebss();
    }
    (sbss as usize..ebss as usize).for_each(|a| {
        unsafe { (a as *mut u8).write_volatile(0) }
    });
}

这里用到了符号sbss, 所以我猜测链接脚本中这些stext等都是起符号作用.

的确如此,它只是为了指出 .text 段的位置。

wyfcyx avatar Mar 02 '21 22:03 wyfcyx

如何咋DRAM中放置应用程序的各个部分 应该是 如何在的吧

zuozuo avatar Mar 02 '21 22:03 zuozuo

与上节不同,需要关注地方主要是: - 物理内存的DRAM为止(放应用程序的地方) 想请问一下这个 物理内存的DRAM为止 是什么意思

zuozuo avatar Mar 02 '21 22:03 zuozuo

请问助教可以把Chapter1教程中到这一节结束的代码(即能在裸机上输出的代码)公布一下吗?感觉看教程自己一步一步做容易在中间出错,影响理解。

nmrenyi avatar Mar 03 '21 01:03 nmrenyi

请问助教可以把Chapter1教程中到这一节结束的代码(即能在裸机上输出的代码)公布一下吗?感觉看教程自己一步一步做容易在中间出错,影响理解。

代码仓库对应分支查看 @nmrenyi

umaYnit avatar Mar 03 '21 01:03 umaYnit

正确配置栈空间布局中“优雅的退出” 的rust_main函数体应该是shutdown()吧

cyx233 avatar Mar 05 '21 04:03 cyx233

昨天我和松意识到我们的链接脚本中漏掉了两个段:.sbss.sdata 它们也需要被加到对应的段里:

    .data : {
        *(.data .data.*)
+       *(.sdata .sdata.*)
    }

    .bss : {
        *(.bss.stack)
        sbss = .;
        *(.bss .bss.*)
+       *(.sbss .sbss.*)
    }

不然就会被放到 ekernel 后面,隐患很大啊[捂脸]

wangrunji0408 avatar Mar 07 '21 10:03 wangrunji0408

昨天我和松意识到我们的链接脚本中漏掉了两个段:.sbss.sdata 它们也需要被加到对应的段里:

    .data : {
        *(.data .data.*)
+       *(.sdata .sdata.*)
    }

    .bss : {
        *(.bss.stack)
        sbss = .;
        *(.bss .bss.*)
+       *(.sbss .sbss.*)
    }

不然就会被放到 ekernel 后面,隐患很大啊[捂脸]

多谢指出,马上Fix

wyfcyx avatar Mar 07 '21 11:03 wyfcyx

pub fn shutdown() -> ! {
    sbi_call(SBI_SHUTDOWN, [0, 0, 0]);
    panic!("It should shutdown!");
}

这个地方似乎应该是sbi_call(SBI_SHUTDOWN,0,0,0);四个参数

chenzhiy2001 avatar Mar 31 '21 14:03 chenzhiy2001

@chenzhiy2001 多谢,已修改。

wyfcyx avatar Mar 31 '21 15:03 wyfcyx

请问一下 ''' error: couldn't allocate output register for constraint '{x10}' --> src/sbi.rs:7:9 | 7 | llvm_asm!("ecall" | ^

error: unexpected token in '.section' directive | note: instantiated into assembly here --> :9:25 | 9 | .section .text.entry | ^

error: invalid instruction mnemonic 'la' | note: instantiated into assembly here --> :13:5 | 13 | la sp, boot_stack_top | ^^

error: invalid instruction mnemonic 'jal' | note: instantiated into assembly here --> :14:5 | 14 | jal rust_main | ^^^

error: unexpected token in '.section' directive | note: instantiated into assembly here --> :18:24 | 18 | .section .bss.stack | ^

error: aborting due to 5 previous errors; 1 warning emitted ''' 编译的时候出现这个问题要如何解决啊?

YXLZJ avatar Apr 16 '21 00:04 YXLZJ

sbi_cal和syscall的命令一样,底层如何判断权限呢?是rustSBI根据id控制的么?

leonhxx avatar Apr 28 '21 06:04 leonhxx

如何做到执行环境的初始化代码被放在内存上以 0x80200000 开头的区域上?----对这部分的讲解不是很理解,我的理解是这样的:操作系统代码是bootloader(也就是rustSBI)加载到内存中的,放到0x80200000 开头的区域上是由bootloader控制的,因此我们配置栈空间布局只能改变各个段的现对位置及内核初始位置,使booloader加载到的位置和我们配置的初始位置一致,这样地址偏移就会一致。这样理解正确么?

leonhxx avatar Apr 28 '21 07:04 leonhxx

你好sbi_call的代码可以贴一下嘛

storage-db avatar May 04 '21 11:05 storage-db

你好经过验证应该要把sbi_call声明为pub在main.rs才能使用吧

storage-db avatar May 05 '21 08:05 storage-db

/home/oslab/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-objcopy: error: 'target/riscv64gc-unknown-none-elf/release/os': No such file or directory Makefile:49: recipe for target 'target/riscv64gc-unknown-none-elf/release/os.bin' failed make: *** [target/riscv64gc-unknown-none-elf/release/os.bin] Error 1 你好这个错误是需要怎么修改呢

storage-db avatar May 28 '21 14:05 storage-db

结果发现刚执行一条指令,整个系统就飞了( pc 寄存器等已经变成为 0 了)。再一看, sp 寄存器是一个非常大的值 0xffffff

这是怎么发现的?前文rust-gdb里并没有0xffffff

VincentCorleone avatar Jun 11 '21 06:06 VincentCorleone

. = ALIGN(4K); etext = .; srodata = .; rodata : { (.rodata .rodata.) } 请教下为什么每个节一开始要4K对齐呢?

sunshine-lcc avatar Jun 23 '21 06:06 sunshine-lcc

想问下GDB只能用riscv64-unknown-elf-gdb这个吗,但是好像不能把断点打到方法上

Egbert8527 avatar Jul 12 '21 15:07 Egbert8527

对于在裸机上执行的应用程序,其执行环境(就是QEMU模拟硬件+“三叶虫”操作系统内核)将可执行文件加载到内存的时候,并负责将 .bss 所分配到的内存区域全部清零。

这里有点不通顺,或许可以将“并”改为“同时”?

我们在 main.rs 的 rust_main 函数中调用 panic!("It should shutdown!"); 宏时,整个模拟执行的结果是:

根据上下文,“但”应该改为“当”?

但也能看出,这个操作系统很脆弱,只能支持一个简单的易用,在本质上 是一个提供方便服务接口的》库。

这里“易用”感觉打错了,我猜是“应用”?

greenhandatsjtu avatar Jul 17 '21 15:07 greenhandatsjtu