SylixOS如何移植DB数据库

60次阅读
没有评论

共计 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字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)