這篇文章主要為大家展示了“SylixOS如何移植DB數(shù)據(jù)庫(kù)”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“SylixOS如何移植DB數(shù)據(jù)庫(kù)”這篇文章吧。
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出象山免費(fèi)做網(wǎng)站回饋大家。
Berkeley DB(DB)是歷史悠久的嵌入式數(shù)據(jù)庫(kù)系統(tǒng),主要應(yīng)用在UNIX/LINUX操作系統(tǒng)上,其設(shè)計(jì)思想是簡(jiǎn)單、小巧、可靠、高性能。
DB是一個(gè)高性能的,嵌入數(shù)據(jù)庫(kù)編程庫(kù),和C語(yǔ)言,C++,Java,Perl,Python,PHP,Tcl以及其他很多語(yǔ)言都有綁定。Berkeley DB可以保存任意類型的鍵/值對(duì),而且可以為一個(gè)鍵保存多個(gè)數(shù)據(jù)。Berkeley DB可以支持?jǐn)?shù)千的并發(fā)線程同時(shí)操作數(shù)據(jù)庫(kù),支持最大256TB的數(shù)據(jù),廣泛用于各種操作系統(tǒng)包括大多數(shù)Unix類操作系統(tǒng)和Windows操作系統(tǒng)以及實(shí)時(shí)操作系統(tǒng)。
移植Linux中間件到SylixOS上的思路請(qǐng)參考《TN0029_SylixOS第三方中間件移植方法》。
在伯克利的官方網(wǎng)站上下載伯克利的DB數(shù)據(jù)庫(kù)的源碼,選擇的版本是4.7.25(官方網(wǎng)址http://www.oracle.com/database/berkeley-db/index.html)。
把官網(wǎng)下載的源碼在Linux環(huán)境下編譯執(zhí)行,產(chǎn)生配置文件。
1.把源碼工程導(dǎo)入到Ubuntu里進(jìn)行解壓縮;
2.在db-4.7.25下新建一個(gè)build_arm目錄,輸入指令../dist/configure CC=arm-linux-gcc進(jìn)行配置。在build_arm目錄下產(chǎn)生配置文件和Makefile,如圖 3-1所示。
圖 3-1 生成的配置文件和Makefile
這樣在Linux環(huán)境下生成了配置文件,然后把整個(gè)源碼包導(dǎo)出。
把源碼工程導(dǎo)入到RealEvo-IDE開發(fā)環(huán)境上進(jìn)行開發(fā)編譯。
在SylixOS開發(fā)環(huán)境RealEvo-IDE中創(chuàng)建一個(gè)動(dòng)態(tài)庫(kù)工程libdb,把有配置文件的db源碼拷貝到工程下的src目錄,如圖 3-2所示。
圖 3-2 libdb工程
為了不破壞源碼工程的結(jié)構(gòu),移植需要手動(dòng)修改Makefile,設(shè)置工程屬性為專家模式,如圖 3-3所示。
圖 3-3 設(shè)置專家模式
打開Linux下的Makefile,找到編譯需要依賴哪些*.c文件,如圖 3-4所示。
圖 3-4 Linux下Makefile
根據(jù)Makefile上C_OBJS找到具體依賴的*.c文件,如圖 3-5所示。
圖 3-5 DB數(shù)據(jù)庫(kù)依賴的原文件
根據(jù)Linux下的Makefile手動(dòng)修改IDE上libdb工程的libdb.mk文件,如圖 3-6所示。
圖 3-6 手動(dòng)修改IDE的Makefile
對(duì)libdb工程進(jìn)行編譯,會(huì)有關(guān)于頭文件無(wú)效錯(cuò)誤提示,修改原文件的頭文件,如圖 3-7所示。
圖 3-7 修改頭文件名的格式
修改文件依賴的頭文件名格式后,仍有一處錯(cuò)誤,如圖 3-8所示。
圖 3-8 出現(xiàn)的匯編錯(cuò)誤
在mutex_int.h文件中有個(gè)關(guān)于LOAD_ACTUAL_MUTEX_CODE這個(gè)宏未定義,在Makefile中定義。這個(gè)宏功能為:打開ARM/gcc的一個(gè)關(guān)于互斥鎖的匯編代碼,如圖 39所示。
圖 3-9 Makefile中定義宏
修改過(guò)后編譯成功,生成libdb.so文件導(dǎo)入虛擬機(jī)中。
編寫測(cè)試代碼,測(cè)試代碼如程序清單 3-1所示。
程序清單 3-1 DB數(shù)據(jù)庫(kù)測(cè)試代碼
#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; }
程序運(yùn)行現(xiàn)象如圖 3-10所示。
圖 3-10 測(cè)試現(xiàn)象
測(cè)試產(chǎn)生一個(gè)DB數(shù)據(jù)庫(kù),并且從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)"Grocery bill."。
移植流程如下:
在官網(wǎng)下載源碼;
在Linux下運(yùn)行實(shí)現(xiàn)功能;
一般中間件網(wǎng)絡(luò)上有移植筆記,可參考;
在Linux下利用configure功能產(chǎn)生配置文件(配置文件configure.h和Makefile等很重要);
參考Makefile修改IDE的工程****.mk文件(主要知曉中間件依賴的源文件);
在移植過(guò)程中請(qǐng)做好移植記錄,以便查詢修改信息;
如有修改或者添加功能實(shí)現(xiàn)請(qǐng)新建文件。
移植原則如下:
做減法,先裁剪留出主要功能;
不修改內(nèi)核源碼,如有功能SylixOS暫未實(shí)現(xiàn),可根據(jù)功能語(yǔ)義編寫功能函數(shù)或該功能非主要可裁剪掉。
在移植編譯過(guò)程中會(huì)出現(xiàn)各種錯(cuò)誤,需要細(xì)心的根據(jù)錯(cuò)誤信息查找錯(cuò)誤位置,在根據(jù)SylixOS功能進(jìn)行修改實(shí)現(xiàn)。
以上是“SylixOS如何移植DB數(shù)據(jù)庫(kù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:SylixOS如何移植DB數(shù)據(jù)庫(kù)
鏈接URL:http://bm7419.com/article10/psssdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、App開發(fā)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、域名注冊(cè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)