Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张登雨
注释鸿蒙内核源码
提交
a7ab4c72
注释鸿蒙内核源码
项目概览
张登雨
/
注释鸿蒙内核源码
与 Fork 源项目一致
Fork自
鸿蒙内核源码分析 / 注释鸿蒙内核源码
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
注释鸿蒙内核源码
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a7ab4c72
编写于
11月 18, 2021
作者:
鸿蒙内核源码分析
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of gitee.com:weharmony/kernel_liteos_a_note
weharmonyos.com
上级
6d26a101
74957fb2
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
73 addition
and
79 deletion
+73
-79
arch/arm/arm/src/los_arch_mmu.c
arch/arm/arm/src/los_arch_mmu.c
+1
-1
arch/arm/arm/src/los_asid.c
arch/arm/arm/src/los_asid.c
+0
-4
arch/arm/arm/src/los_hw.c
arch/arm/arm/src/los_hw.c
+7
-10
fs/patchfs/los_partition_utils.h
fs/patchfs/los_partition_utils.h
+7
-7
fs/rootfs/los_bootargs.c
fs/rootfs/los_bootargs.c
+1
-1
kernel/base/core/los_bitmap.c
kernel/base/core/los_bitmap.c
+2
-2
kernel/base/mp/los_percpu.c
kernel/base/mp/los_percpu.c
+1
-1
kernel/common/los_config.c
kernel/common/los_config.c
+1
-1
kernel/common/los_init.c
kernel/common/los_init.c
+3
-2
kernel/common/los_init_info.h
kernel/common/los_init_info.h
+1
-1
kernel/extended/dynload/src/los_load_elf.c
kernel/extended/dynload/src/los_load_elf.c
+45
-45
lib/libscrew/src/los_cir_buf.c
lib/libscrew/src/los_cir_buf.c
+3
-3
zzz/git/pull.sh
zzz/git/pull.sh
+1
-1
未找到文件。
arch/arm/arm/src/los_arch_mmu.c
浏览文件 @
a7ab4c72
...
...
@@ -112,7 +112,7 @@ VADDR_T *OsGFirstTableGet(VOID)
return
(
VADDR_T
*
)
g_firstPageTable
;
}
//解除L1表的映射关系
//
/
解除L1表的映射关系
STATIC
INLINE
UINT32
OsUnmapL1Invalid
(
vaddr_t
*
vaddr
,
UINT32
*
count
)
{
UINT32
unmapCount
;
...
...
arch/arm/arm/src/los_asid.c
浏览文件 @
a7ab4c72
/*!
* @file los_asid.c
* @brief
*
* \n
* @link http://weharmonyos.com/blog/14.html
* @verbatim
asid(Adress Space ID) 进程标识符,属于CP15协处理器的C13号寄存器,ASID可用来唯一标识进程,并为进程提供地址空间保护。
...
...
@@ -22,8 +20,6 @@
已经被置换到硬盘上了。明白了吗?只关注应用开发的同学当然可以说这关我鸟事,给我的感觉有就行了,但想熟悉内核的同学就必须要明白,
这是每分每秒都在发生的事情。
* @endverbatim
*
* \n
* @version
* @author weharmonyos.com
* @date 2021-11-16
...
...
arch/arm/arm/src/los_hw.c
浏览文件 @
a7ab4c72
...
...
@@ -33,15 +33,15 @@
#include "los_task_pri.h"
/* support cpu vendors */
CpuVendor
g_cpuTable
[]
=
{
//支持的CPU供应商
/* support cpu vendors
| 支持的CPU供应商
*/
CpuVendor
g_cpuTable
[]
=
{
/* armv7-a */
{
0xc07
,
"Cortex-A7"
},
{
0xc09
,
"Cortex-A9"
},
{
0
,
NULL
}
};
/* logical cpu mapping
*/
//逻辑层cpu映射
/* logical cpu mapping
| cpu 逻辑层映射*/
UINT64
g_cpuMap
[
LOSCFG_KERNEL_CORE_NUM
]
=
{
[
0
...
LOSCFG_KERNEL_CORE_NUM
-
1
]
=
(
UINT64
)(
-
1
)
//统一赋值,这个赋值方式还挺别致的.
};
...
...
@@ -69,7 +69,7 @@ VOID OsTaskEntrySetupLoopFrame(UINT32 arg0)
"
\t
pop {fp, pc}
\n
"
);
}
#endif
//内核态任务运行栈初始化
//
/
内核态任务运行栈初始化
LITE_OS_SEC_TEXT_INIT
VOID
*
OsTaskStackInit
(
UINT32
taskID
,
UINT32
stackSize
,
VOID
*
topStack
,
BOOL
initFlag
)
{
if
(
initFlag
==
TRUE
)
{
...
...
@@ -112,17 +112,14 @@ LITE_OS_SEC_TEXT VOID OsUserCloneParentStack(VOID *childStack, UINTPTR parentTop
if
(
sigcb
->
sigContext
!=
NULL
)
{
cloneStack
=
(
VOID
*
)((
UINTPTR
)
sigcb
->
sigContext
-
sizeof
(
TaskContext
));
}
else
{
}
else
{
//cloneStack指向 TaskContext
cloneStack
=
(
VOID
*
)(((
UINTPTR
)
parentTopOfStack
+
parentStackSize
)
-
sizeof
(
TaskContext
));
//cloneStack指向 TaskContext
}
(
VOID
)
memcpy_s
(
childStack
,
sizeof
(
TaskContext
),
cloneStack
,
sizeof
(
TaskContext
));
//直接把任务上下文拷贝了一份
((
TaskContext
*
)
childStack
)
->
R0
=
0
;
//R0寄存器为0,这个很重要
,
pid = fork() pid == 0 是子进程返回.
((
TaskContext
*
)
childStack
)
->
R0
=
0
;
//R0寄存器为0,这个很重要
!!!
pid = fork() pid == 0 是子进程返回.
}
/*
用户态运行栈初始化,此时上下文还在内核区
*/
/// 用户态运行栈初始化,此时上下文还在内核区
LITE_OS_SEC_TEXT_INIT
VOID
OsUserTaskStackInit
(
TaskContext
*
context
,
UINTPTR
taskEntry
,
UINTPTR
stack
)
{
LOS_ASSERT
(
context
!=
NULL
);
...
...
fs/patchfs/los_partition_utils.h
浏览文件 @
a7ab4c72
...
...
@@ -51,18 +51,18 @@
#endif
///分区信息
struct
PartitionInfo
{
const
CHAR
*
partName
;
//分区名称
const
CHAR
*
cmdlineArgName
;
//命令行参数名称
const
CHAR
*
partName
;
//
/<
分区名称
const
CHAR
*
cmdlineArgName
;
//
/<
命令行参数名称
const
CHAR
*
storageTypeArgName
;
CHAR
*
storageType
;
const
CHAR
*
fsTypeArgName
;
CHAR
*
fsType
;
//文件系统类型
CHAR
*
fsType
;
//
/<
文件系统类型
const
CHAR
*
addrArgName
;
INT32
startAddr
;
INT32
startAddr
;
///< 开始地址
const
CHAR
*
partSizeArgName
;
INT32
partSize
;
CHAR
*
devName
;
UINT32
partNum
;
//分区编号
INT32
partSize
;
///< 分区大小
CHAR
*
devName
;
///< 设备名称
UINT32
partNum
;
//
/<
分区编号
};
INT32
GetPartitionInfo
(
struct
PartitionInfo
*
partInfo
);
...
...
fs/rootfs/los_bootargs.c
浏览文件 @
a7ab4c72
...
...
@@ -47,7 +47,7 @@
STATIC
CHAR
*
g_cmdLine
=
NULL
;
STATIC
UINT64
g_alignSize
=
0
;
STATIC
struct
BootArgs
g_bootArgs
[
MAX_ARGS_NUM
]
=
{
0
};
//读取环境变量bootcmd 来启动内核
//
/
读取环境变量bootcmd 来启动内核
INT32
LOS_GetCmdLine
(
VOID
)
{
int
ret
;
...
...
kernel/base/core/los_bitmap.c
浏览文件 @
a7ab4c72
...
...
@@ -93,7 +93,7 @@ UINT16 LOS_HighBitGet(UINT32 bitmap)
return
(
OS_BITMAP_MASK
-
CLZ
(
bitmap
));
//CLZ = count leading zeros 用于计算整数的前导零
}
///获取参数位图中最低位为1的索引位, 例如: 00110110 返回 1
///
获取参数位图中最低位为1的索引位, 例如: 00110110 返回 1
UINT16
LOS_LowBitGet
(
UINT32
bitmap
)
{
if
(
bitmap
==
0
)
{
...
...
@@ -102,7 +102,7 @@ UINT16 LOS_LowBitGet(UINT32 bitmap)
return
CTZ
(
bitmap
);
// CTZ = count trailing zeros 用于计算给定整数的尾随零
}
///从start位置开始设置numsSet个bit位 置1
///
从start位置开始设置numsSet个bit位 置1
VOID
LOS_BitmapSetNBits
(
UINTPTR
*
bitmap
,
UINT32
start
,
UINT32
numsSet
)
{
UINTPTR
*
p
=
bitmap
+
BITMAP_WORD
(
start
);
...
...
kernel/base/mp/los_percpu.c
浏览文件 @
a7ab4c72
...
...
@@ -32,5 +32,5 @@
#include "los_percpu_pri.h"
Percpu
g_percpu
[
LOSCFG_KERNEL_CORE_NUM
];
Percpu
g_percpu
[
LOSCFG_KERNEL_CORE_NUM
];
///< CPU池,池大小由CPU核数决定
kernel/common/los_config.c
浏览文件 @
a7ab4c72
...
...
@@ -55,7 +55,7 @@
#include "los_test_pri.h"
#endif
STATIC
SystemRebootFunc
g_rebootHook
=
NULL
;
//系统重启钩子函数
STATIC
SystemRebootFunc
g_rebootHook
=
NULL
;
//
/<
系统重启钩子函数
/// 设置系统重启钩子函数
VOID
OsSetRebootHook
(
SystemRebootFunc
func
)
{
...
...
kernel/common/los_init.c
浏览文件 @
a7ab4c72
...
...
@@ -43,7 +43,7 @@
#endif
/**
* Register kernel init level labels.
* Register kernel init level labels.
| 内核初始化等级
*/
OS_INIT_LEVEL_REG
(
kernel
,
10
,
g_kernInitLevelList
);
...
...
@@ -51,9 +51,10 @@ STATIC volatile UINT32 g_initCurrentLevel = OS_INVALID_VALUE; //当前等级
STATIC
volatile
struct
ModuleInitInfo
*
g_initCurrentModule
=
0
;
//当前模块
STATIC
Atomic
g_initCount
=
0
;
STATIC
SPIN_LOCK_INIT
(
g_initLock
);
// 建议每个启动框架都封装一层自己的调用接口
/**
* It is recommended that each startup framework encapsulate a layer of its own calling interface.
* 建议每个启动框架都封装一层自己的调用接口
*/
STATIC
VOID
InitLevelCall
(
const
CHAR
*
name
,
const
UINT32
level
,
struct
ModuleInitInfo
*
initLevelList
[])
{
...
...
kernel/common/los_init_info.h
浏览文件 @
a7ab4c72
...
...
@@ -62,7 +62,7 @@
typedef
UINT32
(
*
OsInitHook
)(
VOID
);
//初始化钩子函数
struct
ModuleInitInfo
{
//模块初始化信息
OsInitHook
hook
;
//函数指针,钩子函数
OsInitHook
hook
;
//
/<
函数指针,钩子函数
#ifdef LOS_INIT_DEBUG
const
CHAR
*
name
;
#endif
...
...
kernel/extended/dynload/src/los_load_elf.c
浏览文件 @
a7ab4c72
...
...
@@ -48,13 +48,13 @@
#endif
STATIC
BOOL
g_srandInit
;
/// 打开ELF文件
STATIC
INT32
OsELFOpen
(
const
CHAR
*
fileName
,
INT32
oflags
)
{
INT32
ret
=
-
LOS_NOK
;
INT32
procFd
;
procFd
=
AllocProcessFd
();
procFd
=
AllocProcessFd
();
//分配一个文件描述符
if
(
procFd
<
0
)
{
return
-
EMFILE
;
}
...
...
@@ -63,13 +63,13 @@ STATIC INT32 OsELFOpen(const CHAR *fileName, INT32 oflags)
SetCloexecFlag
(
procFd
);
}
ret
=
open
(
fileName
,
oflags
);
ret
=
open
(
fileName
,
oflags
);
//打开文件
if
(
ret
<
0
)
{
FreeProcessFd
(
procFd
);
return
-
get_errno
();
}
AssociateSystemFd
(
procFd
,
ret
);
AssociateSystemFd
(
procFd
,
ret
);
//分配一个系统描述符
return
procFd
;
}
...
...
@@ -146,7 +146,7 @@ STATIC INT32 OsReadELFInfo(INT32 procfd, UINT8 *buffer, size_t readSize, off_t o
}
return
LOS_OK
;
}
STATIC
INT32
OsVerifyELFEhdr
(
const
LD_ELF_EHDR
*
ehdr
,
UINT32
fileLen
)
{
if
(
memcmp
(
ehdr
->
elfIdent
,
LD_ELFMAG
,
LD_SELFMAG
)
!=
0
)
{
...
...
@@ -161,7 +161,7 @@ STATIC INT32 OsVerifyELFEhdr(const LD_ELF_EHDR *ehdr, UINT32 fileLen)
PRINT_ERR
(
"%s[%d], The type of machine is not EM_ARM!
\n
"
,
__FUNCTION__
,
__LINE__
);
return
LOS_NOK
;
}
if
(
ehdr
->
elfPhNum
>
ELF_PHDR_NUM_MAX
)
{
if
(
ehdr
->
elfPhNum
>
ELF_PHDR_NUM_MAX
)
{
PRINT_ERR
(
"%s[%d], The num of program header is out of limit
\n
"
,
__FUNCTION__
,
__LINE__
);
return
LOS_NOK
;
}
...
...
@@ -206,7 +206,7 @@ STATIC VOID OsLoadInit(ELFLoadInfo *loadInfo)
loadInfo
->
execInfo
.
procfd
=
INVALID_FD
;
loadInfo
->
interpInfo
.
procfd
=
INVALID_FD
;
}
STATIC
INT32
OsReadEhdr
(
const
CHAR
*
fileName
,
ELFInfo
*
elfInfo
,
BOOL
isExecFile
)
{
INT32
ret
;
...
...
@@ -221,7 +221,7 @@ STATIC INT32 OsReadEhdr(const CHAR *fileName, ELFInfo *elfInfo, BOOL isExecFile)
PRINT_ERR
(
"%s[%d], Failed to open ELF file: %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
fileName
);
return
ret
;
}
elfInfo
->
procfd
=
ret
;
elfInfo
->
procfd
=
ret
;
#ifdef LOSCFG_DRIVERS_TZDRIVER
if
(
isExecFile
)
{
...
...
@@ -269,7 +269,7 @@ STATIC INT32 OsReadPhdrs(ELFInfo *elfInfo, BOOL isExecFile)
goto
OUT
;
}
elfInfo
->
elfPhdr
=
LOS_MemAlloc
(
m_aucSysMem0
,
size
);
elfInfo
->
elfPhdr
=
LOS_MemAlloc
(
m_aucSysMem0
,
size
);
if
(
elfInfo
->
elfPhdr
==
NULL
)
{
PRINT_ERR
(
"%s[%d], Failed to allocate for elfPhdr!
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
ENOMEM
;
...
...
@@ -296,7 +296,7 @@ STATIC INT32 OsReadInterpInfo(ELFLoadInfo *loadInfo)
INT32
ret
,
i
;
for
(
i
=
0
;
i
<
loadInfo
->
execInfo
.
elfEhdr
.
elfPhNum
;
++
i
,
++
elfPhdr
)
{
if
(
elfPhdr
->
type
!=
LD_PT_INTERP
)
{
if
(
elfPhdr
->
type
!=
LD_PT_INTERP
)
{
continue
;
}
...
...
@@ -328,13 +328,13 @@ STATIC INT32 OsReadInterpInfo(ELFLoadInfo *loadInfo)
ret
=
-
ENOEXEC
;
goto
OUT
;
}
ret
=
OsReadEhdr
(
INTERP_FULL_PATH
,
&
loadInfo
->
interpInfo
,
FALSE
);
if
(
ret
!=
LOS_OK
)
{
PRINT_ERR
(
"%s[%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
goto
OUT
;
}
ret
=
OsReadPhdrs
(
&
loadInfo
->
interpInfo
,
FALSE
);
if
(
ret
!=
LOS_OK
)
{
goto
OUT
;
...
...
@@ -448,7 +448,7 @@ INT32 OsGetKernelVaddr(const LosVmSpace *space, VADDR_T vaddr, VADDR_T *kvaddr)
return
LOS_OK
;
}
STATIC
INT32
OsSetBss
(
const
LD_ELF_PHDR
*
elfPhdr
,
INT32
fd
,
UINTPTR
bssStart
,
UINT32
bssEnd
,
UINT32
elfProt
)
{
UINTPTR
bssStartPageAlign
,
bssEndPageAlign
;
...
...
@@ -469,7 +469,7 @@ STATIC INT32 OsSetBss(const LD_ELF_PHDR *elfPhdr, INT32 fd, UINTPTR bssStart, UI
bssMapSize
=
bssEndPageAlign
-
bssStartPageAlign
;
if
(
bssMapSize
>
0
)
{
stackFlags
=
MAP_PRIVATE
|
MAP_FIXED
|
MAP_ANONYMOUS
;
mapBase
=
(
UINTPTR
)
LOS_MMap
(
bssStartPageAlign
,
bssMapSize
,
elfProt
,
stackFlags
,
-
1
,
0
);
mapBase
=
(
UINTPTR
)
LOS_MMap
(
bssStartPageAlign
,
bssMapSize
,
elfProt
,
stackFlags
,
-
1
,
0
);
if
(
!
LOS_IsUserAddress
((
VADDR_T
)
mapBase
))
{
PRINT_ERR
(
"%s[%d], Failed to map bss
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
ENOMEM
;
...
...
@@ -488,18 +488,18 @@ STATIC INT32 OsMmapELFFile(INT32 procfd, const LD_ELF_PHDR *elfPhdr, const LD_EL
INT32
ret
,
i
;
INT32
fd
=
GetAssociatedSystemFd
(
procfd
);
for
(
i
=
0
;
i
<
elfEhdr
->
elfPhNum
;
++
i
,
++
elfPhdrTemp
)
{
if
(
elfPhdrTemp
->
type
!=
LD_PT_LOAD
)
{
for
(
i
=
0
;
i
<
elfEhdr
->
elfPhNum
;
++
i
,
++
elfPhdrTemp
)
{
if
(
elfPhdrTemp
->
type
!=
LD_PT_LOAD
)
{
continue
;
}
if
(
elfEhdr
->
elfType
==
LD_ET_EXEC
)
{
if
(
elfEhdr
->
elfType
==
LD_ET_EXEC
)
{
if
(
OsVerifyELFPhdr
(
elfPhdrTemp
)
!=
LOS_OK
)
{
return
-
ENOEXEC
;
}
}
elfProt
=
OsGetProt
(
elfPhdrTemp
->
flags
);
if
((
elfProt
&
PROT_READ
)
==
0
)
{
elfProt
=
OsGetProt
(
elfPhdrTemp
->
flags
);
if
((
elfProt
&
PROT_READ
)
==
0
)
{
return
-
ENOEXEC
;
}
elfFlags
=
MAP_PRIVATE
|
MAP_FIXED
;
...
...
@@ -507,7 +507,7 @@ STATIC INT32 OsMmapELFFile(INT32 procfd, const LD_ELF_PHDR *elfPhdr, const LD_EL
if
((
vAddr
==
0
)
&&
(
*
loadBase
==
0
))
{
elfFlags
&=
~
MAP_FIXED
;
}
mapAddr
=
OsDoMmapFile
(
fd
,
(
vAddr
+
*
loadBase
),
elfPhdrTemp
,
elfProt
,
elfFlags
,
mapSize
);
if
(
!
LOS_IsUserAddress
((
VADDR_T
)
mapAddr
))
{
return
-
ENOMEM
;
...
...
@@ -528,9 +528,9 @@ STATIC INT32 OsMmapELFFile(INT32 procfd, const LD_ELF_PHDR *elfPhdr, const LD_EL
}
if
((
elfPhdrTemp
->
memSize
>
elfPhdrTemp
->
fileSize
)
&&
(
elfPhdrTemp
->
flags
&
PF_W
))
{
bssStart
=
mapAddr
+
ROUNDOFFSET
(
vAddr
,
PAGE_SIZE
)
+
elfPhdrTemp
->
fileSize
;
bssEnd
=
mapAddr
+
ROUNDOFFSET
(
vAddr
,
PAGE_SIZE
)
+
elfPhdrTemp
->
memSize
;
ret
=
OsSetBss
(
elfPhdrTemp
,
fd
,
bssStart
,
bssEnd
,
elfProt
);
bssStart
=
mapAddr
+
ROUNDOFFSET
(
vAddr
,
PAGE_SIZE
)
+
elfPhdrTemp
->
fileSize
;
bssEnd
=
mapAddr
+
ROUNDOFFSET
(
vAddr
,
PAGE_SIZE
)
+
elfPhdrTemp
->
memSize
;
ret
=
OsSetBss
(
elfPhdrTemp
,
fd
,
bssStart
,
bssEnd
,
elfProt
);
if
(
ret
!=
LOS_OK
)
{
return
ret
;
}
...
...
@@ -546,12 +546,12 @@ STATIC INT32 OsLoadInterpBinary(ELFLoadInfo *loadInfo, UINTPTR *interpMapBase)
UINT32
mapSize
;
INT32
ret
;
mapSize
=
OsGetAllocSize
(
loadInfo
->
interpInfo
.
elfPhdr
,
loadInfo
->
interpInfo
.
elfEhdr
.
elfPhNum
);
mapSize
=
OsGetAllocSize
(
loadInfo
->
interpInfo
.
elfPhdr
,
loadInfo
->
interpInfo
.
elfEhdr
.
elfPhNum
);
if
(
mapSize
==
0
)
{
PRINT_ERR
(
"%s[%d], Failed to get interp allocation size!
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
EINVAL
;
}
ret
=
OsMmapELFFile
(
loadInfo
->
interpInfo
.
procfd
,
loadInfo
->
interpInfo
.
elfPhdr
,
&
loadInfo
->
interpInfo
.
elfEhdr
,
interpMapBase
,
mapSize
,
&
loadBase
);
if
(
ret
!=
LOS_OK
)
{
...
...
@@ -730,7 +730,7 @@ STATIC UINT32 OsGetRndOffset(const ELFLoadInfo *loadInfo)
(
VOID
)
loadInfo
;
#endif
return
ROUNDDOWN
(
randomValue
,
PAGE_SIZE
);
return
ROUNDDOWN
(
randomValue
,
PAGE_SIZE
);
}
STATIC
VOID
OsGetStackProt
(
ELFLoadInfo
*
loadInfo
)
...
...
@@ -787,7 +787,7 @@ OUT:
(
VOID
)
LOS_MuxRelease
(
&
space
->
regionMux
);
return
LOS_NOK
;
}
STATIC
INT32
OsSetArgParams
(
ELFLoadInfo
*
loadInfo
,
CHAR
*
const
*
argv
,
CHAR
*
const
*
envp
)
{
UINT32
vmFlags
;
...
...
@@ -801,8 +801,8 @@ STATIC INT32 OsSetArgParams(ELFLoadInfo *loadInfo, CHAR *const *argv, CHAR *cons
}
}
(
VOID
)
OsGetStackProt
(
loadInfo
);
if
(((
UINT32
)
loadInfo
->
stackProt
&
(
PROT_READ
|
PROT_WRITE
))
!=
(
PROT_READ
|
PROT_WRITE
))
{
(
VOID
)
OsGetStackProt
(
loadInfo
);
if
(((
UINT32
)
loadInfo
->
stackProt
&
(
PROT_READ
|
PROT_WRITE
))
!=
(
PROT_READ
|
PROT_WRITE
))
{
return
-
ENOEXEC
;
}
loadInfo
->
stackTopMax
=
USER_STACK_TOP_MAX
-
OsGetRndOffset
(
loadInfo
);
...
...
@@ -821,7 +821,7 @@ STATIC INT32 OsSetArgParams(ELFLoadInfo *loadInfo, CHAR *const *argv, CHAR *cons
loadInfo
->
argc
=
OsGetParamNum
(
argv
);
loadInfo
->
envc
=
OsGetParamNum
(
envp
);
ret
=
OsCopyParams
(
loadInfo
,
1
,
(
CHAR
*
const
*
)
&
loadInfo
->
fileName
);
ret
=
OsCopyParams
(
loadInfo
,
1
,
(
CHAR
*
const
*
)
&
loadInfo
->
fileName
);
if
(
ret
!=
LOS_OK
)
{
PRINT_ERR
(
"%s[%d], Failed to copy filename to user stack!
\n
"
,
__FUNCTION__
,
__LINE__
);
return
ret
;
...
...
@@ -832,7 +832,7 @@ STATIC INT32 OsSetArgParams(ELFLoadInfo *loadInfo, CHAR *const *argv, CHAR *cons
if
(
ret
!=
LOS_OK
)
{
return
ret
;
}
ret
=
OsCopyParams
(
loadInfo
,
loadInfo
->
argc
,
argv
);
ret
=
OsCopyParams
(
loadInfo
,
loadInfo
->
argc
,
argv
);
if
(
ret
!=
LOS_OK
)
{
return
ret
;
}
...
...
@@ -840,7 +840,7 @@ STATIC INT32 OsSetArgParams(ELFLoadInfo *loadInfo, CHAR *const *argv, CHAR *cons
return
LOS_OK
;
}
STATIC
INT32
OsPutParamToStack
(
ELFLoadInfo
*
loadInfo
,
const
UINTPTR
*
auxVecInfo
,
INT32
vecIndex
)
{
UINTPTR
*
topMem
=
(
UINTPTR
*
)
ROUNDDOWN
(
loadInfo
->
topOfMem
,
sizeof
(
UINTPTR
));
...
...
@@ -944,7 +944,7 @@ STATIC INT32 OsMakeArgsStack(ELFLoadInfo *loadInfo, UINTPTR interpMapBase)
#endif
AUX_VEC_ENTRY
(
auxVector
,
vecIndex
,
AUX_NULL
,
0
);
ret
=
OsPutParamToStack
(
loadInfo
,
auxVecInfo
,
vecIndex
);
ret
=
OsPutParamToStack
(
loadInfo
,
auxVecInfo
,
vecIndex
);
if
(
ret
!=
LOS_OK
)
{
PRINT_ERR
(
"%s[%d], Failed to put param to user stack
\n
"
,
__FUNCTION__
,
__LINE__
);
return
ret
;
...
...
@@ -989,7 +989,7 @@ STATIC INT32 OsLoadELFSegment(ELFLoadInfo *loadInfo)
return
ret
;
}
loadInfo
->
elfEntry
=
loadInfo
->
interpInfo
.
elfEhdr
.
elfEntry
+
interpMapBase
;
loadInfo
->
elfEntry
=
loadInfo
->
interpInfo
.
elfEhdr
.
elfEntry
+
interpMapBase
;
loadInfo
->
execInfo
.
elfEhdr
.
elfEntry
=
loadInfo
->
execInfo
.
elfEhdr
.
elfEntry
+
loadBase
;
}
else
{
loadInfo
->
elfEntry
=
loadInfo
->
execInfo
.
elfEhdr
.
elfEntry
;
...
...
@@ -1011,14 +1011,14 @@ STATIC VOID OsFlushAspace(ELFLoadInfo *loadInfo)
{
LosProcessCB
*
processCB
=
OsCurrProcessGet
();
OsExecDestroyTaskGroup
();
OsExecDestroyTaskGroup
();
loadInfo
->
oldSpace
=
processCB
->
vmSpace
;
loadInfo
->
oldSpace
=
processCB
->
vmSpace
;
processCB
->
vmSpace
=
loadInfo
->
newSpace
;
processCB
->
vmSpace
->
heapBase
+=
OsGetRndOffset
(
loadInfo
);
processCB
->
vmSpace
->
heapNow
=
processCB
->
vmSpace
->
heapBase
;
processCB
->
vmSpace
->
mapBase
+=
OsGetRndOffset
(
loadInfo
);
processCB
->
vmSpace
->
mapSize
=
loadInfo
->
stackBase
-
processCB
->
vmSpace
->
mapBase
;
processCB
->
vmSpace
->
mapSize
=
loadInfo
->
stackBase
-
processCB
->
vmSpace
->
mapBase
;
LOS_ArchMmuContextSwitch
(
&
OsCurrProcessGet
()
->
vmSpace
->
archMmu
);
}
...
...
@@ -1026,11 +1026,11 @@ STATIC VOID OsDeInitLoadInfo(ELFLoadInfo *loadInfo)
{
(
VOID
)
close
(
loadInfo
->
randomDevFD
);
if
(
loadInfo
->
execInfo
.
elfPhdr
!=
NULL
)
{
if
(
loadInfo
->
execInfo
.
elfPhdr
!=
NULL
)
{
(
VOID
)
LOS_MemFree
(
m_aucSysMem0
,
loadInfo
->
execInfo
.
elfPhdr
);
}
if
(
loadInfo
->
interpInfo
.
elfPhdr
!=
NULL
)
{
if
(
loadInfo
->
interpInfo
.
elfPhdr
!=
NULL
)
{
(
VOID
)
LOS_MemFree
(
m_aucSysMem0
,
loadInfo
->
interpInfo
.
elfPhdr
);
}
}
...
...
@@ -1053,9 +1053,9 @@ INT32 OsLoadELFFile(ELFLoadInfo *loadInfo)
{
INT32
ret
;
OsLoadInit
(
loadInfo
);
OsLoadInit
(
loadInfo
);
ret
=
OsReadEhdr
(
loadInfo
->
fileName
,
&
loadInfo
->
execInfo
,
TRUE
);
ret
=
OsReadEhdr
(
loadInfo
->
fileName
,
&
loadInfo
->
execInfo
,
TRUE
);
if
(
ret
!=
LOS_OK
)
{
goto
OUT
;
}
...
...
@@ -1065,7 +1065,7 @@ INT32 OsLoadELFFile(ELFLoadInfo *loadInfo)
goto
OUT
;
}
ret
=
OsReadInterpInfo
(
loadInfo
);
ret
=
OsReadInterpInfo
(
loadInfo
);
if
(
ret
!=
LOS_OK
)
{
goto
OUT
;
}
...
...
@@ -1077,14 +1077,14 @@ INT32 OsLoadELFFile(ELFLoadInfo *loadInfo)
OsFlushAspace
(
loadInfo
);
ret
=
OsLoadELFSegment
(
loadInfo
);
if
(
ret
!=
LOS_OK
)
{
ret
=
OsLoadELFSegment
(
loadInfo
);
if
(
ret
!=
LOS_OK
)
{
OsCurrProcessGet
()
->
vmSpace
=
loadInfo
->
oldSpace
;
LOS_ArchMmuContextSwitch
(
&
OsCurrProcessGet
()
->
vmSpace
->
archMmu
);
goto
OUT
;
}
OsDeInitLoadInfo
(
loadInfo
);
OsDeInitLoadInfo
(
loadInfo
);
return
LOS_OK
;
...
...
lib/libscrew/src/los_cir_buf.c
浏览文件 @
a7ab4c72
...
...
@@ -32,7 +32,7 @@
#include "los_cir_buf.h"
//返回循环buf已使用的大小
//
/
返回循环buf已使用的大小
UINT32
LOS_CirBufUsedSize
(
CirBuf
*
cirbufCB
)
{
UINT32
size
;
...
...
@@ -73,7 +73,7 @@ STATIC UINT32 OsCirBufWriteLinear(CirBuf *cirbufCB, const CHAR *buf, UINT32 size
return
cpSize
;
}
/* 图形表示写循环buf loop 模式 ,图表示 写之前的样子 @note_pic
/* 图形表示写循环buf loop 模式 ,图表示 写之前的样子
@note_pic
* endIdx 第二阶段拷贝
* | | |
* X X X X X X X X 0 0 0 0 0 0 0 0 X X X X X X X X
...
...
@@ -128,7 +128,7 @@ UINT32 LOS_CirBufWrite(CirBuf *cirbufCB, const CHAR *buf, UINT32 size)
return
cpSize
;
}
/* 图形表示读线性buf linear 模式 ,图表示 读之前的样子 @note_pic
/* 图形表示读线性buf linear 模式 ,图表示 读之前的样子
@note_pic
* endIdx
* |
* X X X X X X X X 0 0 0 0 0 0 0 0 X X X X X X X X
...
...
zzz/git/pull.sh
浏览文件 @
a7ab4c72
#git fetch
git pull
origin
master
git pull
git@gitee.com:weharmony/kernel_liteos_a_note.git
master
#git pull --rebase origin master
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录