人才网网站建设基本流程,网站建设招标,phpstudy搭建本地网站,学校网站管理系统往期知识点记录#xff1a; 鸿蒙#xff08;HarmonyOS#xff09;应用层开发#xff08;北向#xff09;知识点汇总 鸿蒙#xff08;OpenHarmony#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核#xff08;LiteOS-M#xff09; 轻量系统内核#…往期知识点记录 鸿蒙HarmonyOS应用层开发北向知识点汇总 鸿蒙OpenHarmony南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核LiteOS-M 轻量系统内核LiteOS-M【中断管理】 轻量系统内核LiteOS-M【任务管理】 轻量系统内核LiteOS-M【内存管理】 轻量系统内核LiteOS-M【内核通信机制】 轻量系统内核LiteOS-M【时间管理】 轻量系统内核LiteOS-M【扩展组件】 轻量系统内核LiteOS-M【内存调测】 轻量系统内核LiteOS-M【异常调测】 轻量系统内核LiteOS-M【Trace调测】 轻量系统内核LiteOS-M【LMS调测】 轻量系统内核LiteOS-M【SHELL】 小型系统内核LiteOS-A【概述】 小型系统内核LiteOS-A【内核启动】 小型系统内核LiteOS-A【中断及异常处理】 标准系统内核Linux【New IP内核协议栈】 标准系统内核Linux【内核增强特性 任务调度】 持续更新中……
系统调用
基本概念
OpenHarmony LiteOS-A实现了用户态与内核态的区分隔离用户态程序不能直接访问内核资源而系统调用则为用户态程序提供了一种访问内核资源、与内核进行交互的通道。
运行机制
如图1所示用户程序通过调用System API系统API通常是系统提供的POSIX接口进行内核资源访问与交互请求POSIX接口内部会触发SVC/SWI异常完成系统从用户态到内核态的切换然后对接到内核的Syscall Handler系统调用统一处理接口进行参数解析最终分发至具体的内核处理函数。
图1 系统调用示意图 Syscall Handler的具体实现在kernel/liteos_a/syscall/los_syscall.c中OsArmA32SyscallHandle函数在进入系统软中断异常时会调用此函数并且按照kernel/liteos_a/syscall/syscall_lookup.h中的清单进行系统调用的入参解析执行各系统调用最终对应的内核处理函数。 说明 系统调用提供基础的用户态程序与内核的交互功能不建议开发者直接使用系统调用接口推荐使用内核提供的对外POSIX接口若需要新增系统调用接口详见开发指导。 内核向用户态提供的系统调用接口清单详见kernel/liteos_a/syscall/syscall_lookup.h内核相应的系统调用对接函数清单详见kernel/liteos_a/syscall/los_syscall.h。 开发指导
开发流程
新增系统调用的典型开发流程如下
在LibC库中确定并添加新增的系统调用号。在LibC库中新增用户态的函数接口声明及实现。在内核系统调用头文件中确定并添加新增的系统调用号及对应内核处理函数的声明。在内核中新增该系统调用对应的内核处理函数。
编程实例
示例代码
在LibC库syscall.h.in中新增系统调用号 如下所示其中__NR_new_syscall_sample为新增系统调用号 .../* 当前现有的系统调用清单 *//* OHOS customized syscalls, not compatible with ARM EABI */#define __NR_OHOS_BEGIN 500#define __NR_pthread_set_detach (__NR_OHOS_BEGIN 0)#define __NR_pthread_join (__NR_OHOS_BEGIN 1)#define __NR_pthread_deatch (__NR_OHOS_BEGIN 2)#define __NR_create_user_thread (__NR_OHOS_BEGIN 3)#define __NR_processcreate (__NR_OHOS_BEGIN 4)#define __NR_processtart (__NR_OHOS_BEGIN 5)#define __NR_printf (__NR_OHOS_BEGIN 6)#define __NR_dumpmemory (__NR_OHOS_BEGIN 13)#define __NR_mkfifo (__NR_OHOS_BEGIN 14)#define __NR_mqclose (__NR_OHOS_BEGIN 15)#define __NR_realpath (__NR_OHOS_BEGIN 16)#define __NR_format (__NR_OHOS_BEGIN 17)#define __NR_shellexec (__NR_OHOS_BEGIN 18)#define __NR_ohoscapget (__NR_OHOS_BEGIN 19)#define __NR_ohoscapset (__NR_OHOS_BEGIN 20)#define __NR_new_syscall_sample (__NR_OHOS_BEGIN 21) /* 新增的系统调用号 __NR_new_syscall_sample:521 */#define __NR_syscallend (__NR_OHOS_BEGIN 22)...在LibC库中新增用户态接口的声明与实现 #include stdio_impl.h#include syscall.h.../* 新增系统调用用户态的接口实现 */void newSyscallSample(int num){printf(user mode: num %d\n, num);__syscall(SYS_new_syscall_sample, num);return;}在内核系统调用头文件中新增系统调用号 如下所示在third_party/musl/porting/liteos_a/kernel/include/bits/syscall.h文件中__NR_new_syscall_sample为新增系统调用号。 .../* 当前现有的系统调用清单 *//* OHOS customized syscalls, not compatible with ARM EABI */#define __NR_OHOS_BEGIN 500#define __NR_pthread_set_detach (__NR_OHOS_BEGIN 0)#define __NR_pthread_join (__NR_OHOS_BEGIN 1)#define __NR_pthread_deatch (__NR_OHOS_BEGIN 2)#define __NR_create_user_thread (__NR_OHOS_BEGIN 3)#define __NR_processcreate (__NR_OHOS_BEGIN 4)#define __NR_processtart (__NR_OHOS_BEGIN 5)#define __NR_printf (__NR_OHOS_BEGIN 6)#define __NR_dumpmemory (__NR_OHOS_BEGIN 13)#define __NR_mkfifo (__NR_OHOS_BEGIN 14)#define __NR_mqclose (__NR_OHOS_BEGIN 15)#define __NR_realpath (__NR_OHOS_BEGIN 16)#define __NR_format (__NR_OHOS_BEGIN 17)#define __NR_shellexec (__NR_OHOS_BEGIN 18)#define __NR_ohoscapget (__NR_OHOS_BEGIN 19)#define __NR_ohoscapset (__NR_OHOS_BEGIN 20)#define __NR_new_syscall_sample (__NR_OHOS_BEGIN 21) /* 新增的系统调用号 __NR_new_syscall_sample:521 */#define __NR_syscallend (__NR_OHOS_BEGIN 22)...在kernel/liteos_a/syscall/syscall_lookup.h中增加一行SYSCALL_HAND_DEF(__NR_new_syscall_sample, SysNewSyscallSample, void, ARG_NUM_1) .../* 当前现有的系统调用清单 */SYSCALL_HAND_DEF(__NR_chown, SysChown, int, ARG_NUM_3)SYSCALL_HAND_DEF(__NR_chown32, SysChown, int, ARG_NUM_3)#ifdef LOSCFG_SECURITY_CAPABILITYSYSCALL_HAND_DEF(__NR_ohoscapget, SysCapGet, UINT32, ARG_NUM_2)SYSCALL_HAND_DEF(__NR_ohoscapset, SysCapSet, UINT32, ARG_NUM_1)#endif/* 新增系统调用 */SYSCALL_HAND_DEF(__NR_new_syscall_sample, SysNewSyscallSample, void, ARG_NUM_1)...在内核中新增内核该系统调用对应的处理函数 如下所示在kernel/liteos_a/syscall/los_syscall.h中SysNewSyscallSample为新增系统调用的内核处理函数声明 .../* 当前现有的系统调用内核处理函数声明清单 */extern int SysClockSettime64(clockid_t clockID, const struct timespec64 *tp);extern int SysClockGettime64(clockid_t clockID, struct timespec64 *tp);extern int SysClockGetres64(clockid_t clockID, struct timespec64 *tp);extern int SysClockNanoSleep64(clockid_t clk, int flags, const struct timespec64 *req, struct timespec64 *rem);extern int SysTimerGettime64(timer_t timerID, struct itimerspec64 *value);extern int SysTimerSettime64(timer_t timerID, int flags, const struct itimerspec64 *value, struct itimerspec64 *oldValue);/* 新增的系统调用内核处理函数声明 */extern void SysNewSyscallSample(int num);...新增的系统调用的内核处理函数实现如下 include los_printf.h.../* 新增系统调用内核处理函数的实现 */void SysNewSyscallSample(int num){PRINTK(kernel mode: num %d\n, num);return;}结果验证
用户态程序调用newSyscallSample(10)接口得到输出结果如下
/* 用户态接口与内核态接口均有输出证明系统调用已使能 */
user mode: num 10
kernel mode: num 10经常有很多小伙伴抱怨说不知道学习鸿蒙开发哪些技术不知道需要重点掌握哪些鸿蒙应用开发知识点
为了能够帮助到大家能够有规划的学习这里特别整理了一套纯血版鸿蒙HarmonyOS Next全栈开发技术的学习路线包含了鸿蒙开发必掌握的核心知识要点内容有ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等鸿蒙HarmonyOS NEXT技术知识点。 《鸿蒙 (Harmony OS)开发学习手册》共计892页:https://gitcode.com/HarmonyOS_MN/733GH/overview
如何快速入门
1.基本概念 2.构建第一个ArkTS应用 3.…… 鸿蒙开发面试真题含参考答案:https://gitcode.com/HarmonyOS_MN/733GH/overview 《OpenHarmony源码解析》:
搭建开发环境Windows 开发环境的搭建Ubuntu 开发环境搭建Linux 与 Windows 之间的文件共享……系统架构分析构建子系统启动流程子系统分布式任务调度子系统分布式通信子系统驱动子系统…… OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview