tomzbj 发表于 2021-7-20 16:59:28

纯轮子能申请开源项目么。。。

打算自己实现一个romfs的库,主要用于在spiflash里放点字库、图片、声音之类方便些。
以前做过一个管理spiflash文件的库, 链接: https://github.com/tomzbj/flasher.py
后来觉得要不光能在pc上管理,最好在mcu上用着也方便一点,还需要扩充,不过再扩充就成fs了。既然这样,不如还是找个现成的fs用起来,只读即可,简单点最好。fatfs和spiffs功能过于强大,没必要。
romfs刚合适,只读,而且文件内容连续储存,只是没找到合适的库。
github上找了一个,https://github.com/litwr2/a-romfs-driver, 它的缺点一是只能从地址空间读取,直接把需要的资源编译到mcu内部flash用,没问题,放spiflash就不行了。得把底层的读功能改成回调函数,由用户提供。二是不支持子目录。

目前开了个头,实现了opendir和readdir,做了个简单的demo, 可以列出img里的文件 (ls和ll命令)


支持切换目录 (pwd和cd命令, 目前仅限一层子目录)


之后计划依次实现cat, hexview, crc32, 再加个文件导出功能。

shower.xu 发表于 2021-7-20 22:37:48

支持,然后来个上位机,可以GUI界面下载和管理flash文件{:lol:}

tomzbj 发表于 2021-7-20 22:41:53

shower.xu 发表于 2021-7-20 22:37
支持,然后来个上位机,可以GUI界面下载和管理flash文件

之前那个flasher.py是有上位机的, 不过只有命令行界面.

gui就算了, 凡是有gui的场合, 基本要在gui上浪费80%的时间...

armok. 发表于 2021-7-20 23:12:24

好,大家讨论一下,看看是否多人感兴趣。

eeehua 发表于 2021-7-20 23:13:54

是nandflash还是nor flash?spi

brother_yan 发表于 2021-7-21 00:09:45

我做过W25Q系列的简易烧写器,GUI用python不难写,pyqt大法好

tomzbj 发表于 2021-7-21 09:09:16

eeehua 发表于 2021-7-20 23:13
是nandflash还是nor flash?spi

随便, 底层的读操作由用户提供回调函数.

aleyn 发表于 2021-7-21 09:10:53

支持造轮子, 有些技能树只有不断的造轮子才能点开的.

zhiyuanzhitian 发表于 2021-7-21 09:17:54

支持造轮子.

huike 发表于 2021-7-21 10:17:45

{:victory:}{:victory:}{:victory:}

think_a_second 发表于 2021-7-21 14:22:26

支持,弄个简易的正如楼主所说的,MCU放少量文件的场合。有个项目,官方SDK里面的配置是json, mcu苦于没有轻量的文件系统,还得用电脑写工具先转成数组。

tomzbj 发表于 2021-7-21 22:18:26

think_a_second 发表于 2021-7-21 14:22
支持,弄个简易的正如楼主所说的,MCU放少量文件的场合。有个项目,官方SDK里面的配置是json, mcu苦于没有 ...

转数组倒没必要, 可以用objcopy转成.o然后链接进来, 或者建个汇编然后.incbin包含进来

dukelec 发表于 2021-7-22 00:29:46

本帖最后由 dukelec 于 2021-7-22 01:45 编辑

提個小建議,直接用通用的 msgpack 格式,類似 json,不同的是支持二進制數據、對 mcu 比較友好。可以用 dict 字典形式存儲文件,key 是文件名,value 是文件二進制內容。可以用多級 dict 當做目錄。文件名長度也沒限制。

電腦上用目錄存放文件,cat、hexdump 之類的直接在目錄中操作,用電腦自帶的不用自己寫,只要寫一個工具把指定目錄及子目錄打包成 msgpack 單個文件就好了,可以添加 crc 字段,打包過程中生成。mcu 端找一個開源的 msgpack 庫,或者自己寫一個小解析工具。

我寫的 CDEncrypt 開源加密工具等,都是用 msgpack 打包文件。

用 msgpack,除了可以存文件,還可以代替 json 用做 iot 等通訊場合,開銷比 json 小多了。而且 api 接口由 json 改為 msgpack 很方便,甚至可以同時兼容兩者。

zjr0411 发表于 2021-7-22 02:20:29

原来轮子是底层的意思,我还以为是车轮子呢。

能有人做底层当然好了,支持哦。

tomzbj 发表于 2021-7-22 21:25:06

dukelec 发表于 2021-7-22 00:29
提個小建議,直接用通用的 msgpack 格式,類似 json,不同的是支持二進制數據、對 mcu 比較友好。可以用 di ...

好啊, 你也弄一个呗~

BongBong 发表于 2021-7-22 22:19:51

搞轮子就跟搞基础医学一样,伟大

wele 发表于 2021-7-22 22:29:25

挺支持的,之前也是想法有,苦于每天杂七杂八事太琐碎。很多想法还没实现就磨平了。到时看看能不能贡献点代码。

waterx3 发表于 2021-7-23 08:20:57

有没有适合铁电的数据存储查询的东西,大概300条参数读写,还有每天4个数据存储1年可查询可修改。

tomzbj 发表于 2021-7-23 09:21:32

waterx3 发表于 2021-7-23 08:20
有没有适合铁电的数据存储查询的东西,大概300条参数读写,还有每天4个数据存储1年可查询可修改。 ...

KV存储? 看看flashdb/easyflash? 本站似乎有他的专栏

tomzbj 发表于 2021-7-30 10:57:21

本帖最后由 tomzbj 于 2021-7-30 11:16 编辑

初步完成基本功能和简单的demo (win32环境, mingw编译)
目前有以下api:

int zr_init(zr_fs_t* fs);
int zr_open(zr_fs_t* fs, const char* path);
int zr_close(zr_fs_t* fs, int fd);
int zr_read(zr_fs_t* fs, int fd, void* buff, zr_u32_t nbytes);
int zr_lseek(zr_fs_t* fs, int fd, zr_u32_t offset);
zr_u32_t zr_tell(zr_fs_t* fs, int fd);
int zr_stat(zr_fs_t* fs, const char* path, zr_finfo_t* finfo);

int zr_opendir(zr_fs_t* fs, zr_dir_t* dir, const char* path);
int zr_readdir(zr_fs_t* fs, zr_dir_t* dir, zr_finfo_t* finfo);


用户初始化时提供读函数和起始位置即可.

demo里实现了一个简单的命令行界面, 支持ls, ll, pwd, cd, cat, stat, hexview, crc32, export, help命令。

晚些时候我再移植到stm32+spiflash上试试。

github链接: https://github.com/tomzbj/zromfs
页: [1]
查看完整版本: 纯轮子能申请开源项目么。。。