Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
rt-smart
ZIP
xmake
RT_Smart GNU 移植 minizip记录(基于xmake实现)
发布于 2023-05-17 19:09:32 浏览:674
订阅该版
[tocm] # RT_Smart GNU 移植 minizip记录(基于xmake实现) 由于minizip除了依赖于文件一些操作函数外并不依赖于其他库,所以个人直接编译运行;另外本次移植的是使用的xmake完成移植。 ## 移植记录 1、选择合适的移植库,xmake提供了一些可以跨平台移植的库,见[https://xrepo.xmake.io/#/packages/cross](https://xrepo.xmake.io/#/packages/cross),这里我选择了`minizip`来进行移植。 2、编写`xmake.lua`配置`ToolChains`并且引入`minizip`依赖 ```lua add_rules("mode.debug", "mode.release") toolchain("aarch64-linux-musleabi") set_kind("standalone") set_sdkdir("$(projectdir)/../../tools/gnu_gcc/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu") on_load(function(toolchain) os.setenv("PROJ_DIR", os.projectdir()) --For lua embed build script toolchain:load_cross_toolchain() toolchain:set("toolset", "cxx", "aarch64-linux-musleabi-g++") toolchain:set("toolset", "cc", "aarch64-linux-musleabi-gcc") -- add flags for aarch64 toolchain:add("cxflags", "-march=armv8-a -D__RTTHREAD__ -Wall -n --static -DHAVE_CCONFIG_H", {force = true}) toolchain:add("ldflags", "-march=armv8-a -D__RTTHREAD__ -Wall -n --static", {force = true}) toolchain:add("ldflags", "-T $(projectdir)/../../linker_scripts/aarch64/link.lds", {force = true}) if not is_config("pkg_searchdirs", "dropbear") then toolchain:add("ldflags", "-L$(projectdir)/../../sdk/rt-thread/lib/aarch64/cortex-a -Wl,--whole-archive -lrtthread -Wl,--no-whole-archive", {force = true}) end toolchain:add("includedirs", "$(projectdir)/../../sdk/rt-thread/include", {force = true}) toolchain:add("includedirs", "$(projectdir)/../../", {force = true}) toolchain:add("includedirs", "$(projectdir)", {force = true}) toolchain:add("includedirs", "$(projectdir)/../../sdk/rt-thread/components/dfs", {force = true}) toolchain:add("includedirs", "$(projectdir)/../../sdk/rt-thread/components/drivers", {force = true}) toolchain:add("includedirs", "$(projectdir)/../../sdk/rt-thread/components/finsh", {force = true}) toolchain:add("includedirs", "$(projectdir)/../../sdk/rt-thread/components/net", {force = true}) toolchain:add("linkdirs", "$(projectdir)/../../sdk/rt-thread/lib/aarch64", {force = true}) if is_config("kind", "debug") then toolchain:add("cxflags", "-g -gdwarf-2", {force = true}) else toolchain:add("cxflags", "-O2", {force = true}) end end) toolchain_end() add_requires("minizip") target("minizip") set_toolchains("aarch64-linux-musleabi") set_kind("binary") add_files("src/minizip.c") add_packages("minizip") target("miniunz") set_toolchains("aarch64-linux-musleabi") set_kind("binary") add_files("src/miniunz.c") add_packages("minizip") target("minizip_test") set_toolchains("aarch64-linux-musleabi") set_kind("binary") add_files("src/main.c") add_packages("minizip") ``` 配置`cconfig.h`,这个文件如果用scons会自动生成,但是在xmake工程当中不会自动生成,所以需要自己实现 ```c #ifndef CCONFIG_H__ #define CCONFIG_H__ /* Automatically generated file; DO NOT EDIT. */ /* compiler configure file for RT-Thread in GCC/MUSL */ #define HAVE_SYS_SIGNAL_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_PTHREAD_H 1 #define HAVE_FDSET 1 #define HAVE_SIGACTION 1 #define HAVE_SIGEVENT 1 #define HAVE_SIGINFO 1 #define HAVE_SIGVAL 1 #endif ``` 3、编写`src/main.c`程序,这里我用`minizip`实现了压缩`example.txt`到`example.zip` ```c /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: GPL-2.0 * * Change Logs: * Date Author Notes * 2023-05-17 wcx1024979076 The first version */ #include "stdio.h" #include "zip.h" int main() { // 文件名 const char *zipfile = "example.zip"; // 需要压缩的文件 const char *file = "example.txt"; zipFile zf = zipOpen(zipfile, APPEND_STATUS_CREATE); if(zf == NULL) { printf("Error creating %s \n", zipfile); return 1; } // 压缩文件 int err = zipOpenNewFileInZip(zf, file, NULL, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_BEST_COMPRESSION); if(err != ZIP_OK) { printf("Error adding %s to %s \n", file, zipfile); return 1; } // 读取文件并压缩 FILE *f = fopen(file, "rb"); char buf[1024]; int len; while((len = fread(buf, 1, sizeof(buf), f)) > 0) { zipWriteInFileInZip(zf, buf, len); } fclose(f); zipCloseFileInZip(zf); zipClose(zf, NULL); printf("Successfully created %s \n", zipfile); return 0; } ``` 4、`xmake`编译链接生成`mininet`可执行文件,打包进入 `sd.bin` 这里我使用的`mcopy`来实现的(用的是Codespace来写的代码,无root权限,不能使用mount挂载),具体命令为 ```sh mcopy -i sd.bin /path/of/the/minizip :: ``` 5、用`qemu`虚拟机运行即可 运行结果: ![qemu运行结果](https://oss-club.rt-thread.org/uploads/20230517/580d02c671a2e55ebd892d3850b5a876.png.webp) 6、代码见: [https://github.com/WCX1024979076/userapps](https://github.com/WCX1024979076/userapps) ## 参考链接 感谢 xmake-io/smart-build 仓库所提供的 RT_Smart xmake 编译脚本 [https://github.com/xmake-io/smart-build/blob/main/toolchains/aarch64.lua](https://github.com/xmake-io/smart-build/blob/main/toolchains/aarch64.lua) zlib仓库 [https://github.com/madler/zlib](https://github.com/madler/zlib) xrepo提供的minizip/xmake.lua [https://github.com/xmake-io/xmake-repo/blob/master/packages/m/minizip/xmake.lua](https://github.com/xmake-io/xmake-repo/blob/master/packages/m/minizip/xmake.lua) xrepo提供的zlib/xmake.lua [https://github.com/xmake-io/xmake-repo/blob/master/packages/z/zlib/xmake.lua](https://github.com/xmake-io/xmake-repo/blob/master/packages/z/zlib/xmake.lua)
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
TimWcx
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt-smart发布时间
2
rt-smart qemu-vexpress-a9 编译报错
3
rt-smart分支编译rasp4-32bsp报错
4
rt-smart qemu-vexpress-a9 win10编译脚本问题
5
rt-smart qemu-vexpress-a9 linux 下crtl+c
6
rt-smart + pthread 编译报错
7
rt-smart的rt_channel实现问题
8
关于rt-smart的musl-libc
9
RT-Smart Windows 编译 qemu-vexpress-a9 出错
10
用户程序在RT-Smart存在的方式
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部