Linus Torvalds'ı Taklit Etmek: Kendi işletim sisteminizi sıfırdan oluşturun (I)

Öncelikle, bunun ilk makalem olduğunu ve umarım beğeneceğinizi söyleyin.

Linus Torvals mutlu

Bu seride öyküneceğiz Linus Torvalds, işletim sistemimizi 0'dan oluşturacağız. Bu ilk bölümde önyüklemeyi göreceğiz ve çekirdeğimizden ekrana bir metin koyacağız.

Benim durumumda işletim sistemi çağrılır SonrakiDivel. İşletim sistemini düşündüğümüz anda vermemiz gereken ilk karar, bootloader ne olacak?

Burada birden fazla varyant var ve biz de bir tane yaratabiliriz; ancak bu eğitimde kullanacağım GRUBçünkü çoğu kişi onun hakkında az çok bir şeyler biliyor. İşletim sistemimizin kökü olacak bir klasör oluşturuyoruz ve orada / boot / grub klasörünü oluşturuyoruz

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Orada grub.cfg dosyasını aşağıdaki gibi oluşturuyoruz:

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

Bu dosyada nasıl olduğunu gördük GRUB çekirdeğimizi bu durumda /next/START.ELF dizinine yükleyeceğiz. Şimdi çekirdeğimizi oluşturmalıyız.

Bunun için ihtiyacımız olacak GCC y GAZ (projenin montajcısı GNU, genellikle gcc ile birlikte gelir). Yani çekirdeği yaratacağız.

Önce kernel.asm adında bir dosya oluşturuyoruz. Bu dosya çekirdeğimizin başlangıç ​​noktasını içerecek ve aynı zamanda çoklu önyüklemeyi de tanımlayacaktır (bazı önyükleyicilerin bir özelliği GRUB). Kernel.asm dosyasının içeriği şöyle olacaktır:

.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

Çoklu önyüklemeyle ilgili her şey, başka hiçbir şeyle ilgili spesifikasyona uymamaktır. Her şey başlangıçta başlayacak, multiboot_entry'yi çağıracak, multiboot başlığını ilk 4k'de tanımlayacağız ve onu koyacağız (movl ile).

Daha sonra çekirdek C fonksiyonumuz olan NextKernel_Main'i çağırıyoruz. Döngüde bilgisayarı durdurmak için dururuz. Bu, şunlarla derlenir:

as -o kernel.o -c kernel.asm

Şimdi C'de programlamaya gireceğiz. Şimdi her şeyin bir parça kek olduğunu düşüneceksiniz, bir printf en ana ve işte bu, başardık.

O zamandan beri hayır printf y ana bunlar işletim sistemi tarafından tanımlanan işlevlerdir, ancak biz onları yaratıyoruz! Yalnızca kendimizi tanımladığımız işlevleri kullanabiliriz.

Daha sonraki bölümlerde kendi C kütüphanemizi (glibc, bionic, newlibc) ama zaman zaman nasıl koyacağımızdan bahsedeceğim. Ekrana metin koymak istediğimizi konuştuk, nasıl yaptığımızı göreceğiz.

İki seçenek vardır, biri BIOS diğeri ise ekran belleğini doğrudan yönetmektir. İkincisini yapacağız çünkü C'den daha net ve aynı zamanda korumalı moda girdiğimizde bunu yapmamıza izin verecek.

Aşağıdaki içeriğe sahip NextKernel_Main.c adlı bir dosya oluşturuyoruz:

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

Bununla doğrudan hafızayı manipüle ediyoruz VGA ve karakter karakter yazıyoruz. Stdlib'i devre dışı bırakarak derliyoruz:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Bu kadar ileri gittiyseniz, yepyeni işletim sisteminizi şimdi denemek isteyeceksiniz, ancak henüz bitirmedik. Derleyiciye her bölümü dosyanın neresinden ayrılacağını söyleyen küçük bir dosyaya ihtiyacımız var. Bu, bir bağlayıcı komut dosyasıyla yapılır. Link.ld oluşturuyoruz:

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

Bununla, her bölümün konumunu ve kernel.asm'da tanımladığımız başlangıç ​​noktasını, yani başlangıç ​​noktasını tanımlarız. Şimdi tüm bu karışımı birleştirebiliriz:

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

