Browse Source

新增rust ffi (#77)

* 引入cargo

* 取消对Cargo.lock的跟踪

* 解决vscode报错问题

* new: rust的代码能够调用c语言的printk_color

* 1、将原本run.sh的工作拆解,变为几个不同的make命令
2、在docker镜像中编译rust

* 更改workflow

* update workflow

* new: 解决workflow无法通过编译的问题
login 2 years ago
parent
commit
2813126e31
100 changed files with 245 additions and 114 deletions
  1. 1 1
      .github/workflows/makefile.yml
  2. 3 1
      .vscode/settings.json
  3. 35 21
      Makefile
  4. 36 19
      docs/introduction/build_system.md
  5. 11 0
      kernel/.cargo/config.toml
  6. 5 0
      kernel/.gitignore
  7. 15 0
      kernel/Cargo.toml
  8. 5 72
      kernel/Makefile
  9. 40 0
      kernel/build.rs
  10. 79 0
      kernel/src/Makefile
  11. 0 0
      kernel/src/arch/Makefile
  12. 0 0
      kernel/src/arch/arch.h
  13. 0 0
      kernel/src/arch/x86_64/Makefile
  14. 0 0
      kernel/src/arch/x86_64/asm/asm.h
  15. 0 0
      kernel/src/arch/x86_64/asm/cmpxchg.h
  16. 0 0
      kernel/src/arch/x86_64/current.h
  17. 0 0
      kernel/src/arch/x86_64/ia64_msi.c
  18. 0 0
      kernel/src/arch/x86_64/ia64_msi.h
  19. 0 0
      kernel/src/arch/x86_64/math/bitcount.h
  20. 15 0
      kernel/src/arch/x86_64/x86_64-unknown-none.json
  21. 0 0
      kernel/src/arch/x86_64/x86_64_ipi.c
  22. 0 0
      kernel/src/arch/x86_64/x86_64_ipi.h
  23. 0 0
      kernel/src/common/Makefile
  24. 0 0
      kernel/src/common/asm.h
  25. 0 0
      kernel/src/common/atomic.h
  26. 0 0
      kernel/src/common/bitree.h
  27. 0 0
      kernel/src/common/blk_types.h
  28. 0 0
      kernel/src/common/block.h
  29. 0 0
      kernel/src/common/boot_info.h
  30. 0 0
      kernel/src/common/compiler.h
  31. 0 0
      kernel/src/common/compiler_attributes.h
  32. 0 0
      kernel/src/common/completion.h
  33. 0 0
      kernel/src/common/cpu.h
  34. 0 0
      kernel/src/common/crc16.h
  35. 0 0
      kernel/src/common/crc32.h
  36. 0 0
      kernel/src/common/crc64.h
  37. 0 0
      kernel/src/common/crc7.h
  38. 0 0
      kernel/src/common/crc8.h
  39. 0 0
      kernel/src/common/dirent.h
  40. 0 0
      kernel/src/common/elf.h
  41. 0 0
      kernel/src/common/err.h
  42. 0 0
      kernel/src/common/errno.h
  43. 0 0
      kernel/src/common/fcntl.h
  44. 0 0
      kernel/src/common/font.h
  45. 0 0
      kernel/src/common/gfp.h
  46. 0 0
      kernel/src/common/glib.h
  47. 0 0
      kernel/src/common/hid.h
  48. 0 0
      kernel/src/common/idr.h
  49. 0 0
      kernel/src/common/kfifo.h
  50. 0 0
      kernel/src/common/kprint.h
  51. 0 0
      kernel/src/common/kthread.h
  52. 0 0
      kernel/src/common/list.h
  53. 0 0
      kernel/src/common/lockref.h
  54. 0 0
      kernel/src/common/lz4.h
  55. 0 0
      kernel/src/common/math.h
  56. 0 0
      kernel/src/common/math/Makefile
  57. 0 0
      kernel/src/common/math/fabs.c
  58. 0 0
      kernel/src/common/math/libm.h
  59. 0 0
      kernel/src/common/math/pow.c
  60. 0 0
      kernel/src/common/math/round.c
  61. 0 0
      kernel/src/common/mutex.h
  62. 0 0
      kernel/src/common/numa.h
  63. 0 0
      kernel/src/common/printk.h
  64. 0 0
      kernel/src/common/semaphore.h
  65. 0 0
      kernel/src/common/spinlock.h
  66. 0 0
      kernel/src/common/stddef.h
  67. 0 0
      kernel/src/common/stdio.h
  68. 0 0
      kernel/src/common/stdlib.h
  69. 0 0
      kernel/src/common/string.h
  70. 0 0
      kernel/src/common/sys/types.h
  71. 0 0
      kernel/src/common/sys/wait.h
  72. 0 0
      kernel/src/common/time.h
  73. 0 0
      kernel/src/common/unistd.h
  74. 0 0
      kernel/src/common/user_namespace.h
  75. 0 0
      kernel/src/common/wait_queue.h
  76. 0 0
      kernel/src/common/wait_queue_head.h
  77. 0 0
      kernel/src/debug/.gitignore
  78. 0 0
      kernel/src/debug/Makefile
  79. 0 0
      kernel/src/debug/bug.h
  80. 0 0
      kernel/src/debug/kallsyms.c
  81. 0 0
      kernel/src/debug/traceback/traceback.c
  82. 0 0
      kernel/src/debug/traceback/traceback.h
  83. 0 0
      kernel/src/driver/Makefile
  84. 0 0
      kernel/src/driver/acpi/Makefile
  85. 0 0
      kernel/src/driver/acpi/acpi.c
  86. 0 0
      kernel/src/driver/acpi/acpi.h
  87. 0 0
      kernel/src/driver/disk/Makefile
  88. 0 0
      kernel/src/driver/disk/ahci/ahci.c
  89. 0 0
      kernel/src/driver/disk/ahci/ahci.h
  90. 0 0
      kernel/src/driver/disk/ata.c
  91. 0 0
      kernel/src/driver/disk/ata.h
  92. 0 0
      kernel/src/driver/hid/Makefile
  93. 0 0
      kernel/src/driver/hid/hidparse.c
  94. 0 0
      kernel/src/driver/hid/hidstrings.c
  95. 0 0
      kernel/src/driver/hid/internal.h
  96. 0 0
      kernel/src/driver/hid/usbhid/Makefile
  97. 0 0
      kernel/src/driver/interrupt/8259A/8259A.c
  98. 0 0
      kernel/src/driver/interrupt/8259A/8259A.h
  99. 0 0
      kernel/src/driver/interrupt/Makefile
  100. 0 0
      kernel/src/driver/interrupt/apic/apic.c

+ 1 - 1
.github/workflows/makefile.yml

@@ -15,4 +15,4 @@ jobs:
     - uses: actions/checkout@v3
       
     - name: build the DragonOS
-      run: sudo apt install -y llvm-dev libclang-dev clang && cargo install cargo-binutils && rustup toolchain install nightly && rustup default nightly && rustup component add rust-src && rustup component add llvm-tools-preview && rustup target add x86_64-unknown-none && make -j 4
+      run: sudo apt install -y llvm-dev libclang-dev clang gcc-multilib && cargo install cargo-binutils && rustup toolchain install nightly && rustup default nightly && rustup component add rust-src && rustup component add llvm-tools-preview && rustup target add x86_64-unknown-none && make -j 4

+ 3 - 1
.vscode/settings.json

@@ -157,5 +157,7 @@
         "fat32.h": "c"
     },
     "C_Cpp.errorSquiggles": "Enabled",
