Giter Club home page Giter Club logo

pluto's Introduction

Pluto

Pluto is just a project to learn low-level programming. Feel free to contribute :)

Installation / boot guide

Requires a bootable flash drive

  • Run makefile: make pluto.iso, compilation may take some time
  • After the process is finished pluto.iso file will be present is the same folder
  • Let DD restore a hdd from the image created in the first step: dd if=pluto.iso of=/dev/sdX && sync
    • Note: replace X with name of your flash disk drive
    • This name can be easily obtained from the Disks app -> device location
  • Restart the computer
  • While booting press F8/F9/F12/ESC/DEL and from the boot section select the plugged flash disk as a first option
  • Save the changes and restart
  • Pluto should now boot automatically

Splash bug?

Feel free to open an issue due to Pluto being in dev right now bugs may appear. Our team will resolve the issue asap, keep in mind there are no stable versions so far.

License

GPL 3.0 standard license. In detail here.

pluto's People

Contributors

jozefnagy1133 avatar langriklol avatar lofcz avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

jozefnagy1133

pluto's Issues

unable to compile

It is not clear to me how to compile this project. Based on the instructions in README.md, I tried to run make pluto.iso in the make-build-debug directory (as it was the only directory that contained makefile) but it did not work:

$ make pluto.iso
mkdir -p obj
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/multitasking.o ../src/drivers/multitasking.cpp
mkdir -p obj/hardwarecommunication
as --32 -o obj/hardwarecommunication/interruptstubs.o ../src/hardwarecommunication/interruptstubs.s
mkdir -p obj
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/syscalls.o ../src/drivers/syscalls.cpp
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/arp.o ../src/drivers/net/arp.cpp
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/ipv4.o ../src/drivers/net/ipv4.cpp
../src/drivers/net/ipv4.cpp: In member function ‘virtual bool pluto::net::InternetProtocolHandler::OnInternetProtocolReceived(pluto::common::uint32_t, pluto::common::uint32_t, pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/ipv4.cpp:23:67: warning: unused parameter ‘srcIP_BE’ [-Wunused-parameter]
 bool InternetProtocolHandler::OnInternetProtocolReceived(uint32_t srcIP_BE, uint32_t dstIP_BE,
                                                          ~~~~~~~~~^~~~~~~~
../src/drivers/net/ipv4.cpp:23:86: warning: unused parameter ‘dstIP_BE’ [-Wunused-parameter]
 bool InternetProtocolHandler::OnInternetProtocolReceived(uint32_t srcIP_BE, uint32_t dstIP_BE,
                                                                             ~~~~~~~~~^~~~~~~~
../src/drivers/net/ipv4.cpp:24:54: warning: unused parameter ‘internetprotocolPayload’ [-Wunused-parameter]
                                             uint8_t* internetprotocolPayload, uint32_t size)
                                             ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
../src/drivers/net/ipv4.cpp:24:88: warning: unused parameter ‘size’ [-Wunused-parameter]
                                             uint8_t* internetprotocolPayload, uint32_t size)
                                                                               ~~~~~~~~~^~~~
../src/drivers/net/ipv4.cpp: In member function ‘virtual bool pluto::net::InternetProtocolProvider::OnEtherFrameReceived(pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/ipv4.cpp:64:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘pluto::common::uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
         if(length > size)
            ~~~~~~~^~~~~~
../src/drivers/net/ipv4.cpp: In member function ‘void pluto::net::InternetProtocolProvider::Send(pluto::common::uint32_t, pluto::common::uint8_t, pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/ipv4.cpp:113:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘pluto::common::uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
     for(int i = 0; i < size; i++)
                    ~~^~~~~~
../src/drivers/net/ipv4.cpp: In static member function ‘static pluto::common::uint16_t pluto::net::InternetProtocolProvider::Checksum(pluto::common::uint16_t*, pluto::common::uint32_t)’:
../src/drivers/net/ipv4.cpp:132:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘pluto::common::uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
     for(int i = 0; i < lengthInBytes/2; i++)
                    ~~^~~~~~~~~~~~~~~~~
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/icmp.o ../src/drivers/net/icmp.cpp
../src/drivers/net/icmp.cpp: In member function ‘virtual bool pluto::net::InternetControlMessageProtocol::OnInternetProtocolReceived(pluto::common::uint32_t, pluto::common::uint32_t, pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/icmp.cpp:20:109: warning: unused parameter ‘dstIP_BE’ [-Wunused-parameter]
 bool InternetControlMessageProtocol::OnInternetProtocolReceived(common::uint32_t srcIP_BE, common::uint32_t dstIP_BE,
                                                                                            ~~~~~~~~~~~~~~~~~^~~~~~~~
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/udp.o ../src/drivers/net/udp.cpp
../src/drivers/net/udp.cpp: In member function ‘virtual void pluto::net::UserDatagramProtocolHandler::HandleUserDatagramProtocolMessage(pluto::net::UserDatagramProtocolSocket*, pluto::common::uint8_t*, pluto::common::uint16_t)’:
../src/drivers/net/udp.cpp:14:97: warning: unused parameter ‘socket’ [-Wunused-parameter]
 void UserDatagramProtocolHandler::HandleUserDatagramProtocolMessage(UserDatagramProtocolSocket *socket, uint8_t *data,
                                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
../src/drivers/net/udp.cpp:14:114: warning: unused parameter ‘data’ [-Wunused-parameter]
 void UserDatagramProtocolHandler::HandleUserDatagramProtocolMessage(UserDatagramProtocolSocket *socket, uint8_t *data,
                                                                                                         ~~~~~~~~~^~~~
../src/drivers/net/udp.cpp:15:78: warning: unused parameter ‘size’ [-Wunused-parameter]
                                                                     uint16_t size) {
                                                                     ~~~~~~~~~^~~~
../src/drivers/net/udp.cpp: In member function ‘virtual bool pluto::net::UserDatagramProtocolProvider::OnInternetProtocolReceived(pluto::common::uint32_t, pluto::common::uint32_t, pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/udp.cpp:58:14: warning: unused variable ‘localPort’ [-Wunused-variable]
     uint16_t localPort = msg->dstPort;
              ^~~~~~~~~
../src/drivers/net/udp.cpp:59:14: warning: unused variable ‘remotePort’ [-Wunused-variable]
     uint16_t remotePort = msg->srcPort;
              ^~~~~~~~~~
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/tcp.o ../src/drivers/net/tcp.cpp
../src/drivers/net/tcp.cpp: In member function ‘virtual bool pluto::net::TransmissionControlProtocolHandler::HandleTransmissionControlProtocolMessage(pluto::net::TransmissionControlProtocolSocket*, pluto::common::uint8_t*, pluto::common::uint16_t)’:
../src/drivers/net/tcp.cpp:15:113: warning: unused parameter ‘socket’ [-Wunused-parameter]
 TransmissionControlProtocolHandler::HandleTransmissionControlProtocolMessage(TransmissionControlProtocolSocket *socket,
                                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
../src/drivers/net/tcp.cpp:16:87: warning: unused parameter ‘data’ [-Wunused-parameter]
                                                                              uint8_t *data, uint16_t size) {
                                                                              ~~~~~~~~~^~~~
../src/drivers/net/tcp.cpp:16:102: warning: unused parameter ‘size’ [-Wunused-parameter]
                                                                              uint8_t *data, uint16_t size) {
                                                                                             ~~~~~~~~~^~~~
../src/drivers/net/tcp.cpp: In member function ‘virtual bool pluto::net::TransmissionControlProtocolProvider::OnInternetProtocolReceived(pluto::common::uint32_t, pluto::common::uint32_t, pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/tcp.cpp:175:63: warning: comparison of integer expressions of different signedness: ‘int’ and ‘pluto::common::uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
                         for (int i = msg->headerSize32 * 4; i < size; i++)
                                                             ~~^~~~~~
../src/drivers/net/tcp.cpp:74:14: warning: unused variable ‘localPort’ [-Wunused-variable]
     uint16_t localPort = msg->dstPort;
              ^~~~~~~~~
../src/drivers/net/tcp.cpp:75:14: warning: unused variable ‘remotePort’ [-Wunused-variable]
     uint16_t remotePort = msg->srcPort;
              ^~~~~~~~~~
../src/drivers/net/tcp.cpp:162:17: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 if (msg->flags == ACK)
                 ^~
../src/drivers/net/tcp.cpp:167:13: note: here
             default:
             ^~~~~~~
mkdir -p obj/net
gcc -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings -Wall -pedantic -Wextra -g -c -o obj/net/etherframe.o ../src/drivers/net/etherframe.cpp
../src/drivers/net/etherframe.cpp: In member function ‘virtual bool pluto::net::EtherFrameHandler::OnEtherFrameReceived(pluto::common::uint8_t*, pluto::common::uint32_t)’:
../src/drivers/net/etherframe.cpp:21:63: warning: unused parameter ‘etherframePayload’ [-Wunused-parameter]
 bool EtherFrameHandler::OnEtherFrameReceived(common::uint8_t *etherframePayload, common::uint32_t size) {
                                              ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
../src/drivers/net/etherframe.cpp:21:99: warning: unused parameter ‘size’ [-Wunused-parameter]
 bool EtherFrameHandler::OnEtherFrameReceived(common::uint8_t *etherframePayload, common::uint32_t size) {
                                                                                  ~~~~~~~~~~~~~~~~~^~~~
make: *** No rule to make target 'obj/hardwarecommunication/interrupts.o', needed by 'kernel.bin'.  Stop. 

It looked to me like there was a typo in make-build-debug/makefile:

--- a/make-build-debug/makefile
+++ b/make-build-debug/makefile
@@ -59,7 +59,7 @@ obj/%.o: ../src/drivers/net/%.cpp
    mkdir -p $(@D)
    gcc $(GCCPARAMS) -c -o $@ $<

-ob/%.o: ../src/%.cpp
+obj/%.o: ../src/%.cpp
    mkdir -p $(@Đ)
    gcc $(GCCPARAMS) -c -o $@ $<

But fixing it did not help:

$ make
mkdir -p 
mkdir: missing operand
Try 'mkdir --help' for more information.
make: *** [makefile:63: obj/hardwarecommunication/interrupts.o] Error 1

After getting over the above, I ran into issues with wrong paths in local #include directives:

diff --git a/src/drivers/hw/amd_am79c973.cpp b/src/drivers/hw/amd_am79c973.cpp
index a715f0c..62a9eb8 100644
--- a/src/drivers/hw/amd_am79c973.cpp
+++ b/src/drivers/hw/amd_am79c973.cpp
@@ -1,4 +1,4 @@
-#include "../../../drivers/amd_am79c973.h"
+#include "../../../include/drivers/hw/amd_am79c973.h"
 
 using namespace pluto;
 using namespace pluto::common;
diff --git a/src/drivers/hw/ata.cpp b/src/drivers/hw/ata.cpp
index 596a5f4..1a59ea2 100644
--- a/src/drivers/hw/ata.cpp
+++ b/src/drivers/hw/ata.cpp
@@ -1,4 +1,4 @@
-#include "../../../drivers/ata.h"
+#include "../../../include/drivers/hw/ata.h"
 
 using namespace pluto;
 using namespace pluto::common;
diff --git a/src/drivers/hw/driver.cpp b/src/drivers/hw/driver.cpp
index a8dd8c9..ca7abf6 100644
--- a/src/drivers/hw/driver.cpp
+++ b/src/drivers/hw/driver.cpp
@@ -1,5 +1,5 @@
 
-#include "../../../drivers/driver.h"
+#include "../../../include/drivers/hw/driver.h"
 using namespace pluto::drivers;
 
 Driver::Driver()
diff --git a/src/drivers/hw/vga.cpp b/src/drivers/hw/vga.cpp
index 216f8c2..1018253 100644
--- a/src/drivers/hw/vga.cpp
+++ b/src/drivers/hw/vga.cpp
@@ -1,5 +1,5 @@
 
-#include "../../../drivers/vga.h"
+#include "../../../include/drivers/hw/vga.h"
 
 using namespace pluto::common;
 using namespace pluto::drivers;
diff --git a/src/hardwarecommunication/InterruptManager.cpp b/src/hardwarecommunication/InterruptManager.cpp
index c7d060b..42b955b 100644
--- a/src/hardwarecommunication/InterruptManager.cpp
+++ b/src/hardwarecommunication/InterruptManager.cpp
@@ -1,3 +1,4 @@
+#include "../../include/drivers/hardwarecommunication/InterruptManager.h"
 //
 // Created by lango on 4/27/18.
 //
diff --git a/src/hardwarecommunication/pci.cpp b/src/hardwarecommunication/pci.cpp
index cbd22cb..d3409e0 100644
--- a/src/hardwarecommunication/pci.cpp
+++ b/src/hardwarecommunication/pci.cpp
@@ -1,5 +1,5 @@
 #include "../../include/hardwarecommunication/pci.h"
-#include "../../include/drivers/amd_am79c973.h"
+#include "../../include/drivers/hw/amd_am79c973.h"
 
 using namespace pluto::common;
 using namespace pluto::drivers;

Then some undefined references showed up in the linking phase:

$ make
ld -melf_i386 -T ../linker.ld -o kernel.bin obj/kernel.o obj/loader.o obj/gdt.o obj/memorymanagement.o obj/multitasking.o obj/hardwarecommunication/interruptstubs.o obj/syscalls.o obj/net/arp.o obj/net/ipv4.o obj/net/icmp.o obj/net/udp.o obj/net/tcp.o obj/net/etherframe.o obj/hardwarecommunication/interrupts.o obj/drivers/hw/keyboard.o obj/drivers/hw/mouse.o obj/drivers/hw/vga.o obj/drivers/hw/ata.o obj/drivers/hw/amd_am79c973.o obj/hardwarecommunication/pci.o obj/drivers/hw/driver.o obj/hardwarecommunication/port.o 
ld: obj/kernel.o: in function `kernelMain':
kernel.cpp:(.text+0x48a): undefined reference to `pluto::hardwarecommunication::InterruptManager::InterruptManager(unsigned short, pluto::GlobalDescriptorTable*, pluto::TaskManager*)'
ld: kernel.cpp:(.text+0x781): undefined reference to `pluto::hardwarecommunication::InterruptManager::Activate()'
ld: obj/hardwarecommunication/interruptstubs.o: in function `int_bottom':
(.text+0x1d7): undefined reference to `_ZN4pluto21hardwarecommunication16InterruptManager15HandleInterruptEhj'
ld: obj/syscalls.o: in function `pluto::SyscallHandler::SyscallHandler(pluto::hardwarecommunication::InterruptManager*, unsigned char)':
/home/kdudka/pluto/make-build-debug/../src/drivers/syscalls.cpp:9: undefined reference to `pluto::hardwarecommunication::InterruptManager::HardwareInterruptOffset()'
ld: obj/drivers/hw/amd_am79c973.o: in function `pluto::drivers::amd_am79c973::amd_am79c973(pluto::hardwarecommunication::PeripheralComponentInterconnectDeviceDescriptor*, pluto::hardwarecommunication::InterruptManager*)':
/home/kdudka/pluto/make-build-debug/../src/drivers/hw/amd_am79c973.cpp:35: undefined reference to `pluto::hardwarecommunication::InterruptManager::HardwareInterruptOffset()'
make: *** [makefile:79: kernel.bin] Error 1

I was trying the latest upstream git HEAD (3e55932).

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.