Skip to content
Permalink
Browse files

[init] Methylenix Ver 0.0.1

今までためていたコードの一部を改造して公開
  • Loading branch information
PG-MANA committed Apr 27, 2018
1 parent e9d476c commit 3a0509263eca0c006fb7686eb2e56109d7c2bdc0
@@ -0,0 +1,5 @@
#生成物格納場所は除外
/bin
/tmp/
/target
/Cargo.lock
@@ -0,0 +1,14 @@
[package]
name = "methylenix"
version = "0.0.1"
authors = [ "PG_MANA <pg_mana@taprix.org>" ]
description = "The OS written in Rust."
keywords = ["os"]
categories = ["os"]
license = "Apache-2.0"

[lib]
crate-type = ["staticlib"]

#[dependencies]
#rlibc = "1.0"
@@ -0,0 +1,91 @@
#
# Copyright 2017 PG_MANA
#
# This software is Licensed under the Apache License Version 2.0
# See LICENSE.md
#

#環境設定
##名前
NAME = methylenix

##ターゲット
TARGET_ARCH = $(2)
ifeq ($(strip $(TARGET_ARCH)),)
TARGET_ARCH = x86_64
endif
RUST_TARGET = $(TARGET_ARCH)-unknown-none
#RUST_TARGET_FILE_FOLDER = target-json/ # https://github.com/japaric/xargo/issues/146

##ディレクトリ
SRC = src/
MAKE_BASEDIR ?= $(shell pwd)/
MAKE_BINDIR = $(MAKE_BASEDIR)bin/
MAKE_IMGDIR = $(MAKE_BINDIR)img/
MAKE_TMPDIR = $(MAKE_BASEDIR)tmp/
MAKE_OBJDIR = $(MAKE_TMPDIR)obj/
LDFILE = linkerscript/$(TARGET_ARCH).ld

##ソフトウェア
STRIP= strip
MKDIR = mkdir -p
CP = cp -r
RM = rm -rf
GRUBMKRES = grub2-mkrescue
AR = ar rcs
LD = ld -n --gc-sections -Map $(MAKE_TMPDIR)$(NAME).map -nostartfiles -nodefaultlibs -nostdlib -T $(LDFILE)
XARGO = xargo
include config/$(TARGET_ARCH)/assembler.mk
export AR
##ビルドファイル
KERNELFILES = kernel.sys
RUST_OBJ = target/$(RUST_TARGET)/release/lib$(NAME).a
BOOT_SYS_LIST = $(MAKE_OBJDIR)boot_asm.a $(RUST_OBJ)


#初期設定
export TARGET_ARCH
export MAKE_BINDIR
export MAKE_TMPDIR
export MAKE_OBJDIR


#各コマンド
##デフォルト動作
default:
$(MAKE) kernel
-$(STRIP) $(MAKE_BINDIR) *.sys #できなくてもいい

##初期化動作
init:
-$(MKDIR) $(MAKE_BINDIR)
-$(MKDIR) $(MAKE_TMPDIR)
-$(MKDIR) $(MAKE_OBJDIR)

clean:
$(RM) $(MAKE_TMPDIR)
$(XARGO) clean

iso:
$(MAKE) kernel
-$(MKDIR) $(MAKE_IMGDIR) $(MAKE_TMPDIR)grub-iso/boot/grub/ $(MAKE_TMPDIR)grub-iso/methylenix/
$(CP) $(MAKE_BINDIR)kernel.sys $(MAKE_TMPDIR)grub-iso/methylenix/
$(CP) config/grub $(MAKE_TMPDIR)grub-iso/boot/
$(GRUBMKRES) -o $(MAKE_IMGDIR)boot.iso $(MAKE_TMPDIR)grub-iso/

kernel:
$(MAKE) init
$(MAKE) $(KERNELFILES)


# ファイル生成規則
kernel.sys : $(BOOT_SYS_LIST)
$(LD) -o $(MAKE_BINDIR)kernel.sys $(BOOT_SYS_LIST)

$(MAKE_OBJDIR)boot_asm.a : src/arch/$(TARGET_ARCH)/boot/Makefile .FORCE
$(MAKE) -C src/arch/$(TARGET_ARCH)/boot/

$(RUST_OBJ) : .FORCE
$(XARGO) build --release --target $(RUST_TARGET_FILE_FOLDER) $(RUST_TARGET)

.FORCE:
@@ -0,0 +1,49 @@
# Methylenix
(Format:UTF-8)
Rustで書かれたOS

