我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SylixOS如何移植DB数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SylixOS如何移植DB数据库

这篇文章主要为大家展示了“SylixOS如何移植DB数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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所示。

SylixOS如何移植DB数据库

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

这样在Linux环境下生成了配置文件,然后把整个源码包导出。

3.2.移植到SylixOS

把源码工程导入到RealEvo-IDE开发环境上进行开发编译。

3.2.1.创建SylixOS工程

在SylixOS开发环境RealEvo-IDE中创建一个动态库工程libdb,把有配置文件的db源码拷贝到工程下的class="lazy" data-src目录,如图 3-2所示。

SylixOS如何移植DB数据库

图 3-2 libdb工程

为了不破坏源码工程的结构,移植需要手动修改Makefile,设置工程属性为专家模式,如图 3-3所示。

SylixOS如何移植DB数据库

图 3-3 设置专家模式

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

打开Linux下的Makefile,找到编译需要依赖哪些*.c文件,如图 3-4所示。

SylixOS如何移植DB数据库

图 3-4 Linux下Makefile

根据Makefile上C_OBJS找到具体依赖的*.c文件,如图 3-5所示。

SylixOS如何移植DB数据库

图 3-5 DB数据库依赖的原文件

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

SylixOS如何移植DB数据库

图 3-6 手动修改IDE的Makefile

3.2.3.修改编译错误

对libdb工程进行编译,会有关于头文件无效错误提示,修改原文件的头文件,如图 3-7所示。

SylixOS如何移植DB数据库

图 3-7 修改头文件名的格式

修改文件依赖的头文件名格式后,仍有一处错误,如图 3-8所示。

SylixOS如何移植DB数据库

图 3-8 出现的汇编错误

在mutex_int.h文件中有个关于LOAD_ACTUAL_MUTEX_CODE这个宏未定义,在Makefile中定义。这个宏功能为:打开ARM/gcc的一个关于互斥锁的汇编代码,如图 39所示。

SylixOS如何移植DB数据库

图 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;                                                 
	u_int32_t  flags;                                               
	int        ret;                                                 
	char      *description = "Grocery bill.";
	char      *description1[DESCRIPTION_SIZE + 1];
	DBT        key, data;
	float      money;
	
	ret = db_create(&dbp, NULL, 0);
	if (ret != 0) {		                                      
		printf("Create fail!\n");
		return -1;
	}
	                                                                 
	flags = DB_CREATE;                                                
	                                                                 
	ret = dbp->open(dbp,                                              
	                NULL,                                            
	                "/apps/db_test/my_db.db",                         
	                NULL,                                            
	                DB_BTREE,                                        
	                flags,                                           
	                0);                                              
	if (ret != 0) {		                                           
		printf("Created new database.\n");
	}
	money = 122.45;
	
	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);
	
	if (dbp != NULL)
		dbp->close(dbp, 0);
	return 0;
}

程序运行现象如图 3-10所示。

SylixOS如何移植DB数据库

图 3-10 测试现象

测试产生一个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功能进行修改实现。

以上是“SylixOS如何移植DB数据库”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SylixOS如何移植DB数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据库批量迁移如何弄

数据库批量迁移通常有以下几种方法:1. 数据库备份和恢复:首先,在源数据库中进行备份操作,生成一个数据库备份文件。然后,在目标数据库中进行恢复操作,将备份文件导入到目标数据库中。这种方法适用于数据库之间的结构和数据完全相同的情况。2. 数据
2023-09-20

mysql数据库如何转移到oracle

这篇文章主要介绍了mysql数据库如何转移到oracle,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-22

阿里云数据库删除的DB如何找回来?

本文将为您详细介绍如何在阿里云上找回被误删除的数据库。如果你是阿里云数据库的用户,可能会遇到过误删除DB的情况。那么,如何找回呢?以下是一些步骤和注意事项,希望对你有所帮助。一、找回方法登录阿里云管理控制台,进入“数据库服务”页面。点击“实例”,找到被误删除的数据库实例,点击进入。在实例详情页,找到“备份和恢复”
阿里云数据库删除的DB如何找回来?
2023-12-09

如何优化数据库的数据迁移学习

数据迁移是指将数据从一个数据库系统移动到另一个数据库系统的过程。在进行数据迁移时,我们可以采取一些优化措施来提高数据迁移的效率和准确性。以下是一些优化数据库数据迁移学习的方法:确定数据迁移的目标和范围:在进行数据迁移之前,首先要确定数据迁移
如何优化数据库的数据迁移学习
2024-07-03

PHP 函数版本兼容性如何影响代码移植?

php 函数版本兼容性影响代码移植,主要受向后兼容性和向前兼容性原则支配。函数更改类型包括签名更改、行为更改、弃用和删除。避免兼容性问题的方法是保持版本更新、检查文档、编写可移植代码并避免使用已弃用的函数。PHP 函数版本兼容性对代码移植的
PHP 函数版本兼容性如何影响代码移植?
2024-04-25

Linux系统中如何迁移MySQL数据库

这篇文章将为大家详细讲解有关Linux系统中如何迁移MySQL数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一步 – 执行MySQL转储在将数据库文件传输到新的VPS之前,我们首先需要
2023-06-27

编程热搜

目录