Antes de nada comentar que este es mi primer artículo y que deseo que os guste a todos.
En esta serie vamos a emular a Linus Torvalds, vamos a crear nuestro sistema operativo desde 0. En este primer episodio vamos a ver el arranque y pondremos un texto en pantalla desde nuestro kernel.
En mi caso el sistema operativo se llama NextDivel. La primera decisión que debemos hacer nada más plantearnos el sistema operativo es ¿cuál va a ser el bootloader?
Aquí existen múltiples variantes, e incluso podríamos crear uno nosotros; sin embargo, en este tutorial voy a usar GRUB, porque la mayoría conoce más o menos algo de él. Creamos una carpeta que será el root de nuestro sistema operativo y allí creamos la carpeta /boot/grub
mkdir nextroot && cd nextroot
mkdir -p boot/grub
Allí creamos el fichero grub.cfg de la siguiente manera:
menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}
En este fichero hemos visto como GRUB cargará nuestro kernel, en este caso, en /next/START.ELF. Ahora debemos crear nuestro kernel.
Para ello necesitaremos el GCC y GAS (el ensamblador del proyecto GNU, suele venir con el gcc). Así pues vamos a crear el kernel.
Primero hacemos un archivo llamado kernel.asm. Este archivo contendrá el punto de inicio de nuestro kernel y además definirá el multiboot (una característica de algunos bootloaders como GRUB). El contenido de kernel.asm será:
.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
Todo lo relacionando con multiboot es simplemente seguir la especificación nada más. Todo empezará en start, llamará a multiboot_entry, habremos definido el multiboot header en los primeros 4k y lo pondremos (con movl).
Más tarde llamamos a NextKernel_Main que es nuestra función en C del kernel. En el loop hacemos un halt para parar el ordenador. Esto se compila con:
as -o kernel.o -c kernel.asm
Ahora vamos a entrar a programar en C. Pensarás que ahora todo es pan comido, ponemos un printf en main y ya está, lo hemos hecho.
Pues no, ya que printf y main son funciones que define el sistema operativo, ¡pero nosotros lo estamos creando! Solo podremos usar las funciones que nosotros mismos definamos.
En capítulos posteriores hablaré de como poner nuestra propia libraría del C (glibc, bionic, newlibc) pero tiempo al tiempo. Hemos hablado que queremos poner texto en pantalla, bueno veremos como lo hacemos.
Hay dos opciones, una es llamar a la BIOS y otra es manejar la memoria de la pantalla directamente. Vamos a hacer esto último pues es más claro desde C y además nos permitirá hacerlo cuando entremos en modo protegido.
Creamos un fichero llamado NextKernel_Main.c con el siguiente contenido:
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;
}
Con esto manipulamos directamente la memoria VGA y caracter a caracter lo vamos escribiendo. Compilamos desactivando la stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding
Si has llegado hasta aquí querrás probar ya tu nuevo y flamante sistema operativo, pero todavía no hemos terminado. Necesitamos un pequeño fichero que diga al compilador en que posición del archivo dejar cada sección. Esto se hace con un linker script. Creamos 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 = .;
}
Con esto definimos la posición de cada sección y el punto de entrada, start, que hemos definido en kernel.asm. Ahora ya podemos unir todo este mejunje:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
Ahora copiamos START.ELF al /next dentro de nuestra carpeta que simula el root de nuestro sistema operativo. Nos dirigimos a la carpeta root de nuestro sistema operativo nuevo con la consola y verificamos que hay dos archivos: uno /boot/grub/grub.cfg y otro /next/START.ELF.
Vamos al directorio superior y llamamos a una utilidad de creación ISOs con GRUB llamada grub-mkrescue
grub-mkrescue -o nextdivel.iso nextroot
Una vez hayamos hecho esto tendremos una ISO. Esta ISO puede abrirse en ordenadores x86 (64 bits también) y máquinas virtuales. Para probarlo, voy a usar QEMU. Llamamos a QEMU desde la línea de comandos:
qemu-system-i386 nextdivel.iso
Arrancará SeaBIOS y más tarde tendremos GRUB. Después si todo va correcto veremos nuestra frase.
Pensarás que esto es difícil, te respondo, sí lo es.
Realmente crear un sistema operativo es difícil y eso que este de aquí no hace nada útil. En próximos capítulos veremos como manejar colores en la pantalla, reservar memoria y si puedo, como obtener datos del teclado.
Si alguien no quiere copiar todo lo que hay aquí, tengo un repositorio en GitHub (más elaborado) con el sistema operativo NextDivel. Si quieres compilar NextDivel solo tienes que tener git y 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
Os animo a colaborar en NextDivel si tienes tiempo y ganas de crear un sistema operativo. Quizá incluso superior a Linux… el tiempo lo dirá.
85 comentarios, deja el tuyo
:O
Torvalds tomo el el sistema operativo Minix ( derivado de UNIX ) a Andrew S. Tanenbaum y lo mejoro .
Tanenbaum se ha peleado con Linus , se insultaron . Tanenbaum dice que el Microkernel es el futuro (HURD , Minix nuevo cono Microkernel ) .
http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html
Éste ha sido el mejor post que he visto hasta ahora en este blog. Ya quiero saber qué más hacer.
Impresionate.
Realmente impresionante!!
FUUUUUUUA!
es el post más geek que vi en mi vida jeje. Felicitaciones Adrián, un artículo de puta madre! híper interesante!!! 🙂
Concuerdo. Me imagino esta situación:
Usuario avanzado de GNU/Linux (con cara de felicidad):
«ya sé compilar mi Gentoo»
Nerd (con actitud despectiva): «pff, yo he creado mi propia distro…»
Si , yo se crear mi propia distro linux. De hecho en ello estoy desarrollando un initramfs y un kernel para un linux empotrado. No es lo mismo crear un sistema operativo que una distro linux. Lo primero es mucho más dificil , casi imposible , lo segundo tal y como lo has dicho puede ser cualquier cosa , incluso ubuntu con el logo cambiado xD. Asi que yo lo dejaría así :
Usuario avanzado de GNU/Linux (con cara de felicidad)
– ya sé compilar mi Gentoo
Semi-Nerd
– Pff , yo he seguido un linux from scratch y he hecho mi propia distro
Nerd ( con actitud despreciativa )
– pff , pues yo he programado un kernel en ensamblador y en C
Saludos !
Esto me resulta interesante, a la espera de los siguientes capítulos.
hace tiempo vi este tutorial, es para C++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Gracias por el enlace, le echaré un vistazo.
Quisiera un Sistema Operativo 100% compatible con los gráficos AMD :/
Windows
jajaja en Windows Catalyst no tiene soporte a OpenGL, aunque en Linux no puedo usarle toda la potencia gráfica seguiré esperando para ver que sucede!
solo espera que valve arrase con el mercado
Mágico, perfecto, excelente aporte, se vislumbra como una gran serie de posts 🙂
Buah me gustaria saber programar para poder ayudarte, simplemente como forma de practicar con los conocimientos que vas aprendiendo ya ayuda uno. De momento te dejo el lema para captar la atención hacia el proyecto una vez lo acabes «Usa NextDivel, el porno se ve igual(o mejor).», arrasaras xD.
Mooooooolaaa!!!!
Muy buen artículo, pero sólo por curiosidad por qué no has seguido el proyecto de Linux From Scratch??
Saludos
Bueno, Linux from Scratch está muy bien, y puedes decir que es tuyo, pero realmente es muy mecánico:
-Descargar fuentes
-Parchearlas
-Compilar
-Instalar
-Siguiente
Aquí aunque al final el resultado sea peor puedes decir que has revisado todos los archivos.
Como se deduce de mi anterior comentario , porque no tiene el mismo nivel de complejidad. Además , linux from scratch no es realmente , en contra de su nombre , crear un sistema desde 0. Crear un sistema desde cero es programarlo tu , escribir tu propio kernel , no el kernel linux , a ser posible incluso tu propio bootloader en vez de grub , lilo , syslinux , etc. Aunque un LFS no es moco de pavo y es bastante complejo , ni se le acerca a programar tu propio kernel …
Además , concuerdo con AdrianArroyoCalle en que es demasiado mecánico , yo alguna vez me lo he leido y acabas desistiendo en la sexta página , además te dicen que uses nosecuales versiones de los paquetes porque si no las instrucciones no funcionan ( eso demuestra la falta de flexibilidad , en mi opinion ). Yo creo que es mejor tener algo de idea propia , compilar los paquetes que tu quieras , incluso programar alguno , compilar un kernel linux y en paz.
Saludos !
uuuoooohh!! nunca me había capturado tanto un post como lo hizo este.
Por favor, continua 😀
No se que esta mal:
error: no multiboot header found.
error you need to load the kernel first
Si acaso te sirve de consuelo yo tuve el mismo error. Intenta usar las fuentes que están en GitHub, ahí el error ya se soluciona. De todos modos creo que si cambias la línea de grub.cfg de «multiboot /next/START.ELF» a «kernel /next/START.ELF» podría funcionar. No lo sé exactamente.
Antes que nada, magnífica entrada 🙂
Estoy teniendo el mismo problema de cargar el kernel desde grub. Incluso usando las fuentes del GitHub o cambiando multiboot por kernel…
error: no multiboot header found.
error: no loaded kernel
¿Estás usando clang como compilador? Cambialo por el gcc
¿Te has acordado de usar el linker script? Es necesario para que el linker (ld en nuestro caso) sepa en que lugar del archivo va a poner cada cosa. En este caso el multiboot header debe de estar al principio.
¿Estás usando el sistema de CMake? Si lo usas creo que no falla.
Si tampoco te funciona intentaré encontrar otra solución.
[+100]
Simplemente genial !!!
Mola mucho 🙂
Me quito el sombrero. Impresionante post. Muchas felicidades.
Woha!
Estaria genial que se pudieran abrir aplicaciones echas en HTML5 y Javascript sin tener que usar un navegador, es eso posible?
Hablo de que sean como aplicaciones nativas.
Asi seria facil programar para este sistema operativo 😀
En este caso no lo voy a realizar porque lleva por detrás mucho más trabajo pero hay un sistema operativo llamado «es» que hace lo que tu dices. De hecho la línea de comandos es JavaScript y las ventanas se dibujan usando las funciones Canvas de JavaScript. Lo hicieron ingenieros de Nintendo y ahora es open source.
http://code.google.com/p/es-operating-system/
Valla, gracias por la info 😀
le dare un vistazo
Quien pueda hacer su propio S.O. puede morir tranquilamente, ya que el nivel intelectual que ha de conseguir con ello; lo hace prescindir del cielo o el infierno.
Pedazo de posteo.
hasta ahora nadie que se sepa ha hecho solo algo que se pueda decir que es un sistema operativo decente hecho desde cero, ni tan siquiera Linux Torvalds como decís al principio, ya que este partió de las fuentes de Unix y todo lo demás es autoría en común de más de una persona, la vida es muy corta y partir realmente desde cero es impensable para nadie aunque se quiera decir lo contrario es demostrable en muchos errores cometidos en copiar y pegar por Linux Torvalds
Las fuentes de unix son cerradas, el uso minix… que es otra cosa.
y los que hicieron QDOS que?
se basaron en algo?
Por lo que veo, quien no tiene su propio sistema operativo es porque no quiere, jajajajaja.
Ahora en serio, muy interesante! Escapa mucho a mi escaso conocimiento de programación, pero leeré con ansia las demás partes de esta serie.
Gracias por el post!
Me dejaste con cara de O_O… sin la intención de menospreciar los aportes de nadie, es de lo más «pro» que he visto últimamente. Saludos.
Muy buen artículo, Adrián. Por favor, continúa…
¿Es broma por el dia de los inocentes?, no seas malo «Emulando a Linus Torvalds: Crea tu propio sistema operativo desde 0». No creo que sea dificil para el que cursa una carrera en algún instituto de tecnologia o universidad; pero para mí que soy un novato archer (hay quienes nos dicen «Noob» pero me considero más Newbie algo flojo) eso suena como a no pisar tierra. De todos modos ESTE ARTICULO CREA MUCHA CURIOSIDAD Y SIN DUDA ADMIRACION Y RESPETO POR SU REDACTOR, FELICITACIONES; lo primero que hare es tratar de comprender al menos un poco este valioso material.
GRACIAS Adrian Arroyo Calle excelente trabajo y noble entrega de conocimientos.
LEL Excelente post, sigue así.
Que Grandioso post, esto es lo que extrañaba de desde linux. Que maravilla.
Genial el post, muchas gracias.
No entendí que hace el fichero link.ld, me lo puede explicar alguien??
El fichero link.ld dice al linker (en este caso ld) en que posición dentro del fichero resultante debe estar cada parte del código. También definimos el punto de entrada ya que al no tener sistema operativo no podemos usar main como un programa normal, en este caso seleccionamos la función start.
Buenisimo todos tus post! Esperando por el 7! Lo que si me queda una duda, por ejemplo, si solo quisiera correr un algoritmo, sin SO, como se que puedo usar y que no de C?
Si lo usas así tal cual no podrías usar nada de la stdlib, que prácticamente es lo que todo el mundo usa (nada de malloc, free, printf, scanf, strcmp, etc). Todo se tiene que implementar directamente de memoria o ASM. Puede que en un capítulo superior enseñe como instalar una librería del C para el sistema operativo. Si usas C++ tampoco puedes usar excepciones y los operadores new y delete (y seguramente más cosas).
Creo que esto te puede dar una mejor idea de como hacerlo.
Hola, hace unos 5 años seguí una publicación similar y desarrollé un microkernel que inicia de la misma manera, tiene algunos aspectos a mejorar, pero puede que pueda interesarte, corre en modo protegido, ejecuta mutlitarea y realiza virtualización de memoria, ultimamente trabajé en el driver de disco y unidad de cd para poder hacerlo instalable y no solo corra en live cd… Saludos.
Estimados, tengo un error en al momento de ejecutar el comando:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
link.ld:5 syntax error
collect2: error: ld returned 1 exit status
link.ld
. = 0x00100000;
.multiboot_header :{
*(.multiboot_header)
}
En la linea 5 no veo el error, alguien le pasa lo mismo?
Estoy trabajando con un debian wheezy virtualizado en virtualbox
agrega el «;» al final de *(.multiboot_header)
Excelente iniciativa, seguiré sin duda los capítulos de este post, prentendo aprender mucho con ello. Muchas gracias por darte el tiempo de enseñarnos. Un solo detalle al respecto, cabe destacar que Linus Torvalds no es el creador de ningún sistema operativo, él creo el Kernel del sistema GNU/Linux (el que ha sido utilizado en otros SO), lo que no deja de ser meritorio, pero es importante darle los creditos necesarios a Richard Stallman por la creación de la mayor parte del SO.
Muchas gracias por el aporte y espero que consideres mi observación.
LLevo rato trasteando con el tema, me intereso tan pronto como leí el encabezado. pero sigue saliendo el mensaje
error: no multiboot header found.
error you need to load the kernel first
he subido lo que llevo a un repo en github https://github.com/rkmax/GenyOS
A mi me sucede lo mismo ¿Encontraste la solucion?
una pregunta empece a introducir la sintaxis y la linea de menuentry me dice commandnot found aguien podria decirme por que
esto es lo que hago
BLACK@BLACK-pc:~/blackroot$ menuentry «NextDivel» {
menuentry: command not found
El contenido de ese contenido no es para instroducirlo en la línea de comandos, sino en el fichero que creas llamado grub.cfg
Excelente artículo, ¡Gracias!
Espectacular…!! simplemente es como el eslabón perdido.
Me encanta tus tutoriales de Emulando a LInus Torvalds, pero hay un paso que no entiendo, el siguiente:
Ahora copiamos START.ELF al /next dentro de nuestra carpeta que simula el root de nuestro sistema operativo. Nos dirigimos a la carpeta root de nuestro sistema operativo nuevo con la consola y verificamos que hay dos archivos: uno /boot/grub/grub.cfg y otro /next/START.ELF.
Vamos al directorio superior y llamamos a una utilidad de creación ISOs con GRUB llamada grub-mkrescue
POdría alguien explicármelo :p
Simplemente para generar una ISO mínima que GRUB pueda cargar copiamos el kernel a (el / de la ISO, cualquier carpeta)/next/START.ELF y el fichero de configuración de GRUB a (el / de la ISO, cualquier carpeta)/boot/grub/grub.cfg . Una vez hecho eso no hemos instalado GRUB todavía en la ISO y es que hay una utilidad que genera la ISO desde una carpeta e instala GRUB llamada grub-mkrescue. Entonces finalmente acabaríamos con una ISO booteable que tiene instalado GRUB, que puede leer la configuración para posteriormente ejecutar START.ELF correctamente. No se si me he explicado, pero lo que hacemos es una especie de sistema de archivos falso con el que generamos una ISO.
Buenísimo
pues mira realmente un nuevo sistema no tanto pero si mejorar el linux por ejemplo crear un exonucleo linux con un componente servidor que haga de micronúcleo si así se desease es decir una estructura exo con comportamiento micronúcleo eso seria súper y linux.
lo otro es que no soy experto en programación solo unos cursi-tos de c++ y algo de java me bastaría con darle al kernel linux programar modulo destripándolo modificarlo etc
Sin duda ya tengo que hacer en vacaciones.
sta bueno y en que programa lo diseña y lo codifica
por favor me brindar ese respuesta
Al compilar desde tu git me sale:
[jmponce@tarro build]$ cmake ..
— Creating NextRoot directory
— Generating ISO script
make DESTDIR=next install
./iso.sh
— Found Doxygen: /usr/bin/doxygen (found version «1.8.9»)
— Configuring done
— Generating done
— Build files have been written to: /home/jmponce/next-divel/build
[jmponce@tarro build]$ make
Scanning dependencies of target START.ELF
[ 7%] Building ASM-ATT object src/CMakeFiles/START.ELF.dir/start/boot.asm.o
[ 14%] Building CXX object src/CMakeFiles/START.ELF.dir/start/NextShellLite.cpp.o
[ 21%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Screen.cpp.o
[ 28%] Building CXX object src/CMakeFiles/START.ELF.dir/start/NextKernel_Main.cpp.o
[ 35%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Panic.cpp.o
[ 42%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Timer.cpp.o
[ 50%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Memory.cpp.o
[ 57%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Ports.cpp.o
[ 64%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_GDT.cpp.o
[ 71%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_ISR.cpp.o
[ 78%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_String.cpp.o
[ 85%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_IRQ.cpp.o
[ 92%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_IDT.cpp.o
[100%] Building CXX object src/CMakeFiles/START.ELF.dir/start/ND_Keyboard.cpp.o
Linking CXX executable START.ELF
/usr/bin/ld: se salta el /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a incompatible mientras se busca -lgcc
/usr/bin/ld: no se puede encontrar -lgcc
collect2: error: ld devolvió el estado de salida 1
src/CMakeFiles/START.ELF.dir/build.make:402: fallo en las instrucciones para el objetivo ‘src/START.ELF’
make[2]: *** [src/START.ELF] Error 1
CMakeFiles/Makefile2:106: fallo en las instrucciones para el objetivo ‘src/CMakeFiles/START.ELF.dir/all’
make[1]: *** [src/CMakeFiles/START.ELF.dir/all] Error 2
Makefile:117: fallo en las instrucciones para el objetivo ‘all’
make: *** [all] Error 2
El error parece ser que no encuentra llibgcc ya que tienes la versión de 64 bits y actualmente el sistema de compilación está forzado a usar 32 bits. Deberías intalar un paquete de compatibilidad en tu distro o mejor, usa un sistema de 32 bits.
Yo tengo de 32 bits y sale ese mismo error, ¿te refieres al sistema operativo o a la arquitectura? la mía es 64 Bits, pero estoy usando Ubuntu de 32 bit, no pregunten, problemas económicos, con eso lo digo todo.
Excelente tema, a la espera de mayores alcances. saludos
Genial espero por mas
Hola soy un joven ambisio que deso crear un sistema operativo que acmita todos los programas y plataformas para que los desarrolladores no tengan que tener makinas potentes ni ifinidades de aplicaciones o programas en una pc.
por eso estoy interesado en este post pero cuando descargo tu git o intento crearlo yo todo va vien hasta que ejecuto el comando ./iso.sh ó grub-mkrescue -o nextdivel.iso nextroot me sales este error
«grub-mkrescue: aviso: Su xorriso no soporta «–grub2-boot-info». Algunas características se han desactivado. Use xorriso 1.2.9 o posterior..
grub-mkrescue: aviso: Su xorriso no soporta «–grub2-boot-info». Su imagen del núcleo es demasiado grande. El arranque como disco se ha desactivado. Use xorriso 1.2.9 o posterior..»
u de verdad no tendo ni idea ya que se mucho de aplicaciones y de webs pero no ce nada de grub
Quizá debas actualizar el programa xorriso en tu distro. ¿Qué distro y versión usas?
uso xubuntu 14.04lts e intente ejecutar xorriso pero la shell me dice que no lo encuentra y me sale apt-get install xorriso aunque sinceramente esperaba alguna respuesta porque e tenido mala experiencia instalando cosas que no conosco en linux jeje. lo actualizare ahora mismo y te digo que paso
Entonces instala xorriso desde el centro de software o simplemente desde la terminal haz «sudo apt-get install xorriso»
ya hice todo lo que me dijistes y tanto con el git y con el mio me sale esto xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project.
Drive current: -outdev ‘stdio:nextdivel.iso’
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 1901m free
Added to ISO image: directory ‘/’=’/tmp/grub.OEqSzV’
xorriso : UPDATE : 546 files added in 1 seconds
xorriso : FAILURE : Cannot determine attributes of source file ‘/media/gaia/Jupiter1/ShellSystem/nextroot/nextroot’ : No such file or directory
xorriso : UPDATE : 546 files added in 1 seconds
xorriso : aborting : -abort_on ‘FAILURE’ encountered ‘FAILURE’
y de pana no entiendo mie estructura es /nextroot/boot/grub/grub.cfg y nextroot/next/START.ELF
Gracias ya estoy listo para avanzar un amigo me ayudo y me dijo lo que hice mal era la organización del directorio así que lo acomode y listo
disculpa me podes indicar que procedimiento realizaste ya que me aparece el error nothing to boot: no such file or directory
no bootable device.
Saludos! te iba a pedir el favor si me podías mandar un correo con lo que explicas aquí, me he liado un poco y necesito comparar lo que llevo con lo que explicas, tal vez lo que no me queda claro es si la creación del fichero grub.cfg se hace en el gcc de la terminal o donde exactamente? muchas gracias amigo!
El fichero grub.cfg lo creas con un editor de texto cualquiera y lo debes guardar en CARPETA_DEL_PROYECTO/boot/grub/grub.cfg
Hola Adrian primero que nada felicitarte y agradecer tu aporte.
Sabes estoy realizando esto para una practica y me dispuse a armarla siguiendo tu tuto sin embargo tras empezar me halle el primer error
$ as -o kernel.o -c kernel.asm
bash: as: no se encontró la orden…
Las órdenes similares son::
‘sa’
‘ac’
estoy trabajando sobre fedora 20, y no hallo solucion al respecto agradeceria tu orientacion sobre si debo cambiar algo de gcc o gas
de antemano gracias
Debes instalar GAS por lo que puedo ver el código de error. No tengo Fedora a mano pero en teoría si haces yum install gcc-c++ instalarás toda la suite de GCC y en ella suele venir GNU As.
Yo estoy contigo, se algo de C++, C# (a pesar que este utlimo no sirve de mucho en este tema) lo malo es que todavia me falta experiencia, nunca maneje lenguaje C, esta genial tu publicación, em no tengo mucho para decir, si tengo tiempo veo. Gracias.
muchas gracias de gran ayuda ….
me encanta linux es el mejor distrito que hay la verdad para mi windows es basura a un que yo se que el creador de linux es el creador de windows
Hola Me Sale un Error en grub dice
error : file /next/START.ELF Not found
error: you need to load the kernel first
Me podrian Ayudar e googleado pero no encuentro
Por favor como puedo hacer para que muestre el mensaje de HOLA MUNDO soy principiante y desconozco todavía bastante
A mi me ocurre lo siguiente:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
/usr/bin/ld: kernel.o: relocation R_X86_64_32 against symbol `stack’ can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: final link failed: nonrepresentable section on output
collect2: error: ld returned 1 exit status