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.
--- 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 $@ $<
$ make
mkdir -p
mkdir: missing operand
Try 'mkdir --help' for more information.
make: *** [makefile:63: obj/hardwarecommunication/interrupts.o] Error 1
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;
$ 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