Я занимаюсь разработкой операционной системы с открытым исходным кодом для raspberry pi 1. Основная идея этой ОС - просто ядро, которое сможет запускать функцию, созданную на другом компьютере, и отправлять ее в raspi.Функция будет использовать функции, скомпилированные с ядром и находящиеся в памяти.
Я хочу знать, как я могу скомпилировать функцию, которая, когда я вставлю полезную нагрузку в память по определенному адресу, сможетдля вызова системных функций и использования данных, определенных в коде функции.
void function()
{
while (1)
{
uart_puts("Hello\r\n");
}
}
Это мой файл link.ld, и функция будет загружена в __binary_function:
ENTRY(_start)
SECTIONS
{
/* Starts at LOADER_ADDR. */
. = 0x8000;
__start = .;
__text_start = .;
.text :
{
KEEP(*(.text.boot))
*(.text)
}
. = ALIGN(4096); /* align to page size */
__text_end = .;
__rodata_start = .;
.rodata :
{
*(.rodata)
}
. = ALIGN(4096); /* align to page size */
__rodata_end = .;
__data_start = .;
.data :
{
*(.data)
}
. = ALIGN(4096); /* align to page size */
__data_end = .;
__bss_start = .;
.bss :
{
bss = .;
*(.bss)
}
. = ALIGN(4096); /* align to page size */
__bss_end = .;
/*Allocating memory for the heap*/
__heap_start = .;
. = . + 0x1000000; /*4MB Heap section*/
__heap_end = .;
__binary_function = .;
__end = .;
}
Моя идея состоит в том, что ядро получит полезную нагрузку через UART и затем выполнит ее.Полезная нагрузка должна иметь возможность вызывать системные функции, такие как функции UART, и получать доступ к данным, которые определены внутри нее.
Я хочу сделать это автоматически с помощью arm-none-eabi-gcc (GCC Toolchain для ARMархитектура), которая работает как GCC и избегает хардкодирования системных функций в источнике полезной нагрузки.
Спасибо!