I think if it was generic but with some CONFIG_ROMFS_MNTPOINT it could be usable for all customer environment and preferences.
Well, there still some cases that could be covered: ie. a user app that needs files mounted at two or more places inside the root file system. On 2/2/23, Sebastien Lorquet <sebast...@lorquet.fr> wrote: > IMHO this is too dependent on customer environment and preferences. > > But it would be nice to be an official out-of-tree board skeleton to > show people how to organize it. libopencm3 has a demo project that is > very helpful. > > Because it's always the first step when you use nuttx on real hardware > that is not an unmodified commercial devboard. > > Sebastien > > Le 02/02/2023 à 15:35, Alan C. Assis a écrit : >> It should be nice to have a simple logic to let users to use ROMFS. >> >> Currently everyone needs to duplicate it in their own code/application. >> >> I'm thinking something like apps/romfiles/ where people just put the >> files that they want to be in the ROM and it will be included >> automatically, instead reinventing the wheel. >> >> BR, >> >> Alan >> >> On 2/2/23, Sebastien Lorquet <sebast...@lorquet.fr> wrote: >>> Hi, >>> >>> Dont use boardctl for the romfs, this is too intertwined in the >>> mechanism used to initialize nsh, which is not suitable for >>> customization. >>> >>> This need to be decoupled, I've done this in my own apps. I'll send it >>> later, maybe. >>> >>> >>> Here is the proper way to mount a romfs from your board bringup() >>> routines: >>> >>> I am using stm32 as example, the ROM fs directory holding the file is a >>> brother to board/ >>> >>> boarddir: >>> +-- romfs >>> +-- your files... >>> +-- board >>> +-- include >>> +-- src >>> >>> You can do something else if you change the makefile below >>> >>> First change your board/src makefile to add a dependency so that >>> stm32_bringup.c depends on romfs.h >>> >>> .PHONY: myromfs.h #might not be required >>> stm32_bringup.c: myromfs.h >>> myromfs.h: >>> @echo "ROMFS" >>> @genromfs -v -f my.romfs -d $(BOARD_DIR)/../romfs >>> @xxd -i my.romfs > myromfs.h >>> >>> Then do this in stm32_bringup.c: >>> >>> #include "myromfs.h" >>> #define SECTORSIZE 64 >>> #define NSECTORS(b) (((b)+SECTORSIZE-1)/SECTORSIZE) >>> #include <nuttx/fs/fs.h> >>> #include <nuttx/drivers/ramdisk.h> >>> #include <sys/mount.h> >>> >>> and then in stm32_bringup(void): >>> >>> ret = romdisk_register(0, // /dev/ram0 >>> myromfs, //var in the xxd header >>> NSECTORS(myromfs_len), >>> SECTORSIZE); >>> >>> ret = nx_mount("/dev/ram0", "/romfs", "romfs", MS_RDONLY, NULL); >>> >>> Then you will have your files mounted in /romfs at boot. >>> >>> You can do symlinks: >>> >>> ret = symlink("/romfs/etc" , "/etc"); >>> _info("Linking /etc: %d\n", ret); >>> >>> Sebastien >>> >>> Le 02/02/2023 à 05:59, Russell Haley a écrit : >>>> I am mistaken. I understood that the rom image was part of the >>>> application >>>> on flash, but had mis-read the documentation of >>>> boardctl(BOARDIOC_ROMDISK, >>>> (uintptr_t)&desc); and thought that the command loaded the image into >>>> *RAM* >>>> (the BOARDIOC_MKRD command makes the RAM disk. oops!). >>>> >>>> Incidentally, neither the romfs example nor my attempt to re-create it >>>> works in my sim: >>>> >>>> osboxes@osboxes ~/n/nuttx (master)> ./nuttx >>>> >>>> NuttShell (NSH) NuttX-12.0.0 >>>> nsh> romfs >>>> ERROR: Failed to create RAM disk: Unknown error >>>> nsh> rapp >>>> Starting Russells App 1... >>>> ERROR: Failed to create RAM disk: Unknown error >>>> nsh> >>>> >>>> I don't know how to debug this "unknown error". I guess I will try to >>>> find >>>> where that error message comes from and hook in GDB? I'm terrible at >>>> this >>>> stuff, someone needs to revoke my compiler license (tee hee). >>>> >>>> Cheers, >>>> Russ >>>> >>>> On Wed, Feb 1, 2023 at 7:29 PM Xiang Xiao <xiaoxiang781...@gmail.com> >>>> wrote: >>>> >>>>> romfs is part of your image as the const string. There is no >>>>> difference >>>>> from the below manual step. >>>>> >>>>> On Thu, Feb 2, 2023 at 10:00 AM Russell Haley <russ.ha...@gmail.com> >>>>> wrote: >>>>> >>>>>> On Tue, Jan 31, 2023 at 6:16 AM Fotis Panagiotopoulos < >>>>> f.j.pa...@gmail.com >>>>>> wrote: >>>>>> >>>>>>> Hello, >>>>>>> >>>>>>> Indeed the "proper" way of including a script would be to store it >>>>>>> in >>>>>>> a >>>>>>> file system. >>>>>>> >>>>>>> However, when I needed to include a single and small script and I >>>>> didn't >>>>>>> want to introduce a complete FS just for this, I used xxd. >>>>>>> xxd can convert any file to a C header file. >>>>>>> >>>>>>> You can then include the header, and access the whole file as a >>>>> variable. >>>>>>> Here is an example: >>>>>>> >>>>>>> I added this in my app Makefile: >>>>>>> >>>>>>> # Setup any special pre-build context >>>>>>> context: header >>>>>>> $(Q) cd path/to/libs/json.lua/ && xxd -i json.lua > >>>>>>> json_lua.h >>>>> && >>>>>>> echo -n "const " | cat - json_lua.h > temp && mv temp json_lua.h >>>>>>> >>>>>>> >>>>>>> >>>>>>> And then I used the file like this: >>>>>>> >>>>>>> #include "lua.h"#include "lauxlib.h"#include <string.h> >>>>>>> #include "json_lua.h" >>>>>>> static int luaopen_json(lua_State * L); >>>>>>> >>>>>>> void ExtLibs_load(lua_State * L){ >>>>>>> // json.lua#ifdef CONFIG_EXT_LIB_JSON_LUA >>>>>>> luaL_requiref(L, "json", luaopen_json, 1); >>>>>>> lua_pop(L, 1);#endif} >>>>>>> >>>>>>> int luaopen_json(lua_State * L){ >>>>>>> const char * modname = lua_tostring(L, 1); >>>>>>> >>>>>>> if (strcmp(modname, "json") != 0) >>>>>>> return luaL_error(L, "cannot load json module"); >>>>>>> >>>>>>> if (luaL_loadbufferx(L, (char*)json_lua, json_lua_len, >>>>>>> "json", >>>>>>> "t") != LUA_OK) >>>>>>> return lua_error(L); >>>>>>> >>>>>>> lua_call(L, 0, 1); >>>>>>> >>>>>>> return 1;} >>>>>>> >>>>>>> >>>>>>> I hope this helps... >>>>>>> >>>>>> That is very helpful, and not just for nuttx development! Thanks for >>>>>> the >>>>>> tip. >>>>>> >>>>>> The romfs example actually uses xxd as well to convert the filesystem >>>>> into >>>>>> hex code that is also stored in a header file. If I am reading the >>>>>> code >>>>>> correctly, the example app loads the entire filesystem into memory, >>>>>> which >>>>>> isn't very efficient and not at all what I wanted. Can someone tell >>>>>> me >>>>>> if >>>>>> that's true? >>>>>> >>>>>> Thanks, >>>>>> Russ >>>>>> >>>>>>> >>>>>>> On Sun, Jan 29, 2023 at 7:34 AM Xiang Xiao >>>>>>> <xiaoxiang781...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> You can use the real file system on the device, there are many >>>>> choices: >>>>>>>> romfs, littlefs, fatfs, starmtfs and spiffs. >>>>>>>> >>>>>>>> On Sun, Jan 29, 2023 at 12:59 PM Russell Haley >>>>>>>> <russ.ha...@gmail.com >>>>>>>> wrote: >>>>>>>> >>>>>>>>> On Sat, Jan 28, 2023 at 7:35 PM Xiang Xiao < >>>>>> xiaoxiang781...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> You can enable CONFIG_FS_HOSTFS/CONFIG_SIM_HOSTFS, put your >>>>> scripts >>>>>>>> into >>>>>>>>>> some PC folder and run mount this folder from nsh: >>>>>>>>>> mount -t hostfs -o fs=/path/to/your/pc/folder. /data >>>>>>>>>> >>>>>>>>>> While I appreciate the answer, I am using the sim as a testing >>>>>>> platform >>>>>>>>> and hoping to move to either an STM32F4/7 or a Sony Spresense. I >>>>>>>>> am >>>>>>>> hoping >>>>>>>>> for a solution that is applicable to an embedded project. If I >>>>> can't >>>>>>> just >>>>>>>>> add files to the initial image then I will look at the romfs >>>>> example >>>>>>> and >>>>>>>>> maybe the next best thing? >>>>>>>>> >>>>>>>>> >>>>>>>>>> On Sun, Jan 29, 2023 at 2:24 AM Russell Haley < >>>>>> russ.ha...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> Big thanks to Xiang Xiao for pointing me to the sim:lua >>>>>>>> configuration. >>>>>>>>> I >>>>>>>>>>> was unable to simply include the defconfig file that you linked >>>>>> to, >>>>>>>>> but I >>>>>>>>>>> was able to reconfigure for the sim:lua configuration. I've >>>>> now >>>>>>> got >>>>>>>> an >>>>>>>>>> app >>>>>>>>>>> in the examples folder that includes the Lua interpreter. Is >>>>>> there >>>>>>> a >>>>>>>>>>> tutorial on how to include folders and lua scripts or extra >>>>> files >>>>>>> in >>>>>>>>> the >>>>>>>>>>> initial file system? >>>>>>>>>>> >>>>>>>>>>> Much appreciated, >>>>>>>>>>> Russ >>>>>>>>>>> >