As I said before, most features I talk about is disabled by default. Nobody forbids you to use an alternative approach.
On Fri, Feb 3, 2023 at 6:40 AM Alan C. Assis <acas...@gmail.com> wrote: > 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. > > I agree with Alan. Let's talk about technology and code. > 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. > > > But, in principle NuttX prefer POSIX way, this is the rule set by Greg and agree by many community member: https://github.com/apache/nuttx/blob/master/INVIOLABLES.md#strict-posix-compliance . Almost features added by Xiaomi strictly follow these rule: 1. Implement this feature If POSIX define it 2. If not, Implement it like other POSIX OS(*BSD or Linux) > 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. > > > You can mount to any place already: https://github.com/apache/nuttx-apps/blob/master/nshlib/Kconfig#L782-L787 I just mentioned the default value. > 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. Nobody forbids you to do this. Actually we also use this approach for the very small system(e.g. BLE only module) too. Let's come back to Russell's question, he wants to try Lua script in the sim environment. > Because NuttX is a RTOS and is meant to be more lightweight and > > flexible than a generic freebsd/macos/linux OS. > > > But, we also need the generic solution to handle the complex SoC(e.g. 4XA55+HiFi DSP+2xM33) and application(e.g. Smartwatch and IPCamera). > > > > 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 > >>>>>>>>>>>>>>> > > >