Vâng, nó phụ thuộc vào cách bạn xác định 'hệ điều hành'.
- Nếu bạn xác định nó là thứ gì đó có GUI chạy trên phần cứng x86; chắc chắn rồi; hầu hết các cơ sở dữ liệu sẽ chạy tốt trên các hệ thống khác.
- Nếu bạn xác định nó như một cái gì đó thực hiện các thông số POSIX hoặc cho phép các chủ đề hoặc quy trình để chạy và cung cấp một biện pháp bảo mật, tốt, bạn sẽ mất một vài yêu cầu hoạt động đa luồng nhưng bạn vẫn sẽ được sử dụng tốt; Có rất nhiều lựa chọn.
- Nếu bạn xác định nó là một cái gì đó mà không có bất kỳ hoạt động tập tin ở tất cả, và không thực hiện nhiều thư viện chuẩn C, bạn đang khá nhiều trong số may mắn.
Thiết bị dựa trên ARM của bạn gần như chắc chắn có thư viện chuẩn C đi kèm với chuỗi công cụ. Newlib là một lựa chọn phổ biến cho các hệ thống nhúng sâu; nó được bao gồm theo mặc định, ví dụ, các mã công cụ CodeSourcery và YARTGO miễn phí. Tuy nhiên, bạn cần triển khai một số syscalls trước khi nó hoạt động. Bạn có thể làm, giả sử, printf()
và văn bản có xuất hiện trên bảng điều khiển không? Làm thế nào về malloc()
? Nếu những chức năng đó và các chức năng khác không hoạt động, tôi khuyên bạn nên thực hiện chúng. Các syscalls cơ bản mà Newlib hy vọng là:
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);
Hầu hết trong số này có thể khai, nhưng bạn cần, ví dụ, _write()
cho printf() (và các hoạt động văn bản khác), _read()
cho việc đọc các hoạt động, và _sbrk()
cho malloc và các chức năng quản lý bộ nhớ khác. Xem, ví dụ: http://wiki.osdev.org/Porting_Newlib để thực hiện tối thiểu. Định nghĩa của bạn về các hàm này sẽ xác định cách cơ sở dữ liệu hoạt động; nếu _write() gửi một ký tự đến UART thì cơ sở dữ liệu của bạn sẽ không hữu ích lắm.
Với thư viện chuẩn làm việc, sqlite và các cơ sở dữ liệu khác sẽ hoạt động. Họ sẽ làm những việc như thế này trong shell.c từ hỗn hợp 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>
Bạn cần thực hiện một số điều đó. Điều này không yêu cầu hệ điều hành. Với một thư viện C, nó sẽ làm việc, nhưng không có một, bạn đang ở trên của riêng bạn.
Bạn có thể giải thích những gì bạn muốn không yêu cầu hệ điều hành bằng cách chỉnh sửa bài đăng gốc của bạn không? Tôi giả sử bạn có nghĩa là cơ sở dữ liệu bạn tìm kiếm sẽ biết làm thế nào để thực hiện truy cập đĩa riêng của mình. Tôi có đúng không? – octopusgrabbus
Tại sao bạn không muốn tạo hệ thống cơ sở dữ liệu dựa trên tệp của riêng mình với các tệp nhị phân? Ý tôi là, bạn muốn có một cơ sở dữ liệu hỗ trợ cú pháp SQL? Và loại thiết bị nhúng nào? Một AVR/PIC/ARM đơn giản hay như vậy? Làm thế nào lớn/nhỏ dấu chân nên nó có? – DipSwitch
"Tại sao không?" Bởi vì trong khi giáo dục, một nỗ lực đầu tiên có thể là kém so với các công cụ db trưởng thành do nhiều nhà phát triển có kinh nghiệm trong lĩnh vực đó làm việc. Nó cũng có thể lãng phí thời gian. –