模擬Linus Torvalds:從頭開始創建自己的操作系統(I)

首先,評論這是我的第一篇文章,希望大家都喜歡。

萊納斯·托瓦爾(Linus Torvals)開​​心

在本系列中,我們將模擬 Linus Torvalds的,我們將從0創建操作系統。在第一集中,我們將看到引導,並將在內核中的屏幕上顯示文本。

就我而言,操作系統稱為 下一個旅行。 一旦考慮操作系統,我們必須做出的第一個決定是引導加載程序是什麼?

這裡有多種變體,我們甚至可以自己創建一個。 但是在本教程中,我將使用 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相關的所有內容都只是遵循規範。 一切都將從開始開始,它將調用multiboot_entry,我們將在前4k中定義multiboot標頭,然後將其放入(使用movl)。

稍後我們調用NextKernel_Main,這是我們的內核C函數。 在循環中,我們暫停以停止計算機。 編譯為:

as -o kernel.o -c kernel.asm

現在,我們要開始使用C語言進行編程。您會認為,現在一切都變得輕而易舉, 的printf en 就是這樣,我們已經做到了。

好吧,因為 的printf y 它們是操作系統定義的功能,但我們正在創建它們! 我們只能使用自己定義的功能。

在後面的章節中,我將不時討論如何放置我們自己的C庫(glibc,bionic,newlibc)。 我們已經討論過要在屏幕上放置文本,那麼我們將看到如何做。

有兩種選擇,一種是調用 的BIOS 另一個是直接管理屏幕內存。 我們要進行後者,因為從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

現在,我們將START.ELF複製到模擬操作系統根目錄的文件夾中的/ next。 我們使用控制台轉到新操作系統的根文件夾,並驗證是否存在兩個文件:一個/boot/grub/grub.cfg和另一個/next/START.ELF。

我們轉到上層目錄,並使用GRUB調用一個ISO創建實用程序,名為 格魯夫·麥克里斯庫

grub-mkrescue -o nextdivel.iso nextroot

完成此操作後,我們將有一個 的ISO。 可以在計算機上打開此ISO x86 (也是64位)和虛擬機。 為了測試它,我將使用 QEMU。 我們稱之為 QEMU 從命令行:

qemu-system-i386 nextdivel.iso

將開始 海洋BIOS 後來我們將有 GRUB。 稍後,如果一切正確,我們將看到我們的短語。
您會認為這很困難,我回答,是的。

真正創建一個操作系統很困難,這裡的操作系統沒有任何用處。 在以後的章節中,我們將看到如何處理屏幕上的顏色,保留內存以及如果可以的話如何從鍵盤獲取數據。

