Pertama sekali, komen bahawa ini adalah artikel pertama saya dan saya harap anda semua menyukainya.
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.
:O
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
Ini adalah catatan terbaik yang pernah saya lihat selama ini di blog ini. Saya sudah mahu tahu apa lagi yang perlu dilakukan.
Kagum
Betul-betul mengagumkan !!
FUUUUUUA!
Ini adalah catatan geekiest yang pernah saya lihat hehe. Tahniah Adrián, artikel pelacur! hiper menarik !!! 🙂
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 ...»
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!
Ini menarik bagi saya, sementara menunggu bab-bab berikut.
Saya melihat tutorial ini beberapa waktu yang lalu, ini adalah untuk C ++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Terima kasih kerana pautan, saya akan melihatnya.
Saya mahukan Sistem Operasi 100% serasi dengan grafik AMD: /
Windows
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!
tunggu sahaja injap menghapuskan pasaran
Sokongan ajaib, sempurna, sangat baik, ia kelihatan seperti siri catatan yang hebat 🙂
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.
Mooooooolaaa !!!!
Artikel yang sangat bagus, tetapi hanya ingin tahu mengapa anda belum mengikuti projek Linux From Scratch?
salam
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.
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!
uuuoooohh !! Saya tidak pernah merakam siaran seperti ini.
Sila teruskan 😀
Saya tidak tahu apa yang salah:
ralat: tidak terdapat tajuk multiboot.
ralat anda perlu memuatkan kernel terlebih dahulu
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.
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
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.
[+100]
Cukup hebat !!!
Ia sungguh sejuk 🙂
Saya menanggalkan topi saya. Catatan yang mengagumkan. Selamat bertunang.
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 😀
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/
Valla, terima kasih atas maklumatnya 😀
Saya akan melihat
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.
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
Sumber unix ditutup, penggunaan minix ... yang lain.
dan mereka yang membuat QDOS apa?
berdasarkan sesuatu?
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!
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.
Artikel yang sangat bagus, Adrián. Sila teruskan…
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.
LEL Pos yang sangat baik, teruskan.
Entri yang bagus, inilah yang saya terlepas desde linux. Hebat.
Pos yang hebat, terima kasih banyak.
Saya tidak faham apa yang dilakukan oleh fail link.ld, bolehkah seseorang menerangkannya kepada saya?
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.
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?
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).
saya fikir ini ia dapat memberi anda idea yang lebih baik tentang cara melakukannya.
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.
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
tambah ";" pada akhir * (. multiboot_header)
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.
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
Perkara yang sama berlaku kepada saya. Adakah anda menemui jalan penyelesaiannya?
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
Isi kandungan ini tidak boleh dimasukkan dalam baris perintah, tetapi dalam file yang Anda buat disebut grub.cfg
Artikel yang sangat baik, terima kasih!
Spektakuler… !! ia seperti pautan yang hilang.
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
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.
Hebat
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.
Tanpa keraguan, saya sudah mula bercuti.
Ini bagus dan dalam program apa rancangan dan kodnya?
tolong beri saya jawapan itu
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
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.
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.
Topik yang bagus, menunggu skop yang lebih besar Sorakan
Hebat saya berharap untuk lebih banyak lagi
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
Anda mungkin perlu mengemas kini program xorriso di distro anda. Distro dan versi apa yang anda gunakan?
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
Kemudian pasang xorriso dari pusat perisian atau hanya dari terminal lakukan "sudo apt-get install xorriso"
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
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
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.
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!
Anda membuat fail grub.cfg dengan mana-mana penyunting teks dan anda mesti menyimpannya di PROJECT_FOLDER / boot / grub / grub.cfg
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
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.
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.
Terima kasih banyak atas pertolongan hebat….
Saya suka linux, ini adalah daerah terbaik di sana, kebenaran untuk tingkap saya adalah sampah yang saya tahu bahawa pencipta linux adalah pencipta tingkap
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
Tolong, bagaimana saya membuatnya menunjukkan mesej HELLO WORLD? Saya seorang pemula dan saya masih belum cukup tahu
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