Git Product home page Git Product logo

kernel's Introduction

The kernel for Gramado OS.

    gramadoOS
Building an operating system is a good way to understand how systems work and
the software stack needed to run your favorite application. But remember It's not
the best way to make money easily. So if you want to earn money easily,
go to the high demand area, which is probably the top layer of the stack,
which It is the place where web applications are made,
it includes front-end and back-end layers.

Here are some screenshots of Gramado Operating System.

Screenshot Screenshot

What is Gramado Operating System?

GramadoOS is a graphical operating system for x86_64 computers.

What is the category it belongs to?

Gramado is a hobby operating system, not a commercial operating system, because it is a small system and has only some few features, not all the features needed by a commercial operating system.

Kernel features.

  • hw - cpu: Intel and AMD. 64bit only.
  • hw - mm: Paging. Chunck of 2MB, using 4KB pages.
  • hw - blk device: IDE PATA.
  • hw - char device: ps/2 keyboard.
  • hw - char device: ps/2 mouse works fine only on qemu.
  • hw - char device: Serial port. (COM). Used for debug.
  • hw - network device: e1000 Intel NIC. Works on Oracle virtual box.
  • sw - Processes: Process structure and Thread structure.
  • sw - Scheduler: Round robin. (Threads only).
  • sw - Syscalls using software interrups. (Traps).
  • sw - IPC: sockets.
  • sw - IPC: System messages using a queue in the thread structure.
  • sw - tty: It has 4 ring 0 kernel virtual consoles in fullscreen raw mode.
  • sw - tty: General use ttys and ptys for ring3 virtual terminals.
  • sw - fs: FAT16 file system for boot partition. No system partition yet.
  • sw - posix libc: Ring0 implementation of libc functions called by the ring3 libraries.
  • sw - network: Small support for sockets.
  • sw - network: Small ring0 implementation of protocol stack. (ETHERNET, ARP, IP, UDP, TCP and DHCP).
  • sw - display: Bootloader display device. VESA.
  • sw - user: Very small implementation of user structure.
  • sw - APIs:
  • sw - One loadable ring0 module, using static address.

Userland features.

  • Display Server.
  • Unix-like commands running in the virtual console.
  • Some few clients connected to the display server via unix-sockets.
  • Ring3 processes can access the i/o ports via syscall. (For ring3 drivers only).

userland system programs.

  • The network server.

The source code.

You can find the source code on Github in the internet, where you can clone the repository, contribute to the project or download the code. The address is https://github.com/gramado/kernel. We ned to import some dependencies to get the posix commands, the display server and the client-side GUI applications.

A description of the directories in the Gramado source code.

The next few lines has a brief description of the subdirectories:
 ... #todo

Who are the developers?

The main developer is Fred Nora, a brazilian developer. Fred Nora is the creator and main maintainer of the project. Contributions are welcome.

Building and running on vm

$ make
$ ./run

Clean up the unused files to make a fresh compilation

$ make clean-all

What are the host machine to build the project?

For now the system has been compiled on Ubuntu operating system, LTS releases.

    Host machine: Ubuntu 20.04.5 LTS
    Linux 5.4.0-146-generic x86_64
    gcc (Ubuntu) 9.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.34
    NASM version 2.14.02
    Host machine: Ubuntu 22.04.2 LTS
    Linux 5.15.0-78-generic x86_64
    gcc (Ubuntu) 11.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.38
    NASM version 2.15.05
    Host machine: Ubuntu 22.04.2 LTS
    Linux 5.15.0-83-generic x86_64
    gcc (Ubuntu) 11.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.38
    NASM version 2.15.05
    Host machine: Ubuntu 22.04.2 LTS
    Linux 5.15.0-84-generic x86_64
    gcc (Ubuntu) 11.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.38
    NASM version 2.15.05
    Host machine: Ubuntu 22.04.2 LTS
    Linux 5.15.0-87-generic x86_64
    gcc (Ubuntu) 11.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.38
    NASM version 2.15.05
    Host machine: Ubuntu 22.04.2 LTS
    Linux 5.15.0-89-generic x86_64
    gcc (Ubuntu) 11.4.0 
    GNU ld (GNU Binutils for Ubuntu) 2.38
    NASM version 2.15.05

Can I test the system on a virtual machine?

Yes, you can test the system on a virtual machine. The system has been tested by Fred Nora on qemu, qemu with kvm and virtualbox. Now, Fred Nora is testing the system only on qemu and virtualbox.

Can I test the system on a real machine?

Yes, we can test the system in the real machines. This way we can improve the system. The older versions of the system were tested for a long period of time on a real machine. That machine was a Gigabyte machine with an Intel Core 2 Duo processor and a VIA chipset.

Do we need some feedback from the users and from the developers?

Yes, we need some feedback. Please make some comments on Github or send messages to Fred Nora.

Author

Contributors

How to Build?

See the Gramado OS build instructions

Warning

You're reaching the boring area of this document!

Documentation

The project has a folder for documentation and design notes. The folder is docs/.

See the docs.

The project is looking for some people to create a better documentation, for free, as a contribuition to the open source community. To create this new documentation we can use the documentation in docs/ and the design notes found all over the project.

License

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

Quotes:

  * Transfiguration
  * "Close to the borders and beyond." (Grace).

kernel's People

Contributors

frednora avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kernel's Issues

Help: Compiling

Compiling Gramado on Linux.

Linux 5.0.21-1-MANJARO x86_64
gcc (GCC) 9.1.0
GNU ld (GNU Binutils) 2.32
NASM version 2.14.02 compiled on Jan 22 2019

Help: Tests

OK, i need some good souls to test the system and report the bugs.

Help: libc

The libc needs a better support for file operations.

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 !

Programs: Is it in the goals building and running other C programs directly from Gramado?

G'day to Gramado developers.
I've been following this work since it started (I think since 2020, if I'm not mistaken) and I was thinking if it would be possible to build other C programs written to UNIX on it.
I haven't looked at the source code and documentation yet, but I'm asking this because I thought about building the Heirloom NG set of utilities on it and see if it can run/the toolset that I maintain is portable enough.

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 ?

./run script: Qemu isn't able to run the virtual disk

Hello. I got this error when trying to execute the ./run command:

Unable to init server: Could not connect: Connection refused
WARNING: Image format was not specified for 'GRAMADO.VHD' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.

Maybe this can help:
https://askubuntu.com/questions/883491/qemu-warning-image-format-was-not-specified-for-flash0-img-and-probing-guess

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

```

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

[Update] Done. Now the whole system is running very well in 64bit. :)

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

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.