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