Emulando Linus Torvalds: Crie seu próprio sistema operacional do zero (I)

Antes de mais nada, comente que este é o meu primeiro artigo e que espero que gostem.

feliz linus torvals

Nesta série, vamos emular Linus Torvalds, vamos criar nosso sistema operacional a partir de 0. Neste primeiro episódio veremos o boot e colocaremos um texto do nosso kernel na tela.

No meu caso, o sistema operacional é chamado PróximoDivel. A primeira decisão que devemos tomar assim que considerarmos o sistema operacional é qual será o bootloader?

Aqui existem várias variantes, e poderíamos até mesmo criar uma; no entanto, neste tutorial irei usar GRUB, porque a maioria sabe mais ou menos algo sobre ele. Nós criamos uma pasta que será a raiz do nosso sistema operacional e lá criamos a pasta / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Lá, criamos o arquivo grub.cfg da seguinte maneira:

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

Neste arquivo, vimos como GRUB irá carregar nosso kernel, neste caso, em /next/START.ELF. Agora devemos criar nosso kernel.

Para isso, precisaremos do GCC y GAS (o montador do projeto GNU, geralmente vem com o gcc). Então, vamos criar o kernel.

Primeiro, criamos um arquivo chamado kernel.asm. Este arquivo conterá o ponto de partida do nosso kernel e também definirá a inicialização múltipla (um recurso de alguns gerenciadores de inicialização, como GRUB) O conteúdo 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

Tudo relacionado à inicialização múltipla é simplesmente seguir as especificações e nada mais. Tudo vai começar no início, vai chamar multiboot_entry, teremos definido o cabeçalho multiboot nos primeiros 4k e vamos colocá-lo (com movl).

Posteriormente, chamamos NextKernel_Main, que é nossa função C do kernel. No loop, fazemos uma parada para parar o computador. Compila com:

as -o kernel.o -c kernel.asm

Agora vamos inserir a programação em C. Você vai pensar que agora tudo é moleza, colocamos um printf en principal e é isso, nós conseguimos.

Bem não, desde printf y principal são funções definidas pelo sistema operacional, mas nós as estamos criando! Só podemos usar as funções que definimos a nós mesmos.

Nos próximos capítulos, falarei sobre como colocar nossa própria biblioteca C (glibc, bionic, newlibc), mas de vez em quando. Discutimos que queremos colocar texto na tela, bem, veremos como o fazemos.

Existem duas opções, uma é chamar o BIOS e outra é gerenciar a memória da tela diretamente. Faremos o último porque é mais claro a partir de C e também nos permitirá fazer quando entrarmos no modo protegido.

Criamos um arquivo chamado NextKernel_Main.c com o seguinte conteúdo:

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

Com isso, manipulamos diretamente a memória VGA e personagem por personagem estamos escrevendo. Compilamos desativando o stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Se você chegou até aqui, você vai querer experimentar seu novo sistema operacional agora, mas ainda não terminamos. Precisamos de um pequeno arquivo que diga ao compilador onde deixar cada seção no arquivo. Isso é feito com um script de vinculador. Nós criamos 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 = .;
}

Com isso definimos a posição de cada seção e o ponto de entrada, início, que definimos em kernel.asm. Agora podemos unir toda esta mistura:

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

Agora copiamos START.ELF para / next dentro de nossa pasta que simula a raiz de nosso sistema operacional. Vamos para a pasta raiz de nosso novo sistema operacional com o console e verificamos se há dois arquivos: um /boot/grub/grub.cfg e outro /next/START.ELF.

Vamos para o diretório superior e chamamos um utilitário de criação de ISO com GRUB chamado grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Depois de fazer isso, teremos um ISO. Este ISO pode ser aberto em computadores x86 (64 bits também) e máquinas virtuais. Para testar, vou usar QEMU. Nós chamamos QEMU na linha de comando:

qemu-system-i386 nextdivel.iso

