真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SylixOS如何移植DB數(shù)據(jù)庫

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

公司主營業(yè)務:成都做網(wǎng)站、成都網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出象山免費做網(wǎng)站回饋大家。

1.DB數(shù)據(jù)庫簡介

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

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

2.移植思路

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

3.移植實現(xiàn)

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

3.1.在Linux下生成配置文件

把官網(wǎng)下載的源碼在Linux環(huán)境下編譯執(zhí)行,產(chǎn)生配置文件。

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

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

SylixOS如何移植DB數(shù)據(jù)庫

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

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

3.2.移植到SylixOS

把源碼工程導入到RealEvo-IDE開發(fā)環(huán)境上進行開發(fā)編譯。

3.2.1.創(chuàng)建SylixOS工程

在SylixOS開發(fā)環(huán)境RealEvo-IDE中創(chuàng)建一個動態(tài)庫工程libdb,把有配置文件的db源碼拷貝到工程下的src目錄,如圖 3-2所示。

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-2 libdb工程

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-3 設置專家模式

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

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-4 Linux下Makefile

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-5 DB數(shù)據(jù)庫依賴的原文件

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-6 手動修改IDE的Makefile

3.2.3.修改編譯錯誤

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

SylixOS如何移植DB數(shù)據(jù)庫

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

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-8 出現(xiàn)的匯編錯誤

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

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-9 Makefile中定義宏

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

3.2.4.測試DB數(shù)據(jù)庫

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

程序清單 3-1 DB數(shù)據(jù)庫測試代碼

#include 
#include 
#include 

#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;
}

程序運行現(xiàn)象如圖 3-10所示。

SylixOS如何移植DB數(shù)據(jù)庫

圖 3-10 測試現(xiàn)象

測試產(chǎn)生一個DB數(shù)據(jù)庫,并且從數(shù)據(jù)庫中讀取數(shù)據(jù)"Grocery bill."。

4.移植總結

4.1.移植流程

移植流程如下:

  1. 在官網(wǎng)下載源碼;

  2. 在Linux下運行實現(xiàn)功能;

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

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

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

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

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

4.2.移植原則

移植原則如下:

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

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

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

以上是“SylixOS如何移植DB數(shù)據(jù)庫”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


新聞標題:SylixOS如何移植DB數(shù)據(jù)庫
網(wǎng)頁URL:http://weahome.cn/article/psssdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部