-    "esbonio.sphinx.confDir": ""
+    "esbonio.sphinx.confDir": "",
+    "rust-analyzer.cargo.target": "x86_64-unknown-none",
+    "rust-analyzer.checkOnSave.allTargets": false
 }

+ 35 - 21
Makefile

@@ -4,6 +4,8 @@ SUBDIRS = kernel user
 ifeq ($(EMULATOR), )
 export EMULATOR=__NO_EMULATION__
 endif
+# todo: 增加参数,判断是否在QEMU中仿真,若是,则启用该环境变量
+# export EMULATOR=__QEMU_EMULATION__
 
 # 计算cpu核心数
 NPROCS:=1
@@ -37,31 +39,13 @@ all: kernel user
 .PHONY: kernel
 kernel:
 	mkdir -p bin/kernel/
-	@list='./kernel'; for subdir in $$list; do \
-				echo "make all in $$subdir";\
-				cd $$subdir;\
-				$(MAKE) all;\
-				if [ "$$?" != "0" ]; then\
-					echo "内核编译失败";\
-					exit 1;\
-				fi;\
-				cd ..;\
-		done
-
+	$(MAKE) -C ./kernel all || (sh -c "echo 内核编译失败" && exit 1)
+	
 .PHONY: user
 user:
 	mkdir -p bin/user/
 	mkdir -p bin/tmp/user
