Gramado OS 64bit

Overview

Welcome to Gramado OS - Codename 'Presence'

This repository has the source code for:

  • Gramado boot loader
  • Gramado kernel
  • Gramado Window Server
  • Applications
  • Commands

What is Gramado?

Gramado (c) is a 64bit multithreaded operating system.

Kernel features.

  • Paging.
  • Threads.
  • FAT16 file system.
  • ps/2 keyboard.
  • ps/2 mouse works fine only on qemu.
  • Serial port.
  • IDE PATA.
  • Window Server. See: gramado/core/

Userland features.

  • Unix-like commands running in the virtual console.
  • Some few clients connected to the window server via unix-sockets.

Libraries.

  • unix-like library. (rtl)
  • Lib for the window server's clients. (libgws)

Fred's compilation on Linux.

    Host machine: Ubuntu 18.04.5 LTS
    Linux 5.4.0-77-generic x86_64
    gcc (Ubuntu) 7.5.0 
    GNU ld (GNU Binutils for Ubuntu) 2.30
    NASM version 2.13.02

How to Build?

See the Gramado OS build instructions

Testing

	$ ./run
	$ make qemu-test

Tested only on qemu and on my real machine. My machine: Gigabyte/Intel Core 2 Duo/Chipset VIA. Please, give us some feedback.

Documentation

See the docs. See the DOCS.

More information

Gramado is a Free and Open Source operating system. The source code uses the BSD license.

Quotes:

Oh boy, there is no spoon!

