Hi Sebastien,

Please once again, don't start a frame war, we need people to
contribute to NuttX, to make our loved project great, not to destroy
it.

That said, I want to say a famous phrase from Linus Torvalds:

"Doers decide!"

If you want to decide how ROMFS should work, please do it.

It is an open-source project after all, so you are invited to
contribute, instead of starting a frame war against does who really do
and really contribute to make NuttX great.

About the System-V init you can use it from some projects, I heard
someone using it on NuttX:

https://github.com/arachsys/init/tree/master

BR,

Alan

On 2/2/23, Sebastien Lorquet <sebast...@lorquet.fr> wrote:
> Hi,
>
> Once again please remember this project is Apache NuttX and not Xiaomi OS.
>
> The fact that your company is a major contributor and that you have
> established your own local usage patterns does not mean these are the
> only valid ones.
>
> Each user has its own vision of how such a flexible system should work,
> and all users count.
>
> So please dont suggest "bandaid" solutions to me like /etc is the only
> place to mount a romfs because the init script can "do things".
>
> It is perfectly valid to mount three romfs each at /foo /bar and /baz at
> boot and NuttX should allow it without telling me what's better.
>
> And I'm sorry but nsh is a demo shell and not an init system, on my own
> product there is NO WAY I want to give full shell access to my customer.
>
> This wont happen and nsh is not even part of my production build.
>
> FSes can be initialized in the board's _bringup routine and I dont want
> a systemd/init/shell to read scripts to mount /proc and bind a littlefs
> to a directory of my choosing. And _bringup is already used to init spi
> and mtd. Because NuttX is a RTOS and is meant to be more lightweight and
> flexible than a generic freebsd/macos/linux OS.
>
>
> Patch will come, I think this is a good change for nsh, but I'm a bit
> busy at work at this moment, stuck in a kind of dual-PIC18 cursed hell
> with hard deadlines lol.
>
> I also have a kind of "raid0" to aggregate two MTD with compatible
> geometries into one, because reasons. It needs more tests, but it could
> be useful for other users.
>
> Sebastien
>
>
> On 2/2/23 19:48, Xiang Xiao wrote:
>> 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