Ir ao conteúdo
  • Cadastre-se

C++ Como criar um OS em C++?


b.0463
Ir à solução Resolvido por kgin,

Posts recomendados

estava aprendendo C com um livro (C Completo e Total 5°edição) com o compilador GCC. depois de entender como funciona eu comecei a aprender C++ no Visual C++. queria criar um sistema operacional CLI do 0 com c++, só que pra isso precisaria de um compilador que ao invés de criar um .exe ou .out criasse um arquivo binário. e de qualquer modo não conheço nenhum compilador que faça isso e nem uma base de como começar um sistema operacional em c++. tentei pesquisar mas não aparece nada objetivo. quem poder indicar um compilador para binários e uma base de como programar isso...

  • Amei 1
  • Haha 2
Link para o comentário
Compartilhar em outros sites

@b.0463    o inicio  da criação de um sistema operacional  geralmente é feita usando a linguagem "Assembly"  ,  pois com ela se torna mais fácil colocar um loader nos 512 bytes do setor zero do disco rígido , a MBR   , e em Assembly são aproveitados ao máximo e com grande controle sobre cada byte ,  e um sistema bem simples que funciona sem necessidade de ter nenhum outro instalado na máquina ,   pode ser observado nesse Link 

https://www.fergonez.net/articles/sistoper

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@devair1010 eu juro que passei o dia procurando alguma base para isso. e tive a ideia de ver o source do ms-dos mas tá em assembly e não achei informação de compilador. tentei baixar compiladores mas não achei nada que funciona corretamente como era pra ser. muitos sites e programas obsoletos, alguns nem existe mais. tentei aprender pra 6502 mas só pra baixar o emulador foi um saco. depois que baixei não tinha nenhuma base de como fazer e absolutamente nada na internet. assembly tem muitas variações e nenhuma funciona do jeito que era pra ser. e não existe nada que seja entendivel. e quando peço ajuda é sempre a mesma coisa: "aprende assembly" e ao invés de mostrar um código básico ou mostrar o que eu devo fazer com o assembly. ou no mínimo algum compilador e onde baixalo não faz nada.

@devair1010 este link que você mandou parece promissor mas... image.png.433260afa528d6da395c3f4fc7b2e18e.png

e também o programa parece que saio expresso windwos95image.png.4f865e725074ec0bb604a54982d88097.png

sem contar que
image.png.69c7f7484c5267310338e011ef824c99.png

"é recomendável ter algum conhecimento sobre ela." já volta para o começo. em que para aprender assembly precisa saber assembly. eu realmente não entendo a logica de isso ser tão fechado na internet.

ao tentar baixar o PRIMEIRO programa ele manda pra um site que redireciona para isto:image.thumb.png.4078942f88b0bbff73435cb159fab9f4.png

depois de procurar esternamente consegui o 8086 mas o segundo programa realmente não esta disponivelimage.png.b6c6a6189cc611e58b549c891151fb3d.png

image.png.0c5360afec69fbc9f581bcec7820c4ee.png

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010 depois de muito trabalho eu consegui fazer o programa e compilar. apos isso eu foi criar a iso e tive MUITOS problemas. no final consegui fazer a iso com o AnyTolSO. com isso eu user o rufus para bootar o meu pendrive mas deu erro. então eu modifiquei os arquivos do meu pendrive para os .bin. ao iniciar o computador ele pede boot no pendrive. eu dou boot mas aparece "bootmgr is missing" pesquisando descobri que boot.bin era pra ser bootmgr. apos modificar o rufus reconheceu e bootou. ele criou 2 arquivos a + com uma imagem de icone e um arquivo de configuração. ao bootar o pendrive não acontece nada a não ser ficar piscando o cursor. e tenho que desligar na tomada. no tutorial aparece ele colocando kernel.bin em offset 512 mas como o aplicativo que ele estava usando era obsoleto e não existe mais não foi possível utilizalo. então eu travei lessa parte. se tiver algum programa que consiga criar iso com offset dos arquivos modificavel eu agradeço.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, b.0463 disse:

