Parece que você está misturando código para arquiteturas diferentes. Veja aqui: não foi possível ler símbolos, arquivo no formato errado .
trecho
You get that error when you change architectures. Are those CHOST/CFLAGS settings new?
Perguntas
- Gostaria de saber se o sistema operacional Toy Unix só pode ser construído em x86 e não em x64. Algo para investigar.
- %código%. Os arquivos que você está usando no CentOS vêm do OSX de alguma forma?
- Eu vejo o
make clean
sendo usado, mas não o vejo sendo compilado, a menos que oboot.o
o construa, então talvez seja a versão do OSX desse arquivo.
A correção
Se você der uma olhada nas opções para nasm -felf boot.s
, perceberá que está usando os switches:
$ nasm -felf boot.s
O formato nasm
é um formato de 32 bits. Em sistemas mais novos, de 64 bits, é necessário alterar isso para elf
. Você pode ver esses formatos usando a opção elf64
:
$ nasm -hf
...
valid output formats for -f are ('*' denotes default):
* bin flat-form binary files (e.g. DOS .COM, .SYS)
ith Intel hex
srec Motorola S-records
aout Linux a.out object files
aoutb NetBSD/FreeBSD a.out object files
coff COFF (i386) object files (e.g. DJGPP for DOS)
elf32 ELF32 (i386) object files (e.g. Linux)
elf64 ELF64 (x86_64) object files (e.g. Linux)
as86 Linux as86 (bin86 version 0.3) object files
...
Então, alterando esta linha no arquivo Make:
ASFLAGS=-felf64
e re-executando nasm -hf
:
$ make
ld -Tlink.ld -o kernel boot.o main.o
$
resolve o problema.