-	@list='./user'; for subdir in $$list; do \
-    		echo "make all in $$subdir";\
-    		cd $$subdir;\
-    		$(MAKE) all;\
-			if [ "$$?" != "0" ]; then\
-				echo "用户态程序编译失败";\
-				exit 1;\
-			fi;\
-    		cd ..;\
-	done
+	$(MAKE) -C ./user all || (sh -c "echo 用户程序编译失败" && exit 1)
 
 .PHONY: clean
 clean:
@@ -79,3 +63,33 @@ cppcheck:
 
 gdb:
 	gdb -n -x tools/.gdbinit
+
+# 写入磁盘镜像
+write_diskimage:
+	sudo sh -c "cd tools && bash $(ROOT_PATH)/tools/write_disk_image.sh && cd .."
+
+# 不编译,直接启动QEMU
+qemu:
+	sh -c "cd tools && bash run-qemu.sh && cd .."
+
+# 编译并写入磁盘镜像
+build:
+	$(MAKE) all -j $(NPROCS)
+	$(MAKE) write_diskimage || exit 1
+
+# 在docker中编译,并写入磁盘镜像
+docker:
+	@echo "使用docker构建"
+	sudo bash tools/build_in_docker.sh || exit 1
+
+# 编译并启动QEMU
+run:
+	$(MAKE) all -j $(NPROCS)
+	$(MAKE) write_diskimage || exit 1
+	$(MAKE) qemu
+
+# 在docker中编译,并启动QEMU
+run-docker:
+	@echo "使用docker构建并运行"
+	sudo bash tools/build_in_docker.sh || exit 1
+	$(MAKE) qemu

+ 36 - 19
docs/introduction/build_system.md

@@ -17,7 +17,7 @@
   当您成功安装了docker之后,您可以通过以下命令,下载DragonOS的编译镜像:
 
 ```shell
-docker pull dragonos/dragonos-dev:v1.0
+docker pull dragonos/dragonos-dev:v1.1.0-beta3
 ```
 
 ### 安装qemu虚拟机
@@ -64,20 +64,19 @@ bash create_hdd_image.sh
   如果不出意外的话,这将是运行DragonOS的最后一步。您只需要在DragonOS的根目录下方,执行以下命令,即可运行DragonOS。
 
 ```shell
-bash run.sh --docker
+make run-docker
 ```
 
-  若输入密码后仍提示权限不足,您可以使用以下命令运行:
-
-```shell
-sudo bash run.sh --docker
-```
 
   稍等片刻,DragonOS将会被运行。
 
   在qemu虚拟机被启动后,我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
 
+:::{note}
+首次编译时,由于需要下载Rust相关的索引(几百MB大小),因此需要一定的时间,请耐心等候!
+:::
 
+**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
 
 ## 手动搭建开发环境
 
@@ -92,20 +91,24 @@ sudo bash run.sh --docker
 
 &emsp;&emsp;需要注意的是,编译安装qemu将会是一件费时费力的工作,它可能需要花费你40分钟以上的时间。
 
