Mencontohi Linus Torvalds: Buat sistem operasi anda sendiri dari awal (I)

Pertama sekali, komen bahawa ini adalah artikel pertama saya dan saya harap anda semua menyukainya.

Linus Torvals gembira

Dalam siri ini kita akan mencontohi Linus Torvalds, kita akan membuat sistem operasi kita dari 0. Dalam episod pertama ini kita akan melihat boot dan kita akan meletakkan teks di layar dari kernel kita.

Dalam kes saya, sistem operasi dipanggil NextDivel. Keputusan pertama yang harus kita buat sebaik sahaja mempertimbangkan sistem operasi adalah seperti apa bootloader?

Di sini terdapat pelbagai varian, dan kita boleh membuatnya sendiri; namun dalam tutorial ini saya akan gunakan GRUB, kerana kebanyakan lebih kurang mengetahui tentang dirinya. Kami membuat folder yang akan menjadi akar sistem operasi kami dan di sana kami membuat folder / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Di sana kami membuat fail grub.cfg seperti berikut:

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

Dalam fail ini kita telah melihat bagaimana GRUB akan memuatkan kernel kami, dalam kes ini, di /next/START.ELF. Sekarang kita mesti membuat kernel kita.

Untuk ini kita memerlukan GCC y GAS (penyusun projek GNU, biasanya dilengkapi dengan gcc). Oleh itu, kita akan membuat kernel.

Mula-mula kita membuat fail bernama kernel.asm. Fail ini akan mengandungi titik permulaan kernel kami dan juga akan menentukan multiboot (ciri beberapa pemuat but seperti GRUB). Kandungan kernel.asm akan:

.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

Segala yang berkaitan dengan multiboot hanyalah mengikuti spesifikasi tidak lain. Segala-galanya akan bermula pada mulanya, ia akan memanggil multiboot_entry, kita akan menentukan header multiboot pada 4k pertama dan kita akan meletakkannya (dengan movl).

Kemudian kami memanggil NextKernel_Main yang merupakan fungsi C kernel kami. Dalam gelung kami berhenti untuk menghentikan komputer. Ini menyusun dengan:

as -o kernel.o -c kernel.asm

Sekarang kita akan memasuki pengaturcaraan di C. Anda akan berfikir bahawa sekarang semuanya adalah sepotong kek, kami meletakkan Printf en utama dan itu sahaja, kami telah berjaya.

Baiklah, sejak Printf y utama mereka adalah fungsi yang ditentukan oleh sistem operasi, tetapi kita membuatnya! Kita hanya boleh menggunakan fungsi yang kita tentukan sendiri.

Pada bab-bab kemudian saya akan membincangkan bagaimana meletakkan perpustakaan C kita sendiri (glibc, bionic, newlibc) tetapi dari semasa ke semasa. Kami telah bercakap bahawa kami ingin meletakkan teks di skrin, kami akan melihat bagaimana kami melakukannya.

Terdapat dua pilihan, satu adalah memanggil BIOS dan yang lain adalah mengurus memori skrin secara langsung. Kami akan melakukan yang terakhir kerana lebih jelas dari C dan ini juga akan membolehkan kami melakukannya ketika memasuki mod terlindung.

Kami membuat fail bernama NextKernel_Main.c dengan kandungan berikut:

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;
}

Dengan ini kita secara langsung memanipulasi memori VGA dan watak mengikut watak kita menulisnya. Kami menyusun dengan melumpuhkan stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Sekiranya anda berjaya sejauh ini, anda pasti ingin mencuba sistem operasi baru anda sekarang, tetapi kami belum selesai. Kami memerlukan fail kecil yang memberitahu penyusun di mana dalam fail untuk meninggalkan setiap bahagian. Ini dilakukan dengan skrip penghubung. Kami membuat 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 = .;
}

Dengan ini kita menentukan kedudukan setiap bahagian dan titik masuk, permulaan, yang telah kita tentukan dalam kernel.asm. Sekarang kita dapat menyatukan semua ramuan ini:

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

Sekarang kita menyalin START.ELF ke / seterusnya di dalam folder kita yang mensimulasikan akar sistem operasi kita. Kami pergi ke folder root sistem operasi baru kami dengan konsol dan mengesahkan bahawa terdapat dua fail: satu /boot/grub/grub.cfg dan satu lagi /next/START.ELF.

