Öncelikle, bunun ilk makalem olduğunu ve umarım beğeneceğinizi söyleyin.
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.
:O
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
Bu, bu blogda şimdiye kadar gördüğüm en iyi gönderi oldu. Zaten başka ne yapacağımı bilmek istiyorum.
Etkilenin
Gerçekten etkileyici!!
FUUUUUUA!
Bu şimdiye kadar gördüğüm en geeki gönderi. Tebrikler Adrián, bir fahişe yazısı! hiper ilginç !!! 🙂
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 ...»
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!
Bu benim için ilginç, sonraki bölümleri beklerken.
Bu öğreticiyi bir süre önce görmüştüm, C ++ için
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Bağlantı için teşekkürler, ona bir göz atacağım.
AMD grafikleriyle% 100 uyumlu bir İşletim Sistemi istiyorum: /
Windows
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!
sadece vananın piyasayı yok etmesini bekleyin
Büyülü, mükemmel, mükemmel katkı, harika bir yazı dizisi gibi görünüyor 🙂
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.
Mooooooolaaa !!!!
Çok güzel bir makale, ama neden Linux From Scratch projesini takip etmediğinizi merak ediyorsunuz?
selamlar
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.
Ö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!
uuuoooohh !! Hiç bu kadar çok gönderi almadım.
Lütfen devam edin 😀
Neyin yanlış olduğunu bilmiyorum:
hata: çoklu önyükleme başlığı bulunamadı.
hatası önce çekirdeği yüklemeniz gerekir
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.
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
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.
[+100]
Harika !!!
Gerçekten harika 🙂
Şapkamı çıkarıyorum. Etkileyici gönderi. Tebrikler.
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 😀
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/
Valla, bilgi için teşekkürler 😀
Bir bakacağım
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ı.
Ş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.
Unix kaynakları kapalı, minix kullanımı ... ki bu başka bir şey.
ve QDOS'u yapanlar ne?
bir şeye mi dayanıyordu?
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!
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.
Çok güzel makale Adrián. Lütfen devam edin…
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ı.
LEL Mükemmel gönderi, devam edin.
Ne kadar güzel bir yazı, kaçırdığım şey bu desde linux. Müthiş.
Harika gönderi, çok teşekkür ederim.
Link.ld dosyasının ne yaptığını anlamadım, birisi bunu bana açıklayabilir mi?
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.
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?
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.
bence bu nasıl yapılacağı konusunda size daha iyi bir fikir verebilir.
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.
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
ekle ";" * (. multiboot_header) sonunda
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.
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
Aynı şey bana da oluyor Çözümü buldunuz mu?
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ı
Bu içeriğin içeriği komut satırına değil, oluşturduğunuz grub.cfg adlı dosyaya girilmelidir.
Harika makale, teşekkürler!
Muhteşem…!! tıpkı kayıp halka gibi.
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
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.
Buenísimo
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.
Şüphesiz zaten tatilde yapmak zorundayım.
Bu iyi olanı ve hangi programda tasarlayıp kodluyorsunuz?
lütfen bana o cevabı ver
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
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.
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.
Mükemmel konu, daha fazla kapsam bekliyor. Şerefe
Daha fazlasını umuyorum
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
Dağıtımınızdaki xorriso programını güncellemeniz gerekebilir. Hangi dağıtım ve sürümü kullanıyorsunuz?
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
Ardından xorriso'yu yazılım merkezinden veya basitçe terminalden "sudo apt-get install xorriso" yapın
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
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
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.
Ş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!
Grub.cfg dosyasını herhangi bir metin düzenleyici ile oluşturursunuz ve onu PROJECT_FOLDER / boot / grub / grub.cfg içine kaydetmelisiniz.
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
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.
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.
Yardımınız için çok teşekkür ederim….
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.
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
Lütfen HELLO WORLD mesajının gösterilmesini nasıl sağlayabilirim, ben bir acemiyim ve hala yeterince bilmiyorum
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ü