mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 14:27:37 +08:00
fs/ioctl:add FIOC_XIPBASE to get file xip address
in tmpfs/romfs, we can get file real xip address to execute program Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
@@ -605,6 +605,21 @@ static int romfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||||||
strlcat(ptr, rf->rf_path, PATH_MAX);
|
strlcat(ptr, rf->rf_path, PATH_MAX);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
else if (cmd == FIOC_XIPBASE)
|
||||||
|
{
|
||||||
|
FAR struct romfs_mountpt_s *rm = filep->f_inode->i_private;
|
||||||
|
FAR uintptr_t *ptr = (FAR uintptr_t *)arg;
|
||||||
|
|
||||||
|
if (rm->rm_xipbase != 0)
|
||||||
|
{
|
||||||
|
*ptr = (uintptr_t)rm->rm_xipbase + rf->rf_startoffset;
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -ENXIO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return -ENOTTY;
|
return -ENOTTY;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1825,6 +1825,13 @@ static int tmpfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (cmd == FIOC_XIPBASE)
|
||||||
|
{
|
||||||
|
FAR uintptr_t *ptr = (FAR uintptr_t *)arg;
|
||||||
|
|
||||||
|
*ptr = (uintptr_t)tfo->tfo_data;
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -226,6 +226,9 @@
|
|||||||
#define FIOC_SETLKW _FIOC(0x0014) /* IN: Pointer to flock
|
#define FIOC_SETLKW _FIOC(0x0014) /* IN: Pointer to flock
|
||||||
* OUT: None
|
* OUT: None
|
||||||
*/
|
*/
|
||||||
|
#define FIOC_XIPBASE _FIOC(0x0015) /* IN: uinptr_t *
|
||||||
|
* OUT: Current file xip base address
|
||||||
|
*/
|
||||||
|
|
||||||
/* NuttX file system ioctl definitions **************************************/
|
/* NuttX file system ioctl definitions **************************************/
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user