अच्छा, यह इस बात पर निर्भर करता है कि आप 'ऑपरेटिंग सिस्टम' को कैसे परिभाषित करते हैं।
- यदि आप इसे जीयूआई के साथ कुछ के रूप में परिभाषित करते हैं जो x86 हार्डवेयर पर चलता है; ज़रूर; अधिकांश डेटाबेस अन्य सिस्टम पर ठीक चलेंगे।
- यदि आप इसे POSIX spec लागू करने वाले कुछ के रूप में परिभाषित करते हैं या अन्यथा धागे या प्रक्रियाओं को चलाने की अनुमति देते हैं और सुरक्षा की एक उपाय प्रदान करते हैं, तो आप कुछ ऐसे लोगों को खो देंगे जिन्हें बहुप्रचारित ऑपरेशन की आवश्यकता होती है लेकिन आप अभी भी ठीक होंगे; बहुत सारे विकल्प हैं।
- यदि आप इसे किसी ऐसे फ़ाइल के रूप में परिभाषित करते हैं जिसमें कोई फ़ाइल ऑपरेशन नहीं है, और सी मानक लाइब्रेरी में से अधिकांश को लागू नहीं करता है, तो आप भाग्य से काफी अधिक हैं।
आपका एआरएम-आधारित डिवाइस लगभग निश्चित रूप से एक सी मानक लाइब्रेरी है जो टूलचेन के साथ जहाजों में है। Newlib गहराई से एम्बेडेड सिस्टम के लिए एक लोकप्रिय पसंद है; इसे डिफ़ॉल्ट रूप से शामिल किया गया है, उदाहरण के लिए, मुफ्त कोडसॉररी और YARTGO टूलचेन्स। हालांकि, इससे पहले कि आप काम करेंगे, आपको कुछ सिस्को लागू करने की जरूरत है। क्या आप कह सकते हैं, printf()
और कंसोल पर टेक्स्ट दिखाई दे रहा है? malloc()
के बारे में कैसे? यदि वे और अन्य कार्य काम नहीं करते हैं, तो मैं सुझाव दूंगा कि आप उन्हें लागू करें। बुनियादी syscalls कि Newlib उम्मीद कर रहे हैं:
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);
इनमें से अधिकांश स्टब्स हो सकता है, लेकिन आप की जरूरत है, उदाहरण के लिए, _write()
printf() (और अन्य लेखन परिचालन), _read()
के लिए संचालन को पढ़ने के लिए, और malloc के लिए _sbrk()
और अन्य स्मृति प्रबंधन कार्यों। उदाहरण के लिए, न्यूनतम कार्यान्वयन के लिए http://wiki.osdev.org/Porting_Newlib देखें। इन कार्यों की आपकी परिभाषा यह निर्धारित करेगी कि डेटाबेस कैसे काम करता है; अगर _write() UART को एक वर्ण भेजता है तो आपका डेटाबेस बहुत उपयोगी नहीं होगा।
मानक लाइब्रेरी काम करने के साथ, sqlite और अन्य डेटाबेस काम करना चाहिए। वे SQLite समामेलन से shell.c में इस तरह की बातें करेंगे:
#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>
आप उन लोगों में से कुछ कार्यान्वयन की जरूरत है। इसे एक ऑपरेटिंग सिस्टम की आवश्यकता नहीं है। सी पुस्तकालय के साथ, यह काम करेगा, लेकिन बिना किसी के, आप स्वयं ही हैं।
क्या आप अपने मूल पोस्ट को संपादित करके ऑपरेटिंग सिस्टम की आवश्यकता नहीं है, इस बारे में विस्तार से बताएंगे? मुझे लगता है कि आपका मतलब है कि आप जिस डाटाबेस को खोजते हैं, उसे पता होगा कि अपनी डिस्क एक्सेस कैसे करें। क्या मैं सही हूँ? – octopusgrabbus
आप बाइनरी फाइलों के साथ अपनी फ़ाइल आधारित डेटाबेस सिस्टम क्यों नहीं बनाना चाहते हैं? मेरा मतलब है, आप एक डेटाबेस चाहते हैं जो SQL वाक्यविन्यास का समर्थन करता है? और किस तरह का एम्बेडेड डिवाइस? एक साधारण एवीआर/पीआईसी/एआरएम या तो? यह कितना बड़ा/छोटा पदचिह्न होना चाहिए? – DipSwitch
"क्यों नहीं?" चूंकि शैक्षिक होने के दौरान, उस क्षेत्र में अनुभव के साथ कई डेवलपर्स द्वारा परिपक्व डीबी इंजनों की तुलना में पहला प्रयास खराब होने की संभावना है। यह समय बर्बाद कर सकता है। –