## 概要
Methylenix とはアセンブリとRustで構成されたOSです。
ドキュメントは追々整備します。
なおこのコードはセキュリティキャンプ全国大会2018で書いたものです。

## Methylenixの由来
(頭弱い)自分が唐突に思いついたアイデアです。
有機化合物みたいにいろいろな部品を組み合わせて作っていくようにモジュールを組み合わせて応用的に作っていきたいと考え、基の中で「nix」をくっつけてゴロが良さそうなメチレン基にしました。
...なんか重大な間違いを起こしてそう...

## 更新
早速ですが、受験があり、一年はろくに更新できず、また現在のコードも不安定な部分が多いため、「ふーん、こんなんがあるんや。」程度に見てもらえると嬉しいです。
いつか更新したい。

## ライセンス
Copyright 2018 PG_MANA
This software is Licensed under the Apache License Version 2.0
See LICENSE.md

## ビルド
### 環境整備
必要なソフトウェア
* MAKE
* Ld
* Grub2-mkrescue
* NASM
* Rust(nightly)
* Cargo
* Xargo
詳しくは https://soft.taprix.org/wiki/oswiki/Rust:setup を参照してください。

### ビルド

```shell
make iso
#これでbin/img/boot.isoができる...はず
make clean
#objファイル削除
```

## リンク
### 開発者のTwitterアカウント
[https://twitter.com/PG_MANA_](https://twitter.com/PG_MANA_)
### 開発者のWebページ
https://pg-mana.net
@@ -0,0 +1,22 @@
set timeout=5
set default=0

function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}

menuentry "Methylenix" {
load_video
multiboot2 /methylenix/kernel.sys
boot
}
@@ -0,0 +1,11 @@
#
# Copyright 2017 PG_MANA
#
# This software is Licensed under the Apache License Version 2.0
# See LICENSE.md
#


#ソフトウェア
ASSEMBLER = nasm -f elf64
export ASSEMBLER
@@ -0,0 +1,33 @@

SECTIONS {
ENTRY(boot_entry) /*起動処理のコード*/
. = 1M;
LD_KERNEL_START = .;

.boot_entry BLOCK(0x1000): ALIGN(0x1000) { /*BLOCKとALIGNは同意義*/
KEEP(*(.grub_header))/*使われてないとリンクされなくなるので*/
}

.text BLOCK(4K): ALIGN(4K) {
*(.text*)
}

.data BLOCK(4K): ALIGN(4K) {
*(.data*)
*(.rodata*)
}

.rodata BLOCK(4K): ALIGN(4K) {
*(.rodata*)
}

.bss BLOCK(4K): ALIGN(4K) {
*(.bss*)
}

.data.rel.ro BLOCK(4K): ALIGN(4K) { /*動的再配置?*/
*(.data.rel.ro.local*)
*(.data.rel.ro*)
}
}

@@ -0,0 +1,17 @@
/*
* Copyright 2017 PG_MANA
*
* This software is Licensed under the Apache License Version 2.0
* See LICENSE.md
*
* Arch 分岐のための何か
* ここで差異を吸収する
*/

#[cfg(target_arch = "x86_64")]
#[macro_use]
pub mod x86_64;

//use
#[cfg(target_arch = "x86_64")]
pub use arch::x86_64 as target_arch; //これによりarchとは別のmodからはuse arch::target_archで参照できる
@@ -0,0 +1,26 @@
#
# Copyright 2017 PG_MANA
#
# This software is Licensed under the Apache License Version 2.0
# See LICENSE.md
#

#環境設定(デフォルト)
MAKE_BINDIR ?= ./bin/
MAKE_TMPDIR ?= ./tmp/
MAKE_OBJDIR ?= $(MAKE_TMPDIR)obj/
AR ?= ar rcs

#ビルドするもの
ASM_OBJS_LIST = grub.o init.o init64.o
ASM_OBJS = $(addprefix $(MAKE_OBJDIR), $(ASM_OBJS_LIST))

default:
$(MAKE) $(MAKE_OBJDIR)boot_asm.a

#ファイル生成規則
$(MAKE_OBJDIR)boot_asm.a: $(ASM_OBJS)
$(AR) -o $@ $(ASM_OBJS)

$(MAKE_OBJDIR)%.o : %.asm
$(ASSEMBLER) $< -o $@

0 comments on commit 3a05092

Please sign in to comment.
You can’t perform that action at this time.