Şimdi START.ELF'i işletim sistemimizin kökünü simüle eden klasörümüzün içinde / next'e kopyalıyoruz. Konsol ile yeni işletim sistemimizin kök klasörüne gidip iki dosya olduğunu doğruluyoruz: bir /boot/grub/grub.cfg ve diğeri /next/START.ELF.

Üst dizine gidiyoruz ve GRUB adlı bir ISO oluşturma yardımcı programını çağırıyoruz. grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Bunu yaptıktan sonra bir ISO. Bu ISO bilgisayarlarda açılabilir x86 (64 bit de) ve sanal makineler. Test etmek için kullanacağım QEMU. Biz ararız QEMU komut satırından:

qemu-system-i386 nextdivel.iso

Başlayacak Deniz BIOS'u ve sonra sahip olacağız GRUB. Daha sonra her şey doğruysa ifademizi göreceğiz.
Bunun zor olduğunu düşüneceksin, sana cevap veriyorum, evet öyle.

Gerçekten bir işletim sistemi oluşturmak zordur ve buradaki bu işletim sistemi yararlı hiçbir şey yapmaz. Gelecek bölümlerde ekrandaki renkleri nasıl kullanacağımızı, hafızayı nasıl ayıracağımızı ve eğer yapabilirsem klavyeden nasıl veri alacağımızı göreceğiz.

Birisi her şeyi burada kopyalamak istemiyorsa, şu adreste bir depom var: GitHub (daha ayrıntılı) işletim sistemiyle SonrakiDivel. Derlemek istiyorsanız SonrakiDivel sadece git ve cmake yapmalısın:

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

