Browse Source

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

fslongjin 3 years ago
parent
commit
f479f32102
10 changed files with 63 additions and 72 deletions
  1. 8 0
      .idea/customTargets.xml
  2. 0 23
      CMakeLists.txt
  3. 18 0
      Makefile
  4. 0 13
      bootloader/CMakeLists.txt
  5. 11 0
      bootloader/Makefile
  6. 0 18
      kernel/CMakeLists.txt
  7. 19 0
      kernel/Makefile
  8. 0 14
      kernel/link.lds
  9. 1 4
      kernel/main.c
  10. 6 0
      run_in_qemu.sh

+ 8 - 0
.idea/customTargets.xml

@@ -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>

+ 0 - 23
CMakeLists.txt

@@ -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 - 0
Makefile

@@ -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

+ 0 - 13
bootloader/CMakeLists.txt

@@ -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 - 0
bootloader/Makefile

@@ -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~

+ 0 - 18
kernel/CMakeLists.txt

@@ -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 - 0
kernel/Makefile

@@ -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 AMD’s 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

+ 0 - 14
kernel/link.lds

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

+ 1 - 4
kernel/main.c

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

+ 6 - 0
run_in_qemu.sh

@@ -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