I've put my source code here in case anyone wants to try it:

https://github.com/RussellHaley/nuttx-russ-app-1

Thanks for the help everyone!
Russ

On Fri, Feb 3, 2023 at 2:31 AM Russell Haley <russ.ha...@gmail.com> wrote:

> Hmmm... So far I've tried the romfs example, adding the mkrd command as
> well as the suggestion by Sebastien but everything returns an error. Is
> everyone sure that romfs works with the sim:nsh example code?
>
> rapp_main_1.c
> static int open_romdisk_2(void)
> {
> int ret = 0;
> ret = romdisk_register(0, // /dev/ram0
>                           scripts_img, //var in the xxd header
>                           NSECTORS(scripts_img_len),
>                           CONFIG_EXAMPLES_ROMFS_SECTORSIZE);
> if (ret < 0)
> {
> printf("Failed to create a romdisk.\n");
> printf("Error Number is %d\n", errno);
> printf("ERROR: Failed to create RAM disk: %s\n", strerror(errno));
> return 1;
> }
>
>    ret = nx_mount("/dev/ram0", "/romfs", "romfs", MS_RDONLY, NULL);
>
>    if (ret < 0)
>     {
> printf("Failed to mount ramdisk.\n");
> printf("Error NUmber is %d\n", errno);
> printf("ERROR: Failed to create RAM disk: %s\n", strerror(errno));
> return 1;
>     }
> }
>
> static int open_romdisk(void)
> {
> int ret = 0;
> struct boardioc_mkrd_s ramdisk;
> struct boardioc_romdisk_s desc;
>
> ramdisk.minor = CONFIG_EXAMPLES_ROMFS_RAMDEVNO;
> ramdisk.nsectors = NSECTORS(scripts_img_len);
> ramdisk.sectsize = CONFIG_EXAMPLES_ROMFS_SECTORSIZE;
>
> ret = boardctl(BOARDIOC_MKRD, (uintptr_t)&ramdisk);
>
> if (ret < 0)
>     {
> printf("Failed to create a ramdisk.\n");
> printf("Error NUmber is %d\n", errno);
> printf("ERROR: Failed to create RAM disk: %s\n", strerror(errno));
> return 1;
>     }
>
> /* Create a RAM disk for the test */
> desc.minor    = CONFIG_EXAMPLES_ROMFS_RAMDEVNO;         /* Minor device
> number of the ROM disk. */
> desc.nsectors = NSECTORS(scripts_img_len);              /* The number of
> sectors in the ROM disk */
> desc.sectsize = CONFIG_EXAMPLES_ROMFS_SECTORSIZE;       /* The size of one
> sector in bytes */
> desc.image    = (FAR uint8_t *)scripts_img;             /* File system
> image */
>
> ret = boardctl(BOARDIOC_ROMDISK, (uintptr_t)&desc);
>
>
> if (ret < 0)
>     {
> printf("Error NUmber is %d\n", errno);
> printf("ERROR: Failed to create ROM disk: %s\n", strerror(errno));
> return 1;
>     }
> /* Mount the test file system */
>
> printf("Mounting ROMFS filesystem at target=%s with source=%s\n",
> CONFIG_EXAMPLES_ROMFS_MOUNTPOINT, MOUNT_DEVNAME);
>
> ret = mount(MOUNT_DEVNAME, CONFIG_EXAMPLES_ROMFS_MOUNTPOINT, "romfs",
> MS_RDONLY, NULL);
> if (ret < 0)
> {
> printf("Error NUmber is %d\n", errno);
> printf("ERROR: Mount failed: %s\n", strerror(errno));
> return 1;
> }
>
> return 0;
> }
>
> /****************************************************************************
>  * main
>
>  ****************************************************************************/
>
> int main(int argc, FAR char *argv[])
> {
> printf("Starting Russells App 1...\n");
> printf("Rom Disk Images says: %s\n", scripts_img+139);
> // open_romdisk();
> open_romdisk_2();
> return 0;
> }
>
>
> OUTPUT:
>
> osboxes@osboxes ~/n/nuttx (master)> ./nuttx
>
> NuttShell (NSH) NuttX-12.0.0
> nsh> rapp
> Starting Russells App 1...
> Rom Disk Images says: require 'cjson'
>
>
> function readAll(file)
>     local f = assert(io.open(file, "rb"))
>     local content = f:read("*all")
>     f:close()
>     return content
> end
>
> local json = readAll('test.json')
> local colors = cj.decode(json)
>
> for i,v in pairs(colors) do
> for k,d in pairs(v) do
> print(k,d)
> end
> end
>
>
> Failed to create a romdisk.
> Error Number is 0
> ERROR: Failed to create RAM disk: Unknown error
>
> On Thu, Feb 2, 2023 at 3:05 AM Xiang Xiao <xiaoxiang781...@gmail.com>
> wrote:
>
>> You need to prepare /dev/ram1 with the mkrd command.
>>
>> On Thu, Feb 2, 2023 at 2:29 PM Russell Haley <russ.ha...@gmail.com>
>> wrote:
>>
>> > On Wed, Feb 1, 2023 at 9:23 PM Xiang Xiao <xiaoxiang781...@gmail.com>
>> > wrote:
>> >
>> > > You can debug sim nuttx with your favorite PC debugger just like a
>> normal
>> > > host program.
>> > > Of course, please ensure the debug system is
>> > > generated(CONFIG_DEBUG_SYMBOLS=y).
>> > >
>> >
>> > I was able to set up KDevelop to run nuttx in the debugger, but the
>> console
>> > never gave me a nsh> prompt so I wasn't able to enter my app name and
>> run
>> > it. Nonetheless I was able to run in GDB on the command line. For some
>> > reason inode_search is returning 0, which is converted to -EEXIST or
>> -17.
>> >
>> > Breakpoint 3, inode_reserve (path=0x7fff00000000 <error: Cannot access
>> > memory at address 0x7fff00000000>, mode=48, inode=0x555555671220
>> > <g_inode_lock>) at inode/fs_inodereserve.c:174
>> > 174 {
>> > (gdb) n
>> > 184  *inode = NULL;
>> > (gdb)
>> > 186  if (path[0] == '\0')
>> > (gdb) p path
>> > $47 = 0x7ffff3f2f370 "/dev/ram1"
>> > (gdb) n
>> > 193  SETUP_SEARCH(&desc, path, false);
>> > (gdb)
>> > 195  ret = inode_search(&desc);
>> > (gdb)
>> > 196  if (ret >= 0)
>> > (gdb) p ret
>> > $49 = 0
>> > (gdb) n
>> > 202      ret = -EEXIST;
>> > (gdb)
>> >
>> > Not sure what to do from here? Any feedback would be great?
>> >
>> > Thanks,
>> > Russ
>> >
>> >
>> > >
>> > > On Thu, Feb 2, 2023 at 1:00 PM Russell Haley <russ.ha...@gmail.com>
>> > wrote:
>> > >
>> > > > 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