SylixOS软件开发-基础操作

本文档详细介绍了如何在SylixOS操作系统中移植和使用libcurl库以及json-c库。从下载源码、预处理、新建移植工程、修改配置文件到编译和链接,每个步骤都有清晰的说明。同时,还提供了curl的参考代码示例以及SylixOS虚拟机连接外网的方法。
摘要由CSDN通过智能技术生成

SylixOS开发环境获取

开发环境可以在翼辉官网申请
在这里插入图片描述
申请时候需要填写一些公司和个人的信息,经过审核后,下载链接和注册码会发送给你。

代码结构

在这里插入图片描述
压缩包打开之后如图所示,双击InstallWizard进行安装。选择安装IDE(过程还挺慢的~~)。

安装过程时候,简单看了一下目录中,还有一个虚拟机,x86架构的,果断想尝试一下,先看看sylixOS到底长什么样子。

安装完IDE之后,桌面会有模拟器的图标在这里插入图片描述
我们可以选择一个x86的虚拟系统进行与sylixOS的初次见面。
在这里插入图片描述
启动之后,会自动弹出一个命令行,
在这里插入图片描述
ps,ll等命令,相信用过linux的同学还是比较熟悉。(虽然结果不太相同)
在这里插入图片描述

第一个APP

参考应用开发即可

此处写一下如何使用系统提供的第三方库,我测试一个demo,使用的是sqlite3,SylixOS是带了sqlite3的,不过默认编译APP的时候,是不会去主动搜索相关头文件和库的,所以右键工程,选择properties
在这里插入图片描述
将sqlite的头文件路径添加进去,就在sylixOSbase中去选择,
然后添加sqlite的库,
在这里插入图片描述
在linker setting中选择sqlite3的库,同样是在sylixOS base中去选择。
然后编译,就可以通过了

移植开源软件libcurl

项目用到需要使用restful接口,所以需要增加libcurl库,参考《应用开发手册》中的openssl库移植方法。

下载libcurl的源码

访问https://curl.se/download.html,可以获得最新curl的代码

预处理

我要将代码移植到x86_64的系统下,所以找了一个x86_64的环境,将curl的源码解压,执行

[root@localhost curl-7.76.0]# ./configure 

然后执行

[root@localhost curl-7.76.0]# make

这么做的目的就是为了查看x86_64的架构,需要编译哪些文件,以及会生成哪些配置
编译之后,执行

[root@localhost curl-7.76.0]# find -name *.o

会看到编译了哪些c文件生成了.o文件
在这里插入图片描述
这些文件后续会在修改sylixos的编译文件中用到,然后拷贝出整个cur的目录备用。(像做菜一样的说法)
注意:有些文件在.lib中是属于重复的,剔除之;
注意:有些文件名称增加了前缀,要对比实际C文件进行删除

新建移植工程

在NEW-》PROJECT中创建新的共享库工程Shared lib
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
工程创建完成,删除src中自动生成的libcurl.c,然后将之前在linux里面编译过的文件夹里面的内容拷贝到src目录下。手动删除那些之前生成的.lo和.o文件。

修改配置文件

修改libcurl.mk
首先修改src文件
在这里插入图片描述
然后修改头文件搜索路径
在这里插入图片描述
(注意:此处要对工程配置有个修改,不允许自动扫描源文件,否则就白改了)
在这里插入图片描述

编译

右键工程,进行build,会开始报一堆错误。逐个进行修改
主要遇到的问题都可以通过参照linux下生成的Makefile,
把一些定义放到libcurl.mk中的LOCAL_DSYMBOL变量里,
把一些CFLAG放到LOCAL_CFLAGS变量中。
最终会编译出两个库文件,
在这里插入图片描述

链接库

参照IDE使用手册,增加所生成的libcurl的库,即可完成链接。不过当我使用动态库的时候,不上传库,程序执行提示找不到库,上传了库,程序执行提示找不到函数,没办法使用了静态库,运行成功。

curl参考代码

