Makefile Bootloader+Kernel zusammenhängen



  • Hallo!

    Ich möchte unter Linux mit meinem Makefile sowohl einen Bootloader, als auch den Kernel kompilieren.

    Nun ist es möglich, in der Shell alles zu automatisieren.

    nasm kernel.asm -f bin -o kernel.bin
    nasm boot.asm -f bin -o boot.bin
    cat boot.bin kernel.bin > OS.bin

    Um das Projekt jedoch in einer IDE zu integrieren, ist es nötig, ein Makefile zu erstellen.

    all: 
    	nasm kernel.asm -f bin -o kernel.bin
    	nasm boot.asm -f bin -o boot.bin
    	$(shell cat boot.bin kernel.bin > OS.bin)
    

    Output:
    cat: boot.bin: Datei oder Verzeichnis nicht gefunden
    cat: kernel.bin: Datei oder Verzeichnis nicht gefunden

    nasm kernel.asm -f bin -o kernel.bin
    nasm boot.asm -f bin -o boot.bin*

    Problem: Offensichtlich wird das Shell Command VOR dem Erstellen von kernel.bin und boot.bin ausgeführt.
    Warum? Ich hab es ja danach geschrieben.
    Wie ist es möglich, die zwei Dateien mittels Makefile zu einer zusammenzuhängen, welche ich dann in Bochs laden kann?



  • Du scheinst Leerzeichen zum Einrücken zu verwenden. Das ist in Makefiles nicht zulässig. Eventuell ist das die Ursache?



  • $(shell ...) sorgt dafür, dass ein Kommando beim Interpretieren der Makefile ausgeführt wird. Du willst hingegen, dass das Kommando beim Erstellen von "all" ausgeführt wird. Dazu solltest du den Befehl genauso wie den Aufruf von nasm schreiben (cat ist nämlich genauso ein Programm wie nasm).

    all:
        nasm kernel.asm -f bin -o kernel.bin
        nasm boot.asm -f bin -o boot.bin
        cat boot.bin kernel.bin > OS.bin
    

Anmelden zum Antworten