My name is Olympia Papaioannou, and I’m a computer science student at the University of Thessaly in Greece.
I’m particularly interested in embedded systems development since nowadays they are everywhere. I’m very excited about exploring RTEMS because it’s open source, lightweight, portable, and real-time capable for demanding applications. The code is clear and well documented, so this would be a great opportunity to learn and extend my skills.
I don’t have extensive experience with system architectures yet, so working on a small but immersive project like the microshell port, it will give me a deeper understanding of how operating systems work under the hood.
I’ve recently completed the prerequisite tasks outlined in the GSoC Starter’s Guide for the microshell port project.
I’d appreciate any guidance on potential project ideas or next steps as I prepare my proposal.
Thank you for your time, and I’m eager to become an active contributor to the RTEMS community.
Best regards,
Olympia Papaioannou
Environment
Host OS: WSL2 under Windows 11
RTEMS Version: RTEMS 7
BSP: SPARC
Execution: A basic implementation of the microshell port
#include <rtems.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "ush.h"
#define BUF_SIZE 64
static char ush_in_buf[BUF_SIZE];
static char ush_out_buf[BUF_SIZE];
struct ush_node_object ush_root_node;
void help_callback(struct ush_object *self, struct ush_file_descriptor const *file, int argc, char *argv[]) {
printf("Available commands:\n info, date, help\n");
}
void date_callback(struct ush_object *self, struct ush_file_descriptor const *file, int argc, char *argv[]) {
time_t now = time(NULL);
printf("RTEMS Time: %s", ctime(&now));
}
void info_callback(struct ush_object *self, struct ush_file_descriptor const *file, int argc, char *argv[]) {
printf("RTEMS 7 Microshell Port OK!\n");
}
const struct ush_file_descriptor g_ush_buildin_commands[] = {
{ .name = "info", .help = "info", .exec = info_callback },
{ .name = "help", .help = "help", .exec = help_callback },
{ .name = "date", .help = "date", .exec = date_callback },
{ .name = NULL }
};
const size_t g_ush_buildin_commands_num = 3;
int msh_write_char(struct ush_object *self, char c) { return putchar(c); }
int msh_read_char(struct ush_object *self, char *c) {
int ch = getchar();
if (ch != EOF) { *c = (char)ch; return 1; }
return 0;
}
static const struct ush_io_interface msh_iface = {
.read = msh_read_char,
.write = msh_write_char
};
static const struct ush_descriptor msh_desc = {
.io = &msh_iface,
.input_buffer = ush_in_buf,
.input_buffer_size = BUF_SIZE,
.output_buffer = ush_out_buf,
.output_buffer_size = BUF_SIZE,
.hostname = "rtems"
};
rtems_task Init(rtems_task_argument argument) {
static struct ush_object ush;
printf("\n--- RTEMS 7 Microshell ---\n");
ush_init(&ush, &msh_desc);
ush_node_mount(&ush, "/", &ush_root_node, NULL, 0);
ush.current_node = &ush_root_node;
while (1) {
ush_service(&ush);
rtems_task_wake_after(1);
}
}
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 4
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>

