-1

我阅读了本教程:http ://www.osdever.net/tutorials/view/writing-a-simple-c-kernel 我尝试使用本教程提供的likerscript 链接文件。但是 LD 给我一个错误,说它无法读取 nasm 输出的文件。有谁知道我做错了什么?

4

1 回答 1

3

如果您按照所示精确执行教程,那么问题很可能出在此处:

nasm -f aout kernel_start.asm -o ks.o

这会生成一个完全过时的a.out格式的目标文件。您可能正在 Windows 或 Linux 主机系统上完成本教程;这些系统附带的链接器分别需要 PECOFF 和 ELF 格式的目标文件。-f在上面的命令之后,您可能还可以添加另一件事来nasm生成正确的格式。

或者,学习编写 AT&T 汇编语言。然后你可以像 C 源代码一样从你的.asm文件中创建一个目标文件,你会自动得到正确的格式。gcc -c您在该教程中拥有的琐碎启动文件的 AT&T 等价物将是

    .text
    .globl start
start:
    call k_main
    cli
    hlt

另请注意,我从call指令的参数中删除了前导下划线。仅当 C 代码编译为a.out格式的目标文件时,该下划线才合适,(我们怀疑)它不是。

于 2013-08-14T01:05:29.893 回答