Bir işletim sistemi oluşturmak için zamanınız ve arzunuz varsa, NextDivel üzerinde işbirliği yapmanızı tavsiye ederim. Belki Linux'tan bile üstün ... zaman gösterecektir.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   ela dijo

    :O

    1.    Marianogaudix dijo

      Torvalds, Minix işletim sistemini (UNIX'ten türetilmiştir) Andrew S. Tanenbaum'a aldı ve geliştirdi.

      Tanenbaum, Linus ile kavga etti, birbirlerine hakaret ettiler. Tanenbaum, Microkernel'in gelecek olduğunu söylüyor (HURD, Minix yeni koni Microkernel).

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

  2.   eliotime3000 dijo

    Bu, bu blogda şimdiye kadar gördüğüm en iyi gönderi oldu. Zaten başka ne yapacağımı bilmek istiyorum.

  3.   Carlos Gude dijo

    Etkilenin

  4.   axl dijo

    Gerçekten etkileyici!!

  5.   Rhoconlinux dijo

    FUUUUUUA!
    Bu şimdiye kadar gördüğüm en geeki gönderi. Tebrikler Adrián, bir fahişe yazısı! hiper ilginç !!! 🙂

    1.    Joaquin dijo

      Katılıyorum. Bu durumu hayal ediyorum:
      GNU / Linux Power User (mutlu bir yüzle):
      "Gentoo'mu nasıl derleyeceğimi zaten biliyorum"

      Nerd (küçümseyerek): «pff, kendi dağıtımımı yarattım ...»

      1.    Desikoder dijo

        Evet, kendi linux dağıtımımı oluşturabilirim. Aslında içinde bir initramfs ve gömülü linux için bir çekirdek geliştiriyorum. Bir işletim sistemi oluşturmak, Linux dağıtımıyla aynı şey değildir. Birincisi çok daha zor, neredeyse imkansız, ikincisi, dediğiniz gibi her şey olabilir, hatta xD logolu Ubuntu bile olabilir. Bu yüzden bunu şöyle bırakırdım:

        GNU / Linux Power User (mutlu bir yüzle)
        - Gentoo'mu nasıl derleyeceğimi zaten biliyorum

        Yarı Nerd
        - Pff, sıfırdan bir linux takip ettim ve kendi dağıtımımı yaptım

        Nerd (aşağılayıcı tavırla)
        - pff, çünkü assembler'da ve C'de bir çekirdek programladım

        Saludos!

  6.   kronlar dijo

    Bu benim için ilginç, sonraki bölümleri beklerken.

  7.   Abimaelmartell dijo

    Bu öğreticiyi bir süre önce görmüştüm, C ++ için
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoSokak dijo

      Bağlantı için teşekkürler, ona bir göz atacağım.

  8.   Jose Jácome dijo

    AMD grafikleriyle% 100 uyumlu bir İşletim Sistemi istiyorum: /

    1.    ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        Windows Catalyst'te hahaha'nın OpenGL desteği yoktur, ancak Linux'ta tüm grafik gücünü kullanamıyorum, ne olacağını görmek için beklemeye devam edeceğim!

        1.    beny_hm dijo

          sadece vananın piyasayı yok etmesini bekleyin

  9.   KZKG ^ Gaara dijo

    Büyülü, mükemmel, mükemmel katkı, harika bir yazı dizisi gibi görünüyor 🙂

  10.   O_Pixote_O dijo

    Buah, öğrendiğiniz ve yardım ettiğiniz bilgiyle pratik yapmanın bir yolu olarak, size yardımcı olmak için nasıl programlanacağını bilmek istiyorum. Şimdilik, projeyi bitirdiğinizde projeye dikkat çekmek için bir slogan bırakıyorum "NextDivel'i kullanın, porno aynı (veya daha iyi) görünüyor.", XD'yi süpüreceksiniz.

  11.   bu isim yanlış dijo

    Mooooooolaaa !!!!

  12.   Nordri dijo

    Çok güzel bir makale, ama neden Linux From Scratch projesini takip etmediğinizi merak ediyorsunuz?

    selamlar

    1.    AdrianArroyoSokak dijo

      Pekala, Scratch'ten Linux iyi ve onun sizin olduğunu söyleyebilirsiniz, ama gerçekten çok mekanik:
      -Yazı tiplerini indirin
      -Patch onları
      Derleme
      -Yüklemek
      -Takip etme
      Burada sonuç daha kötü olsa bile tüm dosyaları incelediğinizi söyleyebilirsiniz.

    2.    Desikoder dijo

      Önceki yorumumdan da anlaşılacağı gibi, çünkü aynı karmaşıklık seviyesine sahip değil. Üstelik, sıfırdan linux gerçekten, isminin tersine, sıfırdan bir sistem yaratmak değildir.Bir sistemi sıfırdan yaratmak, linux çekirdeğini değil, mümkünse grub yerine kendi bootloader'ınızı bile kendi başınıza programlamaktır, kendi çekirdeğinizi yazmaktır. lilo, syslinux vb. Bir LFS küçük bir başarı olmasa ve oldukça karmaşık olsa da, kendi çekirdeğinizi programlamaya yaklaşmaz bile ...

      Ek olarak, AdrianArroyo Calle ile bunun çok mekanik olduğu konusunda hemfikirim, bir ara okudum ve sonunda altıncı sayfada vazgeçiyorsunuz, ayrıca size paketlerin hangi sürümlerini kullanmanızı söylüyorlar çünkü aksi halde talimatlar çalışmıyor (bu esneklik eksikliğini gösteriyor , Bence ). Kendi fikrinize sahip olmanın, istediğiniz paketleri derlemenin, hatta bazılarını programlamanın, bir linux çekirdeği derlemenin ve huzur içinde olmanın daha iyi olacağını düşünüyorum.

      Saludos!

  13.   kurabiye dijo

    uuuoooohh !! Hiç bu kadar çok gönderi almadım.
    Lütfen devam edin 😀

  14.   linux_user dijo

    Neyin yanlış olduğunu bilmiyorum:

    hata: çoklu önyükleme başlığı bulunamadı.
    hatası önce çekirdeği yüklemeniz gerekir

    1.    AdrianArroyoSokak dijo

      Teselli olacaksa, ben de aynı hatayı yaptım. GitHub'da bulunan kaynakları kullanmayı deneyin, orada hata zaten çözüldü. Her neyse, grub.cfg'deki "multiboot /next/START.ELF" satırını "kernel /next/START.ELF" olarak değiştirirseniz işe yarayabilir. Ben tam olarak bilmiyorum.

      1.    Mcplatano dijo

        Her şeyden önce muhteşem giriş 🙂
        Grub'dan çekirdeği yüklerken de aynı sorunu yaşıyorum. GitHub kaynaklarını kullanırken veya çekirdek için çoklu önyüklemeyi değiştirirken bile ...

        hata: çoklu önyükleme başlığı bulunamadı.
        hata: yüklü çekirdek yok

        1.    AdrianArroyoSokak dijo

          Derleyici olarak clang mı kullanıyorsunuz? Gcc için değiştirin
          Bağlayıcı komut dosyasını kullanmayı hatırladınız mı? Bağlayıcının (bizim durumumuzda ld) dosyanın her şeyi nereye koyacağını bilmesi için gereklidir. Bu durumda, çoklu önyükleme başlığı başlangıçta olmalıdır.
          CMake sistemini kullanıyor musunuz? Eğer kullanırsan başarısız olmayacağını düşünüyorum.
          İşe yaramazsa, başka bir çözüm bulmaya çalışacağım.

  15.   Khourt dijo

    [+100]
    Harika !!!

  16.   invisible15 dijo

    Gerçekten harika 🙂

  17.   tanraks dijo

    Şapkamı çıkarıyorum. Etkileyici gönderi. Tebrikler.

  18.   adam dijo

    Vay!
    HTML5 ve Javascript ile yapılmış uygulamaları tarayıcı kullanmak zorunda kalmadan açabilseniz harika olur, bu mümkün mü?
    Yerel uygulamalar gibi olmalarından bahsediyorum.
    Dolayısıyla bu işletim sistemi için programlamak kolay olacaktır 😀

    1.    AdrianArroyoSokak dijo

      Bu durumda yapmayacağım çünkü arkasında çok daha fazla iş gerekiyor ama sizin söylediklerinizi yapan "is" adlı bir işletim sistemi var. Aslında komut satırı JavaScript'tir ve pencereler JavaScript Canvas işlevleri kullanılarak çizilir. Nintendo mühendisleri yaptı ve şimdi açık kaynak.

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

      1.    adam dijo

        Valla, bilgi için teşekkürler 😀
        Bir bakacağım

  19.   Patodx dijo

    Kendi işletim sistemini yapabilen herkes barışçıl bir şekilde ölebilir, çünkü bununla ulaşmak zorunda olduğu entelektüel düzey; Cennetten veya cehennemden vazgeçmenizi sağlar.
    Gönderi parçası.

    1.    Miguel dijo

      Şimdiye kadar hiç kimse sadece sıfırdan yapılmış düzgün bir işletim sistemi olduğu söylenebilecek bir şey yaptı, başlangıçta söylediğin gibi Linux Torvalds bile, çünkü bu Unix kaynaklarından başladı ve diğer her şey birden fazla kişi için ortak olan, hayat çok kısadır ve sıfırdan başlamak kimse için düşünülemez, tersi istense bile, Linux Torvalds tarafından kopyalama ve yapıştırma sırasında yapılan birçok hatada kanıtlanabilir.

      1.    Skarmiglione dijo

        Unix kaynakları kapalı, minix kullanımı ... ki bu başka bir şey.

      2.    felipe robaina dijo

        ve QDOS'u yapanlar ne?
        bir şeye mi dayanıyordu?

  20.   Tesla dijo

    Gördüğüm kadarıyla, kendi işletim sistemine sahip olmayanlar istemedikleri içindir, hahahaha.

    Şimdi cidden, çok ilginç! Sınırlı programlama bilgimin çok ötesinde, ancak bu dizinin diğer bölümlerini hevesle okuyacağım.

    Gönderi için teşekkürler!

  21.   Manuel R. dijo

    Beni bir O_O yüzüyle bıraktın ... kimsenin katkılarını küçümseme niyeti olmadan, son zamanlarda gördüğüm en "profesyonel" bu. Saygılarımızla.

  22.   aitor_cz dijo

    Çok güzel makale Adrián. Lütfen devam edin…

  23.   mj dijo

    Nisan Bir Şakası Günü'nde dalga mı geçiyorsunuz? "Linus Torvalds'ı Taklit Etmek: Kendi işletim sisteminizi sıfırdan oluşturun." Bazı teknoloji enstitülerinde veya üniversitelerde kariyer yapmak isteyenler için zor olduğunu düşünmüyorum; ama benim için acemi bir okçuyum (bize "Çaylak" diyenler var ama ben kendimi daha çok tembel bir Çaylak olarak görüyorum), bu karaya adım atmamak gibi geliyor. Her neyse, BU MAKALE BÜYÜK BİR MERAK YARATIR VE EDİTÖRÜNE, TEBRİKLERİNE SAYGI VE KABUL OLMADAN; Yapacağım ilk şey, bu değerli malzemeden en azından birazını anlamaya çalışmak.
    TEŞEKKÜRLER Adrian Arroyo Calle, mükemmel iş ve asil bilgi aktarımı.

  24.   Blaire pascal dijo

    LEL Mükemmel gönderi, devam edin.

  25.   f3niX dijo

    Ne kadar güzel bir yazı, kaçırdığım şey bu desde linux. Müthiş.

  26.   Yakut dijo

    Harika gönderi, çok teşekkür ederim.
    Link.ld dosyasının ne yaptığını anlamadım, birisi bunu bana açıklayabilir mi?

    1.    AdrianArroyoSokak dijo

      Link.ld dosyası, bağlayıcıya (bu durumda ld) sonuç dosyasında kodun her bir parçasının nerede olması gerektiğini söyler. Bir işletim sistemimiz olmadığı için normal bir program olarak main kullanamayacağımız için giriş noktasını da tanımlıyoruz, bu durumda başlangıç ​​fonksiyonunu seçiyoruz.

  27.   maksi dijo

    Tüm gönderileriniz harika! 7'yi bekliyorum! Ya bir şüphem varsa, örneğin, işletim sistemi olmadan sadece bir algoritma çalıştırmak istersem, neyi kullanıp C'yi kullanamayacağımı nasıl bilebilirim?

    1.    AdrianArroyoSokak dijo

      Eğer bu şekilde kullanırsanız, stdlib'den herhangi bir şey kullanamazsınız, pratik olarak herkesin kullandığı şeydir (malloc, free, printf, scanf, strcmp, vb.). Her şey doğrudan bellekten veya ASM'den uygulanmalıdır. Belki daha yüksek bir bölümde size işletim sistemi için bir C kitaplığının nasıl kurulacağını göstereceğim. C ++ kullanıyorsanız, istisnaları ve yeni ve silme operatörlerini (ve kesinlikle daha fazlasını) kullanamazsınız.

    2.    swicher dijo

      bence bu nasıl yapılacağı konusunda size daha iyi bir fikir verebilir.

  28.   Esteban dijo

    Merhabalar, yaklaşık 5 yıl önce benzer bir yayını takip ettim ve aynı şekilde başlayan bir mikro çekirdek geliştirdim, geliştirmesi gereken bazı yönleri var ama ilginizi çekebilir, korumalı modda çalışıyor, çok görevli çalışıyor ve bellek sanallaştırma yapıyor, son zamanlarda ben Yüklenebilir hale getirmek için disk sürücüsü ve cd sürücüsü üzerinde çalıştı ve sadece canlı cd'de çalıştırılmadı ... Selamlar.

  29.   Johan dijo

    Sevgili, komutu çalıştırırken bir hatam var:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 sözdizimi hatası
    Collect2: hata: ld 1 çıkış durumu döndürdü

    bağlantı.ld
    . = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    5. satırda hatayı görmüyorum, biri aynı mı?

    Virtualbox'ta sanallaştırılmış bir debian wheezy ile çalışıyorum

    1.    Julian Reyes Escrigas bilgi alanı resmi dijo

      ekle ";" * (. multiboot_header) sonunda

  30.   Eric Orellana Romero dijo

    Harika bir girişim, ondan çok şey öğrenmek niyetiyle bu yazının bölümlerini kesinlikle takip edeceğim. Bize öğretmek için zaman ayırdığınız için çok teşekkür ederim. Bu bağlamda tek bir ayrıntı, Linus Torvalds'ın herhangi bir işletim sisteminin yaratıcısı olmadığı, GNU / Linux sisteminin Kernel'ini (başka bir işletim sisteminde kullanılmış olan) yarattığı unutulmamalıdır ki bu hala değerlidir. ancak İşletim Sisteminin çoğunu oluşturduğu için Richard Stallman'a itibar etmek önemlidir.

    Giriş için çok teşekkür ederim ve umarım benim gözlemimi dikkate alırsın.

  31.   Julian Reyes Escrigas bilgi alanı resmi dijo

    Bir süredir konuyla uğraşıyorum, manşeti okur okumaz ilgimi çekiyor. ama mesaj almaya devam ediyor

    hata: çoklu önyükleme başlığı bulunamadı.
    hatası önce çekirdeği yüklemeniz gerekir

    Aldığım şeyi github'daki bir depoya yükledim https://github.com/rkmax/GenyOS

    1.    martin villalba dijo

      Aynı şey bana da oluyor Çözümü buldunuz mu?

  32.   Carlos dijo

    sözdizimini tanıtmaya başladığım bir soru ve menü giriş satırı bana kimin nedenini söyleyebileceğini bilmediğini söylüyor
    bu benim işim

    SİYAH @ SİYAH-pc: ~ / blackroot $ menuentry «SonrakiDivel» {
    menuentry: komut bulunamadı

    1.    AdrianArroyoSokak dijo

      Bu içeriğin içeriği komut satırına değil, oluşturduğunuz grub.cfg adlı dosyaya girilmelidir.

  33.   nodetino dijo

    Harika makale, teşekkürler!

  34.   David dijo

    Muhteşem…!! tıpkı kayıp halka gibi.

  35.   r.garciag dijo

    Taklit LInus Torvalds öğreticilerinizi seviyorum, ancak anlamadığım bir adım var, şunlar:
    Şimdi START.ELF'i işletim sistemimizin kökünü simüle eden klasörümüzün içinde / next'e kopyalıyoruz. Konsol ile yeni işletim sistemimizin kök klasörüne gidip iki dosya olduğunu doğruluyoruz: bir /boot/grub/grub.cfg ve diğeri /next/START.ELF.

    Üst dizine gidiyoruz ve ISO'lar oluşturmak için grub-mkrescue adlı GRUB ile bir yardımcı program çağırıyoruz

    Biri bana açıklayabilir mi: p

    1.    AdrianArroyoSokak dijo

      Basitçe GRUB'un yükleyebileceği minimum bir ISO oluşturmak için çekirdeği (ISO'nun /, herhangi bir klasör) /next/START.ELF ve GRUB yapılandırma dosyasını (ISO'nun / herhangi bir klasör) / boot / grub / grub.cfg. Bunu yaptıktan sonra, GRUB'u ISO'ya henüz kurmadık ve ISO'yu bir klasörden üreten ve grub-mkrescue adlı GRUB'u kuran bir yardımcı program var. Ardından, sonunda, daha sonra START.ELF'i doğru bir şekilde çalıştırmak için yapılandırmayı okuyabilen, GRUB'un kurulu olduğu önyüklenebilir bir ISO ile sonuçlanırdık. Kendimi açıklamış mıyım bilmiyorum ama yaptığımız şey bir ISO oluşturduğumuz bir tür yanlış dosya sistemi.

  36.   miguel jose guevara dikkat dijo

    Buenísimo

  37.   Michael Moreno dijo

    Pekala, gerçekten yeni bir sisteme bakmayın, ancak linux'u iyileştiriyorsanız, örneğin istenirse bir mikro çekirdek görevi gören bir sunucu bileşeniyle bir linux eksonükleusu, yani süper ve linux olacak mikronükleus davranışına sahip bir ekso yapısı oluşturuyorsa.

    Diğer bir şey de programlama konusunda uzman değilim, sadece birkaç sevimsiz c ++ ve biraz java, linux çekirdek programına bir modül vermem, onu çıkartmam, onu değiştirmem vb. Yeterli olacaktır.

  38.   KışAsker53 dijo

    Şüphesiz zaten tatilde yapmak zorundayım.

  39.   Fermin dijo

    Bu iyi olanı ve hangi programda tasarlayıp kodluyorsunuz?
    lütfen bana o cevabı ver

  40.   Karanlık zihin dijo

    Gitinizden derlerken şunları elde ederim:

    [jmponce @ jar build] $ cmake ..
    - NextRoot dizini oluşturma
    - ISO betiği oluşturma
    DESTDIR = sonraki kurulum yap
    ./iso.sh
    - Doxygen bulundu: / usr / bin / doxygen ("1.8.9" sürümünü bulundu)
    - Yapılandırma tamamlandı
    - Oluşturma tamamlandı
    - Derleme dosyaları şu konuma yazılmıştır: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    START.ELF hedefinin bağımlılıkları taranıyor
    [% 7] ASM-ATT nesnesi src / CMakeFiles / START.ELF.dir / start / boot.asm.o oluşturuluyor
    [% 14] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [% 21] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [% 28] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [% 35] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [% 42] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [% 50] CXX nesnesi derleniyor src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [% 57] CXX nesnesi src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o oluşturuluyor
    [% 64] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [% 71] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [% 78] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [% 85] CXX nesnesi oluşturuluyor src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [% 92] CXX nesnesi derleniyor src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [% 100] CXX nesnesi derleniyor src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    CXX çalıştırılabilir START.ELF bağlantısının oluşturulması
    / usr / bin / ld: -lgcc aranırken uyumsuz /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a atlandı
    / usr / bin / ld: -lgcc bulunamıyor
    Collect2: hata: ld, çıkış durumu 1'i döndürdü
    src / CMakeFiles / START.ELF.dir / build.make: 402: 'src / START.ELF' hedefi için talimatlar başarısız oldu
    make [2]: *** [src / START.ELF] Hata 1
    CMakeFiles / Makefile2: 106: 'src / CMakeFiles / START.ELF.dir / all' hedefi için talimatlar başarısız oldu
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Hata 2
    Makefile: 117: 'tümünü' hedefleme talimatlarında hata
    make: *** [tümü] Hata 2

    1.    AdrianArroyoSokak dijo

      Hata, 64 bit sürümüne sahip olduğunuz ve şu anda yapı sistemi 32 bit kullanmaya zorlandığı için llibgcc'yi bulamaması gibi görünüyor. Dağıtımınıza bir uyumluluk paketi yüklemelisiniz veya daha iyisi, 32 bitlik bir sistem kullanın.

      1.    ronaldo rodriguez dijo

        32 bitim var ve aynı hata görünüyor, işletim sistemini mi yoksa mimariyi mi kastediyorsunuz? benimki 64 Bit, ancak 32 bit Ubuntu kullanıyorum, sorma, finansal sorunlar, bununla hepsini söylüyorum.

  41.   Jorge dijo

    Mükemmel konu, daha fazla kapsam bekliyor. Şerefe

  42.   Jhon dijo

    Daha fazlasını umuyorum

  43.   Soid perez dijo

    Merhaba, geliştiricilerin bir bilgisayarda güçlü makinelere, uygulamalara veya programlara sahip olmak zorunda kalmaması için tüm programları ve platformları destekleyen bir işletim sistemi oluşturmak isteyen genç bir elçiyim.
    bu yüzden bu gönderiyle ilgileniyorum ama git'ini indirdiğimde veya oluşturmaya çalıştığımda, ./iso.sh veya grub-mkrescue -o nextdivel.iso nextroot komutunu çalıştırana kadar her şey yolunda gidiyor bu hatayı alıyorsun

    "Grub-mkrescue: uyarı: xorriso'nuz" –grub2-boot-info "özelliğini desteklemiyor. Bazı özellikler devre dışı bırakıldı. Xorriso 1.2.9 veya üzerini kullanın ..
    grub-mkrescue: uyarı: xorriso'nuz "–grub2-boot-info" 'yu ​​desteklemiyor. Çekirdek görüntünüz çok büyük. Disk önyüklemesi devre dışı bırakıldı. Xorriso 1.2.9 veya üzerini kullanın .. »
    Uygulamalar ve webler hakkında çok şey bildiğim için hiçbir fikrim yok ama grub hakkında hiçbir şey bilmiyorum

    1.    AdrianArroyoSokak dijo

      Dağıtımınızdaki xorriso programını güncellemeniz gerekebilir. Hangi dağıtım ve sürümü kullanıyorsunuz?

      1.    Soid perez dijo

        Xubuntu 14.04lts kullanıyorum ve xorriso'yu çalıştırmaya çalışıyorum ancak kabuk bana onu bulamadığını söylüyor ve içtenlikle bazı yanıtlar beklememe rağmen apt-get install xorriso alıyorum çünkü linux hehe'de bilmediğim şeyleri yüklerken kötü bir deneyim yaşadım . Şimdi güncelleyeceğim ve ne olduğunu anlatacağım

      2.    AdrianArroyoSokak dijo

        Ardından xorriso'yu yazılım merkezinden veya basitçe terminalden "sudo apt-get install xorriso" yapın

      3.    Soid perez dijo

        Bana söylediğin her şeyi zaten yaptım ve hem git hem de benimkiyle bu xorriso 1.3.2'yi elde ediyorum: RockRidge dosya sistemi manipülatörü, libburnia projesi.

        Sürücü akımı: -outdev 'stdio: nextdivel.iso'
        Medya akımı: stdio dosyası, üzerine yazılabilir
        Medya durumu: boş
        Medya özeti: 0 oturum, 0 veri bloğu, 0 veri, 1901m ücretsiz
        ISO görüntüsüne eklendi: dizin '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 saniyede 1 dosya eklendi
        xorriso: FAILURE: '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot' kaynak dosyasının öznitelikleri belirlenemiyor: Böyle bir dosya veya dizin yok
        xorriso: UPDATE: 546 saniyede 1 dosya eklendi
        xorriso: durduruluyor: -abort_on 'FAILURE', 'FAILURE' ile karşılaştı
        ve fitilli kadife Yapımın /nextroot/boot/grub/grub.cfg ve nextroot / next / START.ELF olduğunu anlamıyorum

      4.    Soid perez dijo

        Teşekkürler, ilerlemeye hazırım, bir arkadaşım bana yardım etti ve yanlış yaptığım şeyin dizinin organizasyonu olduğunu söyledi, bu yüzden onu ayarladım ve hepsi bu

      5.    erik dijo

        Afedersiniz, hatayı aldığımdan beri hangi prosedürü gerçekleştirdiğinizi söyleyebilir misiniz, önyükleme yapacak bir şey yok: böyle bir dosya veya dizin yok

        Önyükleyici aygıtı yok.

  44.   jose dijo

    Şerefe! Burada açıkladığınız şeyle bana bir e-posta gönderebilirseniz, sizden bir iyilik isteyecektim, biraz kafam karıştı ve elimde olanı açıkladığınız şeyle karşılaştırmam gerekiyor, belki de benim için net olmayan şey, grub. cfg'nin oluşturulması gcc terminalinde veya tam olarak nerede yapılır? çok teşekkür ederim arkadaşım!

    1.    AdrianArroyoSokak dijo

      Grub.cfg dosyasını herhangi bir metin düzenleyici ile oluşturursunuz ve onu PROJECT_FOLDER / boot / grub / grub.cfg içine kaydetmelisiniz.

  45.   jhuazano dijo

    Merhaba Adrian, öncelikle sizi tebrik eder ve katkılarınız için teşekkür ederim.

    Bunu bir uygulama için yaptığımı biliyorsunuz ve dersinizin ardından bir araya getirmeye başladım, ancak başladıktan sonra ilk hatayı buldum

    $ olarak -o kernel.o -c kernel.asm
    bash: as: komut bulunamadı ...
    Benzer komutlar şunlardır:
    'sa'
    'AC'

    Fedora 20 üzerinde çalışıyorum ve bu konuda bir çözüm bulamıyorum, gcc veya gas'da bir şeyi değiştirmem gerekip gerekmediğine dair rehberliğiniz için teşekkür ederim.

    şimdiden teşekkürler

    1.    AdrianArroyoSokak dijo

      Hata kodunu görebilmem için GAS'ı yüklemelisiniz. Elimde bir Fedora yok, ancak teoride yum, gcc-c ++ 'ı kurarsanız, GCC paketinin tamamını ve GNU'yu yüklersiniz.

  46.   Gaston Ramirez dijo

    Seninleyim, C ++, C # hakkında bir şeyler biliyorum (bu sonuncusu bu konuda pek yararlı olmasa da) kötü olan şey, hala deneyimsiz olmam, C dilini asla kullanmıyorum, yayınınız harika, söyleyecek çok şeyim yok, eğer zamanım varsa görüyorum Teşekkür ederim.

  47.   Teresita del isa nah sanchez dijo

    Yardımınız için çok teşekkür ederim….

  48.   huysuz dijo

    Linux'u seviyorum, burası en iyi bölge, pencerelerim için gerçek şu ki, linux'un yaratıcısının pencerelerin yaratıcısı olduğunu biliyorum.

  49.   Rode dijo

    Merhaba grub'da bir hata alıyorum diyor
    hata: file /next/START.ELF Bulunamadı
    hata: önce çekirdeği yüklemeniz gerekir

    Bana yardım edebilir misin ve Google'da arar mısın ama bulamıyorum

  50.   Henry Avila dijo

    Lütfen HELLO WORLD mesajının gösterilmesini nasıl sağlayabilirim, ben bir acemiyim ve hala yeterince bilmiyorum

  51.   CARLOS GUERRERO ALVAREZ dijo

    Bana şu şeyler oluyor:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: simge yığınına karşı yeniden konumlandırma R_X86_64_32, bir PIE nesnesi oluştururken kullanılamaz; -fPIE ile yeniden derleyin
    / usr / bin / ld: son bağlantı başarısız oldu: çıktıda temsil edilemeyen bölüm
    Collect2: hata: ld 1 çıkış durumu döndürdü