-&emsp;&emsp;对于以下软件依赖,建议您使用系统自带的包管理器进行安装。
-
-- gcc >= 8.3.0
+&emsp;&emsp;对于其余的软件依赖,我们提供了一键配置脚本,可以一键安装,只需要在控制台运行以下命令:
 
-- xorriso
+```shell
+cd tools
+bash bootstrap.sh
+```
+:::{note}
+一键配置脚本目前只支持以下系统:
 
-- fdisk
+- Ubuntu/Debian/Deepin/UOS 等基于Debian的衍生版本
 
-- make
+欢迎您为其他的系统完善构建脚本!
+:::
 
-- VNC Viewer
 
-- gdb
+### 创建磁盘镜像
 
+&emsp;&emsp;首先,您需要使用`sudo`权限运行`tools/create_hdd_image.sh`,为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作,并将其移动到`bin/`目录下。
 
 
 ### 编译DragonOS
@@ -113,19 +116,33 @@ sudo bash run.sh --docker
 1. 安装编译及运行环境
 2. 进入DragonOS文件夹
 3. 输入命令:`make -j 16`即可编译
+4. 输入`make build`即可编译并写入磁盘镜像
 
 
 
-### 创建磁盘镜像
-
-&emsp;&emsp;首先,您需要使用`sudo`权限运行`tools/create_hdd_image.sh`,为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作,并将其移动到`bin/`目录下。
 
 ### 运行DragonOS
 
 &emsp;&emsp;至此,准备工作已经完成,您可以在DragonOS项目的根目录下,输入
 
 ```shell
-bash run.sh
+make run
 ```
 
 &emsp;&emsp;然后,DragonOS将会被启动,您可以通过VNC Viewer连接至虚拟机。在qemu虚拟机被启动后,我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
+
+:::{note}
+首次编译时,由于需要下载Rust相关的索引(几百MB大小),因此需要一定的时间,请耐心等候!
+:::
+
+**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
+
+(_build_system_command)=
+## 编译命令讲解
+
+- 本地编译,不运行: `make all -j 您的CPU核心数`
+- 本地编译,并写入磁盘镜像,不运行: `make build`
+- 本地编译,写入磁盘镜像,并在QEMU中运行: `make run`
+- Docker编译,并写入磁盘镜像,: `make docker`
+- Docker编译,写入磁盘镜像,并在QEMU中运行: `make run-docker`
+- 不编译,直接从已有的磁盘镜像启动: `make qemu`

+ 11 - 0
kernel/.cargo/config.toml

@@ -0,0 +1,11 @@
+[build]
+target = "src/arch/x86_64/x86_64-unknown-none.json"
+
+[unstable]
+build-std = ["core", "compiler_builtins"]
+build-std-features = ["compiler-builtins-mem"]
+
+[target.'cfg(target_os = "none")']
+runner = "bootimage runner"
+
+[env]

+ 5 - 0
kernel/.gitignore

@@ -0,0 +1,5 @@
+target/
+src/kernel
+Cargo.lock
+# 将自动生成的Rust FFI加到gitignore
+src/include/bindings/bindings.rs

+ 15 - 0
kernel/Cargo.toml

@@ -0,0 +1,15 @@
+[package]
+name = "dragonos_kernel"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[lib]
+crate-type = ["staticlib"]
+
+[dependencies]
+x86_64 = "0.14.10"
+
+[build-dependencies]
+bindgen = "0.61.0"

+ 5 - 72
kernel/Makefile

@@ -1,75 +1,8 @@
-SUBDIR_ROOTS := .
-DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)
-GARBAGE_PATTERNS := *.o *.s~ *.s *.S~ *.c~ *.h~ kernel
-GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))
 
