我读了这个教程:http://www.osdever.net/tutorials/view/writing-a-simple-c-kernel 我尝试使用教程提供的likerscript链接文件。但LD给我一个错误,说它无法读取nasm发出的文件。有谁知道我做错了什么?
答案 0 :(得分: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 -format对象文件时,该下划线才适用,(我们怀疑)它不是。