编写一个最简单的操作系统包括启动项等程序,但是Makefile文件编写有点错误

最近在网上看到一个站主的操作系统实践教程,但是把程序代码进行编译时出错了,就是Makefile文件有点错。但自己不知道哪里出错了。我把所有程序(init.c,bootsect.asm,Kernal.asm,loader.asm,Makefile)都放在barras这个文件夹下,但是make后出错了。请大神们指点下帮我改正下。
bootsect.asm程序
bootsect.asm程序
Kernal.asm程序
Kernal.asm程序
loader.asm程序
loader.asm程序
Makefile
Makefile文件
init.c程序
init.c程序
程序编译结果
程序编译结果

从这个编译输出来看,init.c好像没有编译成elf_i386格式,你可以看看

*.o:*.c
    gcc $(CFLAGS)  -m elf_i386 -0s -c -o $@ $<

这里有没有问题。

还有,你这三次链接符号都找不到也挺僵

改成这样就能够编译生成
init.o:init.o
gcc -m32 -c init.c -o init.o
不过原来是错了哪里,这样子只能把一个.c文件编译成.o文件

ld是链接,-o只是编译,当然不会出错了,当链接时找不见符号就出错了,所以要看符号输出方面有什么问题。
加个.global root试试。

汇编生成的i386位机器码 , c生成的x86-64机器码不兼容。 加上-m32就都生成i386可以link了.

试了,加上-m32还是失败了,编译不成功。

加上-m32应该没大问题,,