-DIR_LIB=lib
-lib_patterns := *.a
-LIB_FILES := $(foreach DIR,$(DIR_LIB),$(addprefix $(DIR)/,$(lib_patterns)))
-
-
-# 控制操作系统使用的中断控制器 _INTR_8259A_ _INTR_APIC_
-PIC := _INTR_APIC_
-CFLAGS = $(GLOBAL_CFLAGS) -D $(PIC) -I $(shell pwd)
-
-export ASFLAGS := --64
-
-LD_LIST := head.o
-
-
-kernel_subdirs := common driver process debug filesystem time arch exception mm smp sched syscall ktest lib ipc
-	
-
-
-head.o: head.S
-	$(CC) -E head.S > _head.s # 预处理
-	as $(ASFLAGS) -o head.o _head.s
-
-
-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.
-	$(CC) $(CFLAGS) -c main.c  -o main.o
-
-
-all: kernel
-	@echo "Linking kernel..."
-	ld -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") -T link.lds
-# 生成kallsyms
-	current_dir=$(pwd)
-	
-	@dbg='debug';for x in $$dbg; do \
-		cd $$x;\
-		$(MAKE) generate_kallsyms kernel_root_path="$(shell pwd)";\
-		cd ..;\
-		if [ "$$?" != "0" ]; then\
-            exit $$?;\
-        fi;\
-	done
-	
-# 重新链接
-	@echo "Re-Linking kernel..."
-	ld -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") ./debug/kallsyms.o -T link.lds
-	@echo "Generating kernel ELF file..."
-# 生成内核文件
-	objcopy -I elf64-x86-64 -O elf64-x86-64 -R ".comment" -R ".eh_frame" kernel ../bin/kernel/kernel.elf
-	@echo "Kernel Build Done."
-
-ECHO:
-	@echo "$@"
-
-$(kernel_subdirs): ECHO
-
-	$(MAKE) -C $@ all CFLAGS="$(CFLAGS)" ASFLAGS="$(ASFLAGS)" PIC="$(PIC)" kernel_root_path="$(shell pwd)"
-
-kernel: head.o main.o $(kernel_subdirs)
+all: 
+	$(MAKE) -C src all
 	
 
-
-clean: 
-	rm -rf $(GARBAGE)
-	@list='$(kernel_subdirs)'; for subdir in $$list; do \
-		echo "Clean in dir: $$subdir";\
-		cd $$subdir && $(MAKE) clean;\
-		cd .. ;\
-	done
+clean:
+	rm -f Cargo.lock
+	$(MAKE) -C src clean

+ 40 - 0
kernel/build.rs

@@ -0,0 +1,40 @@
+extern crate bindgen;
+
+use std::path::PathBuf;
+
+fn main() {
+    // Tell cargo to look for shared libraries in the specified directory
+    println!("cargo:rustc-link-search=src");
+    println!("cargo:rerun-if-changed=src/include/bindings/wrapper.h");
+    let binding_file_path = "src/include/bindings/bindings.rs";
+    // The bindgen::Builder is the main entry point
+    // to bindgen, and lets you build up options for
+    // the resulting bindings.
+    {
+        let bindings = bindgen::Builder::default()
+            .clang_arg("-I./src")
+            // The input header we would like to generate
+            // bindings for.
+            .header("src/include/bindings/wrapper.h")
+            .clang_arg("--target=x86_64-none-none")
+            .clang_arg("-v")
+            // 使用core,并将c语言的类型改为core::ffi,而不是使用std库。
+            .use_core()
+            .ctypes_prefix("::core::ffi")
+            .generate_inline_functions(true)
+            // Tell cargo to invalidate the built crate whenever any of the
+            // included header files changed.
+            .parse_callbacks(Box::new(bindgen::CargoCallbacks))
+            // Finish the builder and generate the bindings.
+            .generate()
+            // Unwrap the Result and panic on failure.
+            .expect("Unable to generate bindings");
+
+        // Write the bindings to the $OUT_DIR/bindings.rs file.
+        let out_path = PathBuf::from(String::from("."));
+
+        bindings
+            .write_to_file(out_path.join(binding_file_path))
+            .expect("Couldn't write bindings!");
+    }
+}

+ 79 - 0
kernel/src/Makefile

