久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SylixOS如何移植DB數據庫

142次閱讀
沒有評論

共計 3621 個字符,預計需要花費 10 分鐘才能閱讀完成。

這篇文章主要為大家展示了“SylixOS 如何移植 DB 數據庫”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“SylixOS 如何移植 DB 數據庫”這篇文章吧。

1.DB 數據庫簡介

Berkeley DB(DB) 是歷史悠久的嵌入式數據庫系統,主要應用在 UNIX/LINUX 操作系統上,其設計思想是簡單、小巧、可靠、高性能。

DB 是一個高性能的,嵌入數據庫編程庫,和 C 語言,C++,Java,Perl,Python,PHP,Tcl 以及其他很多語言都有綁定。Berkeley
DB 可以保存任意類型的鍵 / 值對,而且可以為一個鍵保存多個數據。Berkeley
DB 可以支持數千的并發線程同時操作數據庫,支持最大 256TB 的數據,廣泛用于各種操作系統包括大多數 Unix 類操作系統和 Windows 操作系統以及實時操作系統。

2. 移植思路

移植 Linux 中間件到 SylixOS 上的思路請參考《TN0029_SylixOS 第三方中間件移植方法》。

3. 移植實現

在伯克利的官方網站上下載伯克利的 DB 數據庫的源碼,選擇的版本是 4.7.25(官方網址 http://www.oracle.com/database/berkeley-db/index.html)。

3.1. 在 Linux 下生成配置文件

把官網下載的源碼在 Linux 環境下編譯執行,產生配置文件。

1. 把源碼工程導入到 Ubuntu 里進行解壓縮;

2. 在 db-4.7.25 下新建一個 build_arm 目錄,輸入指令../dist/configure
CC=arm-linux-gcc 進行配置。在 build_arm 目錄下產生配置文件和 Makefile,如圖 3- 1 所示。

圖 3-1
生成的配置文件和 Makefile

這樣在 Linux 環境下生成了配置文件,然后把整個源碼包導出。

3.2. 移植到 SylixOS

把源碼工程導入到 RealEvo-IDE 開發環境上進行開發編譯。

3.2.1. 創建 SylixOS 工程

在 SylixOS 開發環境 RealEvo-IDE 中創建一個動態庫工程 libdb,把有配置文件的 db 源碼拷貝到工程下的 src 目錄,如圖
3- 2 所示。

圖 3-2
libdb 工程

為了不破壞源碼工程的結構,移植需要手動修改 Makefile,設置工程屬性為專家模式,如圖 3- 3 所示。

圖 3-3
設置專家模式

3.2.2. 參考 Linux 下的 Makefile 修改 SylixOS 的 Makefile

打開 Linux 下的 Makefile,找到編譯需要依賴哪些 *.c 文件,如圖 3- 4 所示。

圖 3-4 Linux 下 Makefile

根據 Makefile 上 C_OBJS 找到具體依賴的 *.c 文件,如圖 3- 5 所示。

圖 3-5
DB 數據庫依賴的原文件

根據 Linux 下的 Makefile 手動修改 IDE 上 libdb 工程的 libdb.mk 文件,如圖 3- 6 所示。

圖 3-6
手動修改 IDE 的 Makefile

3.2.3. 修改編譯錯誤

對 libdb 工程進行編譯,會有關于頭文件無效錯誤提示,修改原文件的頭文件,如圖 3- 7 所示。

圖 3-7 修改頭文件名的格式

修改文件依賴的頭文件名格式后,仍有一處錯誤,如圖 3- 8 所示。

圖 3-8
出現的匯編錯誤

在 mutex_int.h 文件中有個關于 LOAD_ACTUAL_MUTEX_CODE 這個宏未定義,在 Makefile 中定義。這個宏功能為:打開 ARM/gcc 的一個關于互斥鎖的匯編代碼,如圖
39 所示。

圖 3-9 Makefile 中定義宏

修改過后編譯成功,生成 libdb.so 文件導入虛擬機中。

3.2.4. 測試 DB 數據庫

編寫測試代碼,測試代碼如程序清單 3- 1 所示。

程序清單 3-1
DB 數據庫測試代碼

#include  stdio.h 
#include  db.h 
#include  string.h 
#define DESCRIPTION_SIZE 20
int main() {
 DB *dbp; /* DB structure handle */
 u_int32_t flags; /* database open flags */
 int ret; /* function return value */
 char *description =  Grocery bill. 
 char *description1[DESCRIPTION_SIZE + 1];
 DBT key, data;
 float money;
 /* Initialize the structure. This
  * database is not opened in an environment,
  * so the environment pointer is NULL. */
 ret = db_create(dbp, NULL, 0);
 if (ret != 0) {  /* Error handling goes here */
 printf( Create fail!\n 
 return -1;
  /* Database open flags */
 flags = DB_CREATE; /* If the database does not exist,create it.*/
  /* open the database */
 ret = dbp- open(dbp, /* DB structure pointer */
  NULL, /* Transaction pointer */
   /apps/db_test/my_db.db , /* On-disk file that holds the database. */
  NULL, /* Optional logical database name */
  DB_BTREE, /* Database access method */
  flags, /* Open flags */
  0); /* File mode (using defaults) */
 if (ret != 0) {  /* Error handling goes here */
 printf( Created new database.\n 
 money = 122.45;
 /* Zero out the DBTs before using them. */
 memset(key, 0, sizeof(DBT));
 memset(data, 0, sizeof(DBT));
 key.data =  money;
 key.size = sizeof(float);
 data.data = description;
 data.size = strlen(description) + 1;
 ret = dbp- put(dbp, NULL,  key,  data, DB_NOOVERWRITE);
 if (ret == DB_KEYEXIST) {dbp- err(dbp, ret,  Put failed because key %f already exists , money);
 memset(data, 0, sizeof(DBT));
 data.data =  description1;
 data.ulen = DESCRIPTION_SIZE + 1;
 data.flags = DB_DBT_USERMEM;
 dbp- get(dbp, NULL,  key,  data, 0);
 printf(data: %s\n , (char *) data.data);
 /* When we re done with the database, close it. */
 if (dbp != NULL)
 dbp- close(dbp, 0);
 return 0;
}

程序運行現象如圖 3-10 所示。

圖 3-10
測試現象

測試產生一個 DB 數據庫,并且從數據庫中讀取數據 Grocery bill.。

4. 移植總結 4.1. 移植流程

移植流程如下:

在官網下載源碼;

在 Linux 下運行實現功能;

一般中間件網絡上有移植筆記,可參考;

在 Linux 下利用 configure 功能產生配置文件(配置文件 configure.h 和 Makefile 等很重要);

參考 Makefile 修改 IDE 的工程 ****.mk 文件(主要知曉中間件依賴的源文件);

在移植過程中請做好移植記錄,以便查詢修改信息;

如有修改或者添加功能實現請新建文件。

4.2. 移植原則

移植原則如下:

做減法,先裁剪留出主要功能;

不修改內核源碼,如有功能 SylixOS 暫未實現,可根據功能語義編寫功能函數或該功能非主要可裁剪掉。

在移植編譯過程中會出現各種錯誤,需要細心的根據錯誤信息查找錯誤位置,在根據 SylixOS 功能進行修改實現。

以上是“SylixOS 如何移植 DB 數據庫”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計3621字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 金川县| 旬阳县| 临安市| 雷州市| 中卫市| 万荣县| 麟游县| 射洪县| 济源市| 营口市| 花莲县| 额敏县| 邹城市| 曲阜市| 丁青县| 长丰县| 册亨县| 迁西县| 宁阳县| 巨野县| 马尔康县| 白水县| 阿城市| 富锦市| 卫辉市| 桐庐县| 靖安县| 十堰市| 芦溪县| 明光市| 新巴尔虎右旗| 沙雅县| 青铜峡市| 神池县| 呼图壁县| 乳山市| 吉林省| 曲麻莱县| 平南县| 闸北区| 鹤庆县|