🔧 修改为makefile的构建方式,程序能正常运行

This commit is contained in:
fslongjin 2022-01-21 13:49:09 +08:00
parent cff4f4eb29
commit f479f32102
10 changed files with 63 additions and 72 deletions

8
.idea/customTargets.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CLionExternalBuildManager">
<target id="05f63597-45c4-4a5c-9929-2668d1c24337" name="DragonOS" defaultType="TOOL">
<configuration id="4cc3c901-337f-4624-bd4b-ae289fc31816" name="DragonOS" />
</target>
</component>
</project>

View File

@ -1,23 +0,0 @@
cmake_minimum_required(VERSION 3.20)
set(CMAKE_VERBOSE_MAKEFILE on)
set(DRAGONOS_ARCH "x86_64")
mark_as_advanced(CMAKE_INSTALL_PREFIX)
set(CROSS_COMPILE "${DRAGONOS_ARCH}-linux-gnu-")
set(CMAKE_C_COMPILER "${CROSS_COMPILE}gcc")
set(CMAKE_ASM_COMPILER "${CROSS_COMPILE}gcc")
enable_language(ASM ASM_NASM)
set(CMAKE_C_FLAGS
"-Wall -fPIC -nostdlib -nostartfiles -ffreestanding ")
project(dragonOS C ASM)
set(CMAKE_C_STANDARD 11)
add_subdirectory(bootloader)
add_subdirectory(kernel)
include_directories(kernel)

18
Makefile Normal file
View File

@ -0,0 +1,18 @@
SUBDIRS = bootloader kernel
.PHONY: all
all:
@list='$(SUBDIRS)'; for subdir in $$list; do \
echo "make all in $$subdir";\
cd $$subdir;\
make all;\
cd ..;\
done
.PHONY: clean
clean:
@list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Clean in dir: $$subdir";\
cd $$subdir && make clean;\
cd .. ;\
done

View File

@ -1,13 +0,0 @@
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS nasm asm S)
set(CMAKE_ASM_NASM_OBJECT_FORMAT bin)
set(CMAKE_ASM_NASM_FLAGS "-e")
set(CMAKE_ASM_NASM_LINK_EXECUTABLE "nasm <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
enable_language(ASM_NASM)
#
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/bootloader)
#
add_compile_options(-I ${CMAKE_CURRENT_SOURCE_DIR}/ )
add_executable(boot.bin boot.asm)
add_executable(loader.bin loader.asm fat12.inc)

11
bootloader/Makefile Normal file
View File

@ -0,0 +1,11 @@
all: boot.bin loader.bin
boot.bin: boot.asm
nasm boot.asm -o ../bin/bootloader/boot.bin
loader.bin: loader.asm
nasm loader.asm -o ../bin/bootloader/lodaer.bin
clean:
rm -rf *.asm~ Makefile~

View File

@ -1,18 +0,0 @@
#
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/kernel)
#
add_compile_options(-I ${CMAKE_CURRENT_SOURCE_DIR}/ )
add_library(${PROJECT_NAME}-arch
head.S
main.c)
add_executable(kernel.bin
head.S main.c)
set_property(
TARGET kernel.bin
PROPERTY
DEPENDS
"link.lds"
)

19
kernel/Makefile Normal file
View File

@ -0,0 +1,19 @@
all: kernel
objcopy -I elf64-x86-64 -S -R ".eh_frame" -R ".comment" -O binary kernel ../bin/kernel/kernel.bin
kernel: head.o main.o
ld -b elf64-x86-64 -o kernel head.o main.o -T link.lds
main.o: main.c
# -fno-builtin: 不使用C语言内建函数
# The -m64 option sets int to 32bits and long and pointer to 64 bits and generates code for AMDs x86-64 architecture.
gcc -mcmodel=large -fno-builtin -m64 -c main.c
head.o: head.S
gcc -E head.S > head.s # 预处理
as --64 -o head.o head.s
clean:
rm -rf *.o *.s~ *.s *.S~ *.c~ *.h~ kernel

View File

@ -1,17 +1,3 @@
/***************************************************
* 版权声明
*
* 本操作系统名为MINE
* 该操作系统未经授权不得以盈利或非盈利为目的进行开发,
* 只允许个人学习以及公开交流使用
*
* 代码最终所有权及解释权归田宇所有;
*
* 本模块作者: 田宇
* EMail: 345538255@qq.com
*
*
***************************************************/
OUTPUT_FORMAT("elf64-x86-64","elf64-x86-64","elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)

View File

@ -4,8 +4,5 @@
void Start_Kernel(void)
{
while(1)
{
};
while(1);
}

View File

@ -5,6 +5,12 @@ if [ ! $uid == "0" ];then
exit
fi
# 第一个参数如果是--notbuild 那就不构建,直接运行
if [ ! "$1" == "--notbuild" ]; then
echo "开始构建..."
make all
make clean
fi
# ==============检查文件是否齐全================
if [ ! -x "bin/bootloader/boot.bin" ]; then