如果有人不想在這裡複製所有內容,我在這裡有一個存儲庫 GitHub上 (更詳細)與操作系統 下一個旅行。 如果要編譯 下一個旅行 您只需要擁有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……時間會證明一切。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   拉夫 他說:

    :O

    1.    馬里亞諾高迪克斯 他說:

      Torvalds將Minix操作系統(從UNIX派生)用於Andrew S. Tanenbaum,並對其進行了改進。

      Tanenbaum與Linus發生了爭執,他們互相侮辱。 Tanenbaum說,微內核是未來(HURD,Minix新圓錐微內核)。

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

  2.   埃利奧時間3000 他說:

    這是我到目前為止在此博客上看到的最好的帖子。 我已經想知道還要做什麼。

  3.   卡洛斯·古德 他說:

    被感動

  4.   他說:

    真是令人印象深刻!

  5.   羅康Linux 他說:

    FUUUUUUUA!
    這是我見過的最討厭的帖子。 恭喜阿德里安,關於妓女的文章! 超級有趣! 🙂

    1.    華金 他說:

      我同意。 我想像這種情況:
      GNU / Linux高級用戶(笑容滿面):
      “我已經知道如何編譯我的Gentoo”

      書呆子(輕蔑地):«PFF,我創建了自己的發行版...»

      1.    設計者 他說:

        是的,我可以創建自己的Linux發行版。 實際上,我正在為嵌入式Linux開發initramfs和內核。 創建操作系統不同於Linux發行版。 第一個要困難得多,幾乎是不可能的,第二個就可以了,即使更改了xD徽標的Ubuntu也可以。 所以我會這樣保留它:

        GNU / Linux高級用戶(笑容滿面)
        -我已經知道如何編譯我的Gentoo

        半書呆子
        -Pff,我從頭開始學習Linux,並製作了自己的發行版

        書呆子(輕蔑的態度)
        -pff,因為我已經在彙編器和C中編寫了內核

        您好!

  6.   克羅諾斯 他說:

    在接下來的章節中,這對我來說很有趣。

  7.   Abimaelmartell 他說:

    我前段時間看過本教程,它是針對C ++的
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    阿德里安·阿羅約街 他說:

      感謝您的鏈接,我來看看。

  8.   何塞·賈科姆 他說:

    我想要一個與AMD顯卡100%兼容的操作系統:/

    1.    伊凡Linux 他說:

      Windows

      1.    何塞·賈科姆 他說:

        Windows Catalyst中的hahaha不支持OpenGL,儘管在Linux中我無法使用所有圖形功能,我將一直等待觀察會發生什麼!

        1.    貝尼姆 他說:

          只等閥門消滅市場

  9.   KZKG ^ Gaara 他說:

    神奇,完美,出色的貢獻,看起來像是一系列精彩的文章🙂

  10.   O_Pixote_O 他說:

    Buah我想知道如何編程來幫助您,只是作為一種在您正在學習和幫助的知識上進行練習的方式。 現在,一旦您完成“使用NextDivel,色情內容看起來相同(或更好)。”,我現在就給您留下一個座右銘,以吸引對該項目的關注。

  11.   這個名字是假的 他說:

    Mooooooolaaa !!!!

  12.   諾德里 他說:

    很好的文章,但很好奇為什麼您沒有關注Linux From Scratch項目?

    問候

    1.    阿德里安·阿羅約街 他說:

      好吧,Scratch的Linux很好,您可以說它是您的,但是它確實非常機械:
      -下載字體
      -修補它們
      -編譯
      -安裝
      -下一個
      在這裡,即使最後的結果更糟,您也可以說已經檢查了所有文件。

    2.    設計者 他說:

      從我之前的評論中可以清楚地看出,因為它的複雜程度並不相同。 而且,從頭開始創建linux並不是真正意義上的從頭開始創建系統的過程,而是從頭開始創建系統,而是自己編寫程序,編寫自己的內核,而不是linux內核,如果可能的話,甚至是自己的bootloader而不是grub, lilo,syslinux等儘管LFS並非易事,而且相當複雜,但它甚至與您自己的內核編程還差得遠……

      另外,我同意AdrianArroyo Calle的觀點,即它太機械了,我讀了一段時間,最後在第六頁放棄了,他們還告訴您使用什麼版本的軟件包,因為否則該說明將無法正常工作(表示缺乏靈活性,我認為)。 我認為最好有自己的想法,編譯所需的包,甚至編寫一些程序,編譯linux內核並且安然無.。

      您好!

  13.   餅乾 他說:

    哦! 我從來沒有像這個職位那樣多地獲得過職位。
    請繼續😀

  14.   linux_用戶 他說:

    我不知道怎麼了:

    錯誤:找不到多重引導頭。
    錯誤,您需要先加載內核

    1.    阿德里安·阿羅約街 他說:

      如果有什麼安慰的話,我犯了同樣的錯誤。 嘗試使用GitHub中的源,那裡的錯誤已經得到解決。 無論如何,我認為如果將grub.cfg行從“ multiboot /next/START.ELF”更改為“ kernel /next/START.ELF”,則可能會起作用。 我不知道。

      1.    麥克普拉塔諾 他說:

        首先,華麗的入口entrance
        我從grub加載內核時遇到了同樣的問題。 甚至使用GitHub源或更改內核的多重引導...

        錯誤:找不到多重引導頭。
        錯誤:未加載內核

        1.    阿德里安·阿羅約街 他說:

          您是否正在使用clang作為編譯器? 更改為gcc
          您還記得使用鏈接腳本嗎? 鏈接器(在我們的例子中為ld)必須知道要將每件事放在文件中的什麼位置,這是必要的。 在這種情況下,多重引導標頭必須位於開頭。
          您正在使用CMake系統嗎? 如果您使用它,我認為它不會失敗。
          如果對您不起作用,我將嘗試尋找其他解決方案。

  15.   hour 他說:

    [+100]
    太棒了!!!

  16.   不可見15 他說:

    真的很酷🙂

  17.   坦拉斯 他說:

    我脫下帽子。 令人印象深刻的帖子。 恭喜你

  18.   他說:

    哇!
    如果您可以打開使用HTML5和Javascript製作的應用程序而不必使用瀏覽器,那就太好了,這可能嗎?
    我說的是它們就像本機應用程序一樣。
    因此,對該操作系統進行編程將很容易😀

    1.    阿德里安·阿羅約街 他說:

      在這種情況下,我不打算這樣做,因為它需要進行大量工作,但是有一個名為“ is”的操作系統可以執行您所說的操作。 實際上,命令行是JavaScript,並且使用JavaScript Canvas函數繪製窗口。 任天堂的工程師做到了,現在它是開源的。

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

      1.    他說:

        瓦拉,謝謝你的信息😀
        我會看一看

  19.   帕托克斯 他說:

    誰能夠製作自己的操作系統,誰就可以和平地死去,因為他必須具備相應的知識水平。 它使您無需天堂或地獄。
    一塊過帳。

    1.    米格爾 他說:

      到目前為止,還沒有人知道只能製作出可以從頭開始製作的像樣的操作系統,甚至沒有像您一開始所說的那樣製作Linux Torvalds,因為這是從Unix來源開始的,其他所有東西都是共同創作的,甚至更多。與一個人相比,生命非常短暫,任何人都無法想像從頭開始,即使想要相反的情況,在Linux Torvalds複製和粘貼過程中犯的許多錯誤中也可以證明這一點。

      1.    斯卡米格里奧內 他說:

        Unix源是封閉的,使用minix ...是另外一回事。

      2.    費利佩·羅賓娜(Felipe Robaina) 他說:

        而那些製作QDOS的人呢?
        基於什麼?

  20.   特斯拉 他說:

    從我的角度來看,誰沒有自己的操作系統是因為他們不想這麼做,哈哈哈哈。

    現在認真,很有趣! 我的編程知識已經遠遠超出了我的範圍,但是我會帶著期待地閱讀本系列的其他部分。

    感謝您的帖子!

  21.   曼努埃爾·R 他說:

    你給我留下了O_O的臉...不想低估任何人的貢獻,這是我最近見過的最“親”的東西。 問候。

  22.   aitor_cz 他說:

    很好的文章,Adrián。 請繼續…

  23.   mj 他說:

    您是在愚人節開玩笑嗎?不要be“模仿Linus Torvalds:從頭開始創建自己的操作系統”。 對於那些在某個技術學院或大學追求職業的人來說,我認為這並不困難; 但是對我來說,我是一個新手弓箭手(有些人稱我們為“ Noob”,但我認為自己更像是新手,有些懶惰),聽起來好像沒有踏上陸地。 無論如何,該文章創造了很多好奇心,並且毫不懷疑和尊重其編輯,祝賀; 我要做的第一件事是嘗試至少了解一些這種有價值的材料。
    謝謝Adrian Arroyo Calle,出色的工作和高尚的知識交付。

  24.   布萊爾·帕斯卡 他說:

    LEL優秀帖子,請繼續努力。

  25.   F3NIX 他說:

    多麼棒的帖子啊,這就是我錯過的 desde linux。精彩的。

  26.   紅寶石 他說:

    很棒的帖子,非常感謝。
    我不明白link.ld文件的作用,有人可以向我解釋一下嗎?

    1.    阿德里安·阿羅約街 他說:

      link.ld文件告訴鏈接器(在本例中為ld)在代碼的每個位置應位於結果文件中的哪個位置。 我們還定義了入口點,因為由於我們沒有操作系統,所以不能將main用作常規程序,在這種情況下,我們選擇啟動功能。

  27.   馬克西 他說:

    偉大的所有您的帖子! 等待7! 如果我有疑問,例如,如果我只想運行沒有OS的算法,該怎麼辦,我怎麼知道我可以使用什麼而不能使用C?

    1.    阿德里安·阿羅約街 他說:

      如果以這種方式使用它,那麼您將無法使用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 -ffreestand -lgcc

    link.ld:5個語法錯誤
    collect2:錯誤:ld返回1退出狀態

    鏈接
    。 = 0x00100000;
    .multiboot_header:{
    *(。multiboot_header)
    }

    在第5行中,我沒有看到錯誤,有人嗎?

    我正在VirtualBox中使用虛擬化的Debian Wheezy

    1.    朱利安·雷耶斯(Julian Reyes Escrigas) 他說:

      添加“;” 在*(。multiboot_header)的末尾

  30.   埃里克·奧雷拉納·羅梅羅(Eric Orellana Romero) 他說:

    非常好的創舉,我一定會關注這篇文章的各個章節,打算從中學到很多東西。 非常感謝您抽出寶貴的時間教我們。 關於這方面的一個細節,應該注意,Linus Torvalds不是任何操作系統的創建者,他創建了GNU / Linux系統(已在其他OS中使用的系統)的內核,這仍然值得,但重要的是要感謝Richard Stallman創建了大多數操作系統。

    非常感謝您的投入,希望您考慮我的看法。

  31.   朱利安·雷耶斯(Julian Reyes Escrigas) 他說:

    我已經把這個話題弄亂了一段時間,當我讀到標題時,我就很感興趣。 但是消息不斷

    錯誤:找不到多重引導頭。
    錯誤,您需要先加載內核

    我已經將我上傳的內容上傳到github的倉庫中 https://github.com/rkmax/GenyOS

    1.    馬丁·維拉爾巴(Martin Villalba) 他說:

      我也發生了同樣的事情,找到解決方案了嗎?

  32.   卡洛斯 他說:

    我開始介紹語法的問題,而menuentryline告訴我commandnot found誰能告訴我原因
    這就是我要做的

    黑色@ BLACK-pc:〜/ blackroot $ menuentry«NextDivel»{
    menuentry:找不到命令

    1.    阿德里安·阿羅約街 他說:

      該內容的內容不在命令行中輸入,而是在您創建的名為grub.cfg的文件中輸入。

  33.   諾蒂諾 他說:

    優秀的文章,謝謝!

  34.   大衛 他說:

    壯觀的……! 就像缺少的鏈接一樣。

  35.   加西亞 他說:

    我喜歡您的“模擬LInus Torvalds”教程,但是有一個我不理解的步驟,以下是:
    現在,我們將START.ELF複製到模擬操作系統根目錄的文件夾中的/ next。 我們使用控制台轉到新操作系統的根文件夾,並驗證是否存在兩個文件:一個/boot/grub/grub.cfg和另一個/next/START.ELF。

    我們轉到上層目錄,並調用用於使用GRUB創建ISO的實用程序,稱為grub-mkrescue。

    有人可以向我解釋:p

    1.    阿德里安·阿羅約街 他說:

      只是為了生成GRUB可以加載的最低ISO,我們將內核複製到(ISO的/,任何文件夾)/next/START.ELF,將GRUB配置文件複製到(ISO的/,任何文件夾)/ boot / grub / grub.cfg。 完成此操作後,我們尚未在ISO上安裝GRUB,並且有一個實用程序可從文件夾生成ISO並安裝稱為grub-mkrescue的GRUB。 然後,我們最終得到一個已安裝GRUB的可引導ISO,該ISO可以讀取配置以稍後正確執行START.ELF。 我不知道自己是否已經解釋過,但是我們所要做的是一種錯誤的文件系統,通過它我們可以生成一個ISO。

  36.   米格爾·朱塞·古瓦拉 他說:

  37.   邁克爾·莫雷諾 他說:

    好吧,真的不多看一個新系統,但是,如果您改進Linux,例如,創建一個帶有服務器組件的Linux外核,如果您願意的話,它可以充當微核,也就是說,一個具有微核行為的exo結構將是超級的。和linux。

    另一件事是,我不是編程專家,只是一些俗氣的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版本] $ 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'的失敗指令
    設為[2]:*** [src / START.ELF]錯誤1
    CMakeFiles / Makefile2:106:目標'src / CMakeFiles / START.ELF.dir / all'的指令失敗
    使[1]:*** [src / CMakeFiles / START.ELF.dir / all]錯誤2
    Makefile:117:目標“ all”的指令失敗
    使:*** [全部]錯誤2

    1.    阿德里安·阿羅約街 他說:

      錯誤似乎是因為您具有64位版本,所以找不到llibgcc,並且當前編譯系統被迫使用32位。 您應該在發行版或更高版本上安裝兼容包,使用32位系統。

      1.    羅納爾多·羅德里格斯 他說:

        我有32位,並且出現相同的錯誤,您是指操作系統還是體系結構? 我的是64位的,但是我使用的是32位的Ubuntu,不要問,財務問題,我就這樣說。

  41.   豪爾赫 他說:

    優秀的話題,等待更大的範圍。 問候

  42.   JHON 他說:

    太棒了,我希望更多

  43.   索德·佩雷斯 他說:

    您好,我是一位年輕的大使,他希望創建一個支持所有程序和平台的操作系統,以便開發人員不必在PC上擁有功能強大的計算機,應用程序或程序。
    這就是為什麼我對此帖子感興趣,但是當我下載您的git或嘗試創建它時,一切正常,直到我執行命令./iso.sh或grub-mkrescue -o nextdivel.iso nextroot時,您會收到此錯誤

    “ Grub-mkrescue:警告:您的xorriso不支持” –grub2-boot-info“。 某些功能已被禁用。 使用xorriso 1.2.9或更高版本。
    grub-mkrescue:警告:您的xorriso不支持“ –grub2-boot-info”。 您的內核映像太大。 磁盤啟動已被禁用。 使用xorriso 1.2.9或更高版本..»
    我真的不知道,因為我對應用程序和Web知識很多,但是對grub一無所知

    1.    阿德里安·阿羅約街 他說:

      您可能需要在發行版上更新xorriso程序。 您使用什麼發行版和版本?

      1.    索德·佩雷斯 他說:

        我使用xubuntu 14.04lts並嘗試運行xorriso,但是shell告訴我它找不到它,並且我得到apt-get install xorriso,儘管我真誠地希望得到一些響應,因為我在Linux上安裝了我不知道的東西時經驗很差,呵呵。 我將立即更新並告訴您發生了什麼

      2.    阿德里安·阿羅約街 他說:

        然後從軟件中心安裝xorriso或直接從終端安裝“ sudo apt-get install xorriso”

      3.    索德·佩雷斯 他說:

        我已經完成了您告訴我的所有事情,並且使用git和mine都得到了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.    ERIK 他說:

        打擾一下,您能告訴我您執行了什麼步驟,因為我沒有錯誤可以啟動:沒有這樣的文件或目錄

        無引導設備。

  44.   何塞 他說:

    問候! 我想問你一個忙,如果你能給我發一封電子郵件,說明你在這裡的解釋,我有點困惑,我需要將我的理解與你的解釋進行比較,也許我不清楚的是grub.cfg的創建是在終端gcc中完成的還是在哪裡完成的? 朋友,非常感謝您!

    1.    阿德里安·阿羅約街 他說:

      使用任何文本編輯器創建文件grub.cfg,都必須將其保存在PROJECT_FOLDER / boot / grub / grub.cfg中

  45.   賈扎諾 他說:

    您好Adrian首先,祝賀您,並感謝您的貢獻。

    您知道我正在為此做練習,並且在您進行輔導後開始將其組合在一起,但是開始後我發現了第一個錯誤

    $ as -o kernel.o -c kernel.asm
    bash:as:找不到命令...
    類似的命令是:
    '一個'
    'ac'

    我正在研究fedora 20,在這方面我找不到解決方案,對於您應該更改gcc還是gas的指導,我將不勝感激。

    提前謝謝

    1.    阿德里安·阿羅約街 他說:

      您必須安裝GAS,這樣我才能看到錯誤代碼。 我手頭沒有Fedora,但從理論上講,如果您要安裝gcc-c ++,則將安裝整個GCC套件和GNU,通常會附帶它。

  46.   加斯頓·拉米雷斯(Gaston Ramirez) 他說:

    我和你在一起,我對C ++,C#有所了解(儘管這最後一點在這方面不是很有用),但壞的是我仍然缺乏經驗,我從不使用C語言,您的著作很棒,我沒有話要說,如果我有時間的話。 謝謝。

  47.   Teresita del Jesus Nah Sanchez 他說:

    非常感謝您的大力幫助...。

  48.   ky 他說:

    我愛linux,這是最好的區域,因為我的Windows真是個垃圾,我知道linux的創建者是Windows的創建者

  49.   羅德 他說:

    您好我在grub中收到錯誤消息
    錯誤:找不到文件/next/START.ELF
    錯誤:您需要先加載內核

    你能幫我和谷歌,但我找不到

  50.   恩里克·阿維拉(Enrique Avila) 他說:

    拜託,我如何讓它顯示HELLO WORLD消息,我是初學者,但我仍然不了解

  51.   卡洛斯·格雷羅·阿爾瓦雷斯 他說:

    我發生以下情況:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestand -lgcc
    /usr/bin/ld:kernel.o:在創建PIE對象時,不能將R_X86_64_32相對於符號'stack'進行重定位; 用-fPIE重新編譯
    / usr / bin / ld:最終鏈接失敗:輸出中的不可代表部分
    collect2:錯誤:ld返回1退出狀態