@@ -0,0 +1,79 @@
+SUBDIR_ROOTS := .
+DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)
+GARBAGE_PATTERNS := *.o *.s~ *.s *.S~ *.c~ *.h~ kernel
+GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))
+
+DIR_LIB=lib
+lib_patterns := *.a
+LIB_FILES := $(foreach DIR,$(DIR_LIB),$(addprefix $(DIR)/,$(lib_patterns)))
+
+
+# 控制操作系统使用的中断控制器 _INTR_8259A_ _INTR_APIC_
+PIC := _INTR_APIC_
+CFLAGS = $(GLOBAL_CFLAGS) -D $(PIC) -I $(shell pwd)
+
+export ASFLAGS := --64
+
+LD_LIST := head.o
+
+
+kernel_subdirs := common driver process debug filesystem time arch exception mm smp sched syscall ktest lib ipc
+	
+
+
+head.o: head.S
+	$(CC) -E head.S > _head.s # 预处理
+	as $(ASFLAGS) -o head.o _head.s
+
+
+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.
+	$(CC) $(CFLAGS) -c main.c  -o main.o
+
+
+all: kernel
+	rustup default nightly
+	cargo +nightly build --release --target ./arch/x86_64/x86_64-unknown-none.json
+	@echo "Linking kernel..."
+	ld -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a -T link.lds
+# 生成kallsyms
+	current_dir=$(pwd)
+	
+	@dbg='debug';for x in $$dbg; do \
+		cd $$x;\
+		$(MAKE) generate_kallsyms kernel_root_path="$(shell pwd)";\
+		cd ..;\
+		if [ "$$?" != "0" ]; then\
+            exit $$?;\
+        fi;\
+	done
+	
+	
+# 重新链接
+	@echo "Re-Linking kernel..."
+	ld -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a ./debug/kallsyms.o  -T link.lds
+	@echo "Generating kernel ELF file..."
+# 生成内核文件
+	objcopy -I elf64-x86-64 -O elf64-x86-64 -R ".comment" -R ".eh_frame" kernel ../../bin/kernel/kernel.elf
+	@echo "Kernel Build Done."
+
+ECHO:
+	@echo "$@"
+
+$(kernel_subdirs): ECHO
+
+	$(MAKE) -C $@ all CFLAGS="$(CFLAGS)" ASFLAGS="$(ASFLAGS)" PIC="$(PIC)" kernel_root_path="$(shell pwd)"
+
+kernel: head.o main.o $(kernel_subdirs)
+	
+
+
+clean: 
+	cargo clean
+	rm -rf $(GARBAGE)
+	@list='$(kernel_subdirs)'; for subdir in $$list; do \
+		echo "Clean in dir: $$subdir";\
+		cd $$subdir && $(MAKE) clean;\
+		cd .. ;\
+	done

+ 0 - 0
kernel/arch/Makefile → kernel/src/arch/Makefile


+ 0 - 0
kernel/arch/arch.h → kernel/src/arch/arch.h


+ 0 - 0
kernel/arch/x86_64/Makefile → kernel/src/arch/x86_64/Makefile


+ 0 - 0
kernel/arch/x86_64/asm/asm.h → kernel/src/arch/x86_64/asm/asm.h


+ 0 - 0
kernel/arch/x86_64/asm/cmpxchg.h → kernel/src/arch/x86_64/asm/cmpxchg.h


+ 0 - 0
kernel/arch/x86_64/current.h → kernel/src/arch/x86_64/current.h


+ 0 - 0
kernel/arch/x86_64/ia64_msi.c → kernel/src/arch/x86_64/ia64_msi.c


+ 0 - 0
kernel/arch/x86_64/ia64_msi.h → kernel/src/arch/x86_64/ia64_msi.h


+ 0 - 0
kernel/arch/x86_64/math/bitcount.h → kernel/src/arch/x86_64/math/bitcount.h


+ 15 - 0
kernel/src/arch/x86_64/x86_64-unknown-none.json

