kush os
1.0.0
这是另一个爱好操作系统,但这并没有试图成为另一个Unix克隆。实际上,我真的不知道要成为什么。只是……是。
当前功能包括:
我们使用CMAKE来构建所有内容。此目录中的单个CMakeLists.txt可以自动构建内核,所有用户空间组件和工具。您将必须选择其中一个用于使用的工具链,然后将其传递给CMAKE_TOOLCHAIN_FILE标志中。
build_toolchain.sh脚本创建。 toolchain.diff文件包含一个补丁程序,该补丁应针对签署的LLVM源,以构建构建内核和用户界所需的工具链。
除了CMAKE和自定义LLVM工具链外,主机还需要安装CAP'N Proto库和工具,以便可以在更新时正确构建RPC服务的协议文件。但是,当前生成的来源的版本包含在存储库中。
您可以使用build_toolchain.sh脚本来构建用于编译系统的工具链。这设置了所需的大多数库:您还必须构建一些支持库。
在编译下面的库之前,您可能需要编译并将C库安装到Sysroot中;这些图书馆希望在那里找到某些标题。根据当前目标/平台的需要,替换编译器目标字符串。
这包含辅助功能和其他编译器将依靠在所有非筹集库中存在的内容。默认情况下,该脚本似乎没有为我们的平台编译编译器RT。
要构建它,请从工具链的源文件夹中执行以下内容:
cd llvm-project
mkdir build-compiler-rt
cd build-compiler-rt
cmake ../compiler-rt -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DCMAKE_C_COMPILER_TARGET="i386-pc-kush-elf" -DCMAKE_ASM_COMPILER_TARGET="i386-pc-kush-elf" -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -Wno-dev -DCMAKE_SIZEOF_VOID_P=4 -DCOMPILER_RT_BAREMETAL_BUILD=ON
make -j40
mkdir -p ../../../llvm/lib/clang/12.0.0/lib/kush
cp lib/i386-kush/libclang_rt.builtins-i386.a ../../../llvm/lib/clang/12.0.0/lib/kush
libcxxabi为C ++运行时库提供了较低的便携式层。像这样构建:
cd llvm-project
mkdir build-libcxxabi
cd build-libcxxabi
cmake ../libcxxabi -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLIBCXX_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBCXXABI_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -Wno-dev -DLIBCXXABI_ENABLE_THREADS=OFF
make install -j40
构建后,您必须构建libcxx,即实际的C ++运行时:
cd llvm-project
mkdir build-libcxx
cd build-libcxx
cmake ../libcxx -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DLIBCXX_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBCXX_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -DLIBCXX_INSTALL_HEADER_PREFIX=/Users/tristan/kush/sysroot/usr/ -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_ENABLE_STDIN=OFF -DLIBCXX_ENABLE_RANDOM_DEVICE=OFF -DLIBCXX_ENABLE_FILESYSTEM=OFF -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF -D_LIBCPP_HAS_THREAD_API_EXTERNAL=ON
make install -j40
当C库和系统本身实现必要的功能时,最终将删除设置为关闭的大多数标志。
堆栈回溯和C ++异常支持所需。
cd llvm-project
mkdir build-libunwind
cd build-libunwind
cmake ../libunwind -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DLIBUNWIND_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBUNWIND_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -DLIBUNWIND_USE_COMPILER_RT=ON -DLIBUNWIND_ENABLE_THREADS=OFF
make install -j40
当我们拥有PTHreads兼容性层时,我们可以启用LIBUNWIND_ENABLE_THREADS 。
到目前为止,该项目还没有很多文档。
一些博客文章描述了OS设计和动机。