Kami pergi ke direktori atas dan memanggil utiliti penciptaan ISO dengan GRUB dipanggil grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Setelah kita melakukan ini, kita akan mempunyai ISO. ISO ini boleh dibuka di komputer x86 (64 bit juga) dan mesin maya. Untuk mengujinya, saya akan menggunakan QEMU. Kami panggil QEMU dari baris arahan:

qemu-system-i386 nextdivel.iso

Akan bermula LautBIOS dan kemudian kita akan mempunyai GRUB. Nanti jika semuanya betul kita akan melihat ungkapan kita.
Anda akan berfikir bahawa ini sukar, saya jawab anda, ya.

Benar-benar membuat sistem operasi adalah sukar dan yang satu ini tidak melakukan apa-apa yang berguna. Pada bab-bab mendatang kita akan melihat bagaimana menangani warna di layar, menyimpan memori dan jika saya boleh, bagaimana mendapatkan data dari papan kekunci.

Sekiranya seseorang tidak mahu menyalin semuanya di sini, saya mempunyai repositori di GitHub (lebih terperinci) dengan sistem operasi NextDivel. Sekiranya anda mahu menyusun NextDivel anda hanya perlu mempunyai git dan 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

Saya mendorong anda untuk berkolaborasi di NextDivel jika anda mempunyai masa dan keinginan untuk membuat sistem operasi. Mungkin lebih hebat daripada Linux ... masa akan memberitahu.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   meriah kata

    :O

    1.    marianogaudix kata

      Torvalds mengambil sistem operasi Minix (berasal dari UNIX) kepada Andrew S. Tanenbaum dan memperbaikinya.

      Tanenbaum pernah bertengkar dengan Linus, mereka saling menghina. Tanenbaum mengatakan bahawa Microkernel adalah masa depan (HURD, Minix kerucut baru Microkernel).

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

  2.   eliotime3000 kata

    Ini adalah catatan terbaik yang pernah saya lihat selama ini di blog ini. Saya sudah mahu tahu apa lagi yang perlu dilakukan.

  3.   Carlos Gude kata

    Kagum

  4.   kapak kata

    Betul-betul mengagumkan !!

  5.   rhoconlinux kata

    FUUUUUUA!
    Ini adalah catatan geekiest yang pernah saya lihat hehe. Tahniah Adrián, artikel pelacur! hiper menarik !!! 🙂

    1.    Joaquin kata

      Saya setuju. Saya membayangkan keadaan ini:
      Pengguna Kuasa GNU / Linux (dengan wajah gembira):
      "Saya sudah tahu bagaimana menyusun Gentoo saya"

      Nerd (hina): «pff, saya telah membuat distro saya sendiri ...»

      1.    dekoder kata

        Ya, saya boleh membuat distro linux saya sendiri. Sebenarnya di dalamnya saya mengembangkan initramfs dan kernel untuk linux tertanam. Tidak sama membuat sistem operasi daripada distro linux. Yang pertama jauh lebih sukar, hampir mustahil, yang kedua, seperti yang anda katakan, boleh jadi apa-apa, walaupun Ubuntu dengan logonya berubah xD. Oleh itu, saya akan membiarkannya seperti ini:

        Pengguna Kuasa GNU / Linux (dengan wajah gembira)
        - Saya sudah tahu bagaimana menyusun Gentoo saya

        Separuh Nerd
        - Pff, saya telah mengikuti linux dari awal dan saya telah membuat distro saya sendiri

        Nerd (dengan sikap menghina)
        - pff, kerana saya telah memprogramkan kernel di assembler dan di C

        Terima kasih!

  6.   kronologi kata

    Ini menarik bagi saya, sementara menunggu bab-bab berikut.

  7.   abimaelmartell kata

    Saya melihat tutorial ini beberapa waktu yang lalu, ini adalah untuk C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    Jalan AdrianArroyo kata

      Terima kasih kerana pautan, saya akan melihatnya.

  8.   Jose Jácome kata

    Saya mahukan Sistem Operasi 100% serasi dengan grafik AMD: /

    1.    ivanlinux kata

      Windows

      1.    Jose Jácome kata

        hahaha di Windows Catalyst tidak mempunyai sokongan OpenGL, walaupun di Linux saya tidak dapat menggunakan semua kekuatan grafik saya akan terus menunggu untuk melihat apa yang berlaku!

        1.    beny_hm kata

          tunggu sahaja injap menghapuskan pasaran

  9.   KZKG ^ Gaara kata

    Sokongan ajaib, sempurna, sangat baik, ia kelihatan seperti siri catatan yang hebat 🙂

  10.   O_Pixote_O kata

    Buah Saya ingin tahu bagaimana program untuk menolong anda, hanya sebagai cara berlatih dengan pengetahuan bahawa anda belajar dan menolong seseorang. Buat masa ini saya meninggalkan anda moto untuk menarik perhatian kepada projek setelah anda menyelesaikannya "Gunakan NextDivel, porno kelihatan sama (atau lebih baik).", Anda akan menyapu xD.

  11.   nama ini tidak betul kata

    Mooooooolaaa !!!!

  12.   nodri kata

    Artikel yang sangat bagus, tetapi hanya ingin tahu mengapa anda belum mengikuti projek Linux From Scratch?

    salam

    1.    Jalan AdrianArroyo kata

      Nah, Linux dari Scratch baik-baik saja, dan anda dapat memberitahu bahawa itu milik anda, tetapi sebenarnya sangat mekanikal:
      -Muat turun fon
      -Tampalkan mereka
      -Kompilasi
      -Pasang
      -Mengikuti
      Di sini, walaupun hasilnya lebih buruk pada akhirnya, anda boleh mengatakan bahawa anda telah menyemak semua fail.

    2.    dekoder kata

      Seperti yang jelas dari komen saya sebelumnya, kerana ia tidak mempunyai tahap kerumitan yang sama. Tambahan pula, linux dari awal sebenarnya tidak bertentangan dengan namanya, membuat sistem dari awal. Membuat sistem dari awal adalah memprogramkannya sendiri, menulis kernel anda sendiri, bukan kernel linux, jika mungkin walaupun bootloader anda sendiri bukan grub, lilo, syslinux, dll. Walaupun LFS bukan prestasi kecil dan cukup kompleks, ia bahkan tidak hampir untuk memprogramkan kernel anda sendiri ...

      Di samping itu, saya bersetuju dengan AdrianArroyo Calle bahawa ia terlalu mekanikal, saya telah membacanya suatu ketika dan anda akhirnya menyerah pada halaman keenam, mereka juga memberitahu anda untuk menggunakan versi pakej apa kerana jika tidak arahannya tidak berfungsi (bahawa menunjukkan kekurangan fleksibiliti, Pada pendapat saya). Saya rasa lebih baik memiliki sesuatu dari idea anda sendiri, menyusun pakej yang anda mahukan, bahkan memprogramkan beberapa, menyusun kernel linux dan dengan aman.

      Terima kasih!

  13.   cookie kata

    uuuoooohh !! Saya tidak pernah merakam siaran seperti ini.
    Sila teruskan 😀

  14.   pengguna_linux kata

    Saya tidak tahu apa yang salah:

    ralat: tidak terdapat tajuk multiboot.
    ralat anda perlu memuatkan kernel terlebih dahulu

    1.    Jalan AdrianArroyo kata

      Sekiranya ada saguhati, saya melakukan kesalahan yang sama Cuba gunakan sumber-sumber yang ada di GitHub, di sana kesalahan sudah dapat diselesaikan. Bagaimanapun saya fikir jika anda menukar garis grub.cfg dari "multiboot /next/START.ELF" menjadi "kernel /next/START.ELF" ia mungkin berfungsi. Saya tidak tahu betul.

      1.    mcbanana kata

        Pertama sekali, pintu masuk yang mengagumkan 🙂
        Saya menghadapi masalah yang sama semasa memuatkan kernel dari grub. Malah menggunakan sumber GitHub atau menukar multiboot untuk kernel ...

        ralat: tidak terdapat tajuk multiboot.
        ralat: tiada kernel yang dimuat

        1.    Jalan AdrianArroyo kata

          Adakah anda menggunakan clang sebagai penyusun? Tukar untuk gcc
          Adakah anda masih ingat untuk menggunakan skrip penghubung? Penting untuk penghubung (dalam kes kita) untuk mengetahui di mana dalam fail itu akan meletakkan setiap perkara. Dalam kes ini, header multiboot mesti berada di awal.
          Adakah anda menggunakan sistem CMake? Sekiranya anda menggunakannya saya rasa ia tidak akan gagal.
          Sekiranya ia tidak sesuai untuk anda, saya akan berusaha mencari jalan penyelesaian lain.

  15.   khourt kata

    [+100]
    Cukup hebat !!!

  16.   invisible15 kata

    Ia sungguh sejuk 🙂

  17.   tanrax kata

    Saya menanggalkan topi saya. Catatan yang mengagumkan. Selamat bertunang.

  18.   lelaki kata

    Wah!
    Alangkah baiknya jika anda dapat membuka aplikasi yang dibuat dalam HTML5 dan Javascript tanpa harus menggunakan penyemak imbas, apakah itu mungkin?
    Saya bercakap bahawa mereka seperti aplikasi asli.
    Oleh itu, mudah untuk memprogram sistem operasi ini 😀

    1.    Jalan AdrianArroyo kata

      Dalam kes ini saya tidak akan melakukannya kerana memerlukan lebih banyak kerja di belakangnya tetapi ada sistem operasi yang disebut "is" yang melakukan apa yang anda katakan. Sebenarnya baris arahannya adalah JavaScript dan tetingkap dilukis menggunakan fungsi Canvas JavaScript. Jurutera Nintendo melakukannya dan kini sumber terbuka.

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

      1.    lelaki kata

        Valla, terima kasih atas maklumatnya 😀
        Saya akan melihat

  19.   patodx kata

    Sesiapa yang boleh membuat OSnya sendiri boleh mati dengan aman, kerana tahap intelektual yang harus dicapai dengannya; Itu membuat anda melepaskan syurga atau neraka.
    Sekeping catatan.

    1.    Miguel kata

      Setakat ini tidak ada yang diketahui hanya membuat sesuatu yang boleh dikatakan sebagai sistem operasi yang baik yang dibuat dari awal, bahkan Linux Torvalds seperti yang anda katakan pada awalnya, kerana ini bermula dari sumber Unix dan semua yang lain ditulis bersama untuk lebih banyak lagi daripada satu orang, hidupnya sangat singkat dan bermula dari awal tidak dapat difikirkan oleh sesiapa sahaja, walaupun yang sebaliknya diinginkan, ini dapat dilihat dalam banyak kesalahan yang dilakukan dalam menyalin dan menampal oleh Linux Torvalds

      1.    skarmiglione kata

        Sumber unix ditutup, penggunaan minix ... yang lain.

      2.    Philip Robaina kata

        dan mereka yang membuat QDOS apa?
        berdasarkan sesuatu?

  20.   Tesla kata

    Dari apa yang saya lihat, yang tidak mempunyai sistem operasi mereka sendiri adalah kerana mereka tidak mahu, hahahaha.

    Sekarang serius, sangat menarik! Banyak yang di luar pengetahuan pengaturcaraan saya yang terhad, tetapi saya akan membaca bahagian lain dari siri ini dengan jangkaan.

    Terima kasih kerana menghantar!

  21.   Manuel R. kata

    Anda meninggalkan saya dengan wajah O_O ... tanpa niat meremehkan sumbangan sesiapa sahaja, ini adalah yang paling "pro" yang saya lihat akhir-akhir ini. Salam.

  22.   aitor_cz kata

    Artikel yang sangat bagus, Adrián. Sila teruskan…

  23.   mj kata

    Adakah anda bercanda pada Hari April Mop ?, jangan bermaksud "Meniru Linus Torvalds: Buat sistem operasi anda sendiri dari awal." Saya rasa tidak sukar bagi mereka yang melanjutkan kerjaya di beberapa institusi teknologi atau universiti; tetapi bagi saya saya seorang pemanah pemula (ada yang memanggil kami "Noob" tetapi saya menganggap diri saya lebih Newbie agak malas) yang sepertinya tidak menginjak ke darat. Bagaimanapun, ARTIKEL INI MENCIPTAKAN BANYAK KURIOSITI DAN TANPA ADMIRASI BERGANDA DAN MENGHORMATI PENGARAH, KONGRATULASI; Perkara pertama yang akan saya lakukan ialah cuba memahami sekurang-kurangnya sedikit bahan berharga ini.
    TERIMA KASIH Adrian Arroyo Calle, karya yang sangat baik dan penyampaian ilmu yang mulia.

  24.   Blaire pascal kata

    LEL Pos yang sangat baik, teruskan.

  25.   f3niX kata

    Entri yang bagus, inilah yang saya terlepas desde linux. Hebat.

  26.   Ruby kata

    Pos yang hebat, terima kasih banyak.
    Saya tidak faham apa yang dilakukan oleh fail link.ld, bolehkah seseorang menerangkannya kepada saya?

    1.    Jalan AdrianArroyo kata

      Fail link.ld memberitahu penghubung (dalam kes ini ld) di mana setiap bahagian kod harus berada dalam fail yang dihasilkan. Kami juga menentukan titik masuk kerana kerana kita tidak memiliki sistem operasi kita tidak dapat menggunakan utama sebagai program biasa, dalam hal ini kita memilih fungsi mulai.

  27.   Maxi kata

    Hebat semua siaran anda! Menunggu 7! Bagaimana jika saya mempunyai keraguan, misalnya, jika saya hanya ingin menjalankan algoritma, tanpa OS, bagaimana saya tahu apa yang boleh saya gunakan dan apa yang bukan C?

    1.    Jalan AdrianArroyo kata

      Sekiranya anda menggunakannya seperti ini, anda tidak akan dapat menggunakan apa-apa dari stdlib, yang praktikalnya digunakan oleh semua orang (tidak ada malloc, percuma, printf, scanf, strcmp, dll) Segala-galanya mesti dilaksanakan secara langsung dari memori atau ASM. Mungkin dalam bab yang lebih tinggi saya akan menunjukkan kepada anda cara memasang perpustakaan C untuk sistem operasi. Sekiranya anda menggunakan C ++, anda tidak boleh menggunakan pengecualian dan operator baru dan hapus (dan pasti lebih banyak lagi).

    2.    Switcher kata

      saya fikir ini ia dapat memberi anda idea yang lebih baik tentang cara melakukannya.

  28.   Esteban kata

    Halo, kira-kira 5 tahun yang lalu saya mengikuti penerbitan serupa dan mengembangkan mikrokernel yang bermula dengan cara yang sama, ia mempunyai beberapa aspek untuk diperbaiki, tetapi mungkin menarik bagi anda, ia berjalan dalam mod terlindung, melaksanakan multi-tasking dan melakukan virtualisasi memori, akhir-akhir ini saya mengusahakan pemacu cakera dan pemacu cd untuk menjadikannya boleh dipasang dan tidak hanya dijalankan pada cd langsung ... Salam.

  29.   Johan kata

    Yang terhormat, saya mengalami ralat semasa melaksanakan perintah:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 ralat sintaks
    collect2: error: ld mengembalikan 1 status keluar

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

    Pada baris 5 saya tidak melihat kesalahannya, adakah seseorang perkara yang sama berlaku kepadanya?

    Saya bekerjasama dengan debian virtualized dalam kotak virtual

    1.    Gambar placeholder Julian Reyes Escrigas kata

      tambah ";" pada akhir * (. multiboot_header)

  30.   Eric Orellana Romero kata

    Inisiatif yang sangat baik, saya pasti akan mengikuti bab-bab posting ini, saya berhasrat untuk belajar banyak darinya. Terima kasih banyak meluangkan masa untuk mengajar kami. Satu perincian dalam hal ini, harus diperhatikan bahawa Linus Torvalds bukan pencipta sistem operasi apa pun, dia membuat Kernel sistem GNU / Linux (yang telah digunakan dalam OS lain), yang masih layak, tetapi adalah mustahak untuk memberi kredit kepada Richard Stallman untuk membuat sebahagian besar OS.

    Terima kasih banyak atas sumbangan dan saya harap anda mempertimbangkan pemerhatian saya.

  31.   Gambar placeholder Julian Reyes Escrigas kata

    Saya sudah lama membincangkan topik ini, saya tertarik sebaik sahaja membaca tajuk utama. tetapi mesej tetap diterima

    ralat: tidak terdapat tajuk multiboot.
    ralat anda perlu memuatkan kernel terlebih dahulu

    Saya telah memuat naik apa yang saya bawa ke repo di github https://github.com/rkmax/GenyOS

    1.    martin villalba kata

      Perkara yang sama berlaku kepada saya. Adakah anda menemui jalan penyelesaiannya?

  32.   Carlos kata

    soalan saya mula memperkenalkan sintaks dan baris menu memberitahu saya arahan tidak dijumpai siapa yang boleh memberitahu saya mengapa
    inilah yang saya buat

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: arahan tidak dijumpai

    1.    Jalan AdrianArroyo kata

      Isi kandungan ini tidak boleh dimasukkan dalam baris perintah, tetapi dalam file yang Anda buat disebut grub.cfg

  33.   Nodetin kata

    Artikel yang sangat baik, terima kasih!

  34.   David kata

    Spektakuler… !! ia seperti pautan yang hilang.

  35.   r.garciag kata

    Saya suka tutorial Emulating LInus Torvalds anda, tetapi ada satu langkah yang saya tidak faham, berikut:
    Sekarang kita menyalin START.ELF ke / seterusnya di dalam folder kita yang mensimulasikan akar sistem operasi kita. Kami pergi ke folder root sistem operasi baru kami dengan konsol dan mengesahkan bahawa terdapat dua fail: satu /boot/grub/grub.cfg dan satu lagi /next/START.ELF.

    Kami pergi ke direktori atas dan memanggil utiliti penciptaan ISO dengan GRUB yang disebut grub-mkrescue

    Bolehkah seseorang menerangkannya kepada saya: hlm

    1.    Jalan AdrianArroyo kata

      Cukup untuk menghasilkan ISO minimum yang dapat dimuat GRUB, kami menyalin kernel ke (the / ISO, folder mana pun) /next/START.ELF dan fail konfigurasi GRUB ke (ISO / folder mana pun) / boot / grub / grub.cfg. Setelah selesai, kami belum memasang GRUB pada ISO dan ada utiliti yang menghasilkan ISO dari folder dan memasang GRUB yang disebut grub-mkrescue. Kemudian akhirnya kita akan berakhir dengan ISO yang dapat di-boot yang telah dipasang GRUB, yang dapat membaca konfigurasi untuk kemudian menjalankan START.ELF dengan betul. Saya tidak tahu sama ada saya telah menjelaskan sendiri, tetapi apa yang kita lakukan adalah sejenis sistem fail palsu yang dengannya kita menghasilkan ISO.

  36.   perhatian miguel jose guevara kata

    Hebat

  37.   Michael Moreno kata

    Baiklah, lihat sistem baru tidak begitu banyak tetapi jika anda memperbaiki linux, misalnya, buat exonucleus linux dengan komponen pelayan yang bertindak sebagai mikronukleus jika anda mahu, iaitu struktur exo dengan tingkah laku mikronukleus yang akan menjadi super dan linux.

    Perkara lain adalah bahawa saya bukan pakar dalam pengaturcaraan, hanya beberapa cheesy c ++ dan beberapa java, cukup untuk saya memberikan program kernel linux modul, mematikannya, mengubahnya dll.

  38.   Askar Musim Sejuk53 kata

    Tanpa keraguan, saya sudah mula bercuti.

  39.   Fermin kata

    Ini bagus dan dalam program apa rancangan dan kodnya?
    tolong beri saya jawapan itu

  40.   Fikiran Gelap kata

    Semasa menyusun dari git anda, saya mendapat:

    [jmponce @ balang balang] $ cmake ..
    - Membuat direktori NextRoot
    - Menghasilkan skrip ISO
    buat DESTDIR = pemasangan seterusnya
    ./iso.sh
    - Found Doxygen: / usr / bin / doxygen (didapati versi "1.8.9")
    - Konfigurasi selesai
    - Menjana selesai
    - Fail binaan telah ditulis ke: / home / jmponce / next-divel / build
    [jmponce @ balang balang] $ buat
    Mengimbas kebergantungan sasaran MULAI
    [7%] Membina objek ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Membangun objek CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Menghubungkan CXX yang boleh dilaksanakan dengan MULAI
    / usr / bin / ld: Tidak serasi /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a dilangkau semasa mencari -lgcc
    / usr / bin / ld: tidak dapat mencari -lgcc
    collect2: error: akan keluar status keluar 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Arahan yang gagal untuk sasaran 'src / START.ELF'
    buat [2]: *** [src / START.ELF] Ralat 1
    CMakeFiles / Makefile2: 106: Petunjuk yang gagal untuk target 'src / CMakeFiles / START.ELF.dir / all'
    buat [1]: *** [src / CMakeFiles / START.ELF.dir / all] Ralat 2
    Makefile: 117: Kegagalan arahan untuk sasaran 'semua'
    buat: *** [semua] Ralat 2

    1.    Jalan AdrianArroyo kata

      Kesalahannya nampaknya tidak dapat mencari llibgcc kerana anda mempunyai versi 64-bit dan pada masa ini sistem binaan terpaksa menggunakan 32-bit. Anda harus memasang pek keserasian pada distro anda atau lebih baik, gunakan sistem 32-bit.

      1.    Ronaldo Rodríguez kata

        Saya mempunyai 32 bit dan saya mendapat ralat yang sama, maksud anda sistem operasi atau seni bina? saya adalah 64 Bit, tetapi saya menggunakan Ubuntu 32 bit, jangan tanya, masalah kewangan, dengan itu saya katakan semuanya.

  41.   Jorge kata

    Topik yang bagus, menunggu skop yang lebih besar Sorakan

  42.   Jhon kata

    Hebat saya berharap untuk lebih banyak lagi

  43.   Soid perez kata

    Helo, saya adalah duta muda yang ingin membuat sistem operasi yang menyokong semua program dan platform supaya pembangun tidak perlu mempunyai mesin atau aplikasi atau program yang kuat di komputer.
    Itulah sebabnya saya berminat dengan catatan ini tetapi apabila saya memuat turun git anda atau cuba membuatnya, semuanya berfungsi sehingga saya melaksanakan perintah ./iso.sh atau grub-mkrescue -o nextdivel.iso nextroot anda mendapat ralat ini

    "Grub-mkrescue: peringatan: xorriso anda tidak menyokong" –grub2-boot-info ". Beberapa ciri telah dilumpuhkan. Gunakan xorriso 1.2.9 atau lebih baru ..
    grub-mkrescue: amaran: xorriso anda tidak menyokong "–grub2-boot-info". Imej kernel anda terlalu besar. Boot cakera telah dilumpuhkan. Gunakan xorriso 1.2.9 atau lebih baru .. »
    Saya sebenarnya tidak mempunyai idea kerana saya tahu banyak mengenai aplikasi dan laman web tetapi saya tidak tahu apa-apa mengenai grub

    1.    Jalan AdrianArroyo kata

      Anda mungkin perlu mengemas kini program xorriso di distro anda. Distro dan versi apa yang anda gunakan?

      1.    Soid perez kata

        Saya menggunakan xubuntu 14.04lts dan cuba menjalankan xorriso tetapi shell memberitahu saya bahawa ia tidak dapat menemuinya dan saya dapat memasang xorriso apt walaupun saya benar-benar mengharapkan sedikit tindak balas kerana saya mempunyai pengalaman buruk memasang perkara yang saya tidak tahu di linux hehe . Saya akan mengemas kini sekarang dan memberitahu anda apa yang berlaku

      2.    Jalan AdrianArroyo kata

        Kemudian pasang xorriso dari pusat perisian atau hanya dari terminal lakukan "sudo apt-get install xorriso"

      3.    Soid perez kata

        Saya sudah melakukan semua yang anda katakan kepada saya dan dengan kedua-dua git dan saya, saya mendapat xorriso 1.3.2: manipulator sistem fail RockRidge, projek libburnia.

        Pandu semasa: -outdev 'stdio: nextdivel.iso'
        Media semasa: fail stdio, boleh ditimpa
        Status media: kosong
        Ringkasan media: 0 sesi, 0 blok data, 0 data, percuma 1901m
        Ditambah pada imej ISO: direktori '/'='/tmp/grub.OEqSzV'
        xorriso: KEMASKINI: 546 fail ditambahkan dalam 1 saat
        xorriso: GAGAL: Tidak dapat menentukan atribut fail sumber '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Tidak ada fail atau direktori seperti itu
        xorriso: KEMASKINI: 546 fail ditambahkan dalam 1 saat
        xorriso: pengguguran: -abort_on 'FAILURE' menemui 'FAILURE'
        dan corduroy saya tidak faham struktur saya adalah /nextroot/boot/grub/grub.cfg dan nextroot / next / START.ELF

      4.    Soid perez kata

        Terima kasih, saya sudah bersedia untuk terus maju, seorang rakan menolong saya dan memberitahu bahawa apa yang saya buat salah ialah organisasi direktori, jadi saya menyesuaikannya dan itu sahaja

      5.    erik kata

        Maaf, bolehkah anda memberitahu saya prosedur apa yang anda lakukan kerana saya tidak mendapat kesalahan untuk boot: tidak ada fail atau direktori seperti itu

        tiada peranti yang boleh di-boot.

  44.   jose kata

    Salam! Saya akan meminta bantuan anda sekiranya anda dapat menghantar e-mel kepada saya dengan apa yang anda jelaskan di sini, saya sedikit bingung dan saya perlu membandingkan apa yang saya ada dengan apa yang anda jelaskan, mungkin yang tidak jelas bagi saya adalah sama ada penciptaan grub. cfg dilakukan di terminal gcc atau di mana sebenarnya? terima kasih banyak kawan!

    1.    Jalan AdrianArroyo kata

      Anda membuat fail grub.cfg dengan mana-mana penyunting teks dan anda mesti menyimpannya di PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano kata

    Helo Adrian, pertama sekali, mengucapkan tahniah dan terima kasih atas sumbangan anda.

    Anda tahu saya melakukan ini untuk latihan dan saya mula menyusunnya setelah mengikuti tunjuk ajar anda, namun setelah memulakan saya menemui kesalahan pertama

    $ as -o kernel.o -c kernel.asm
    bash: as: arahan tidak dijumpai ...
    Perintah serupa adalah:
    'sa'
    'ac'

    Saya mengusahakan fedora 20, dan saya tidak dapat mencari penyelesaian dalam hal ini, saya akan menghargai panduan anda mengenai sama ada saya harus menukar sesuatu dalam gcc atau gas

    terlebih dahulu terima kasih

    1.    Jalan AdrianArroyo kata

      Anda mesti memasang GAS supaya saya dapat melihat kod ralat. Saya tidak mempunyai Fedora, tetapi secara teori jika anda memasang gcc-c ++, anda akan memasang keseluruhan rangkaian GCC dan GNU.

  46.   Gaston Ramirez kata

    Saya bersama anda, saya tahu sesuatu tentang C ++, C # (walaupun yang terakhir ini tidak begitu berguna dalam perkara ini) yang buruk adalah saya masih kekurangan pengalaman, saya tidak pernah mengendalikan bahasa C, penerbitan anda hebat, Saya tidak banyak cakap jika ada masa yang saya lihat. Terima kasih.

  47.   Teresita dari Jesus Nah Sanchez kata

    Terima kasih banyak atas pertolongan hebat….

  48.   jelek kata

    Saya suka linux, ini adalah daerah terbaik di sana, kebenaran untuk tingkap saya adalah sampah yang saya tahu bahawa pencipta linux adalah pencipta tingkap

  49.   Rode kata

    Halo saya mendapat Ralat dalam kata grub
    ralat: file /next/START.ELF Tidak dijumpai
    ralat: anda perlu memuatkan kernel terlebih dahulu

    Bolehkah anda menolong saya dan berbogel tetapi saya tidak dapat mencari

  50.   Henry Avila kata

    Tolong, bagaimana saya membuatnya menunjukkan mesej HELLO WORLD? Saya seorang pemula dan saya masih belum cukup tahu

  51.   CARLOS GUERRERO ALVAREZ kata

    Perkara berikut berlaku kepada saya:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: penempatan semula R_X86_64_32 terhadap simbol `stack 'tidak dapat digunakan ketika membuat objek PIE; kumpulkan semula dengan -fPIE
    / usr / bin / ld: pautan akhir gagal: bahagian output yang tidak dapat direpresentasikan
    collect2: error: ld mengembalikan 1 status keluar