#c #linux #docker #osdev
Вопрос:
Я начал писать ядро операционной системы, используя учебник из этого видео. Я уже написал Makefile
, как вы можете видеть здесь:
x86_64_asm_source_files := $(shell find src/impl/x86_64 -name *.asm) # Holds the list of all of the assembly source files.
x86_64_asm_object_files := $(patsubst src/impl/x86_64/%.asm, build/x86_64/%.o, $(x86_64_asm_source_files)) # Holds the list of all of the obj files.
# Define the command we need to run to build one of the object files from the source files:
$(x86_64_asm_object_files): build/x86_64/%.o : src/impl/x86_64/%.asm
# For compiling the assembly files:
mkdir -p $(dir $@) amp;amp;
nasm -f elf64 $(patsubst build/x86_64/%.o, src/impl/x86_64/%.asm, $@) -o $@
# Create a custom phony command:
.PHONY: build-x86_64
# Run only if any of the object files have been changed:
build-x86_64: $(x86_64_asm_object_files)
# For generating the '.iso' file:
mkdir -p dist/x86_64 amp;amp;
x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld $(x86_64_asm_object_files) amp;amp;
cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin amp;amp;
grub-mkrescue /usr/lib/grub/i386-pc -o dist/x86_64/kernel.iso targets/x86_64/iso
Когда я запускаю make build-x86_64
внутри контейнера docker, я получаю эту ошибку:
make: *** No rule to make target 'build-x86_64'. Stop.
Когда я пишу make
только команду, кажется, что makefile
из-за этой ошибки нет:
make: *** No targets specified and no makefile found. Stop.
Когда я использую make
команду за пределами docker, я получаю:
mkdir -p build/x86_64/boot/ amp;amp;
nasm -f elf64 src/impl/x86_64/boot/main.asm -o build/x86_64/boot/main.o
mkdir -p build/x86_64/boot/ amp;amp;
nasm -f elf64 src/impl/x86_64/boot/header.asm -o build/x86_64/boot/header.o
mkdir -p dist/x86_64 amp;amp;
x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld build/x86_64/boot/main.o build/x86_64/boot/header.o amp;amp;
cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin amp;amp;
grub-mkrescue /use/lib/grub/i386-pc -o dist/x86_64/kernel.iso targets/x86_64/iso
/bin/sh: 2: x86_64-elf-ld: not found
make: *** [Makefile:16: build-x86_64] Error 127
Команда docker, которую я использую для создания самого docker, является: sudo docker build buildenv -t learnos-buildenv
Команда docker, которую я использую для запуска терминала docker,: sudo docker run --rm -it -v /root/env learnos-buildenv
Могу ли я что-нибудь сделать, чтобы исправить docker
? Или как я могу получить x86_64-elf-ld
компилятор без использования docker
?
(Моя операционная система для разработки-Ubuntu 20.04.2.0 LTS.)
Комментарии:
1. У вас опечатка. Цель называется
build-x86_64
и неbuild-x86-64
называется .2. Спасибо! Но даже тогда у меня будет та же проблема.
3. работает ли это за пределами докера?
4.Я попробовал это за пределами docker, и у меня возникли проблемы с компилятором: `
nasm -f elf64 src/impl/x86_64/boot/header.asm -o build/x86_64/boot/header.o
/bin/sh: 2: x86_64-elf-ld: not found
make: *** [Makefile:16: build-x86_64] Error 127
5. но была ли цель найдена? Если make работал вне докера, убедитесь, что внутри докера make вызывается из правильной папки
Ответ №1:
Все работало, когда я использовал makefile
ld
команду the вместо x86_64-elf-ld
команды, а также я не использовал docker
ее для компиляции своего проекта. Если есть какое-либо лучшее решение , которое включает в себя компиляцию файлов docker
, пожалуйста, напишите мне.
Спасибо!