@@ -0,0 +1,15 @@
+{
+  "llvm-target": "x86_64-unknown-none",
+  "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
+  "arch": "x86_64",
+  "target-endian": "little",
+  "target-pointer-width": "64",
+  "target-c-int-width": "32",
+  "os": "none",
+  "linker": "rust-lld",
+  "linker-flavor": "ld.lld",
+  "executables": true,
+  "features": "-mmx,-sse,+soft-float",
+  "disable-redzone": true,
+  "panic-strategy": "abort"
+}

+ 0 - 0
kernel/arch/x86_64/x86_64_ipi.c → kernel/src/arch/x86_64/x86_64_ipi.c


+ 0 - 0
kernel/arch/x86_64/x86_64_ipi.h → kernel/src/arch/x86_64/x86_64_ipi.h


+ 0 - 0
kernel/common/Makefile → kernel/src/common/Makefile


+ 0 - 0
kernel/common/asm.h → kernel/src/common/asm.h


+ 0 - 0
kernel/common/atomic.h → kernel/src/common/atomic.h


+ 0 - 0
kernel/common/bitree.h → kernel/src/common/bitree.h


+ 0 - 0
kernel/common/blk_types.h → kernel/src/common/blk_types.h


+ 0 - 0
kernel/common/block.h → kernel/src/common/block.h


+ 0 - 0
kernel/common/boot_info.h → kernel/src/common/boot_info.h


+ 0 - 0
kernel/common/compiler.h → kernel/src/common/compiler.h


+ 0 - 0
kernel/common/compiler_attributes.h → kernel/src/common/compiler_attributes.h


+ 0 - 0
kernel/common/completion.h → kernel/src/common/completion.h


+ 0 - 0
kernel/common/cpu.h → kernel/src/common/cpu.h


+ 0 - 0
kernel/common/crc16.h → kernel/src/common/crc16.h


+ 0 - 0
kernel/common/crc32.h → kernel/src/common/crc32.h


+ 0 - 0
kernel/common/crc64.h → kernel/src/common/crc64.h


+ 0 - 0
kernel/common/crc7.h → kernel/src/common/crc7.h


+ 0 - 0
kernel/common/crc8.h → kernel/src/common/crc8.h


+ 0 - 0
kernel/common/dirent.h → kernel/src/common/dirent.h


+ 0 - 0
kernel/common/elf.h → kernel/src/common/elf.h


+ 0 - 0
kernel/common/err.h → kernel/src/common/err.h


+ 0 - 0
kernel/common/errno.h → kernel/src/common/errno.h


+ 0 - 0
kernel/common/fcntl.h → kernel/src/common/fcntl.h


+ 0 - 0
kernel/common/font.h → kernel/src/common/font.h


+ 0 - 0
kernel/common/gfp.h → kernel/src/common/gfp.h


+ 0 - 0
kernel/common/glib.h → kernel/src/common/glib.h


+ 0 - 0
kernel/common/hid.h → kernel/src/common/hid.h


+ 0 - 0
kernel/common/idr.h → kernel/src/common/idr.h


+ 0 - 0
kernel/common/kfifo.h → kernel/src/common/kfifo.h


+ 0 - 0
kernel/common/kprint.h → kernel/src/common/kprint.h


+ 0 - 0
kernel/common/kthread.h → kernel/src/common/kthread.h


+ 0 - 0
kernel/common/list.h → kernel/src/common/list.h


+ 0 - 0
kernel/common/lockref.h → kernel/src/common/lockref.h


+ 0 - 0
kernel/common/lz4.h → kernel/src/common/lz4.h


+ 0 - 0
kernel/common/math.h → kernel/src/common/math.h


+ 0 - 0
kernel/common/math/Makefile → kernel/src/common/math/Makefile


+ 0 - 0
kernel/common/math/fabs.c → kernel/src/common/math/fabs.c


+ 0 - 0
kernel/common/math/libm.h → kernel/src/common/math/libm.h


+ 0 - 0
kernel/common/math/pow.c → kernel/src/common/math/pow.c


+ 0 - 0
kernel/common/math/round.c → kernel/src/common/math/round.c


+ 0 - 0
kernel/common/mutex.h → kernel/src/common/mutex.h


+ 0 - 0
kernel/common/numa.h → kernel/src/common/numa.h


