色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > TN0030_SylixOS伯克利數據庫移植

TN0030_SylixOS伯克利數據庫移植 時間:2018-09-28      來源:未知

修訂歷史

版本 日期 原因

V1.00 2017/02/03 創建文檔

目  錄

1. DB數據庫簡介 1

2. 移植思路 1

3. 移植實現 1

3.1 在Linux下生成配置文件 1

3.2 移植到SylixOS 2

3.2.1 創建SylixOS工程 2

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

3.2.3 修改編譯錯誤 4

3.2.4 測試DB數據庫 4

4. 移植總結 6

4.1 移植流程 6

4.2 移植原則 6

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(官方網址//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。

 

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

3.2 移植到SylixOS

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

3.2.1 創建SylixOS工程

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

 

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

 

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

打開Linux下的Makefile,找到編譯需要依賴哪些*.c文件。

 

根據Makefile上C_OBJS找到具體依賴的*.c文件。

 

根據Linux下的Makefile手動修改IDE上libdb工程的libdb.mk文件。

 

3.2.3 修改編譯錯誤

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

 

修改文件依賴的頭文件名格式后,仍有一處錯誤。

 

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

修改過后編譯成功,生成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;

}

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

4. 移植總結

4.1 移植流程

移植流程如下:

1. 在官網下載源碼;

2. 在Linux下運行實現功能;

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

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

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

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

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

4.2 移植原則

移植原則如下:

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

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

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

上一篇:ucGUI在SylixOS下的應用

下一篇:TN0015_fork函數替換為SylixOS進程

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 最新av网站在线观看 | 欧美人与性囗牲恔配视频0 裸体美女扒开下部无遮挡网站免费 | 好湿好紧太硬了我太爽了视频 | 国产精华最好的产品有哪些 | 色综合av在线 | 一本一道人人妻人人妻αv chinese裸体男野外gay | 亚洲精品一卡二卡三卡四卡2021 | 午夜成人亚洲理论片在线观看 | 中文字幕精品久久久久人妻 | 中文字幕亚洲综合小综合 | 日本A级视频在线播放 | 日韩精品真人荷官无码 | 欧美尺码专线欧洲B1B1 | 强奷漂亮少妇高潮在线观看 | 永久免费观看美女裸体视频的网站 | 欧美成人精品三级在线观看 | 亚洲日韩精品无码专区网站 | 精品综合久久久久久888 | 亚洲色欲综合一区二区三区 | 黑人异族巨大巨大巨粗 | 99视频精品全部免费 在线 | 东京热无码AV男人的天堂 | 四色在线 | 天堂资源中文最新版在线一区 | 日韩欧美亚洲综合久久影院Ds | 日韩免费专区 | 99国产欧美久久久精品蜜芽 | 精品人妻无码专区中文字幕 | 加勒比中文无码久久综合色 | 欧美v国产v亚洲v日韩九九 | 亚洲国产综合在线观看不卡 | 无码夫の前で人妻を犯す中字 | 国产性猛交╳XXX乱大交 | 久久久无码精品无码国产人妻丝瓜 | 粗一硬一长一进一爽一a片 国产激情在线观看 | 无码人妻一区二区三区线 | 人妻无码久久一区二区三区免费 | 两个人看的WWW在线观看 | 亚洲精品一区二区三区福利 | 亚洲人成影院在线无码按摩店 | 性动态图AV无码专区 |