Bueno, depende de cómo se defina el 'sistema operativo'.
- Si lo define como algo con una GUI que se ejecuta en hardware x86; Por supuesto; la mayoría de las bases de datos funcionarán bien en otros sistemas.
- Si lo define como algo que implementa la especificación POSIX o permite la ejecución de subprocesos o procesos y proporciona una medida de seguridad, bueno, perderá algunos que requieren una operación de subprocesos múltiples, pero igual estará bien; hay muchas opciones.
- Si lo define como algo que no tiene ninguna operación de archivo y no implementa gran parte de la biblioteca estándar C, no tiene mucha suerte.
Su dispositivo basado en ARM casi con certeza tiene una biblioteca estándar C que se envía con la cadena de herramientas. Newlib es una opción popular para sistemas profundamente integrados; está incluido por defecto en, por ejemplo, las cadenas de herramientas gratuitas CodeSourcery y YARTGO. Sin embargo, debe implementar algunas llamadas de sistema antes de que funcione. ¿Puedes hacer, por ejemplo, printf()
y hacer que el texto aparezca en una consola? ¿Qué hay de malloc()
? Si esas y otras funciones no funcionan, sugiero que las implemente. Las llamadas al sistema básicas que NEWLIB Espera son:
int _system (const char *);
int _rename (const char *, const char *);
int _isatty (int);
clock_t _times (struct tms *);
int _gettimeofday (struct timeval *, struct timezone *);
void _raise (void);
int _unlink (void);
int _link (void);
int _stat (const char *, struct stat *);
int _fstat (int, struct stat *);
caddr_t _sbrk (int);
int _getpid (int);
int _kill (int, int);
void _exit (int);
int _close (int);
int _open (const char *, int, ...);
int _write (int, char *, int);
int _lseek (int, int, int);
int _read (int, char *, int);
mayoría de estos pueden ser talones, pero es necesario, por ejemplo, _write()
de printf() (y otras operaciones de escritura), _read()
para las operaciones de lectura y _sbrk()
para malloc y otras funciones de administración de memoria. Ver, por ejemplo, http://wiki.osdev.org/Porting_Newlib para una implementación mínima. Sus definiciones de estas funciones determinarán cómo funciona la base de datos; si _write() envía un carácter al UART, entonces su base de datos no será muy útil.
Con la biblioteca estándar funcionando, sqlite y otras bases de datos deberían funcionar. Que van a hacer este tipo de cosas en shell.c de la fusión sqlite:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include "sqlite3.h"
#include <ctype.h>
#include <stdarg.h>
#include <signal.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
Usted necesita una cierta aplicación de esos. Esto no requiere un sistema operativo. Con una biblioteca C, funcionará, pero sin una, estás solo.
¿Podría explicar lo que quiere decir que no requiere un sistema operativo editando su publicación original? Supongo que quiere decir que la base de datos que busca sabrá cómo realizar su propio acceso al disco. ¿Estoy en lo correcto? – octopusgrabbus
¿Por qué no quieres crear tu propio sistema de base de datos basado en archivos binarios? Quiero decir, ¿quieres una base de datos que admita la sintaxis de SQL? ¿Y qué tipo de dispositivo integrado? Un simple AVR/PIC/ARM más o menos? ¿Qué tamaño de espacio debería tener? – DipSwitch
"¿Por qué no?" Porque a pesar de ser educativo, es probable que un primer intento sea pobre en comparación con los motores db maduros trabajados por múltiples desarrolladores con experiencia en esa área. También puede perder tiempo. –