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