Coder Social home page Coder Social logo

vaughan's Introduction

Vaughan OS

A toy operating system scratch implements.

スクリーンショット 2023-01-03 1 55 47

Usage

$ make run_full

vaughan's People

Contributors

ubugeeei avatar

Stargazers

 avatar

Watchers

 avatar

vaughan's Issues

Rustで実装したコードをこのPJの環境で動かしたい

このリポジトリの概要

このリポジトリは著書「30日でできる! OS自作入門」をもとにやった自作OSのリポジトリです。

想定される環境

言語: C言語

コンパイラ: i386-elf-gcc

コンパイラオプション:

  • オブジェクトファイル: -m32 -fno-builtin
  • OSイメージのリンク: -march=i486 -nostdlib -T hrb.ld (src/kernel/hrb.ldにリンカスクリプトがあります)

動作環境: qemu-system-i386 format=raw,if=floppy (PCはmacOS 10.x, intelです)

やりたいこと ならびに問題点

上記の環境で実装したkernelの一部をRustで書いたコードで置き換えていきたいです。(理由は得にない。愛情?)
がしかし、全くわからないです。そもそもリンカにもクロスコンパイルにもFFIにもなれておらず、いくつかのシンプルなクロスコンパイルやFFIをRustで行ったことがありますが、このPJでは一筋縄で行かず。
rustが提供してくれているtargetにはi386-elf-gccがそもそもなく(i386-apple-iosみたいなやつしかない?)、色々調べてみると、cargo-xbuildを使ってjsonでたくさん設定書けばクロスコンパイル自体はできるようでした。参考
(しかしよくわからず)

今回やりたいことは、このようなクロスコンパイルかつ、既存のC言語の実装からいい感じに呼び出したいという感じです。

以下のPRに実現したいコードをおいてありますのでもしよければ見ていただきたいです。

こういうことがしたい(ビルドの設定も何もまだやっていないので全く動きません。)
#14

[1/9 17時追記]
ある程度もがいていたらRustのi386 32bit elfへのビルドは多分できるようになりました。
スクリーンショット 2023-01-09 17 09 33
スクリーンショット 2023-01-09 17 09 05
ここまでの差分PRはこちら
#16
あとはこれをうまい感じにリンクしたい (Rust関係ないかも。。。。。。。。。)

環境構築

実装中に右往左往してよくわかっていないまま進めた部分もあるのであまり正確ではないかもしれません。

必要そうなもの

  • mtools
  • nasm
  • qemu-system-i386
  • i386-elf-gcc
  • x86_64-elf-gcc

Cコンパイラはi386-elf-gccをもともと使っていて、Rustのi386 32bit elfへのビルドの対応でx86_64-elf-gccを使用します。
が、ここでも問題があって、i386-elf-gccはx86_64-elf-gccに統合されてしまったようで、x86_64-elf-gccをインストールすると消えてしまいます。これだけなら何も問題ないかのように思いますが、なぜかx86_64-elf-gcc内包のi386-elf-gccではカーネルをビルドすることができません。
この問題については今自分で取り組んでいて、それが解消されるまではx86_64-elf-gccでRust側の成果物を作ったあとにx86_64-elf-gccはアンインストールしてカーネルはi386-elf-gccでビルドするとかいう死ぬほど面倒くさい感じになってしまっています。

ビルド・起動

$ make run_full

総合してお伝えしたいこと

もし、Rustのビルドの方針があっているとするなら、課題はRustではなくリンクにあることになってしまうので、
この配信で相談させていただくのは不適切かなと思っています(可能ならしたいが)
それと、上記の環境構築・ビルド周りの課題が発生しているので、配信では時間の都合上コードを動かしながらビルドしながら試す(or 試してもらう)のが結構厳しいかもしれません。
なので、全体を通して思うに、あまり実際のコード見ながらではなく本当に相談という形のほうが良いかもしれません。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.