În primul rând, comentează că acesta este primul meu articol și că sper să vă placă tuturor.
În această serie vom emula Linus Torvalds, vom crea sistemul nostru de operare de la 0. În acest prim episod vom vedea boot-ul și vom pune un text pe ecran din nucleul nostru.
În cazul meu se numește sistemul de operare NextDivel. Prima decizie pe care trebuie să o luăm imediat ce luăm în considerare sistemul de operare este ce va fi bootloader-ul?
Aici există mai multe variante și am putea chiar să creăm una singură; cu toate acestea, în acest tutorial voi folosi GRUB, pentru că majoritatea știu mai mult sau mai puțin ceva despre el. Creăm un folder care va fi rădăcina sistemului nostru de operare și acolo creăm folderul / boot / grub
mkdir nextroot && cd nextroot
mkdir -p boot/grub
Acolo creăm fișierul grub.cfg după cum urmează:
menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}
În acest fișier am văzut cum GRUB ne va încărca nucleul, în acest caz, în /next/START.ELF. Acum trebuie să ne creăm nucleul.
Pentru aceasta vom avea nevoie de CGC y GAS (asamblatorul proiectului GNU, vine de obicei cu gcc). Deci, vom crea nucleul.
Mai întâi realizăm un fișier numit kernel.asm. Acest fișier va conține punctul de plecare al nucleului nostru și va defini, de asemenea, multiboot (o caracteristică a unor bootloadere, cum ar fi GRUB). Conținutul kernel.asm va fi:
.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
Tot ce ține de multiboot este pur și simplu să nu mai urmezi specificațiile nimic. Totul va începe la început, va apela multiboot_entry, vom avea definit antetul multiboot în primele 4k și îl vom pune (cu movl).
Mai târziu numim NextKernel_Main care este funcția noastră de nucleu C. În buclă ne oprim pentru a opri computerul. Aceasta se compilează cu:
as -o kernel.o -c kernel.asm
Acum vom intra în programare în C. Vei crede că acum totul este o bucată de tort, punem un printf en principal și atât, am făcut-o.
Nu, de atunci printf y principal sunt funcții care sunt definite de sistemul de operare, dar le creăm! Putem folosi doar funcțiile pe care le definim noi înșine.
În capitolele ulterioare voi vorbi despre cum să punem propria noastră bibliotecă C (glibc, bionic, newlibc), dar din când în când. Am discutat că vrem să punem text pe ecran, bine vom vedea cum o facem.
Există două opțiuni, una este să apelați BIOS-ul iar un altul este să gestionați memoria de ecran direct. Vom face acest lucru din urmă, deoarece este mai clar de la C și ne va permite, de asemenea, să o facem atunci când intrăm în modul protejat.
Creăm un fișier numit NextKernel_Main.c cu următorul conținut:
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;
}
Cu aceasta manipulăm direct memoria VGA și caracter cu caracter, îl scriem. Compilăm dezactivând stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding
Dacă ați ajuns până acum, veți dori să încercați sistemul dvs. de operare nou-nouț acum, dar nu am terminat încă. Avem nevoie de un mic fișier care să îi spună compilatorului unde se află fișierul pentru a părăsi fiecare secțiune. Acest lucru se face cu un script linker. Creăm 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 = .;
}
Cu aceasta definim poziția fiecărei secțiuni și punctul de intrare, start, pe care le-am definit în kernel.asm. Acum putem uni toate aceste preparate:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
Acum copiem START.ELF în / următorul în folderul nostru care simulează rădăcina sistemului nostru de operare. Mergem în folderul rădăcină al noului nostru sistem de operare cu consola și verificăm dacă există două fișiere: unul /boot/grub/grub.cfg și altul /next/START.ELF.
Mergem în directorul superior și apelăm un utilitar de creare ISO cu GRUB numit grub-mkrescue
grub-mkrescue -o nextdivel.iso nextroot
Odată ce am făcut acest lucru, vom avea un ISO. Această ISO poate fi deschisă pe computere x86 (Și 64 de biți) și mașini virtuale. Pentru a-l testa, voi folosi QEMU. Noi sunam QEMU din linia de comandă:
qemu-system-i386 nextdivel.iso
Va incepe SeaBIOS și mai târziu vom avea GRUB. Mai târziu, dacă totul este corect, ne vom vedea fraza.
Veți crede că acest lucru este dificil, răspund, da, este.
Crearea cu adevărat a unui sistem de operare este dificilă și că acesta nu face nimic util. În capitolele viitoare vom vedea cum să gestionăm culorile pe ecran, să rezervăm memorie și dacă pot, cum să obținem date de la tastatură.
Dacă cineva nu vrea să copieze totul aici, am un depozit la GitHub (mai elaborat) cu sistemul de operare NextDivel. Dacă doriți să compilați NextDivel trebuie doar să ai git și 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
Vă încurajez să colaborați la NextDivel dacă aveți timp și dorința de a crea un sistem de operare. Poate chiar superior Linux ... timpul ne va spune.
:O
Torvalds a dus sistemul de operare Minix (derivat din UNIX) către Andrew S. Tanenbaum și l-a îmbunătățit.
Tanenbaum s-a luptat cu Linus, s-au insultat reciproc. Tanenbaum spune că Microkernel este viitorul (HURD, Minix nou con Microkernel).
http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html
Aceasta a fost cea mai bună postare pe care am văzut-o până acum pe acest blog. Vreau deja să știu ce să mai fac.
A fi impresionat
Chiar impresionant !!
FUUUUUUUUA!
Este cel mai geek post pe care l-am văzut vreodată hehe. Felicitări Adrián, un articol de curvă! hiper interesant !!! 🙂
Sunt de acord. Imi imaginez aceasta situatie:
Utilizator avansat GNU / Linux (cu o față fericită):
„Știu deja cum să-mi compilez Gentoo”
Tocmai (disprețuitor): «pff, mi-am creat propria distribuție ...»
Da, îmi pot crea propria distribuție Linux. De fapt, în el dezvolt un initramfs și un kernel pentru Linux încorporat. Nu este același lucru să creezi un sistem de operare decât un Linux distro. Primul este mult mai dificil, aproape imposibil, al doilea, după cum ați spus, poate fi orice, chiar și Ubuntu cu sigla xD schimbată. Deci aș lăsa așa:
Utilizator avansat GNU / Linux (cu o față fericită)
- Știu deja cum să-mi compilez Gentoo
Semi-tocilar
- Pff, am urmărit un Linux de la zero și mi-am făcut propria distribuție
Tocmai (cu atitudine disprețuitoare)
- pff, pentru că am programat un nucleu în asamblator și în C
Salutări!
Acest lucru este interesant pentru mine, în așteptarea următoarelor capitole.
Am văzut acest tutorial în urmă cu ceva timp, este pentru C ++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Mulțumesc pentru link, o să mă uit la el.
Aș dori un sistem de operare 100% compatibil cu grafica AMD: /
ferestre din
hahaha în Windows Catalyst nu are suport OpenGL, deși în Linux nu pot folosi toată puterea grafică voi continua să aștept să văd ce se întâmplă!
așteptați doar ca supapa să elimine piața
Contribuție magică, perfectă, excelentă, pare o serie mare de postări 🙂
Buah Aș vrea să știu cum să programez pentru a vă putea ajuta, pur și simplu ca o modalitate de a exersa cu cunoștințele pe care le învățați și pe care o ajutați. Deocamdată vă las motto-ul de a atrage atenția asupra proiectului odată ce îl terminați „Utilizați NextDivel, porno arată la fel (sau mai bine).”, Veți mătura xD.
Mooooooolaaa !!!!
Articol foarte bun, dar doar curios de ce nu ai urmat proiectul Linux From Scratch?
În ceea ce priveşte
Ei bine, Linux de la Scratch este în regulă și poți spune că este al tău, dar este foarte mecanic:
-Descărcați fonturile
-Patch-le
-Compila
-Instalare
-Ca urmare a
Aici, deși rezultatul este mai rău în cele din urmă, puteți spune că ați examinat toate fișierele.
După cum reiese din comentariul meu anterior, deoarece nu are același nivel de complexitate. Mai mult, Linux de la zero nu este, contrar numelui său, crearea unui sistem de la zero. Crearea unui sistem de la zero înseamnă programarea dvs., scrierea propriului kernel, nu kernel-ului Linux, dacă este posibil chiar și propriul dvs. bootloader în loc de grub, lilo, syslinux etc. Deși un LFS nu este un lucru mic și este destul de complex, nici măcar nu se apropie de programarea propriului kernel ...
În plus, sunt de acord cu AdrianArroyo Calle că este prea mecanic, l-am citit cândva și ajungi să renunți la a șasea pagină, îți mai spun și tu să folosești ce versiuni ale pachetelor pentru că altfel instrucțiunile nu vor funcționa (că arată lipsa de flexibilitate, După părerea mea). Cred că este mai bine să ai ceva din ideea ta, să compilezi pachetele pe care le dorești, chiar să programezi unele, să compilezi un nucleu Linux și în pace.
Salutări!
uuuoooohh !! Nu am capturat niciodată o postare la fel de mult ca aceasta.
Vă rugăm să continuați 😀
Nu știu ce se întâmplă:
eroare: nu s-a găsit antet multiboot
eroare trebuie mai întâi să încărcați nucleul
Dacă este vreo mângâiere, am făcut aceeași greșeală. Încercați să utilizați sursele din GitHub, acolo eroarea este deja rezolvată. Oricum cred că dacă schimbați linia grub.cfg din „multiboot /next/START.ELF” în „kernel /next/START.ELF” s-ar putea să funcționeze. Nu știu exact.
În primul rând, intrare magnifică 🙂
Am aceeași problemă la încărcarea nucleului din grub. Chiar și folosind surse GitHub sau schimbând multiboot pentru kernel ...
eroare: nu s-a găsit antet multiboot
eroare: nu s-a încărcat nucleul
Folosești clang ca compilator? Schimbați-l pentru gcc
Ți-ai amintit să folosești scriptul linker? Este necesar, astfel încât linker-ul (ld în cazul nostru) să știe unde în fișier va pune fiecare lucru. În acest caz antetul multiboot trebuie să fie la început.
Folosiți sistemul CMake? Dacă îl folosești, cred că nu eșuează.
Dacă nu funcționează pentru dvs., voi încerca să găsesc o altă soluție.
[+100]
Perfect !!!
E tare mișto 🙂
Îmi scot pălăria. Post impresionant. Felicitări.
Wow!
Ar fi minunat dacă ați putea deschide aplicații realizate în HTML5 și Javascript fără a fi nevoie să utilizați un browser, este posibil?
Vorbesc despre faptul că sunt ca niște aplicații native.
Deci, ar fi ușor de programat pentru acest sistem de operare 😀
În acest caz, nu o voi face pentru că este nevoie de mult mai multă muncă în spate, dar există un sistem de operare numit „este” care face ceea ce spui. De fapt, linia de comandă este JavaScript, iar ferestrele sunt desenate folosind funcțiile JavaScript Canvas. Inginerii Nintendo au făcut-o și acum este open source.
http://code.google.com/p/es-operating-system/
Valla, mulțumesc pentru informații 😀
Voi arunca o privire
Oricine își poate crea propriul SO poate muri liniștit, de la nivelul intelectual pe care trebuie să-l atingă; Te face să renunți la cer sau iad.
Bucată de postare.
Până în prezent, nimeni nu știe să fi făcut doar ceva care se poate spune că este un sistem de operare decent creat de la zero, nici măcar Linux Torvalds așa cum spui la început, deoarece acest lucru a pornit din surse Unix și orice altceva este creat în comun pentru mai mult decât o persoană, viața este foarte scurtă și de la zero este de neconceput pentru oricine, chiar dacă se dorește contrariul, este demonstrabil în multe greșeli făcute în copierea și lipirea de Linux Torvalds
Sursele unix sunt închise, utilizarea minix ... care este altceva.
și cei care au făcut QDOS ce?
s-au bazat pe ceva?
Din câte văd, cine nu are propriul sistem de operare este pentru că nu vrea, hahahaha.
Acum serios, foarte interesant! Mult depășesc cunoștințele mele limitate de programare, dar voi citi celelalte părți ale acestei serii cu anticipare.
Mulțumesc pentru postare!
M-ai lăsat cu o față O_O ... fără intenția de a subestima contribuțiile nimănui, este cel mai „pro” pe care l-am văzut în ultima vreme. Salutari.
Foarte bun articol, Adrián. Te rog continua…
Glumești în Ziua Prostilor din Aprilie?, Nu fi rău „Emulând pe Linus Torvalds: Creează-ți propriul sistem de operare de la zero”. Nu cred că este dificil pentru cei care urmează o carieră în vreun institut de tehnologie sau universitate; dar pentru mine sunt un arcaș novice (sunt cei care spun „Noob”, dar mă consider mai newbie oarecum leneș) care pare să nu pășească pe uscat. Oricum ACEST ARTICOL CREEAZĂ MULȚI CURIOSITATE ȘI FĂRĂ ADMIRARE ȘI RESPECT DE ÎNDUBITATE PENTRU EDITORUL SĂU, FELICITĂRI; Primul lucru pe care îl voi face este să încerc să înțeleg măcar puțin din acest material valoros.
MULȚUMIM Adrian Arroyo Calle, muncă excelentă și livrare nobilă de cunoștințe.
LEL Postare excelentă, ține-o așa.
Ce postare grozavă, acesta este ceea ce mi-a ratat desde linux. Minunat.
Post mare, mulțumesc foarte mult.
Nu am înțeles ce face fișierul link.ld, îmi poate explica cineva?
Fișierul link.ld îi indică linkerului (în acest caz ld) unde fiecare parte a codului ar trebui să fie în fișierul rezultat. De asemenea, definim punctul de intrare deoarece, deoarece nu avem un sistem de operare, nu putem folosi main ca program normal, în acest caz selectăm funcția de pornire.
Super toate postările tale! În așteptarea celor 7! Dacă am o îndoială, de exemplu, dacă aș vrea doar să rulez un algoritm, fără sistem de operare, de unde să știu ce pot folosi și ce nu C?
Dacă îl folosiți așa, nu veți putea folosi nimic de la stdlib, care este practic ceea ce folosește toată lumea (fără malloc, gratuit, printf, scanf, strcmp etc.). Totul trebuie implementat direct din memorie sau ASM. Poate într-un capitol superior vă voi arăta cum să instalați o bibliotecă C pentru sistemul de operare. Dacă utilizați C ++ nu puteți utiliza excepții și operatorii noi și ștergere (și cu siguranță mai multe).
Cred acest vă poate oferi o idee mai bună despre cum să o faceți.
Bună ziua, acum aproximativ 5 ani am urmărit o publicație similară și am dezvoltat un microkernel care începe la fel, are unele aspecte de îmbunătățit, dar poate te interesează, rulează în modul protejat, execută multitasking și realizează virtualizarea memoriei, în ultima vreme am lucrat pe acesta driverul de disc și unitatea CD pentru ao face instalabil și nu doar să ruleze pe CD live ... Salutări.
Draga, am o eroare la executarea comenzii:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
link.ld: 5 eroare de sintaxă
collect2: eroare: ld a returnat 1 stare de ieșire
link.ld
. = 0x00100000;
.multiboot_header: {
* (. multiboot_header)
}
La rândul 5 nu văd eroarea, cineva la fel?
Lucrez cu un șuierat debian virtualizat în virtualbox
adaugă ";" la sfârșitul lui * (. multiboot_header)
Excelentă inițiativă, cu siguranță voi urma capitolele acestui post, intenționând să învăț multe din ea. Vă mulțumesc foarte mult pentru că ați avut timp să ne învățați. Un singur detaliu în acest sens, trebuie remarcat faptul că Linus Torvalds nu este creatorul niciunui sistem de operare, el a creat Kernel-ul sistemului GNU / Linux (cel care a fost folosit în alte sisteme de operare), care merită încă, dar este important să-l acreditați pe Richard Stallman pentru crearea majorității sistemului de operare.
Vă mulțumesc foarte mult pentru contribuție și sper să luați în considerare observația mea.
De ceva vreme am dat peste cap subiectul, m-am interesat imediat ce am citit titlul. dar mesajul continuă să primească
eroare: nu s-a găsit antet multiboot
eroare trebuie mai întâi să încărcați nucleul
Am încărcat ceea ce duc într-o repo pe github https://github.com/rkmax/GenyOS
Același lucru mi se întâmplă și mie. Ai găsit soluția?
o întrebare am început să introduc sintaxa și linia de intrare meniu îmi spune că nu am găsit cine să-mi spună de ce
asta fac
BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
menuentry: comanda nu a fost găsită
Conținutul acestui conținut nu trebuie introdus în linia de comandă, ci în fișierul pe care îl creați numit grub.cfg
Excelent articol, mulțumesc!
Spectaculos…!! este la fel ca veriga lipsă.
Îmi plac tutorialele Emulating LInus Torvalds, dar există un pas pe care nu îl înțeleg, următorul:
Acum copiem START.ELF în / următorul în folderul nostru care simulează rădăcina sistemului nostru de operare. Mergem în folderul rădăcină al noului nostru sistem de operare cu consola și verificăm dacă există două fișiere: unul /boot/grub/grub.cfg și altul /next/START.ELF.
Mergem în directorul superior și apelăm un utilitar de creare ISO cu GRUB numit grub-mkrescue
Ar putea cineva să mi-l explice: p
Pur și simplu pentru a genera un ISO minim pe care GRUB îl poate încărca, copiem nucleul în (/ din ISO, orice folder) /next/START.ELF și fișierul de configurare GRUB în (din / din ISO, orice folder) / boot / grub / grub.cfg. Odată ce ați terminat, nu am instalat încă GRUB pe ISO și există un utilitar care generează ISO dintr-un folder și instalează GRUB numit grub-mkrescue. Apoi am ajunge în sfârșit cu un ISO bootabil care are instalat GRUB, care poate citi configurația pentru a executa mai târziu START.ELF corect. Nu știu dacă m-am explicat, dar ceea ce facem este un fel de sistem de fișiere fals cu care generăm un ISO.
Minunat
Ei bine, uitați-vă într-adevăr la un sistem nou, nu atât de mult, dar dacă îmbunătățiți Linux, de exemplu, creați un exonucleus Linux cu o componentă de server care acționează ca un microkernel dacă se dorește, adică o structură exo cu comportament micronucleic care ar fi super și linux .
Celălalt lucru este că nu sunt expert în programare, doar câteva c ++ brânză și ceva java, mi-ar fi suficient să dau programului kernel linux un modul, să-l evadez, să îl modific etc.
Fără îndoială trebuie să fac deja în vacanță.
Acesta este bun și în ce program îl proiectați și îl codificați
vă rog să-mi dați acest răspuns
Când compilez din git, primesc:
[jmponce @ jar build] $ cmake ..
- Crearea directorului NextRoot
- Generarea de script ISO
face DESTDIR = următoarea instalare
./iso.sh
- S-a găsit Doxygen: / usr / bin / doxygen (s-a găsit versiunea „1.8.9”)
- Configurare terminată
- Generarea a terminat
- Fișierele de compilare au fost scrise în: / home / jmponce / next-divel / build
[jmponce @ jar build] $ make
Dependențe de scanare ale țintei START.ELF
[7%] Construirea obiectului ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
[14%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
[21%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
[28%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
[35%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
[42%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
[50%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
[57%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
[64%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
[71%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
[78%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
[85%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
[92%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
[100%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
Conectarea executabilului CXX START.ELF
/ usr / bin / ld: Incompatibil /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a este omis în timp ce se caută -lgcc
/ usr / bin / ld: nu poate găsi -lgcc
collect2: eroare: ld a returnat starea de ieșire 1
src / CMakeFiles / START.ELF.dir / build.make: 402: Instrucțiuni eșuate pentru ținta „src / START.ELF”
faceți [2]: *** [src / START.ELF] Eroare 1
CMakeFiles / Makefile2: 106: Instrucțiuni eșuate pentru ținta „src / CMakeFiles / START.ELF.dir / all”
make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Eroarea 2
Makefile: 117: Eșec în instrucțiunile pentru „toate” vizate
face: *** [toate] Eroarea 2
Eroarea pare că nu poate găsi llibgcc, deoarece aveți versiunea pe 64 de biți și în prezent sistemul de compilare este forțat să utilizeze 32 de biți. Ar trebui să instalați un pachet de compatibilitate pe distro sau mai bine, să utilizați un sistem pe 32 de biți.
Am 32 de biți și primesc aceeași eroare, vrei să spui sistemul de operare sau arhitectura? al meu este pe 64 de biți, dar folosesc Ubuntu pe 32 de biți, nu întrebați, probleme financiare, cu asta spun totul.
Subiect excelent, în așteptarea unei sfere mai mari. Noroc
Excelent sper pentru mai multe
Bună ziua, sunt un tânăr ambasador care dorește să creeze un sistem de operare care să susțină toate programele și platformele, astfel încât dezvoltatorii să nu trebuiască să aibă mașini puternice sau aplicații sau programe pe un computer.
De aceea sunt interesat de această postare, dar când descarc git-ul sau încerc să-l creez, totul funcționează până când execut comanda ./iso.sh sau grub-mkrescue -o nextdivel.iso nextroot primiți această eroare
„Grub-mkrescue: avertisment: xorriso dvs. nu acceptă„ –grub2-boot-info ”. Unele funcții au fost dezactivate. Utilizați xorriso 1.2.9 sau o versiune ulterioară ..
grub-mkrescue: avertisment: xorriso dvs. nu acceptă „–grub2-boot-info”. Imaginea dvs. de nucleu este prea mare. Boot-ul pe disc a fost dezactivat. Folosiți xorriso 1.2.9 sau o versiune ulterioară .. »
Nu am nicio idee deoarece știu multe despre aplicații și pagini web, dar nu știu nimic despre grub
Este posibil să trebuiască să actualizați programul xorriso pe distribuția dvs. Ce distribuție și versiune folosiți?
Folosesc xubuntu 14.04lts și încerc să rulez xorriso, dar shell-ul îmi spune că nu-l găsește și primesc apt-get install xorriso, deși sincer mă așteptam la un răspuns, deoarece am avut o experiență proastă instalând lucruri pe care nu le știu în Linux hehe . Îl voi actualiza chiar acum și vă voi spune ce s-a întâmplat
Apoi instalați xorriso din centrul software-ului sau pur și simplu de la terminal faceți „sudo apt-get install xorriso”
Am făcut deja tot ce mi-ai spus și atât cu git cât și cu al meu am obținut acest xorriso 1.3.2: manipulator sistem de fișiere RockRidge, proiect libburnia.
Unitate curentă: -outdev 'stdio: nextdivel.iso'
Curent media: fișier stdio, suprascriptibil
Starea media: este necompletat
Rezumat media: 0 sesiuni, 0 blocuri de date, 0 date, 1901m gratuit
Adăugat la imaginea ISO: directorul '/'='/tmp/grub.OEqSzV'
xorriso: UPDATE: 546 de fișiere adăugate în 1 secundă
xorriso: EȘEC: Nu se pot determina atributele fișierului sursă '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': nu există un astfel de fișier sau director
xorriso: UPDATE: 546 de fișiere adăugate în 1 secundă
xorriso: aborting: -abort_on 'FAILURE' întâlnit 'FAILURE'
și catifea nu înțeleg structura mea este /nextroot/boot/grub/grub.cfg și nextroot / next / START.ELF
Mulțumesc, sunt gata să merg mai departe, un prieten m-a ajutat și mi-a spus că ceea ce am greșit este organizarea directorului, așa că am stabilit-o și gata
Scuzați-mă, puteți să-mi spuneți ce procedură ați efectuat, deoarece nu primesc nimic de pornire: nu există un astfel de fișier sau director
niciun dispozitiv bootabil.
Noroc! Aveam să-ți cer favoarea dacă îmi poți trimite un e-mail cu ceea ce explici aici, m-am cam confuz și trebuie să compar ceea ce am cu ceea ce explici tu, poate ceea ce nu este clar pentru mine este dacă crearea grub. cfg se face în terminalul gcc sau unde anume? multumesc foarte mult prietene!
Creați fișierul grub.cfg cu orice editor de text și trebuie să-l salvați în PROJECT_FOLDER / boot / grub / grub.cfg
Salut Adrian, în primul rând te felicit și îți mulțumesc pentru contribuție.
Știi că fac asta pentru o practică și am început să-l pun la punct în urma îndrumării tale, totuși după ce am început am găsit prima eroare
$ ca -o kernel.o -c kernel.asm
bash: as: comanda nu a fost găsită ...
Comenzi similare sunt:
'sa'
„ac”
Lucrez la fedora 20 și nu găsesc o soluție în acest sens, aș aprecia îndrumările dvs. dacă ar trebui să schimb ceva în gcc sau gaz
Multumesc anticipat
Trebuie să instalați GAS pentru a putea vedea codul de eroare. Nu am Fedora la îndemână, dar, teoretic, dacă instalați gcc-c ++, veți instala întreaga suită GCC și GNU.
Sunt cu tine, știu ceva despre C ++, C # (deși acest ultim nu este foarte util în această chestiune), răul este că încă îmi lipsește experiența, nu mă ocup niciodată de limbajul C, publicarea ta este grozavă, Nu am prea multe de spus dacă am timp, văd. Mulțumesc.
Vă mulțumesc foarte mult pentru mare ajutor….
Îmi place Linux, este cel mai bun cartier existent, adevărul pentru ferestrele mele este un gunoi pentru a că știu că creatorul linux este creatorul ferestrelor
Bună ziua, primesc o eroare în grub spune
eroare: fișier /next/START.ELF Nu a fost găsit
eroare: trebuie mai întâi să încărcați nucleul
Ai putea să mă ajuți și să mergi la Google, dar nu găsesc
Vă rog, cum pot să fac să apară mesajul HELLO WORLD, sunt începător și încă nu știu suficient
Mi se întâmplă următoarele:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
/ usr / bin / ld: kernel.o: relocarea R_X86_64_32 împotriva simbolului „stack” nu poate fi utilizată atunci când se face un obiect PIE; recompilați cu -fPIE
/ usr / bin / ld: linkul final a eșuat: secțiune nereprezentabilă la ieșire
collect2: eroare: ld a returnat 1 stare de ieșire