Vai começar BIOS marítimo e depois teremos GRUB. Mais tarde, se tudo estiver correto, veremos nossa frase.
Você vai pensar que isso é difícil, eu te respondo, é sim.

Realmente criar um sistema operacional é difícil e esse aqui não faz nada de útil. Nos próximos capítulos, veremos como lidar com as cores na tela, reservar memória e, se puder, como obter dados do teclado.

Se alguém não quiser copiar tudo aqui, tenho um repositório em GitHub (mais elaborado) com o sistema operacional PróximoDivel. Se você deseja compilar PróximoDivel você só precisa ter git e 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

Eu encorajo você a colaborar no NextDivel se você tiver tempo e desejar criar um sistema operacional. Talvez até superior ao Linux ... o tempo dirá.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   elav. dito

    :O

    1.    marianogaudice dito

      Torvalds levou o sistema operacional Minix (derivado do UNIX) para Andrew S. Tanenbaum e o melhorou.

      Tanenbaum brigou com Linus, eles se insultaram. Tanenbaum diz que o Microkernel é o futuro (HURD, Minix novo cone Microkernel).

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

  2.   eliotime3000 dito

    Esta foi a melhor postagem que já vi neste blog. Já quero saber o que mais fazer.

  3.   Carlos Gude dito

    Estar impressionado

  4.   Axl dito

    Realmente impressionante!!

  5.   Rhoconlinux dito

    FUUUUUU!
    é o post mais geek que já vi hehe. Parabéns Adrián, um artigo de puta! hiper interessante !!! 🙂

    1.    Joaquin dito

      Eu concordo. Eu imagino esta situação:
      Usuário avançado GNU / Linux (com uma cara feliz):
      "Eu já sei como compilar meu Gentoo"

      Nerd (com atitude de desprezo): «pff, criei a minha própria distro ...»

      1.    desidratador dito

        Sim, posso criar minha própria distribuição Linux. Na verdade, estou desenvolvendo um initramfs e um kernel para Linux embarcado. Criar um sistema operacional não é o mesmo que uma distribuição Linux. O primeiro é muito mais difícil, quase impossível, o segundo, como você disse, pode ser qualquer coisa, até Ubuntu com o logo alterado xD. Então, eu deixaria assim:

        Usuário avançado GNU / Linux (com uma cara feliz)
        - Eu já sei como compilar meu Gentoo

        Semi-nerd
        - Pff, eu segui um linux do zero e fiz minha própria distro

        Nerd (com atitude desdenhosa)
        - pff, porque programei um kernel em assembler e em C

        Saludos!

  6.   cronos dito

    Isso é interessante para mim, aguardando os próximos capítulos.

  7.   Abimaelmartell dito

    Eu vi esse tutorial há algum tempo, é para C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dito

      Obrigado pelo link, vou dar uma olhada nele.

  8.   Jose Jácome dito

    Eu gostaria de um sistema operacional 100% compatível com os gráficos AMD: /

    1.    Ivan Linux dito

      Windows

      1.    Jose Jácome dito

        hahaha no Windows Catalyst não tem suporte para OpenGL, embora no Linux eu não consiga usar todo o poder gráfico vou ficar esperando para ver o que acontece!

        1.    beny_hm dito

          apenas espere a válvula para destruir o mercado

  9.   KZKG ^ Gaara dito

    Mágica, perfeita, excelente contribuição, parece uma ótima série de postagens 🙂

  10.   O_Pixote_O dito

    Buah, gostaria de saber como programar para te ajudar, simplesmente como uma forma de praticar com o conhecimento que você está aprendendo, e um ajuda. Por enquanto deixo o lema para chamar a atenção para o projeto assim que você terminar "Use NextDivel, pornografia parece igual (ou melhor).", Você vai varrer xD.

  11.   este nome é falso dito

    Mooooooolaaa !!!!

  12.   Nordri dito

    Artigo muito bom, mas apenas curioso por que você não seguiu o projeto Linux From Scratch?

    lembranças

    1.    AdrianArroyoStreet dito

      Bem, o Linux from Scratch é bom, e você pode dizer que é seu, mas realmente é muito mecânico:
      - Baixar fontes
      -Escolha-os
      -Compilar
      -Para instalar
      -Próximo
      Aqui, mesmo que o resultado final seja pior, você pode dizer que revisou todos os arquivos.

    2.    desidratador dito

      Como fica claro no meu comentário anterior, porque não tem o mesmo nível de complexidade. Além disso, o linux do zero não é, ao contrário do seu nome, criar um sistema do zero. Criar um sistema do zero é programá-lo você mesmo, escrever seu próprio kernel, não o kernel do linux, se possível até mesmo seu próprio bootloader em vez do grub, lilo, syslinux, etc. Embora um LFS não seja uma façanha pequena e seja bastante complexo, ele nem chega perto de programar seu próprio 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 , na minha opinião ). Acho melhor ter uma ideia própria, compilar os pacotes que quiser, até programar alguns, compilar um kernel linux e em paz.

      Saludos!

  13.   biscoito dito

    uuuoooohh !! Nunca capturei um post tanto quanto este.
    Por favor continue 😀

  14.   usuário_linux dito

    Eu não sei o que está errado:

    erro: nenhum cabeçalho de inicialização múltipla encontrado.
    erro você precisa carregar o kernel primeiro

    1.    AdrianArroyoStreet dito

      Se serve de consolo, cometi o mesmo erro. Tente usar os fontes que estão no GitHub, aí o erro já foi solucionado. De qualquer forma, acho que se você alterar a linha grub.cfg de "multiboot /next/START.ELF" para "kernel /next/START.ELF", pode funcionar. Eu não sei exatamente.

      1.    Mcplatano dito

        Em primeiro lugar, entrada magnífica 🙂
        Estou tendo o mesmo problema ao carregar o kernel do grub. Mesmo usando fontes GitHub ou alterando multiboot para kernel ...

        erro: nenhum cabeçalho de inicialização múltipla encontrado.
        erro: nenhum kernel carregado

        1.    AdrianArroyoStreet dito

          Você está usando o clang como um compilador? Mudar para o gcc
          Você se lembrou de usar o script do vinculador? É necessário para que o vinculador (ld no nosso caso) saiba onde no arquivo vai colocar cada coisa. Nesse caso, o cabeçalho de inicialização múltipla deve estar no início.
          Você está usando o sistema CMake? Se você usar eu acho que não falha.
          Se não funcionar para você, tentarei encontrar outra solução.

  15.   Khourt dito

    [+100]
    Simplesmente genial !!!

  16.   invisible15 dito

    É muito legal 🙂

  17.   tanrax dito

    Eu tiro meu chapéu. Postagem impressionante. Muitas felicidades.

  18.   homem dito

    Uau!
    Seria ótimo se você pudesse abrir aplicativos feitos em HTML5 e Javascript sem ter que usar um navegador, isso é possível?
    Estou falando sobre eles serem como aplicativos nativos.
    Portanto, seria fácil programar para este sistema operacional 😀

    1.    AdrianArroyoStreet dito

      Neste caso, não vou fazer isso porque dá muito mais trabalho, mas há um sistema operacional chamado "é" que faz o que você diz. Na verdade, a linha de comando é JavaScript e as janelas são desenhadas usando as funções JavaScript do Canvas. Os engenheiros da Nintendo fizeram isso e agora é código aberto.

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

      1.    homem dito

        Valla, obrigado pela informação 😀
        vou dar uma olhada

  19.   patodx dito

    Quem consegue fazer o seu próprio SO pode morrer em paz, pois com ele tem de atingir o nível intelectual; Faz você dispensar o céu ou o inferno.
    Pedaço de postagem.

    1.    Miguel dito

      até agora ninguém conhecido por ter feito apenas algo que pode ser considerado um sistema operacional decente feito do zero, nem mesmo o Linux Torvalds como você disse no início, já que este começou a partir de fontes Unix e tudo o mais é criado em comum a mais mais do que uma pessoa, a vida é muito curta e começar do zero é impensável para qualquer pessoa, mesmo que se queira o contrário, é demonstrável em muitos erros cometidos ao copiar e colar pelo Linux Torvalds

      1.    Skarmiglione dito

        As fontes unix estão fechadas, o uso de minix ... que é outra coisa.

      2.    Felipe robaina dito

        e aqueles que fizeram QDOS o quê?
        foram baseados em algo?

  20.   Tesla dito

    Pelo que vejo, quem não tem sistema operacional próprio é porque não quer, hahahaha.

    Sério, muito interessante! Muito está além do meu conhecimento limitado de programação, mas vou ler as outras partes desta série ansiosamente.

    Obrigado pela postagem!

  21.   Manoel R. dito

    Você me deixou com uma cara de O_O ... sem a intenção de subestimar as contribuições de ninguém, é a mais "pro" que já vi ultimamente. Saudações.

  22.   aitor_cz dito

    Artigo muito bom, Adrián. Por favor continue…

  23.   mj dito

    Você está brincando no Dia da Mentira?, Não seja mesquinho "Emulando Linus Torvalds: crie seu próprio sistema operacional do zero." Não acho que seja difícil para quem está fazendo carreira em algum instituto de tecnologia ou universidade; mas para mim sou um arqueiro novato (há quem nos chame de "Noob" mas me considero mais novato um tanto preguiçoso) que soa como não pisar em terra. Enfim ESTE ARTIGO CRIA MUITA CURIOSIDADE E SEM DÚVIDA ADMIRAÇÃO E RESPEITO AO SEU EDITOR, PARABÉNS; A primeira coisa que farei é tentar entender pelo menos um pouco desse valioso material.
    OBRIGADO Adrian Arroyo Calle, excelente trabalho e nobre entrega de conhecimento.

  24.   Blaire pascal dito

    LEL Excelente postagem, continue assim.

  25.   f3niX dito

    Que ótima postagem, foi disso que senti falta desde linux. Que maravilha.

  26.   Ruby dito

    Ótimo post, muito obrigado.
    Não entendi o que faz o arquivo link.ld, alguém pode me explicar?

    1.    AdrianArroyoStreet dito

      O arquivo link.ld informa ao vinculador (neste caso, ld) onde cada parte do código deve estar no arquivo resultante. Também definimos o ponto de entrada, pois como não temos um sistema operacional não podemos usar o main como um programa normal, neste caso selecionamos a função start.

  27.   Maxi dito

    Ótimo todo o seu post! Esperando pelo 7! E se eu tiver uma dúvida, por exemplo, se eu só quiser executar um algoritmo, sem SO, como sei o que posso usar e o que não é C?

    1.    AdrianArroyoStreet dito

      Se você usá-lo assim, não será capaz de usar nada do stdlib, que é praticamente o que todo mundo usa (no malloc, free, printf, scanf, strcmp, etc). Tudo deve ser implementado diretamente da memória ou ASM. Talvez em um capítulo superior eu mostre como instalar uma biblioteca C para o sistema operacional. Se você usa C ++, não pode usar exceções e os operadores novos e de exclusão (e certamente mais).

    2.    Trocador dito

      Creio que isto pode lhe dar uma ideia melhor de como fazer isso.

  28.   Stephen dito

    Olá, há cerca de 5 anos segui uma publicação semelhante e desenvolvi um microkernel que começa da mesma forma, tem alguns aspectos a melhorar, mas pode interessar a você, roda em modo protegido, executa multitarefa e realiza virtualização de memória, ultimamente eu trabalhou nele driver de disco e drive de cd para torná-lo instalável e não apenas rodar em cd ao vivo ... Saudações.

  29.   Johan dito

    Caro, tenho um erro ao executar o comando:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 erro de sintaxe
    collect2: erro: ld retornou 1 status de saída

    link.ld
    . =0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    Na linha 5 não vejo o erro, alguém faz o mesmo?

    Estou trabalhando com um debian wheezy virtualizado no virtualbox

    1.    Imagem de Julian Reyes Escrigas placeholder dito

      Adicione o ";" no final de * (. multiboot_header)

  30.   Eric Orellana Romero dito

    Excelente iniciativa, com certeza irei acompanhar os capítulos deste post, pretendo aprender muito com isso. Muito obrigado por nos ensinar. Um único detalhe a este respeito, deve-se destacar que Linus Torvalds não é o criador de nenhum sistema operacional, ele criou o Kernel do sistema GNU / Linux (aquele que vem sendo utilizado em outro SO), que ainda vale a pena, mas é importante dar o crédito a Richard Stallman por criar a maior parte do sistema operacional.

    Muito obrigado pela contribuição e espero que considere minha observação.

  31.   Imagem de Julian Reyes Escrigas placeholder dito

    Estou mexendo no assunto há um tempo, me interessei assim que li a manchete. mas a mensagem continua recebendo

    erro: nenhum cabeçalho de inicialização múltipla encontrado.
    erro você precisa carregar o kernel primeiro

    Eu carreguei o que levei para um repositório no github https://github.com/rkmax/GenyOS

    1.    martin villalba dito

      A mesma coisa acontece comigo, você achou a solução?

  32.   Carlos dito

    uma questão comecei a apresentar a sintaxe e a linha do menuentry diz-me o comando não encontrado quem pode dizer-me o porquê
    isto é o que eu faço

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: comando não encontrado

    1.    AdrianArroyoStreet dito

      O conteúdo deste conteúdo não deve ser inserido na linha de comando, mas no arquivo que você cria chamado grub.cfg

  33.   Nodetin dito

    Excelente artigo, obrigado!

  34.   David dito

    Espetacular…!! é como o elo que faltava.

  35.   r.garciag dito

    Adoro seus tutoriais de Emulação de LInus Torvalds, mas há uma etapa que não entendo, a seguinte:
    Agora copiamos START.ELF para / next dentro de nossa pasta que simula a raiz de nosso sistema operacional. Vamos para a pasta raiz de nosso novo sistema operacional com o console e verificamos se há dois arquivos: um /boot/grub/grub.cfg e outro /next/START.ELF.

    Vamos para o diretório superior e chamamos um utilitário de criação de ISO com GRUB chamado grub-mkrescue

    Alguém poderia me explicar: p

    1.    AdrianArroyoStreet dito

      Simplesmente para gerar um ISO mínimo que o GRUB possa carregar, copiamos o kernel para (o / do ISO, qualquer pasta) /next/START.ELF e o arquivo de configuração do GRUB para (o / do ISO, qualquer pasta) / boot / grub / grub.cfg. Feito isso, ainda não instalamos o GRUB no ISO e existe um utilitário que gera o ISO a partir de uma pasta e instala o GRUB chamado grub-mkrescue. Então, finalmente terminaríamos com um ISO inicializável com GRUB instalado, que pode ler a configuração para executar START.ELF corretamente mais tarde. Não sei se me expliquei, mas o que fazemos é uma espécie de sistema de arquivos falso com o qual geramos uma ISO.

  36.   miguel jose guevara atenção dito

    Hottie

  37.   Miguel Moreno dito

    Bem, realmente olhe para um novo sistema não tanto, mas se estiver melhorando o linux, por exemplo, criando um exonúcleo linux com um componente servidor que atua como um micronúcleo se desejado, ou seja, uma estrutura exo com comportamento de micronúcleo que seria super e linux.

    A outra coisa é que não sou um especialista em programação, apenas alguns c ++ cafonas e alguns java, seria o suficiente para eu dar um módulo ao programa do kernel do linux, eliminá-lo, modificá-lo etc.

  38.   Soldado de Inverno53 dito

    Sem dúvida já tenho o que fazer nas férias.

  39.   Fermin dito

    Este é bom e em que programa ele projeta e codifica?
    por favor me dê essa resposta

  40.   Darkmind dito

    Ao compilar do seu git, recebo:

    [jmponce @ jar build] $ cmake ..
    - Criação do diretório NextRoot
    - Gerando script ISO
    make DESTDIR = próxima instalação
    ./iso.sh
    - Doxygen encontrado: / usr / bin / doxygen (versão encontrada "1.8.9")
    - Configuração feita
    - Geração feita
    - Os arquivos de compilação foram gravados em: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Verificando dependências do destino START.ELF
    [7%] Construindo objeto ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Construindo objeto CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Vinculando o executável CXX START.ELF
    / usr / bin / ld: incompatível /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a é ignorado durante a procura de -lgcc
    / usr / bin / ld: não é possível encontrar -lgcc
    collect2: erro: ld retornou status de saída 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Instruções com falha para o destino 'src / START.ELF'
    make [2]: *** [src / START.ELF] Erro 1
    CMakeFiles / Makefile2: 106: instruções para o destino 'src / CMakeFiles / START.ELF.dir / all' falharam
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Erro 2
    Makefile: 117: Falha nas instruções para o destino 'todos'
    make: *** [all] Erro 2

    1.    AdrianArroyoStreet dito

      O erro parece ser que ele não consegue encontrar o llibgcc, pois você tem a versão de 64 bits e atualmente o sistema de compilação é forçado a usar o de 32 bits. Você deve instalar um pacote de compatibilidade em sua distro ou melhor, usar um sistema de 32 bits.

      1.    Ronaldo Rodríguez dito

        Eu tenho 32 bits e obtenho o mesmo erro, você quer dizer o sistema operacional ou a arquitetura? o meu é de 64 bits, mas estou usando Ubuntu 32 bits, não pergunte, problemas financeiros, com isso digo tudo.

  41.   Jorge dito

    Excelente tema, aguardando maior abrangência. Saudações

  42.   John dito

    Ótimo, espero mais

  43.   Soid Perez dito

    Olá, sou um jovem embaixador que deseja criar um sistema operacional que suporte todos os programas e plataformas para que os desenvolvedores não tenham que ter máquinas ou aplicativos ou programas poderosos em um pc.
    É por isso que estou interessado neste post, mas quando eu faço o download do seu git ou tento criá-lo, tudo funciona até que eu execute o comando ./iso.sh ou grub-mkrescue -o nextdivel.iso nextroot você obtém este erro

    "Grub-mkrescue: aviso: Seu xorriso não suporta" –grub2-boot-info ". Algumas funções foram desativadas. Use xorriso 1.2.9 ou posterior ..
    grub-mkrescue: aviso: Seu xorriso não suporta "–grub2-boot-info". Sua imagem de kernel é muito grande. A inicialização do disco foi desativada. Use xorriso 1.2.9 ou posterior .. »
    Eu realmente não tenho ideia, pois sei muito sobre aplicativos e sites, mas não sei nada sobre o grub

    1.    AdrianArroyoStreet dito

      Pode ser necessário atualizar o programa xorriso em sua distro. Que distro e versão você usa?

      1.    Soid Pérez dito

        Eu uso o xubuntu 14.04lts e tento rodar o xorriso mas o shell me diz que não consegue encontrar e eu obtenho o apt-get install xorriso embora eu sinceramente esperasse alguma resposta porque tive uma experiência ruim ao instalar coisas que não conheço no linux hehe . Vou atualizá-lo agora e contar o que aconteceu

      2.    AdrianArroyoStreet dito

        Em seguida, instale o xorriso a partir do centro de software ou simplesmente do terminal faça "sudo apt-get install xorriso"

      3.    Soid Pérez dito

        Eu já fiz tudo o que você me disse e com o git e o meu recebo este xorriso 1.3.2: RockRidge filesystem manipulator, libburnia project.

        Drive current: -outdev 'stdio: nextdivel.iso'
        Mídia atual: arquivo stdio, substituível
        Status da mídia: está em branco
        Resumo da mídia: 0 sessões, 0 blocos de dados, 0 dados, 1901m livres
        Adicionado à imagem ISO: diretório '/'='/tmp/grub.OEqSzV'
        xorriso: ATUALIZAÇÃO: 546 arquivos adicionados em 1 segundo
        xorriso: FALHA: Não é possível determinar os atributos do arquivo de origem '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Não existe esse arquivo ou diretório
        xorriso: ATUALIZAÇÃO: 546 arquivos adicionados em 1 segundo
        xorriso: abortando: -abort_on 'FAILURE' encontrado 'FAILURE'
        E veludo cotelê eu não entendo minha estrutura é /nextroot/boot/grub/grub.cfg e nextroot / next / START.ELF

      4.    Soid Pérez dito

        Obrigado, estou pronto para seguir em frente, um amigo me ajudou e me disse que o que eu fiz de errado foi a organização da diretoria, então resolvi e pronto.

      5.    erik dito

        Com licença, você pode me dizer qual procedimento você executou desde que recebo o erro nada para inicializar: nenhum arquivo ou diretório

        nenhum dispositivo inicializável.

  44.   jose dito

    Saudações! Eu ia te pedir o favor se você pudesse me enviar um e-mail com o que você explica aqui, fiquei um pouco confuso e preciso comparar o que tenho com o que você explica, talvez o que não está claro para mim é se a criação do grub.cfg é feita no terminal gcc ou onde exatamente? muito obrigado amigo!

    1.    AdrianArroyoStreet dito

      Você cria o arquivo grub.cfg com qualquer editor de texto e deve salvá-lo em PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano dito

    Olá Adrian, antes de mais nada parabéns e obrigado pela sua contribuição.

    Você sabe que estou fazendo isso para uma prática e comecei a montá-lo seguindo suas aulas particulares, porém depois de começar encontrei o primeiro erro

    $ as -o kernel.o -c kernel.asm
    bash: as: comando não encontrado ...
    Comandos semelhantes são:
    's'
    'ac'

    Estou trabalhando no fedora 20 e não consigo encontrar uma solução a esse respeito, gostaria de receber sua orientação sobre se devo mudar algo no gcc ou gas

    obrigado antecipadamente

    1.    AdrianArroyoStreet dito

      Você deve instalar o GAS para que eu possa ver o código do erro. Eu não tenho o Fedora em mãos, mas em teoria se você instalar o gcc-c ++, você instalará todo o pacote GCC e GNU como normalmente vem com ele.

  46.   Gaston Ramirez dito

    Estou com vocês, sei alguma coisa sobre C ++, C # (embora este último não seja muito útil nesse assunto) o ruim é que ainda me falta experiência, nunca lido com linguagem C, sua publicação é ótima, Não tenho muito a dizer, se tiver tempo, vejo. Obrigado.

  47.   Teresita de Jesus Nah Sanchez dito

    Muito obrigado pela grande ajuda….

  48.   JKY dito

    Eu amo linux é o melhor bairro que existe, a verdade do meu windows é lixo a um que eu sei que o criador do linux é o criador do windows

  49.   Rode dito

    Olá, recebo um erro no grub diz
    erro: arquivo /next/START.ELF Não encontrado
    erro: você precisa carregar o kernel primeiro

    Você poderia me ajudar e pesquisei, mas não consigo encontrar

  50.   Enrique Ávila dito

    Por favor, como faço para mostrar a mensagem OLÁ, MUNDO? Sou iniciante e ainda não sei o suficiente

  51.   CARLOS GUERRERO ÁLVAREZ dito

    O seguinte acontece comigo:
    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 contra o símbolo `pilha 'não pode ser usado ao fazer um objeto PIE; recompilar com -fPIE
    / usr / bin / ld: falha no link final: seção não representável na saída
    collect2: erro: ld retornou 1 status de saída