无法使用类型命令连接文件,说语法不正确

Unable to use type command to concatenate files, says syntax is not correct

我正在构建自己的内核并在我的项目中有 2 个 .bin 文件 boot.bin 和 kernel.bin,我想将它们连接成一个名为 [=52] 的 .img 文件=].我正在使用 makefile 执行此操作。

我在下面包含了我的 makefile 的代码:

all: bootloader
 
bootloader:
    mkdir boot\bin
    nasm boot/boot.asm -f bin -o boot/bin/boot.bin
    nasm boot/kernel_entry.asm -f elf -o boot/bin/kernel_entry.bin

    gcc -m32 -ffreestanding -c boot/main.c -o boot/bin/kernel.o
    ld -m i386pe -o boot/bin/kernel.img -Ttext 0x1000 boot/bin/kernel_entry.bin boot/bin/kernel.o

    objcopy -O binary -j .text boot/bin/kernel.img boot/bin/kernel.bin
    type boot/bin/boot.bin boot/bin/kernel.bin > os.img

clear:
    rm -f boot/boot.img
 
run:
    qemu-system-x86_64.exe -drive format=raw,file=os.img

然而,当我运行这个脚本使用make命令时,它说type命令的语法是不正确的。这可能是一个简单的问题,但是我在网上查了很多资源,语法应该没问题。

我在 运行 执行 make 命令时遇到了下面提到的错误:

type boot/bin/boot.bin,boot/bin/kernel.bin > os.img
The syntax of the command is incorrect.

我已经测试了我的 .asm 和 .c 文件,它们工作得很好。

如果可能需要,下面是我的 .asm 和 .c 文件的代码:

boot.asm

[org 0x7c00]
[bits 16]

section code

.switch:
    mov bx, 0x1000 ; location of the code being loaded from the hard disk
    mov ah, 0x02
    mov al, 30 ; number of sectors to read from the hard disk
    mov ch, 0x00
    mov dh, 0x00
    mov cl, 0x02
    int 0x13

    cli ; turn off interrupts
    lgdt [gdt_descriptor] ; load GDT table

    mov eax, cr0
    or eax, 0x1
    mov cr0, eax ; make the switch

    jmp code_seg:protected_start

startupmsg: db 'Welcome to Wyvern!', 0

[bits 32]
protected_start:
    mov ax, data_seg
    mov ds, ax
    mov ss, ax
    mov es, ax
    mov fs, ax
    mov gs, ax

    ; update stack pointer
    mov ebp, 0x90000
    mov esp, ebp

    call 0x1000
    jmp $

gdt_begin:
gdt_null_descriptor:
    dd 0x00
    dd 0x00
gdt_code_seg:
    dw 0xffff
    dw 0x00
    db 0x00
    db 10011010b
    db 11001111b
    db 0x00
gdt_data_seg:
    dw 0xffff
    dw 0x00
    db 0x00
    db 10010010b
    db 11001111b
    db 0x00
gdt_end:
gdt_descriptor:
    dw gdt_end - gdt_begin - 1
    dd gdt_begin
code_seg equ gdt_code_seg - gdt_begin
data_seg equ gdt_data_seg - gdt_begin

times 510 - ($ - $$) db 0x00 ; pads the file with 0s, making it the right size

db 0x55
db 0xaa

kernel.asm

[bits 32]
START:
[extern _start]
    call _start
    jmp $

main.c

char* video_memory;

int start() {
    video_memory = (char*) 0xb8000;

    for (int i = 0; i < 2 * 25 * 80; i += 2) {
        *(video_memory + i) = 0;
        *(video_memory + i + 1) = 0x0A;
    }
}

我还在下面附上了我的项目的目录结构:

如果还有什么需要修改的,欢迎大家补充。

我设法弄清楚类型给出了这个错误,因为参数格式不正确。所以我对我的 makefile 进行了以下更改:

  1. 在 type 命令中,将所有 forward-slashes 替换为 反斜杠。
  2. 每个文件名用引号引起来

这帮我解决了问题。