Linus Torvaldsのエミュレート:独自のオペレーティングシステムを最初から作成する(I)

まず、これが私の最初の記事であり、皆さんが気に入ってくれることを願っています。

リーナス・トーバルズ幸せ

このシリーズでは、エミュレートします リーナス·トーバルズ、0からオペレーティングシステムを作成します。この最初のエピソードでは、ブートを確認し、カーネルから画面にテキストを配置します。

私の場合、オペレーティングシステムは NextDivel。 オペレーティングシステムを検討したらすぐに最初に決定する必要があるのは、ブートローダーがどうなるかということです。

ここには複数のバリエーションがあり、自分で作成することもできます。 ただし、このチュートリアルでは使用します GRUB、ほとんどの人が彼について多かれ少なかれ何かを知っているからです。 オペレーティングシステムのルートとなるフォルダーを作成し、そこに/ boot / grubフォルダーを作成します。

mkdir nextroot && cd nextroot

mkdir -p boot/grub

そこで、次のようにgrub.cfgファイルを作成します。

menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}

このファイルでは、どのように GRUB この場合、カーネルを/next/START.ELFにロードします。 次に、カーネルを作成する必要があります。

このために必要になります GCC y GAS (プロジェクトのアセンブラー GNU、通常はgccに付属しています)。 そこで、カーネルを作成します。

まず、kernel.asmというファイルを作成します。 このファイルには、カーネルの開始点が含まれ、マルチブート(次のような一部のブートローダーの機能)も定義されます。 GRUB)。 kernel.asmの内容は次のようになります。

.text
.globl start
start:
jmp multiboot_entry
.align 4
multiboot_header:
.long 0x1BADB002
.long 0x00000003
.long -(0x1BADB002+0x00000003)
multiboot_entry:
movl $(stack + 0x4000), %esp
call NextKernel_Main
loop: hlt
jmp loop
.section ".bss"
.comm stack,0x4000

マルチブートに関連するすべては、単に仕様に従うことだけです。 すべてが開始時に開始され、multiboot_entryが呼び出され、最初の4kでマルチブートヘッダーが定義され、(movlを使用して)配置されます。

後で、カーネルC関数であるNextKernel_Mainを呼び出します。 ループでは、コンピューターを停止するために停止します。 これは次のようにコンパイルされます。

as -o kernel.o -c kernel.asm

今度はCでプログラミングに入ります。これですべてが簡単だと思うでしょう。 printf en メイン それだけです、私たちはそれをしました。

いや、 printf y メイン これらはオペレーティングシステムによって定義される関数ですが、私たちはそれらを作成しています! 自分で定義した関数しか使用できません。

後の章では、独自のCライブラリ(glibc、bionic、newlibc)を配置する方法について説明しますが、時々説明します。 画面にテキストを表示したいという話をしましたが、その方法を見ていきます。

XNUMXつのオプションがあります。XNUMXつは BIOS もうXNUMXつは、画面メモリを直接管理することです。 後者はCからより明確であり、プロテクトモードに入るときにも実行できるため、後者を実行します。

次の内容のNextKernel_Main.cというファイルを作成します。

int NextKernel_Main()
{
char *str = "NextDivel says Hello World", *ch;
unsigned short *vidmem = (unsigned short*) 0xb8000;
unsigned i;
for (ch = str, i = 0; *ch; ch++, i++)
vidmem[i] = (unsigned char) *ch | 0x0700;
return 0;
}

これでメモリを直接操作します VGA そして、私たちが書いている文字ごとに。 stdlibを無効にしてコンパイルします。
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

ここまで進んだら、今すぐ新しいオペレーティングシステムを試してみることをお勧めしますが、まだ完了していません。 ファイル内のどこに各セクションを残すかをコンパイラーに指示する小さなファイルが必要です。 これは、リンカースクリプトを使用して実行されます。 link.ldを作成します。

ENTRY(start)
SECTIONS
{
. = 0x00100000;
.multiboot_header :
{
*(.multiboot_header)
}
.text :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}

これを使用して、kernel.asmで定義した各セクションの位置とエントリポイントstartを定義します。 これで、このすべての調合を統合できます。

gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

次に、オペレーティングシステムのルートをシミュレートするフォルダー内の/ nextにSTART.ELFをコピーします。 コンソールを使用して新しいオペレーティングシステムのルートフォルダーに移動し、XNUMXつのファイルがあることを確認します。XNUMXつは/boot/grub/grub.cfgで、もうXNUMXつは/next/START.ELFです。