Issues
  • Compilar: Não é possível compilar usando o GCC 10

    Compilar: Não é possível compilar usando o GCC 10

    Várias receitas falham com diversos erros de múltiplas definições de variáveis globais. Acredito que a causa disso seja a flag "-fno-common" que agora é padrão no GCC 10.

    Uma gambiarra é adicionar -fcommon às CFLAGS dos Makefiles para ter o comportamento das versões anteriores do compilador, mas pra resolver só adicionando extern às variáveis.

    Documentação do GCC sobre o assunto aqui.

    Exemplo dos erros no linker:

    ld -m i386pe -T link.ld -o BL.BIN head.o main.o loader.o init.o ports.o x86.o stdio.o stdlib.o string.o keyboard.o pci.o hdd.o ide.o timer.o pages.o heap.o procedure.o fs.o shell.o r_render.o abort.o faults.o      
    ld: loader.o:(.bss+0x0): múltiplas definições de "current_mode"; main.o:(.bss+0x0): definido primeiro aqui
    ld: loader.o:(.bss+0x20): múltiplas definições de "BootBlock"; main.o:(.bss+0x20): definido primeiro aqui
    ld: loader.o:(.bss+0x50): múltiplas definições de "gdefLegacyBIOSBoot"; main.o:(.bss+0x50): definido primeiro aqui
    ld: loader.o:(.bss+0x54): múltiplas definições de "gdefEFIBoot"; main.o:(.bss+0x54): definido primeiro aqui
    ld: loader.o:(.bss+0x58): múltiplas definições de "gdefSafeBoot"; main.o:(.bss+0x58): definido primeiro aqui
    ld: loader.o:(.bss+0x5c): múltiplas definições de "gdefShowLogo"; main.o:(.bss+0x5c): definido primeiro aqui
    ld: loader.o:(.bss+0x60): múltiplas definições de "gdefShowProgressBar"; main.o:(.bss+0x60): definido primeiro aqui
    ld: loader.o:(.bss+0x64): múltiplas definições de "____testing_memory_size_flag"; main.o:(.bss+0x64): definido primeiro aqui
    ld: loader.o:(.bss+0x68): múltiplas definições de "__last_valid_address"; main.o:(.bss+0x68): definido primeiro aqui
    ld: loader.o:(.bss+0x6c): múltiplas definições de "heapCount"; main.o:(.bss+0x6c): definido primeiro aqui
    ld: loader.o:(.bss+0x70): múltiplas definições de "bl_heap_start"; main.o:(.bss+0x70): definido primeiro aqui
    ld: loader.o:(.bss+0x74): múltiplas definições de "bl_heap_end"; main.o:(.bss+0x74): definido primeiro aqui
    ld: loader.o:(.bss+0x78): múltiplas definições de "g_heap_pointer"; main.o:(.bss+0x78): definido primeiro aqui
    ld: loader.o:(.bss+0x7c): múltiplas definições de "g_available_heap"; main.o:(.bss+0x7c): definido primeiro aqui
    ld: loader.o:(.bss+0x80): múltiplas definições de "mmblockCount"; main.o:(.bss+0x80): definido primeiro aqui
    ld: loader.o:(.bss+0x84): múltiplas definições de "current_mmblock"; main.o:(.bss+0x84): definido primeiro aqui
    ld: loader.o:(.bss+0xa0): múltiplas definições de "mmblockList"; main.o:(.bss+0xa0): definido primeiro aqui
    ld: loader.o:(.bss+0x4a0): múltiplas definições de "heapList"; main.o:(.bss+0x4a0): definido primeiro aqui
    ld: loader.o:(.bss+0x4c0): múltiplas definições de "bliTesting"; main.o:(.bss+0x4c0): definido primeiro aqui
    ld: loader.o:(.bss+0x4c4): múltiplas definições de "g_fat16_root_status"; main.o:(.bss+0x4c4): definido primeiro aqui
    ld: loader.o:(.bss+0x4c8): múltiplas definições de "g_fat16_fat_status"; main.o:(.bss+0x4c8): definido primeiro aqui
    ld: loader.o:(.bss+0x4cc): múltiplas definições de "g_file_system_type"; main.o:(.bss+0x4cc): definido primeiro aqui
    ld: loader.o:(.bss+0x4e0): múltiplas definições de "buffer_dir_entry"; main.o:(.bss+0x4e0): definido primeiro aqui
    ld: loader.o:(.bss+0x6e0): múltiplas definições de "file_cluster_list"; main.o:(.bss+0x6e0): definido primeiro aqui
    ld: loader.o:(.bss+0xee0): múltiplas definições de "partition"; main.o:(.bss+0xee0): definido primeiro aqui
    ld: loader.o:(.bss+0xef0): múltiplas definições de "keyboard_queue_tail"; main.o:(.bss+0xef0): definido primeiro aqui
    ld: loader.o:(.bss+0xef4): múltiplas definições de "keyboard_queue_head"; main.o:(.bss+0xef4): definido primeiro aqui
    ld: loader.o:(.bss+0xef8): múltiplas definições de "keyboard_queue"; main.o:(.bss+0xef8): definido primeiro aqui
    ld: loader.o:(.bss+0xf00): múltiplas definições de "keyboard_flag"; main.o:(.bss+0xf00): definido primeiro aqui
    ld: loader.o:(.bss+0xf04): múltiplas definições de "ATAFlag"; main.o:(.bss+0xf04): definido primeiro aqui
    ld: loader.o:(.bss+0xf20): múltiplas definições de "dev_nport"; main.o:(.bss+0xf20): definido primeiro aqui
    ld: loader.o:(.bss+0xf40): múltiplas definições de "ata_pci"; main.o:(.bss+0xf40): definido primeiro aqui
    ld: loader.o:(.bss+0xf74): múltiplas definições de "ata"; main.o:(.bss+0xf74): definido primeiro aqui
    ld: loader.o:(.bss+0xf8c): múltiplas definições de "ata_identify_dev_buf"; main.o:(.bss+0xf8c): definido primeiro aqui
    ld: loader.o:(.bss+0xf90): múltiplas definições de "ata_record_dev"; main.o:(.bss+0xf90): definido primeiro aqui
    ld: loader.o:(.bss+0xf91): múltiplas definições de "ata_record_channel"; main.o:(.bss+0xf91): definido primeiro aqui
    ld: loader.o:(.bss+0xf94): múltiplas definições de "g_current_ide_channel"; main.o:(.bss+0xf94): definido primeiro aqui
    ld: loader.o:(.bss+0xf98): múltiplas definições de "g_current_ide_device"; main.o:(.bss+0xf98): definido primeiro aqui
    ld: loader.o:(.bss+0xfa0): múltiplas definições de "ide_ports"; main.o:(.bss+0xfa0): definido primeiro aqui
    ld: loader.o:(.bss+0x1000): múltiplas definições de "ide_handler_address"; main.o:(.bss+0x1000): definido primeiro aqui
    ld: loader.o:(.bss+0x1020): múltiplas definições de "idechannelList"; main.o:(.bss+0x1020): definido primeiro aqui
    ld: loader.o:(.bss+0x10e0): múltiplas definições de "IDE"; main.o:(.bss+0x10e0): definido primeiro aqui
    ld: loader.o:(.bss+0x1100): múltiplas definições de "prompt"; main.o:(.bss+0x1100): definido primeiro aqui
    ld: loader.o:(.bss+0x11fc): múltiplas definições de "prompt_pos"; main.o:(.bss+0x11fc): definido primeiro aqui
    ld: loader.o:(.bss+0x1200): múltiplas definições de "g_cmd_status"; main.o:(.bss+0x1200): definido primeiro aqui
    ld: loader.o:(.bss+0x1204): múltiplas definições de "g_initialized"; main.o:(.bss+0x1204): definido primeiro aqui
    ld: loader.o:(.bss+0x1208): múltiplas definições de "g_driver_hdd_initialized"; main.o:(.bss+0x1208): definido primeiro aqui
    ld: loader.o:(.bss+0x120c): múltiplas definições de "g_cursor_x"; main.o:(.bss+0x120c): definido primeiro aqui
    ld: loader.o:(.bss+0x1210): múltiplas definições de "g_cursor_y"; main.o:(.bss+0x1210): definido primeiro aqui
    ld: loader.o:(.bss+0x1214): múltiplas definições de "g_system_color"; main.o:(.bss+0x1214): definido primeiro aqui
    ld: loader.o:(.bss+0x1218): múltiplas definições de "g_char_attrib"; main.o:(.bss+0x1218): definido primeiro aqui
    ld: loader.o:(.bss+0x121c): múltiplas definições de "CURSOR_X"; main.o:(.bss+0x121c): definido primeiro aqui
    ld: loader.o:(.bss+0x1220): múltiplas definições de "CURSOR_Y"; main.o:(.bss+0x1220): definido primeiro aqui
    ld: loader.o:(.bss+0x1224): múltiplas definições de "STATUS_X"; main.o:(.bss+0x1224): definido primeiro aqui
    ld: loader.o:(.bss+0x1228): múltiplas definições de "STATUS_Y"; main.o:(.bss+0x1228): definido primeiro aqui
    ld: loader.o:(.bss+0x122c): múltiplas definições de "EDITBOX_X"; main.o:(.bss+0x122c): definido primeiro aqui
    ld: loader.o:(.bss+0x1230): múltiplas definições de "EDITBOX_Y"; main.o:(.bss+0x1230): definido primeiro aqui
    ld: loader.o:(.bss+0x1234): múltiplas definições de "EDITBOX_LARGURA"; main.o:(.bss+0x1234): definido primeiro aqui
    ld: loader.o:(.bss+0x1238): múltiplas definições de "EDITBOX_ALTURA"; main.o:(.bss+0x1238): definido primeiro aqui
    ld: loader.o:(.bss+0x123c): múltiplas definições de "EDITBOX_BG_COLOR"; main.o:(.bss+0x123c): definido primeiro aqui
    ld: loader.o:(.bss+0x1240): múltiplas definições de "EDITBOX_TEXT_COLOR"; main.o:(.bss+0x1240): definido primeiro aqui
    ld: loader.o:(.bss+0x1244): múltiplas definições de "LegacyCR3"; main.o:(.bss+0x1244): definido primeiro aqui
    ld: loader.o:(.bss+0x1248): múltiplas definições de "BootLoaderCR3"; main.o:(.bss+0x1248): definido primeiro aqui
    ld: loader.o:(.bss+0x124c): múltiplas definições de "useGUI"; main.o:(.bss+0x124c): definido primeiro aqui
    ld: loader.o:(.bss+0x1250): múltiplas definições de "g_proc_status"; main.o:(.bss+0x1250): definido primeiro aqui
    ld: loader.o:(.bss+0x1254): múltiplas definições de "g_next_app"; main.o:(.bss+0x1254): definido primeiro aqui
    ld: loader.o:(.bss+0x1258): múltiplas definições de "g_next_proc"; main.o:(.bss+0x1258): definido primeiro aqui
    ld: loader.o:(.bss+0x125c): múltiplas definições de "g_nova_mensagem"; main.o:(.bss+0x125c): definido primeiro aqui
    ld: loader.o:(.bss+0x1260): múltiplas definições de "next_address"; main.o:(.bss+0x1260): definido primeiro aqui
    ld: loader.o:(.bss+0x1264): múltiplas definições de "g_lbf_pa"; main.o:(.bss+0x1264): definido primeiro aqui
    ld: loader.o:(.bss+0x1268): múltiplas definições de "g_lbf_va"; main.o:(.bss+0x1268): definido primeiro aqui
    ld: loader.o:(.bss+0x126c): múltiplas definições de "system_info"; main.o:(.bss+0x126c): definido primeiro aqui
    ld: loader.o:(.bss+0x1274): múltiplas definições de "VideoBlock"; main.o:(.bss+0x1274): definido primeiro aqui
    ld: loader.o:(.bss+0x1290): múltiplas definições de "vesa_mode"; main.o:(.bss+0x1290): definido primeiro aqui
    ld: loader.o:(.bss+0x12a0): múltiplas definições de "procedure_info"; main.o:(.bss+0x12a0): definido primeiro aqui
    ld: loader.o:(.bss+0x12b0): múltiplas definições de "menu_highlight"; main.o:(.bss+0x12b0): definido primeiro aqui
    ld: loader.o:(.bss+0x12c0): múltiplas definições de "MENU"; main.o:(.bss+0x12c0): definido primeiro aqui
    ...
    make[1]: *** [Makefile:112: link-x86] Erro 1
    make[1]: Saindo do diretório '/home/gabriel/git/gramado/boot/x86/2bl'
    
    make: *** [Makefile:133: land-os] Erro 2
    
    ```
    test 
    opened by gabrielhom 14
  • Help: Kernel Development [pt-br]

    Help: Kernel Development [pt-br]

    Oi Fred, Então, sei que muita parte do desenvolvimento, você está codando sozinho. Queria saber se não tem como vc dispôr em algo as etapas que precisam pra galera, até eu, te ajudar. Seu projeto é muito bacana, vlw !

    help wanted 
    opened by Jonatha-Varjao 6
  • compiling: Erro ao executar make pela 1º vez

    compiling: Erro ao executar make pela 1º vez

    Toda vez que eu baixo pela primeira vez e dou um $ make, o terminal retorna isso: image E no emulador: image Mas se no mesmo momento eu executar $ make de novo tudo funciona: image image

    test 
    opened by Jmallone 4
  • Running the Makefile Requires Superuser

    Running the Makefile Requires Superuser

    Call me paranoid, but I'm very weary to run someones build scripts as a superuser.

    It would be nice if visitors of the project could compile without feeling like their putting their system at risk.

    opened by ghost 4
  • gws: Calling the gws client

    gws: Calling the gws client

    After uses gws command in virtual terminal, starts an infinite loop with this following code:

    sys_connect: AF_GRAMADO ok
    sys_connect: sProcess fail
    sc2: [19] write
    
    
    test 
    opened by zBl4ckUser 1
  • Vagrantfile to setup Gramado build environment

    Vagrantfile to setup Gramado build environment

    This PR adds in a Vagrantfile that sets up a Manjaro VM with all the tools to build Gramado setup (GCC, NASM, ect). This makes it easier to mess around with and build Gramado without requiring the exact same setup (or any risk to your system).

    image

    opened by MacDue 1
  • Makefile: add make file and compile script

    Makefile: add make file and compile script

    This add script to compile kernel from makefile in a linux distro. My computer versions, and toolchains:

    Mint 19 gcc 7.3 gnu linker 2.30 nasm 2.13.02

    Run ./compile to compile, generate a new KERNEL.BIN and a virtual disk with the binaries in bin/ The result is a GRAMADO.VHD binary. This is compatible with debian distros for check package dependencies for toolchain.

    Signed-off-by: Matheus Castello [email protected]

    enhancement 
    opened by microhobby 1
  • Gramado 64bit

    Gramado 64bit

    Im rebuilding Gramado operating system for the 64bit archtechture. I'm just copying all the files from the old 32bit version of Gramado, creating or changing some files . This is gonna be easier to port the ring3 stuff. I guess. This is a work in progress ;)

    enhancement 
    opened by frednora 4
  • How to compile ?

    How to compile ?

    When I ran ./run happen this error "qemu-system-x86_64: -hda GRAMADO.VHD: Could not open 'GRAMADO.VHD': No such file or directory"

    How can I create this GRAMADO.VHD ?

    opened by luandkg 1
Owner
Fred Nora
osdev, C and Assembly.
Fred Nora
Backup for Gramado Build 241 - (32bit)

Welcome to Gramado 1.1.241 32bit This repository has the source code for: Gramado boot loader Gramado kernel Gramado Window Server Applications Comman

Fred Nora 1 Jul 16, 2022
Gramado Field - It is a 64bit operating system.

Welcome to Gramado OS - Codename 'Field' This repository has the source code for: Gramado boot loader Gramado kernel Gramado Window Server Application

Gramado 8 Jul 16, 2022
Backup for Gramado Build 241 - (32bit)

Welcome to Gramado 1.1.241 32bit This repository has the source code for: Gramado boot loader Gramado kernel Gramado Window Server Applications Comman

Fred Nora 1 Jul 16, 2022