+ 0 - 0
kernel/common/printk.h → kernel/src/common/printk.h


+ 0 - 0
kernel/common/semaphore.h → kernel/src/common/semaphore.h


+ 0 - 0
kernel/common/spinlock.h → kernel/src/common/spinlock.h


+ 0 - 0
kernel/common/stddef.h → kernel/src/common/stddef.h


+ 0 - 0
kernel/common/stdio.h → kernel/src/common/stdio.h


+ 0 - 0
kernel/common/stdlib.h → kernel/src/common/stdlib.h


+ 0 - 0
kernel/common/string.h → kernel/src/common/string.h


+ 0 - 0
kernel/common/sys/types.h → kernel/src/common/sys/types.h


+ 0 - 0
kernel/common/sys/wait.h → kernel/src/common/sys/wait.h


+ 0 - 0
kernel/common/time.h → kernel/src/common/time.h


+ 0 - 0
kernel/common/unistd.h → kernel/src/common/unistd.h


+ 0 - 0
kernel/common/user_namespace.h → kernel/src/common/user_namespace.h


+ 0 - 0
kernel/common/wait_queue.h → kernel/src/common/wait_queue.h


+ 0 - 0
kernel/common/wait_queue_head.h → kernel/src/common/wait_queue_head.h


+ 0 - 0
kernel/debug/.gitignore → kernel/src/debug/.gitignore


+ 0 - 0
kernel/debug/Makefile → kernel/src/debug/Makefile


+ 0 - 0
kernel/debug/bug.h → kernel/src/debug/bug.h


+ 0 - 0
kernel/debug/kallsyms.c → kernel/src/debug/kallsyms.c


+ 0 - 0
kernel/debug/traceback/traceback.c → kernel/src/debug/traceback/traceback.c


+ 0 - 0
kernel/debug/traceback/traceback.h → kernel/src/debug/traceback/traceback.h


+ 0 - 0
kernel/driver/Makefile → kernel/src/driver/Makefile


+ 0 - 0
kernel/driver/acpi/Makefile → kernel/src/driver/acpi/Makefile


+ 0 - 0
kernel/driver/acpi/acpi.c → kernel/src/driver/acpi/acpi.c


+ 0 - 0
kernel/driver/acpi/acpi.h → kernel/src/driver/acpi/acpi.h


+ 0 - 0
kernel/driver/disk/Makefile → kernel/src/driver/disk/Makefile


+ 0 - 0
kernel/driver/disk/ahci/ahci.c → kernel/src/driver/disk/ahci/ahci.c


+ 0 - 0
kernel/driver/disk/ahci/ahci.h → kernel/src/driver/disk/ahci/ahci.h


+ 0 - 0
kernel/driver/disk/ata.c → kernel/src/driver/disk/ata.c


+ 0 - 0
kernel/driver/disk/ata.h → kernel/src/driver/disk/ata.h


+ 0 - 0
kernel/driver/hid/Makefile → kernel/src/driver/hid/Makefile


+ 0 - 0
kernel/driver/hid/hidparse.c → kernel/src/driver/hid/hidparse.c


+ 0 - 0
kernel/driver/hid/hidstrings.c → kernel/src/driver/hid/hidstrings.c


+ 0 - 0
kernel/driver/hid/internal.h → kernel/src/driver/hid/internal.h


+ 0 - 0
kernel/driver/hid/usbhid/Makefile → kernel/src/driver/hid/usbhid/Makefile


+ 0 - 0
kernel/driver/interrupt/8259A/8259A.c → kernel/src/driver/interrupt/8259A/8259A.c


+ 0 - 0
kernel/driver/interrupt/8259A/8259A.h → kernel/src/driver/interrupt/8259A/8259A.h


+ 0 - 0
kernel/driver/interrupt/Makefile → kernel/src/driver/interrupt/Makefile


+ 0 - 0
kernel/driver/interrupt/apic/apic.c → kernel/src/driver/interrupt/apic/apic.c


Some files were not shown because too many files changed in this diff