On Fri, Feb 3, 2023 at 2:06 AM Sebastien Lorquet <sebast...@lorquet.fr>
wrote:

> No, and this was exactly my problem.
>
> The romfs should NOT be mounted by nsh.
>
>
It's an option and disabled by default.
BTW, which place do you think is better than the current one?


> Mounting to /etc/ is also NOT flexible enough.
>
> Because in a normal board the boot app is not nsh but the customer app.
>
>
You can boot other applications/services from scripts.


>
> At the moment this romfs mount is also closely coupled to the boot
> script mechanism, which is very annoying if your boot script is on a
> flash device (eg littlefs) and not on a romfs.
>
> I have decoupled this, but still not provided a pull request, that was
> in fact easy and the result is cleaner than the current way it is done.
>
>
 Yes, the Kconfig option makes the romfs mount couple with boot script, but
it is easy to decouple them. Patch is welcome.

>
> You cant expect customers to follow a nsh-based design. The learning
> curve for nuttx is hard enough, and if you add more constraints in apps
> building it is even harder.
>
>
It depends on the developer's background. If the developer has
experience with other POSIX OS(Android, Ubuntu and macOS), all is natural.


> Remember that NSH and apps are just "examples" and nuttx should work
> with completely separated apps.
>
>
Of course, all we discuss so far is the user space feature, not related to
the kernel.

Thats why I think nsh should not be responsible for too much.
>
>
nsh equals init pus sh. One improvement is split init from nsh like other
OS.


>
> Sebastien
>
>
> Le 02/02/2023 à 17:47, Xiang Xiao a écrit :
> > The infrastructure is there, you can:
> >
> >     1. Enable CONFIG_NSH_ROMFSETC
> >     2. Add your files to RCSRCS/RCRAWS in board's Makefile
> >
> > Then nsh will auto mount it to /etc. sim already has a demo for this:
> > https://github.com/apache/nuttx/tree/master/boards/sim/sim/sim/src/etc
> >
> >
> > On Fri, Feb 3, 2023 at 12:33 AM Russell Haley <russ.ha...@gmail.com>
> wrote:
> >
> >> On Thu, Feb 2, 2023 at 6:35 AM Alan C. Assis <acas...@gmail.com> wrote:
> >>
> >>> 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.
> >>>
> >> This is what I was hoping to find.  I thought that since nuttx was
> already
> >> building a root filesystem there would be a simple way to include files
> >> with the image.
> >>
> >> Cheers,
> >> Russ
> >>
> >>> 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
> >>>>>>>>>>>>
>

Reply via email to