Then, they should run the mount or whatever they want from rcS like how Unix did. Actually, don't invert the wheel again, just follow how Unix is done.
On Fri, Feb 3, 2023 at 1:27 AM Alan C. Assis <acas...@gmail.com> wrote: > 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 > >>>>>>>>>>> > > >