上位ディレクトリに移動し、GRUBを使用してISO作成ユーティリティを呼び出します。 grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

これを実行すると、 ISO。 このISOはコンピューターで開くことができます x86 (64ビットも)および仮想マシン。 それをテストするために、私は使用するつもりです QEMU。 私たちは QEMU コマンドラインから:

qemu-system-i386 nextdivel.iso

始まります SeaBIOS そして後で私達は持っているでしょう GRUB。 後ですべてが正しければ、フレーズが表示されます。
あなたはこれが難しいと思うでしょう、私は答えます、そうです。

実際にオペレーティングシステムを作成することは困難であり、これはここでは何の役にも立ちません。 今後の章では、画面の色を処理する方法、メモリを予約する方法、可能であればキーボードからデータを取得する方法について説明します。

誰かがここにすべてをコピーしたくない場合は、私はにリポジトリを持っています GitHubの (より精巧な)オペレーティングシステム NextDivel。 コンパイルしたい場合 NextDivel あなたはただgitとcmakeを持っている必要があります:

git clone https://github.com/AdrianArroyoCalle/next-divel
cd next-divel
mkdir build && cd build
cmake ..
make
make DESTDIR=next install
chmod +x iso.sh
./iso.sh
qemu-system-i386 nextdivel.iso

オペレーティングシステムを作成する時間と希望がある場合は、NextDivelで共同作業することをお勧めします。 おそらくLinuxよりも優れているでしょう...時間がわかります。


記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

85コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   エラヴ

    :O

    1.    マリアノガウディクス

      Torvaldsは、Minixオペレーティングシステム(UNIXから派生)をAndrew S. Tanenbaumに持ち込み、改善しました。

      タネンバウムはライナスと戦い、お互いを侮辱しました。 Tanenbaumは、マイクロカーネルは未来であると述べています(HURD、Minixの新しいコーンマイクロカーネル)。

      http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html

  2.   eliotime3000

    これは私がこのブログでこれまでに見た中で最高の投稿です。 私はすでに他に何をすべきか知りたいです。

  3.   カルロス・グード

    感動する

  4.   AXL

    本当に印象的です!

  5.   ローコンリナックス

    FUUUUUUUA!
    これは私が今まで見た中で最も気の利いた投稿です。 おめでとうアドリアン、売春婦の記事! 超面白い!!! 🙂

    1.    ホアキン

      私は同意します。 私はこの状況を想像します:
      GNU / Linuxパワーユーザー(幸せそうな顔):
      「Gentooをコンパイルする方法はすでに知っています」

      オタク(うっかり):«pff、私は自分のディストリビューションを作成しました...»

      1.    デシコダー

        はい、独自のlinuxディストリビューションを作成できます。 実際、私は組み込みLinux用のinitramfsとカーネルを開発しています。 オペレーティングシステムを作成することは、Linuxディストリビューションと同じではありません。 XNUMXつ目ははるかに難しく、ほとんど不可能です。XNUMXつ目は、あなたが言ったように、ロゴがxDに変更されたUbuntuでさえ、何でもかまいません。 だから私はそれをこのように残します:

        GNU / Linuxパワーユーザー(幸せそうな顔で)
        -Gentooをコンパイルする方法はすでに知っています

        セミオタク
        --Pff、私はLinuxをゼロからフォローし、独自のディストリビューションを作成しました

        オタク(軽蔑的な態度で)
        --pff、アセンブラとCでカーネルをプログラムしたため

        Saludos!

  6.   クロノ

    次の章を待つ間、これは私にとって興味深いものです。

  7.   アビマエルマルテル

    このチュートリアルは少し前に見ましたが、C ++用です
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet

      リンクをありがとう、私はそれを見ていきます。

  8.   JoseJácome

    AMDグラフィックスと100%互換性のあるオペレーティングシステムが欲しい:/

    1.    IvanLinux

      Windows

      1.    JoseJácome

        Windows CatalystのhahahaはOpenGLをサポートしていませんが、Linuxではすべてのグラフィックパワーを使用することはできませんが、何が起こるかを待ち続けます!

        1.    beny_hm

          バルブが市場を一掃するのを待つだけです

  9.   KZKG ^我愛羅

    魔法の、完璧な、優れた貢献、それは素晴らしい一連の投稿のように見えます🙂

  10.   O_Pixote_O

    ブア私はあなたが学んでいるという知識を使って練習する方法として、あなたを助けるためにプログラムする方法を知りたいです。 今のところ、プロジェクトが終了したら、プロジェクトに注意を引くというモットーを残します。「NextDivelを使用すると、ポルノは同じ(またはそれ以上)に見えます」、xDをスイープします。

  11.   この名前は偽です

    Mooooooolaaa !!!!

  12.   ノルズリ

    非常に良い記事ですが、なぜLinux From Scratchプロジェクトに従わなかったのか興味がありますか?

    よろしく

    1.    AdrianArroyoStreet

      さて、ScratchのLinuxは問題なく、自分のものだと言えますが、実際には非常に機械的です。
      -フォントをダウンロードする
      -パッチを当てる
      -コンパイル
      -インストール
      -以下
      ここでは、最終的に結果が悪化したとしても、すべてのファイルを確認したと言えます。

    2.    デシコダー

      以前のコメントから明らかなように、それは同じレベルの複雑さを持っていないからです。 さらに、Linuxを最初から作成することは、その名前とは逆に、システムを最初から作成することではありません。システムを最初から作成することは、Linuxカーネルではなく、可能であれば独自のブートローダーではなく、独自のカーネルを作成して、自分でプログラミングすることです。 grub、lilo、syslinuxなど。 LFSは小さな偉業ではなく、非常に複雑ですが、独自のカーネルのプログラミングにさえ近づいていません...

      さらに、私はAdrianArroyo Calleが機械的すぎることに同意します。私はそれを読んだことがあり、XNUMXページ目に諦めてしまいます。それ以外の場合は手順が機能しないため、パッケージのバージョンを使用するように指示されます(柔軟性の欠如を示しています)。 、 私の考えでは )。 自分の考えを持って、必要なパッケージをコンパイルし、プログラムを作成し、Linuxカーネルを平和的にコンパイルする方が良いと思います。

      Saludos!

  13.   クッキー

    uuuoooohh !! これほど投稿をキャプチャしたことはありません。
    続けてください😀

  14.   linux_user

    何が悪いのかわかりません:

    エラー:マルチブートヘッダーが見つかりません。
    エラー最初にカーネルをロードする必要があります

    1.    AdrianArroyoStreet

      それが慰めであるならば、私は同じ間違いをしました。 GitHubにあるソースを使用してみてください。エラーはすでに解決されています。 とにかく、grub.cfgの行を「multiboot / next / START.ELF」から「kernel / next / START.ELF」に変更すると、機能する可能性があると思います。 私は正確に分かりません。

      1.    マクプラターノ

        まず第一に、壮大な入り口🙂
        grubからカーネルをロードするときに同じ問題が発生します。 GitHubソースを使用したり、カーネルのマルチブートを変更したりしても...

        エラー:マルチブートヘッダーが見つかりません。
        エラー:カーネルがロードされていません

        1.    AdrianArroyoStreet

          コンパイラとしてclangを使用していますか? gcc用に変更してください
          リンカースクリプトを使用することを覚えていますか? リンカ(この場合はld)が、ファイル内のどこに各ものを配置するかを認識できるようにする必要があります。 この場合、マルチブートヘッダーは先頭にある必要があります。
          CMakeシステムを使用していますか? 使ってみれば失敗しないと思います。
          それがうまくいかない場合は、別の解決策を見つけようとします。

  15.   コールト

    [+100]
    ただ素晴らしい !!!

  16.   invisible15

    本当にかっこいいです🙂

  17.   タンラックス

    帽子を脱ぐ。 印象的な投稿。 おめでとう。

  18.   man

    うわ!
    ブラウザを使わずにHTML5とJavascriptで作られたアプリケーションを開くことができれば素晴らしいと思いますが、それは可能ですか?
    私はそれらがネイティブアプリケーションのようであることについて話している。
    したがって、このオペレーティングシステム用にプログラムするのは簡単です😀

    1.    AdrianArroyoStreet

      この場合、背後でより多くの作業が必要になるため、これを行うつもりはありませんが、「is」と呼ばれるオペレーティングシステムがあります。 実際、コマンドラインはJavaScriptであり、ウィンドウはJavaScriptCanvas関数を使用して描画されます。 任天堂のエンジニアがそれを行い、今ではオープンソースになっています。

      http://code.google.com/p/es-operating-system/

      1.    man

        ヴァラ、情報をありがとう😀
        見てみます

  19.   パトドックス

    自分のOSを作成できる人は誰でも、それを使って達成しなければならない知的レベルのため、平和的に死ぬことができます。 それはあなたに天国か地獄を省かせます。
    投稿の一部。

    1.    ミゲル

      これまでのところ、ゼロから作られたまともなオペレーティングシステムと言えるものだけを作った人は誰もいません。最初に言ったように、Linux Torvaldsでさえも、これはUnixソースから始まり、他のすべてのものは一人よりも人生は非常に短く、ゼロから始めることは誰にとっても考えられません。たとえその逆が望まれていても、LinuxTorvaldsによるコピーと貼り付けで行われた多くの間違いで証明できます。

      1.    スカルミリオーネ

        UNIXのソースは閉じられており、minixの使用...これは別のものです。

      2.    フェリペ・ロバイナ

        そしてQDOSを作った人は何ですか?
        何かに基づいていましたか?

  20.   Tesla

    私が見たところ、独自のオペレーティングシステムを持っていないのは、彼らが望んでいないからです、ハハハハ。

    今、真剣に、非常に興味深いです! 私の限られたプログラミング知識をはるかに超えていますが、このシリーズの他の部分を熱心に読みます。

    投稿ありがとうございます!

  21.   マヌエルR

    あなたは私にO_Oの顔を残しました...誰かの貢献を軽視するつもりはありませんが、それは私が最近見た中で最も「プロ」のXNUMXつです。 よろしく。

  22.   aitor_cz

    とても良い記事、アドリアン。 続けてください…

  23.   mj

    April Fools Dayをからかっていますか?、「Linus Torvaldsのエミュレート:独自のオペレーティングシステムを最初から作成する」という意味ではありません。 ある技術研究所や大学でキャリアを積んでいる人にとっては難しいことではないと思います。 しかし、私にとって私は初心者の射手です(私たちを「ヌーブ」と呼ぶ人もいますが、私は自分自身をやや怠惰な初心者だと思っています)、土地を踏まないように聞こえます。 とにかく、この記事は多くの好奇心を生み出し、その編集者を称賛し、尊重することなく、おめでとうございます。 私が最初にすることは、この貴重な資料の少なくとも少しを理解しようとすることです。
    ありがとうエイドリアンアロヨカレ、素晴らしい仕事と知識の高貴な提供。

  24.   ブレアパスカル

    LEL優れた投稿、それを維持します。

  25.   F3niX

    なんて素晴らしい投稿でしょう、これは私がLinuxから逃したものです。 素晴らしい。

  26.   Ruby

    素晴らしい投稿、ありがとうございました。
    link.ldファイルの機能がわかりませんでした。誰かに説明してもらえますか?

    1.    AdrianArroyoStreet

      link.ldファイルは、コードの各部分が結果のファイルのどこにあるべきかをリンカー(この場合はld)に通知します。 また、オペレーティングシステムがないため、mainを通常のプログラムとして使用できないため、エントリポイントを定義します。この場合、start関数を選択します。

  27.   マキシ

    すべての投稿に最適です。 7を待っています! たとえば、OSなしでアルゴリズムを実行したいだけの場合、Cではなく何を使用できるかをどのように知ることができますか?

    1.    AdrianArroyoStreet

      このように使用すると、stdlibからは何も使用できなくなります。これは、実質的に誰もが使用するものです(malloc、free、printf、scanf、strcmpなどはありません)。 すべては、メモリまたはASMから直接実装する必要があります。 たぶん、より高い章で、オペレーティングシステム用のCライブラリをインストールする方法を紹介します。 C ++を使用している場合、例外とnewおよびdelete演算子(および確かにそれ以上)を使用することはできません。

    2.    スウィッチャー

      おもう これ それはあなたにそれを行う方法のより良いアイデアを与えることができます。

  28.   エステバン

    こんにちは、約5年前、私は同様の出版物に従い、同じように開始するマイクロカーネルを開発しました。改善すべき点がいくつかありますが、興味深いかもしれません。プロテクトモードで実行され、マルチタスクを実行し、メモリ仮想化を実行します。最近、ライブCDで実行するだけでなく、ディスクドライバーとCDドライブをインストール可能にするために作業しました...ご挨拶。

  29.   ヨハン

    親愛なる、私はコマンドを実行するときにエラーがあります:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld:5構文エラー
    collect2:エラー:ldが1つの終了ステータスを返しました

    link.ld
    。 = 0x00100000;
    .multiboot_header:{
    *(。multiboot_header)
    }

    5行目でエラーは表示されませんが、誰か同じですか?

    私はvirtualboxで仮想化されたdebianwheezyを使用しています

    1.    ジュリアンレイエスエスクリガス

      「;」を追加します*の終わりに(。multiboot_header)

  30.   エリックオレラナロメロ

    素晴らしいイニシアチブ、私は確かにこの投稿の章に従い、そこから多くを学ぶつもりです。 お時間を割いていただき、誠にありがとうございます。 この点に関するXNUMXつの詳細として、Linus Torvaldsはオペレーティングシステムの作成者ではなく、GNU / Linuxシステム(他のOSで使用されているもの)のカーネルを作成したことに注意してください。しかし、ほとんどのOSを作成するために必要なクレジットをRichardStallmanに与えることが重要です。

    ご意見ありがとうございました。私の観察をご検討いただければ幸いです。

  31.   ジュリアンレイエスエスクリガス

    私はしばらくの間主題をいじっていました、私は見出しを読むとすぐに興味を持ちました。 しかし、メッセージは取得し続けます

    エラー:マルチブートヘッダーが見つかりません。
    エラー最初にカーネルをロードする必要があります

    取得したものをgithubのリポジトリにアップロードしました https://github.com/rkmax/GenyOS

    1.    マーティンビジャルバ

      同じことが私にも起こります。解決策を見つけましたか?

  32.   カルロス

    構文を紹介し始めた質問とmenuentry行は、コマンドが見つからないことを教えてくれます。
    これが私がすることです

    BLACK @ BLACK-pc:〜/ blackroot $ menuentry«NextDivel»{
    menuentry:コマンドが見つかりません

    1.    AdrianArroyoStreet

      このコンテンツのコンテンツは、コマンドラインではなく、作成したgrub.cfgというファイルに入力します。

  33.   ノデティーノ

    素晴らしい記事、ありがとう!

  34.   デイビッド

    壮観…!! リンクがないようなものです。

  35.   r.ガルシアグ

    私はあなたのエミュレートLInusTorvaldsチュートリアルが大好きですが、私が理解していないXNUMXつのステップがあります。それは次のとおりです。
    次に、オペレーティングシステムのルートをシミュレートするフォルダー内の/ nextにSTART.ELFをコピーします。 コンソールを使用して新しいオペレーティングシステムのルートフォルダーに移動し、XNUMXつのファイルがあることを確認します。XNUMXつは/boot/grub/grub.cfgで、もうXNUMXつは/next/START.ELFです。

    上位ディレクトリに移動し、grub-mkrescueと呼ばれるGRUBを使用してISO作成ユーティリティを呼び出します。

    誰かが私にそれを説明できますか:p

    1.    AdrianArroyoStreet

      GRUBがロードできる最小のISOを生成するために、カーネルを(ISOの/、任意のフォルダー)/next/START.ELFにコピーし、GRUB構成ファイルを(ISOの/、任意のフォルダー)/ boot /にコピーします。 grub /grub.cfg。 それが完了したら、まだISOにGRUBをインストールしておらず、フォルダーからISOを生成し、grub-mkrescueと呼ばれるGRUBをインストールするユーティリティがあります。 その後、最終的にGRUBがインストールされた起動可能なISOになります。これにより、構成を読み取って、後でSTART.ELFを正しく実行できます。 自分で説明したかどうかはわかりませんが、ISOを生成するための一種の偽のファイルシステムを使用しています。

  36.   ミゲル・ホセ・グヴァラ・アテンシオ

    素晴らしい

  37.   マイケル・モレノ

    本当に新しいシステムをあまり見てはいけませんが、Linuxを改善する場合、たとえば、必要に応じてマイクロカーネルとして機能するサーバーコンポーネントを使用してLinux exonucleusを作成する場合、つまり、スーパーおよびLinuxとなるマイクロカーネル動作を備えたexo構造を作成します。

    もうXNUMXつは、私はプログラミングの専門家ではなく、安っぽいc ++とJavaをいくつか使用しているだけです。Linuxカーネルプログラムにモジュールを与えたり、ガッティングしたり、変更したりするだけで十分です。

  38.   ウィンターソルジャー53

    間違いなく私はすでに休暇中にしなければなりません。

  39.   フェルミン

    これは良いもので、どのプログラムで設計およびコーディングしていますか?
    その答えをください

  40.   ダークマインド

    あなたのgitからコンパイルすると、次のようになります。

    [jmponce @ jar build] $ cmake ..
    -NextRootディレクトリの作成
    -ISOスクリプトの生成
    DESTDIR =次のインストールを作成します
    ./iso.sh
    -見つかったDoxygen:/ usr / bin / doxygen(見つかったバージョン "1.8.9")
    -構成が完了しました
    -生成が完了しました
    -ビルドファイルは次の場所に書き込まれています:/ home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    ターゲットSTART.ELFの依存関係をスキャンしています
    [7%] ASM-ATTオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] CXXオブジェクトの構築src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    CXX実行可能ファイルSTART.ELFのリンク
    / usr / bin / ld:互換性がありません/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.aは、-lgccの検索中にスキップされます
    / usr / bin / ld:-lgccが見つかりません
    collect2:エラー:ldが終了ステータス1を返しました
    src / CMakeFiles / START.ELF.dir / build.make:402:ターゲット 'src /START.ELF'の命令が失敗しました
    make [2]:*** [src /START.ELF]エラー1
    CMakeFiles / Makefile2:106:ターゲット 'src / CMakeFiles / START.ELF.dir / all'の命令の失敗
    make [1]:*** [src / CMakeFiles / START.ELF.dir / all]エラー2
    Makefile:117:ターゲット「all」の命令に失敗しました
    make:*** [すべて]エラー2

    1.    AdrianArroyoStreet

      エラーは、64ビットバージョンを使用していて、現在ビルドシステムが32ビットを使用するように強制されているため、llibgccが見つからないことであるようです。 互換性パックをディストリビューション以上にインストールする必要があります。32ビットシステムを使用してください。

      1.    ロナウドロドリゲス

        32ビットがあり、同じエラーが発生します。オペレーティングシステムですか、それともアーキテクチャですか。 私は64ビットですが、私はUbuntu 32ビットを使用しています、質問しないでください、財政的な問題、それで私はそれをすべて言います。

  41.   ホルヘ

    より広い範囲を待っている素晴らしいトピック。 乾杯

  42.   JHON

    素晴らしい私はもっと欲しい

  43.   ソイドペレス

    こんにちは、私は若い大使です。開発者がPCに強力なマシン、アプリケーション、またはプログラムを用意する必要がないように、すべてのプログラムとプラットフォームをサポートするオペレーティングシステムを作成したいと考えています。
    そのため、この投稿に興味がありますが、gitをダウンロードするか作成しようとすると、コマンド./iso.shまたはgrub-mkrescue -o nextdivel.iso nextrootを実行するまで、すべてがうまくいきます。このエラーが発生します。

    「Grub-mkrescue:警告:xorrisoは「–grub2-boot-info」をサポートしていません。 一部の機能が無効になっています。 xorriso1.2.9以降を使用してください。
    grub-mkrescue:警告:xorrisoは「–grub2-boot-info」をサポートしていません。 カーネルイメージが大きすぎます。 ディスクブートが無効になっています。 xorriso1.2.9以降を使用してください..»
    アプリケーションやウェブについてはよく知っているので、本当にわかりませんが、grubについては何も知りません。

    1.    AdrianArroyoStreet

      ディストリビューションのxorrisoプログラムを更新する必要があるかもしれません。 どのディストリビューションとバージョンを使用していますか?

      1.    ソイドペレス

        xubuntu 14.04ltsを使用してxorrisoを実行しようとしましたが、シェルがそれを見つけることができず、apt-get install xorrisoを取得しましたが、linux heheで知らないものをインストールした経験がなかったため、何らかの応答を心から期待していました。 今すぐ更新して、何が起こったのかをお伝えします

      2.    AdrianArroyoStreet

        次に、ソフトウェアセンターから、または単にターミナルからxorrisoをインストールします。「sudoapt-getinstallxorriso」を実行します。

      3.    ソイドペレス

        私はすでにあなたが私に言ったすべてをしました、そしてgitと私の両方で私はこのxorriso 1.3.2:RockRidgeファイルシステムマニピュレーター、libburniaプロジェクトを手に入れました。

        駆動電流:-outdev'stdio:nextdivel.iso '
        現在のメディア:stdioファイル、上書き可能
        メディアステータス:空白
        メディアの概要:0セッション、0データブロック、0データ、1901m無料
        ISOイメージに追加:ディレクトリ '/' = '/ tmp / grub.OEqSzV'
        xorriso:更新:546秒で1ファイルが追加されました
        xorriso:失敗:ソースファイルの属性を特定できません '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot':そのようなファイルまたはディレクトリはありません
        xorriso:更新:546秒で1ファイルが追加されました
        xorriso:中止:-abort_on'FAILURE 'が検出されました' FAILURE '
        とコーデュロイ私の構造が/nextroot/boot/grub/grub.cfgとnextroot / next /START.ELFであることがわかりません

      4.    ソイドペレス

        おかげで、私は前進する準備ができています、友人が私を助けて、私が間違っていたのはディレクトリの構成であると私に言ったので、私はそれを解決しました、そしてそれはそれです

      5.    エリック

        すみません、起動するものがないというエラーが表示されたため、実行した手順を教えてください。そのようなファイルやディレクトリはありません。

        起動可能なデバイスはありません。

  44.   ホセ

    乾杯! ここで説明した内容をメールで送っていただけませんか。少し混乱しました。私が持っているものと説明した内容を比較する必要があります。おそらく、私にははっきりしないのはgrub。cfgの作成は、ターミナルgccで行われますか、それとも正確にはどこで行われますか? どうもありがとうございました!

    1.    AdrianArroyoStreet

      任意のテキストエディタでファイルgrub.cfgを作成し、PROJECT_FOLDER / boot / grub /grub.cfgに保存する必要があります

  45.   ジュアザノ

    こんにちはエイドリアン、まず第一に、あなたを祝福し、あなたの貢献に感謝します。

    あなたは私が練習のためにこれをしていることを知っています、そして私はあなたの家庭教師に続いてそれをまとめ始めました、しかし始めた後私は最初のエラーを見つけました

    $ as -o kernel.o -c kernel.asm
    bash:as:コマンドが見つかりません..。
    同様のコマンドは次のとおりです。
    'sa'
    '交流'

    私はfedora20に取り組んでいますが、この点で解決策を見つけることができません。gccまたはgasで何かを変更する必要があるかどうかについてのガイダンスをいただければ幸いです。

    事前のおかげで

    1.    AdrianArroyoStreet

      エラーコードが表示されるように、GASをインストールする必要があります。 私は手元にFedoraを持っていませんが、理論的には、yum install gcc-c ++を実行すると、GCCスイート全体がインストールされ、通常はGNUAsが付属しています。

  46.   ガストンラミレス

    私はあなたと一緒です、私はC ++、C#について何か知っています(この最後のものはこの問題ではあまり役に立ちませんが)悪いことは私がまだ経験が不足していることです、私はC言語を扱ったことがありません、あなたの出版物は素晴らしいです、私は言うことはあまりありません、時間があれば見えます。 ありがとうございました。

  47.   テレシタ・デル・イエス・ナ・サンチェス

    大変お世話になりました…。

  48.   jky

    私はLinuxが大好きで、そこにある最高の地区です。私のWindowsの真実は、Linuxの作成者がWindowsの作成者であることを知っているということです。

  49.   ローデ

    こんにちは私はgrubでエラーが発生します
    エラー:ファイル/next/START.ELFが見つかりません
    エラー:最初にカーネルをロードする必要があります

    あなたは私とグーグルを助けてもらえますが、私は見つけることができません

  50.   エンリケアビラ

    どうすればHELLOWORLDというメッセージを表示させることができますか?私は初心者ですが、まだ十分な知識がありません

  51.   カルロス・ゲレロ・アルバレス

    次のことが私に起こります:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld:kernel.o:シンボル `stack 'に対する再配置R_X86_64_32は、PIEオブジェクトの作成時には使用できません。 -fPIEで再コンパイルします
    / usr / bin / ld:最終リンクに失敗しました:出力の表現できないセクション
    collect2:エラー:ldが1つの終了ステータスを返しました