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