@devair1010 depois de muito trabalho eu consegui fazer o programa e compilar. apos isso eu foi criar a iso e tive MUITOS problemas. no final consegui fazer a iso com o AnyTolSO. com isso eu user o rufus para bootar o meu pendrive mas deu erro. então eu modifiquei os arquivos do meu pendrive para os .bin. ao iniciar o computador ele pede boot no pendrive. eu dou boot mas aparece "bootmgr is missing" pesquisando descobri que boot.bin era pra ser bootmgr. apos modificar o rufus reconheceu e bootou. ele criou 2 arquivos a + com uma imagem de icone e um arquivo de configuração. ao bootar o pendrive não acontece nada a não ser ficar piscando o cursor. e tenho que desligar na tomada. no tutorial aparece ele colocando kernel.bin em offset 512 mas como o aplicativo que ele estava usando era obsoleto e não existe mais não foi possível utilizalo. então eu travei lessa parte. se tiver algum programa que consiga criar iso com offset dos arquivos modificavel eu agradeço.

 

 

Pelo que vi o link está ensinando sistema operacional de 16 bits para x86, deve ser esse o problema

 

Segue um outro link https://wiki.osdev.org/Bare_Bones#Writing_a_kernel_in_C

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@b.0463    até essa parte que você falou ,  também fiz ,  e ficou aí mesmo ,  ainda estou testando algum modo  de que funcione .  pois ali é apenas uma base ,  de como se inicia um  SO no pc ,  e creio que com tempo podemos conseguir faze lo funcionar bem ,  mas isso seria apenas para um teste , mesmo ,  pois para fazer um  SO de verdade com todos os comando e funcionalidades do Windows ,  seria trabalhoso demais ,  imagino que uma pessoa apenas , demoraria uma década para terminar um sistema Operacinal ; pronto

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010 eu consegui finalmente. mas não perfeitamente. o boot.bin tenque ser bootmgr. e no programa de criar iso que eu achei o offset do kernel.bin tenque estar no 512 mas não achei programa que de pra modificar o offset dele então modifiquei o kernel.bin para bootmgr. ele boota o kernel diretamente.

@Matheus Maldi na ver4dade não. o problema é que é um metodo antigo. ele esta usando programas que não existe mais e baseando-se em disquetes. eu não tenho nem disquete nem leitor e ninguem que tenha os programas.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução
Em 29/04/2022 às 13:28, b.0463 disse:

só que pra isso precisaria de um compilador que ao invés de criar um .exe ou .out criasse um arquivo binário. e de qualquer modo não conheço nenhum compilador que faça isso e nem uma base de como começar um sistema operacional em c++.

Quase todos os compiladores fazem, mas isso depende das bibliotecas que você está usando.

para fazer isso no GCC basta fazer isso.

$ gcc -c testes.c     
$ objcopy -O binary -j .text testes.o binfile

esse comando vai pegar só o conteúdo executável do binário.

 

Se você quer entrar nessa empreitada de fazer um sistema operacional eu recomendo aprender assembly,

mas mais precisamente assembly do x86 16-bits.

Alguns links úteis.

Baixe o dosbox, tasm e turbo C e crie um ambiente de programação em dos para brincar um pouco.

Depois tente algo mais serio como fazer um bootloader.

minimal bootloader

 

Esse vídeo explica bem os passos mínimos para construir um sistema operacional.

 

E mais uma porrada de links que valem dar uma olhada.

Eh eu recomendo você aprender a usar o qemu para rodar seus testes ao invés de uma maquina real.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@kgin eu achei alguams vídeo aulas no youtube "DSOS" da BFTC que ensina a fazer um sistema operacional simples com assembly x86_64, e é de 1 a 2 anos. em relação ao compilador, que era uma das minha duvidas, ajudou muito mesmo. eu uso o compilador do visual studio, eu esqueci o nome dele mas provavelmente tem opção de binarios.
@devair1010 em relação ao tutorial da fergos esta maio desatualizado, alem de usar o compilador de um emulador de 8086, não dava pra modificar o offset dos arquivos por causa do fergoraw com problema. o fergoraw eu consegui resolver depois mas mesmo assim ele não explicada diretamente o codigo e nem como implementar outra linguagem. mesmo assim agradeço pela ajuda, que já deu uma base de como rodar o sistema.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...