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
>>>>>>>>>>>
>

Reply via email to