int file_download(char *url,const char* postpara)
{
	CURL *image;
	CURLcode imgresult;
	FILE *fp = NULL;
	//char *testurl="https://github.com/openssl/openssl/blob/master/NOTES-DJGPP.md";
	//char *testurl="https://github.com/openssl/openssl/blob/master/LICENSE.txt";


	image = curl_easy_init();
	if (image)
	{
		fp = fopen("/tmp/xxx.txt", "wb");
		if (fp == NULL)
		{
			printf("File cannot be opened");
			return -1;
		}
		if (0 == strncmp(url, "https:", 6))
		{
			curl_easy_setopt(image, CURLOPT_SSL_VERIFYPEER, 0);
			curl_easy_setopt(image, CURLOPT_SSL_VERIFYHOST, 0);
		}
		curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, NULL);
		curl_easy_setopt(image, CURLOPT_WRITEDATA, fp);
		curl_easy_setopt(image, CURLOPT_URL, url);
		curl_easy_setopt(image, CURLOPT_FOLLOWLOCATION, 1);
		//这里限速 100KB/s
		//curl_easy_setopt(image, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)1000 * 1024 * 8);
		curl_easy_setopt(image, CURLOPT_NOPROGRESS, 0);

		curl_easy_setopt(image, CURLOPT_CONNECTTIMEOUT, 30);		//设置连接超时,单位s, CURLOPT_CONNECTTIMEOUT_MS 毫秒
		curl_easy_setopt(image, CURLOPT_TIMEOUT, 5);				// 整个CURL 执行的时间, 单位秒, CURLOPT_TIMEOUT_MS毫秒
		curl_easy_setopt(image, CURLOPT_NOSIGNAL, 1);			//linux多线程情况应注意的设置(防止curl被alarm信号干扰)
		
		if(postpara)
		{
			curl_easy_setopt(image,CURLOPT_POST, 1);							// 设置 为POST 方法
			curl_easy_setopt(image,CURLOPT_POSTFIELDS, postpara);				// POST 的数据内容
			curl_easy_setopt(image, CURLOPT_POSTFIELDSIZE, strlen(postpara));	// POST的数据长度, 可以不要此选项
		}

		//CURLOPT_RESUME_FROM
		// Grab image
		imgresult = curl_easy_perform(image);
		if (imgresult)
		{
			//cout << "Cannot grab the File!\n";
			return -1;
		}
		//Clean up the resources
		curl_easy_cleanup(image);
		//Close the file
		fclose(fp);
	}
	return 0;
}

核心文件libcurl.mk参考下载

libcurl.mk配置文件下载路径

移植开源软件json-c

json格式是程序员们喜闻乐见的传输数据的格式,sylixos本身没有json数据的解析,所以,移植了常用的json库-c语言的json-c。

代码下载

json-C下载

创建新share lib工程

参考标准流程,创建工程。名称libjsonc,然后删除src其中的libjsonc.c,然后拷贝json-c源码中根目录下面的.c和.h文件过来。
在这里插入图片描述
核心步骤来了:拷贝一个其他项目用过的json-c目录中的config.h和json_config.h过来,这两个文件中定义了很多正常编译的宏,经过简单的修改,就可以满足编译。
然后右键build project。即可以生成.so和.a文件。

json-c实例代码

const char emp_msg[8]="";
const char* json_get_char(json_object *src_obj,char* name)
{
	struct json_object *tmp = NULL;
	tmp=json_object_object_get(src_obj, name);
	if(tmp==NULL)
		return emp_msg;
	else
		return json_object_get_string(tmp);
}

int json_get_int(json_object *src_obj,char* name)
{
	struct json_object *tmp = NULL;
	tmp=json_object_object_get(src_obj, name);
	if(tmp==NULL)
		return 0;
	else
		return json_object_get_int(tmp);
}

int test_json(void) 
{
	struct json_object *obj_root = NULL;
	
	int device_count=0;
	int devi = 0;
	int i = 0;
	
	obj_root = json_object_from_file("/tmp/test.json");
	if(obj_root==NULL)
	{
		printf("!!!config_parse get json_tokener_parse fail\n");
		return 1;
	}
	else
	{
		char res[128]={0};
		
		strcpy(res,json_get_char(obj_root, "gid"));
		printf("get [%s]\n",res);
		json_object_put(obj_root);
	}
	return 0;
}

核心文件.mk和.h参考下载

移植json-c核心文件下载

SylixOS虚拟机连接外网

官方文档提供的方式,会自动创建一个虚拟网卡,电脑和虚拟机采用固定IP通讯,但是如果想让虚拟机连接外部其他服务器,需要做些特殊尝试。
首先利用自己及其上其他可用网络,将其修改共享到虚拟机使用的虚拟网卡
我这里以太网3就是虚拟机自动创建出来的网卡
共享之后,以太网3会自动设置为其他一个ip192.168.137.1。和默认的192.168.7.x网段不同。
然后手动修改虚拟机的ip,掩码和网关,用到以下指令

ifconfig en1 inet 192.168.137.91
ifconfig en1 netmask 255.255.255.0
ifconfig en1 gateway 192.168.137.1
route add default gw 192.168.137.1

然后在虚拟机里就可以ping同外网了,不过仅限于ip,
如果想ping外网域名,需要配置dns,例如配置成114.114.114.114

ifconfig dns 0 114.114.114.114

在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值