LOS_DoExecveFile 根据fileName执行一个新的用户程序 LOS_DoExecveFile接口一般由用户通过execve系列接口利用系统调用机制调用创建新的进程,内核不能直接调用该接口启动新进程。
168 CHAR kfileName[PATH_MAX + 1] = { 0 };
171 CHAR buf[PATH_MAX + 1] = { 0 };
184 if (
OsGetRealPath(kfileName, buf, (PATH_MAX + 1)) != LOS_OK) {
187 if (buf[0] !=
'\0') {
194 PRINT_ERR(
"%s %d, failed to allocate new vm space\n", __FUNCTION__, __LINE__);
198 loadInfo.
argv = argv;
199 loadInfo.
envp = envp;
STATIC INT32 OsGetRealPath(const CHAR *fileName, CHAR *buf, UINT32 maxLen)
STATIC INT32 OsExecve(const ELFLoadInfo *loadInfo)
运行ELF
STATIC INT32 OsCopyUserParam(ELFLoadInfo *loadInfo, const CHAR *fileName, CHAR *kfileName, UINT32 maxSize)
INT32 OsLoadELFFile(ELFLoadInfo *loadInfo)
LITE_OS_SEC_TEXT VOID LOS_Exit(INT32 status)
LOS_Exit 进程退出
LITE_OS_SEC_TEXT UINT32 OsExecRecycleAndInit(LosProcessCB *processCB, const CHAR *name, LosVmSpace *oldSpace, UINTPTR oldFiles)
进程的回收再利用,被LOS_DoExecveFile调用
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
STATUS_T LOS_VmSpaceFree(LosVmSpace *space)
LosVmSpace * OsCreateUserVmSpace(VOID)
创建用户进程空间
STATIC INLINE BOOL LOS_IsUserAddress(VADDR_T vaddr)
虚拟地址是否在用户空间
LosVmSpace * oldSpace
旧虚拟空间
const CHAR * fileName
文件名称
LosVmSpace * newSpace
新虚拟空间
UINTPTR stackTop
栈底位置,递减满栈下,stackTop是高地址位