Compare commits

...

192 Commits

Author SHA1 Message Date
openharmony_ci 748e0a4447 !1036 fix: 修改一些拼写错误
Merge pull request !1036 from 程子丘/master
2023-05-24 04:03:47 +00:00
openharmony_ci a1989614f4 !1068 GN绝对路径修改
Merge pull request !1068 from zhushengle/GN
2023-05-23 12:33:40 +00:00
zhushengle 3241a67dc6 feat: GN绝对路径修改
Close #I77PSG
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I095e5d0aac99eda1a8c238701e560655477b04d2
2023-05-23 20:08:02 +08:00
openharmony_ci 14868aebdc !1064 feat:内核time模块RTC与settimeofday接口逻辑修复
Merge pull request !1064 from zhangdengyu/RTC0515
2023-05-18 06:28:49 +00:00
zhangdengyu b4873b06e8 feat: 修复time中TIMEZONE优先使用RTC模块的问题
方案描述:
1、time中timezone全局变量修改为优先从RTC获取
2、settimeofday接口,linux和posix标准有差异,m核中对齐posix标准,具体如下:
int settimeofday(const struct timeval *tv, const struct timezone *tz)
2.1、linux中:
        tz参数已弃用,一般设置为NULL;
        tv参数,为NULL时返回0,不设置错误码,表示不修改当前时间;
2.2、posix中:
        tv或tz全部为NULL时,返回-1,设置错误码EFAULT;
        tv或tz有一个不为NULL时,不设置相应的参数,返回0;不设置错误码;
3、新增settimeofday接口设置timezone相关测试用例

BREAKING CHANGE:
修复time中TIMEZONE优先使用RTC模块的问题对外变更描述:
修改int settimeofday(const struct timeval *tv, const struct timezone *tz)接口
settimeofday接口对入参的判断逻辑修改:
1、tv或tz全部为NULL时,返回-1,设置错误码EFAULT;
2、tv或tz有一个不为NULL时,不设置相应的参数,返回0;不设置错误码;

Close: #I73G40

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: Id536fc27d8bf0697765ac1543776e8105e6f62f4
2023-05-18 11:50:38 +08:00
openharmony_ci bad1880ccb !1052 open时可能绕过fatfs 锁
Merge pull request !1052 from wangchen/0423_m
2023-05-15 12:49:09 +00:00
openharmony_ci f996b22137 !1062 部件化整改
Merge pull request !1062 from zhushengle/deps
2023-05-09 14:55:21 +00:00
zhushengle 02147f4613 feat: 部件化整改
Close #I71QQ2

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I247fdc1cbc7cb48c8ff1c1c3e4553ad4e6ef87a9
2023-05-09 21:43:12 +08:00
openharmony_ci da2429a003 !1040 Fix : 内核测试用例框架统一
Merge pull request !1040 from yinjiaming/test_framework
2023-05-09 03:09:42 +00:00
openharmony_ci 3b9e83c6b2 !1060 Fix : 部件化需求整改
Merge pull request !1060 from yinjiaming/bundle
2023-05-05 08:33:30 +00:00
yinjiaming b35d3d952b fix:部件需求整改
修复了脚本扫描出的bundle.json的问题,整改了
不符合规范的路径引用

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ic45ef8f2cc54c071e7104c7c1a6e31fc2ae395d2
2023-04-28 17:11:31 +08:00
openharmony_ci 74e20c6f83 !1058 去除无用头文件
Merge pull request !1058 from 乔克叔叔/master
2023-04-27 09:29:44 +00:00
liuwenxin 24a0b3ca70 fix:去除无用头文件
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-04-25 16:04:31 +08:00
wangchen 062235a60c fix: open时可能绕过fatfs 锁
方案描述:
1, malloc 之后 清空内存,避免使用上次的指针脏数据

fix I6XVKR
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-04-24 15:36:35 +08:00
openharmony_ci bcb4dea119 !1057 fix: 修复文档中的失效链接
Merge pull request !1057 from Hongjin Li/dev1
2023-04-24 02:21:52 +00:00
Hongjin Li 333045d11f fix: 修复文档死链
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2023-04-24 09:53:50 +08:00
openharmony_ci 04d5405d3f !1056 修复文档中的时效链接
Merge pull request !1056 from Hongjin Li/dev1
2023-04-23 14:19:35 +00:00
Hongjin Li 7028f96f9c fix: 修改文档中的时效链接
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2023-04-23 19:00:29 +08:00
openharmony_ci f34362730a !1055 修复CHANGELOG.md中的无效超链接
Merge pull request !1055 from wangchen/0424_new
2023-04-23 10:46:47 +00:00
wangchen bc1a352935 fix: 修复CHANGELOG.md中的无效超链接
方案描述:
1, 修改对应链接
fix #I6Y64T
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-04-23 18:34:09 +08:00
openharmony_ci 39391d12e4 !1053 fix: 修复CHANGELOG.md中的无效超链接
Merge pull request !1053 from Hongjin Li/changelog_fix
2023-04-23 10:03:31 +00:00
Hongjin Li 41b73359a4 fix: 修复CHANGELOG.md中的无效超链接
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2023-04-23 16:06:56 +08:00
openharmony_ci 6babf78a8d !1048 kconfig增加shell StackSize大小的设置
Merge pull request !1048 from 乔克叔叔/cherry-pick-1681111046
2023-04-13 14:27:36 +00:00
openharmony_ci 18d07a809a !1049 回退los_panic相关修改
Merge pull request !1049 from wangchen/0412_back
2023-04-12 09:15:15 +00:00
wangchen 6d2dbdf0e8 fix: 回退los_panic相关修改
方案描述:
1, 暂时回退https://gitee.com/openharmony/kernel_liteos_m/pulls/1035的修改
fix #I6V3U5
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-04-12 16:27:41 +08:00
nkj ee9d5daeca fixed 088f88c from https://gitee.com/wenxin-liu_admin/kernel_liteos_m/pulls/991
feat: kconfig增加shell StackSize大小的设置

BREAKING CHANGE:

kconfig增加shell StackSize大小的设置:

新增配置项

Close #I6KHRF
Signed-off-by: nkj <tkyl01@yeah.net>
Change-Id: I9d3a7e7933a01a0f1ad2199c82825cc471c623b0

Change-Id: I0d732e0270ae6dc354aec05f2a50f9439550accb
2023-04-10 16:32:23 +08:00
openharmony_ci 556c10121b !1037 fix: 修复拼写错误
Merge pull request !1037 from Wang Jikai/master
2023-04-10 02:18:27 +00:00
yinjiaming 6c6fddb9a3 fix:统一M核unittest 和 sample所使用的测试框架
liteos_m 测试套中 unittest 和 sample 目录所使用的测试框架不同,
现将其统一,便于维护

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I4b690b621d754725c4d6a93772a043140de0bce1
2023-04-07 10:57:39 +08:00
openharmony_ci fe69c9dd65 !1043 Fix : pthread_cond_timedwait 函数等待的信号丢失问题
Merge pull request !1043 from yinjiaming/fix
2023-03-31 09:11:33 +00:00
yinjiaming 2374c01bb9 fix:pthread_cond_timedwait解锁后清理的问题
该函数解锁mutex 后先清理事件,导致等的事件丢失

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I36f8658b1b850734bc029b486fec103f6bd10588
2023-03-31 16:14:31 +08:00
openharmony_ci 66278102ca !1035 使用vprintf来打印va_list类型
Merge pull request !1035 from 乔克叔叔/master
2023-03-22 02:40:55 +00:00
liuwenxin ecdd47f0c5 fix:使用vprintf来打印va_list类型
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-03-21 11:14:02 +08:00
openharmony_ci 7dbae99194 !1038 增加los错误码和posix错误码对接接口
Merge pull request !1038 from wangchen/0317_m
2023-03-17 13:02:35 +00:00
root 81784f1c6b fix: 增加los错误码和posix错误码对接接口
方案描述:
1, 增加一个内部接口, 用于los接口返回的错误码转换成posix错误码

BREAKING CHANGE:
无新增接口, 原有接口pthread_create错误时的错误码进行了区分

Close #I6NWNV
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-03-17 16:23:31 +08:00
am009 20693c9424 fix: 修复拼写错误
Signed-off-by: am009 <wangjikai@hust.edu.cn>
2023-03-15 22:10:45 +08:00
Cheng Ziqiu 8b11135135 fix: 修改注释中的一些拼写错误
Signed-off-by: Cheng Ziqiu <chengziqiu@hust.edu.cn>
Change-Id: Icc152031144f9756f4da018e24d338c0d28a8fa9
2023-03-15 22:01:50 +08:00
openharmony_ci 5fa299b4aa !1026 修复task命令打印逻辑问题
Merge pull request !1026 from wangchen/0216_m
2023-03-14 07:54:35 +00:00
root b02c64dc42 fix: posix用例存在mutex资源泄露
方案描述:
1, 对posix中使用锁之后,增加对锁的释放
2, 修改锁后进入shell, 发现task打印线程信息有异常, 又修复了打印相关的逻辑
fix #I64Y7G
Signed-off-by: wangchen <wangchen240@huawei.com>
2023-03-13 21:53:57 +08:00
openharmony_ci c5a39437f7 !1007 fix: risc-v架构编译告警修复
Merge pull request !1007 from zhushengle/codex
2023-03-08 06:02:16 +00:00
zhushengle f211029b12 fix: 修复编译告警
Close #I69TZD

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I5f837b7980b478a02524f8ba056916ca038c544c
2023-03-07 21:37:07 +08:00
openharmony_ci 36d55955ef !1031 newlib error处理
Merge pull request !1031 from 乔克叔叔/master
2023-03-01 08:13:50 +00:00
openharmony_ci 12f6c5d628 !1032 Fix : 配置LOSCFG_BASE_IPC_QUEUE_STATIC后编译错误
Merge pull request !1032 from yinjiaming/fix-1
2023-03-01 08:09:53 +00:00
openharmony_ci 17309e232a !1029 Fix : 打开 LWIP_IPV6 时会有编译错误
Merge pull request !1029 from yinjiaming/fix
2023-03-01 08:09:16 +00:00
liuwenxin af1afcec6a fix:newlib error解决
close:#I6HL01

Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-03-01 11:52:34 +08:00
yinjiaming 9cef4da850 fix:配置LOSCFG_BASE_IPC_QUEUE_STATIC后编译错误
在target_config.h中配置了LOSCFG_BASE_IPC_QUEUE_STATIC之后编译内核测试套报错
现修复

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Idf99137f822d5040bdb19e489e0a9234f19e93be
2023-02-27 15:12:13 +08:00
yinjiaming d058b640e2 fix:打开LWIP_IPV6时有编译错误
更改了出错的参与算数运算的指针的数据类型

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I6891797cd1afa801faeecf1bfb891f0ac7db7f68
2023-02-27 11:53:54 +08:00
openharmony_ci 4431b587f8 !1027 Panic支持ExcHook
Merge pull request !1027 from zhangdengyu/supportPanicHook
2023-02-22 06:18:48 +00:00
zhangdengyu 809db71acc feat:Panic支持ExcHook
方案描述:
1、在EXC_TYPE枚举中添加EXC_PANIC成员用于Panic支持ExcHook
2、在LOS_Panic接口执行异常处理钩子函数

BREAKING CHANGE:
无

Close: #I6GR6G

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: I99d293622ff6ddbc49348c692512e5b7780460e6
2023-02-21 21:55:01 +08:00
openharmony_ci b1a7711e15 !1025 Werror开启产生的告警
Merge pull request !1025 from 乔克叔叔/werrror
2023-02-21 06:58:16 +00:00
liuwenxin 3e83ce79c2 fix:告警清理包含三方库屏蔽
【修改说明】此次开启Werror,解决告警产生的报错,以及屏蔽三方库告警

 close #I6ELI9
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-02-21 10:35:56 +08:00
openharmony_ci 2cadd65301 !1023 fix: pthread_create时序调整
Merge pull request !1023 from Zhaotianyu/20230210pthread_create
2023-02-10 10:31:43 +00:00
arvinzzz f038492dbc fix: pthread_create内部逻辑时序调整
在线程创建成功后,pthread_create内部先将函数返回值设置好,再进行TaskResume就绪调度状态

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I795c115da612123b67f34cdc57e85eac955bbc08
2023-02-10 17:42:17 +08:00
openharmony_ci e74deedba3 !1005 Werror开启告警清理
Merge pull request !1005 from 乔克叔叔/second
2023-02-07 03:08:26 +00:00
openharmony_ci 24f52e0259 !987 LMS特性安全合规整改
Merge pull request !987 from JerryH/lms
2023-02-02 01:42:12 +00:00
huangjieliang d4df4d1e54 feat:LMS模块及堆内存模块非安全函数安全合规整改
Close #I68LEO

Signed-off-by: huangjieliang <huangjieliang@huawei.com>
Change-Id: I38b859dcd1856f27d4577f5311c920d2d8b96385
2023-02-01 16:49:44 +08:00
openharmony_ci 2d1e7e8c29 !1012 Fix : 内核告警清理
Merge pull request !1012 from yinjiaming/warning
2023-02-01 06:33:49 +00:00
liuwenxin a96f535cd3 fix:Werror开启告警清理
清理Werror开启产生的告警

close:#I68YDW

Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-01-30 10:10:07 +08:00
openharmony_ci 1669455ba9 !972 feat:新增文件系统测试用例
Merge pull request !972 from zhangdengyu/addFsTestCase
2023-01-29 08:54:33 +00:00
zhangdengyu b637b1d979 test:添加文件系统测试用例
方案描述:
1、对单个接口进行规格测试。
2、对多个接口组合测试模拟上层业务场景。
3、对各接口进行压力测试确保稳定性。

Close: #I62K4B

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: I6c45631094884e0300faa994082d16dda6dd3f1d
2023-01-29 16:22:07 +08:00
openharmony_ci c6d021bede !1016 refactor: 不同C库malloc归一
Merge pull request !1016 from Zhaotianyu/20230117libc_malloc
2023-01-18 09:56:58 +00:00
arvinzzz d7f3aef326 refactor: 不同C库的malloc适配归一
1. 不同C库的malloc实现归一化,由原先//kal/libc/musl、//kal/libc/newlib、
   //../../third_party/musl/porting/liteos_m_iccarm/kernel 各自实现,
   统一至//kal/posix/src/malloc.c实现,并实现对三种C库的兼容

2. Kconfig归一化的配套调整,删除Top->"Compat"->"Choose libc implementation"下
   malloc API的开关控制,统一归入"Top"->"Compat"->"Enable POSIX API"下
   "Enable POSIX MALLOC API"进行能力开关控制

BREAKING CHANGE:
Kconfig变更:
删除:
LOSCFG_LIBC_ICCARM_MALLOC
LOSCFG_LIBC_NEWLIB_MALLOC
新增:
LOSCFG_POSIX_MALLOC_API

close: I6AGOW

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I584e337cdb36184cf40c36c4f7c73ab780c31a42
2023-01-18 11:22:01 +08:00
yinjiaming db32ad90bf Fix:内核告警清理
清除内核代码中的敏感词

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I734525c036fcfe481d0781d459bc273ef8224791
2023-01-16 16:17:09 +08:00
openharmony_ci 59fbe91d8b !1009 Fix : OsLs 内存泄漏问题
Merge pull request !1009 from yinjiaming/fix
2023-01-13 08:54:49 +00:00
openharmony_ci c7088f4d0f !1010 告警清理
Merge pull request !1010 from 乔克叔叔/release
2023-01-13 05:42:29 +00:00
liuwenxin 705bfbdc76 fix:release告警清理
release分支告警清理

close:#I6AD15

Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-01-13 11:34:52 +08:00
yinjiaming 9a4e9677bd fix:修复OsLs函数内存泄漏问题
当d = NULL时,path没有释放,现释放path所指向的内存

close #I6A07U

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Iee9fd8d2171c6fdcf353a48e7af385bbd1660520
2023-01-12 15:30:19 +08:00
openharmony_ci 6134d4bd22 !989 修复-Werror编译选项产生的告警
Merge pull request !989 from 乔克叔叔/lwx
2023-01-11 07:55:48 +00:00
openharmony_ci c119b7e9e2 !1006 Fix : statfs函数内部判断错误
Merge pull request !1006 from yinjiaming/fix
2023-01-11 07:37:51 +00:00
openharmony_ci dbf0498bab !1008 fix: 非gcc形态下FUNC_ALIAS编译错误
Merge pull request !1008 from Zhaotianyu/20230111symbol_fix
2023-01-11 06:49:43 +00:00
arvinzzz 68b142cf78 fix: 修复非gcc形态FUNC_ALIAS编译错误
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I7f199366d8173d9fc504f89b26329ea5f7d1eb9e
2023-01-11 10:45:18 +08:00
openharmony_ci 22b7eb87ca !998 fix: 不同C库下gettimeofday特性规格统一
Merge pull request !998 from Zhaotianyu/20230107gettimeofday
2023-01-11 00:46:21 +00:00
arvinzzz ed50f7e373 fix: 不同libc下gettimeofday特性规格统一
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: Iaaf1fed24101f43c636737294dbe870d2f467b0a
2023-01-10 20:36:34 +08:00
yinjiaming 2f2a0b7a75 fix:修复statfs函数内部判断错误
修复函数调用的是statfs却用stat!=NULL来判断,当文件系统是little_fs时导致死机的问题。

close #I69BXB

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ib9784c017f4260433c3f12e352470108ea83ec19
2023-01-10 15:49:01 +08:00
openharmony_ci 1ae62ebf2e !1000 fix:mutex trace中ArchLRGet等接口改变实现方式
Merge pull request !1000 from zhangdengyu/mutexTraceFix
2023-01-10 06:44:48 +00:00
zhangdengyu 25278a02eb fix:mutex trace中ArchLRGet接口改变实现方式
方案描述:
将ArchLRGet接口的实现方式由内联函数修改为宏,
防止产品添加--no_inline等编译选项导致函数无法在调用点展开,
造成由于函数调用过程中函数栈帧的变化带来的LR寄存器中存储的值的变化。

Close #I69D9N

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: If417bc2ec9febf064c63da198faf4ac000d70c52
2023-01-10 14:28:15 +08:00
liuwenxin 52bc16c3db fix:修复-Werror编译选项产生的告警
清理框架定义未使用告警,宏重定义,以及变量定义未使用等告警。

Close #I68RLA

Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2023-01-10 10:26:22 +08:00
openharmony_ci 733b6e6c6c !988 fix: mktime测试用例不依赖固定时区
Merge pull request !988 from Zhaotianyu/20230104fix_mktime_test
2023-01-04 09:36:32 +00:00
arvinzzz 6562536db7 fix: mktime testcase
Eliminate the effects of different time zones

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I22f0dc7057df642e255bec9a8b663c2b544b107e
2023-01-04 16:39:01 +08:00
openharmony_ci ddf3dc8237 !985 fix: mktime测试用例配套修改
Merge pull request !985 from Zhaotianyu/20230103fix_mktime_test
2023-01-03 07:45:12 +00:00
arvinzzz 399e7647bb fix: mktime testcase
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I50e0252aa8611e9a269b836c552bfdf33ade8f44
2023-01-03 11:27:26 +08:00
openharmony_ci f7af2cdf9b !983 修复codecheck告警
Merge pull request !983 from 夏不白/codecheck
2022-12-30 06:19:55 +00:00
xiacong 07091c5a75 fix:修复codecheck告警
1、修复空格、空行使用错误告警;
2、将超过10行的inline函数去除内联符号

fix #I685E3

Signed-off-by: xiacong <xiacong4@huawei.com>
2022-12-30 12:11:01 +08:00
openharmony_ci 6633aabf89 !979 fix: mktime获取的时间缺少时区信息
Merge pull request !979 from Zhaotianyu/20221228mktime_fix
2022-12-29 10:21:38 +00:00
arvinzzz 2a4282f912 fix: The tm struct obtained by mktime lacks timezone information
BREAKING CHANGE:
The tm struct obtained by mktime lacks timezone information
变更API:
time_t mktime(struct tm *tmptr)
原先mktime从入参中获取时区信息进行计算,变更后tm结构体和返回值time_t的计算使用系统g_timezone时区环境变量。

Close I67UIA

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I766cffbff3c1a25bb33cbd245225ee117909af3a
2022-12-29 16:26:08 +08:00
openharmony_ci 685688b21c !977 Fixed compilation problems with niobe407 and neptune100
Merge pull request !977 from 张亚雷/master
2022-12-27 07:21:39 +00:00
mrzhang 67ee38e1e3 fix: Fixed compilation problems with niobe407 and neptune100
Signed-off-by: mrzhang <zhangyalei8@h-partners.com>
2022-12-26 18:25:44 -08:00
openharmony_ci 6cd48f6f90 !965 VfsMpFind接口优化
Merge pull request !965 from Far/vfsmpfind
2022-12-24 03:12:29 +00:00
Far 662aefb700 fix: VfsMpFind optimize
1. provide VfsMpFind which doesn't support mounting recursively;
2. provide a macro to set whether supporting recursive-mount or not.
3. adding path length checking

BREAKING CHANGE:
new config option:
LOSCFG_FS_SUPPORT_MOUNT_TARGET_RECURSIVE

fix #I65XE6
Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I7ae371f0e6fff46db0e2368f905aa22bac864b79
2022-12-24 10:44:11 +08:00
openharmony_ci 83fc93cc84 !974 fix: misc_config中defines未初始化导致编译失败
Merge pull request !974 from Zhaotianyu/20221222misc_config
2022-12-22 07:44:57 +00:00
arvinzzz b817c490ba fix: 修复misc_config中defines未初始化的错误
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I4eecfc1af2b0cdc39922a8ce299eb8ab6b7c6e8c
2022-12-22 11:28:31 +08:00
openharmony_ci 705e4c323a !973 【重新提交】修复文件系统中不合理的锁操作
Merge pull request !973 from Far/master
2022-12-22 03:10:43 +00:00
Far b7f906ef8a fix: 修复文件系统不合理的锁操作
1. 移除了fatfs和littlefs中冗余的加锁操作。
2. 增加了配置选项FS_LOCK_TIMEOUT(宏LOSCFG_FS_LOCK_TIMEOUT),提供配置
   文件系统获取锁超时能力。
3. 新增对外接口LOS_FsLock()和LOS_FsUnlock()接口,提供HAL层与文件系统的
   互斥操作。

BREAKING CHANGE:
修复文件系统不合理的锁操作
新增API:
los_fs.h:
int LOS_FsLock(void)
int LOS_FsUnlock(void)
新增配置项:
LOSCFG_FS_LOCK_TIMEOUT(menuconfig FS_LOCK_TIMEOUT)

fix #I66S2J

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I2ae9b6b5e2c788b2f4a00d9678a0240d00c335eb
2022-12-22 10:41:31 +08:00
openharmony_ci f9c59d361f !971 回退 'Pull Request !938 : 修复文件系统不合理的锁操作'
Merge pull request !971 from openharmony_ci/revert-merge-938-master
2022-12-19 09:34:33 +00:00
openharmony_ci fa142daffb 回退 'Pull Request !938 : 修复文件系统不合理的锁操作' 2022-12-19 08:57:11 +00:00
openharmony_ci 4bd0e73512 !969 open接口内存泄漏修复
Merge pull request !969 from wangchen/1217_m
2022-12-17 08:47:28 +00:00
wangchen 0a03a4d875 fix: open接口内存泄漏修复
方案描述:
1, 修改路径正确时打开失败可能的异常

fix #I66KGT
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-12-17 08:16:12 +00:00
openharmony_ci 2a70466456 !963 修复文件系统close中的不合理操作
Merge pull request !963 from Far/NFILE
2022-12-16 03:12:42 +00:00
openharmony_ci b30349d8ed !938 修复文件系统不合理的锁操作
Merge pull request !938 from Far/master
2022-12-16 03:03:54 +00:00
Far 59ecf4cae8 fix: 修复close接口中无法正常关闭文件的问题
1. close未考虑保留描述符0、1和2,导致fd合法性判断出现错误,这会导致
上限附近的fd不能被正常的关闭
2. 释放file结构体时未在锁的保护中进行,可能存在问题

fix #I65U8S

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: Iaa03a70e18fcb352ca3b99232f50b43d8b13ecf0
2022-12-16 10:53:03 +08:00
Far 9038b6522e fix: 修复文件系统不合理的锁操作
1. 移除了fatfs和littlefs中冗余的加锁操作。
2. 增加了配置选项FS_LOCK_TIMEOUT(宏LOSCFG_FS_LOCK_TIMEOUT),提供文件
   系统锁超时判定能力。
3. 新增对外接口LOS_FsLock()和LOS_FsUnlock()接口,提供HAL层与文件系统的
   互斥操作。

BREAKING CHANGE:
修复文件系统不合理的锁操作
新增API:
int LOS_FsLock(void)
int LOS_FsUnlock(void)
新增配置项:
LOSCFG_FS_LOCK_TIMEOUT(menuconfig FS_LOCK_TIMEOUT)

fix #I6355A

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: Ia980abfac0ee761088313496c7e3c3e9568450b3
2022-12-16 10:42:03 +08:00
openharmony_ci abb83fd23b !962 refactor: vfs优化
Merge pull request !962 from Zhaotianyu/20221210vfs_opt
2022-12-16 02:03:04 +00:00
arvinzzz 98da8bbdfb refactor: vfs opt
1. vfs重构优化,统一fs模块的对外接口,减少不必要的冗余调用,由fs组件直接提供posix对外接口
  2. vfs与libc关系整理
  3. fs接口实现规范化

BREAKING CHANGE:
删除API:
int LOS_Open(const char *path, int flags, ...);
int LOS_Close(int fd);
ssize_t LOS_Read(int fd, void *buff, size_t bytes);
ssize_t LOS_Write(int fd, const void *buff, size_t bytes);
off_t LOS_Lseek(int fd, off_t off, int whence);
int LOS_Stat(const char *path, struct stat *stat);
int LOS_Statfs(const char *path, struct statfs *buf);
int LOS_Unlink(const char *path);
int LOS_Rename(const char *oldpath, const char *newpath);
int LOS_Fsync(int fd);
DIR *LOS_Opendir(const char *path);
struct dirent *LOS_Readdir(DIR *dir);
int LOS_Closedir(DIR *dir);
int LOS_Mkdir(const char *path, mode_t mode);
int LOS_Rmdir(const char *path);
int LOS_Lstat(const char *path, struct stat *buffer);
int LOS_Fstat(int fd, struct stat *buf);
int LOS_Fcntl(int fd, int cmd, ...);
int LOS_Ioctl(int fd, int req, ...);
ssize_t LOS_Readv(int fd, const struct iovec *iovBuf, int iovcnt);
ssize_t LOS_Writev(int fd, const struct iovec *iovBuf, int iovcnt);
ssize_t LOS_Pread(int fd, void *buff, size_t bytes, off_t off);
ssize_t LOS_Pwrite(int fd, const void *buff, size_t bytes, off_t off);
int LOS_Isatty(int fd);
int LOS_Access(const char *path, int amode);
int LOS_Ftruncate(int fd, off_t length);
int LOS_FsUmount(const char *target);
int LOS_FsUmount2(const char *target, int flag);
int LOS_FsMount(const char *source, const char *target,
                const char *fsType, unsigned long mountflags,
                const void *data);
int OsFcntl(int fd, int cmd, va_list ap);
int OsIoctl(int fd, int req, va_list ap);

Close #I65MNQ

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: I3d16852ffb87ab061c22b22f5873eba384842101
2022-12-13 16:56:18 +08:00
openharmony_ci c7da881469 !934 fix: 对外提供CONFIG_NFILE_DESCRIPTORS宏表示最大可打开fd数量
Merge pull request !934 from Hongjin Li/fs1
2022-12-06 12:10:31 +00:00
openharmony_ci 9cbddd412d !955 feat: 优化CPUP计算方式, 解耦系统调频
Merge pull request !955 from zhushengle/cpup
2022-12-06 07:11:08 +00:00
openharmony_ci b50b5e7cba !953 对内核模块暴露OsMemNodeHead/OsMemPoolHead等结构体
Merge pull request !953 from Far/los_memory
2022-12-06 04:08:13 +00:00
zhushengle 974182d50c feat: 优化CPUP计算方式, 解耦系统调频
Close #I5R9XG

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I07cb388732b1190943374802f792d32bd666c06e
2022-12-06 10:41:20 +08:00
Hongjin Li a3ce436841 fix: 提供CONFIG_NFILE_DESCRIPTORS宏标识最大可打开fd数量
提供CONFIG_NFILE_DESCRIPTORS宏,标识最大可打开fd数量。
提供FAT_MAX_OPEN_FILES宏,标识FAT文件系统中最大可打开fd数量。

如果只有FAT文件系统,那么CONFIG_NFILE_DESCRIPTORS等于FAT_MAX_OPEN_FILES。
如果有多个文件系统,比如fat+little+yaffs,那么CONFIG_NFILE_DESCRIPTORS应该定义为多个文件系统可打开fd数量之和。

BREAKING CHANGE:

对外提供的CONFIG_NFILE_DESCRIPTORS宏,用来标识最大可打开fd数量。

开发者可以在target_config.h中自定义CONFIG_NFILE_DESCRIPTORS和FAT_MAX_OPEN_FILES宏。

Close #I62WDU

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-12-06 10:11:13 +08:00
openharmony_ci 588abc0645 !952 fix: 修复低功耗下时间更新缺陷
Merge pull request !952 from zhushengle/pm_timer
2022-12-05 13:02:02 +00:00
zhushengle 7657aadc20 feat: 修复低功耗下时间更新缺陷
1.注释说明低功耗框架中tickLock和tickUnlock两个钩子函数的要求
2.解决极端情况下OsTickTimerBaseReset断言失败的问题

BREAKING CHANGE:
修复低功耗下时间更新缺陷对外变更描述:

低功耗启用另一个低功耗timer时:

LosPmTickTimer 中tickLock函数的功能实现描述由原来的:暂停系统tick timer 修改为:关闭系统tick timer,并将timer的count值清零

LosPmTickTimer 中tickUnlock函数的功能实现描述由原来的:恢复系统tick timer 修改为:重新启动系统tick timer

Close #I5O80Z

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I2ee17518e4a388ff5a1f9e3d8d7c61c81aa3e569
2022-12-05 17:01:37 +08:00
Far 0d1c77c1e0 feat: 对内核模块暴露OsMemNodeHead/OsMemPoolHead
对内核其他模块暴露OsMemNodeHead/OsMemPoolHead等结构体,
以便于对堆内存管理的调测及管理。

fix #I64ONE

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I2e47d90412368dfdc8d82e6b30c9196e1fdf42f1
2022-12-05 16:41:20 +08:00
openharmony_ci 795c2db917 !933 fs增加注册接口
Merge pull request !933 from wangchen/1124_m
2022-12-01 06:18:16 +00:00
wangchen 2f334bed21 feat: fs增加注册接口
方案描述:
增加注册机制, 并增加重复注册判断

BREAKING CHANGE:
fs增加注册接口
新增API:
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
                   const struct FileOps *fsFops, const struct FsManagement *fsMgt);

fix #I611L2
Signed-off-by: wangchen <wangchen240@huawei.com>
https://gitee.com/openharmony/kernel_liteos_m/issues/I611L2
2022-12-01 02:50:05 +00:00
openharmony_ci 9e4978f57f !947 fix: 使用LOSCFG_FS_FREE_HOOK释放内存
Merge pull request !947 from Hongjin Li/max_open_dirs
2022-12-01 02:50:03 +00:00
Hongjin Li a859329f28 fix: 使用LOSCFG_FS_FREE_HOOK释放内存
文件系统中使用LOSCFG_FS_FREE_HOOK代替free()来释放内存。

close #I6412J

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-12-01 09:33:32 +08:00
openharmony_ci 68b8deea89 !937 添加MAX_OPEN_DIRS宏,标识最大可打开dir数量
Merge pull request !937 from Hongjin Li/max_open_dirs
2022-11-29 11:38:36 +00:00
Hongjin Li a288718c2c fix: 添加LOSCFG_MAX_OPEN_DIRS标识最大可打开dir数量
提供LOSCFG_MAX_OPEN_DIRS宏定义,标识最大可打开dir数量。新增g_dirNum静态变量,标识已打开的dir数量。
在opendir成功时g_dirNum++,在closedir成功时g_dirNum--。

BREAKING CHANGE:
新增LOSCFG_MAX_OPEN_DIRS宏定义,标识最大可打开dir数量。

fix: I62XEA

Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-29 19:05:00 +08:00
openharmony_ci 2e7b59b659 !944 feat: 回合liteos_m架构图
Merge pull request !944 from zhushengle/arch
2022-11-29 02:46:53 +00:00
zhushengle 0c577f3e7f feat: 回合liteos_m内核架构图
Close #I63MI5
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I69a978aee465662a9265426975f13e57b41972ab
2022-11-29 10:15:41 +08:00
openharmony_ci 019dab8db4 !941 文件系统提供动态内存分配器钩子
Merge pull request !941 from Far/LOS_FS_MALLOC
2022-11-28 14:36:29 +00:00
openharmony_ci af6863f436 !940 vfs 分区格式化逻辑修改
Merge pull request !940 from wangchen/1128_m_part
2022-11-28 14:17:42 +00:00
Far f190275664 feat: 文件系统提供动态内存分配器钩子
增加LOS_FS_MALLOC/LOS_FS_FREE宏以提供用户配置动态内存分配器的能力。
用户只需要在components/fs/vfs/los_fs.h中修改对应的函数即可。

BREAKING CHANGE:
文件系统提供动态内存分配器钩子
新增宏:
LOS_FS_MALLOC
LOS_FS_FREE

fix #I63IJW

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: I20cb41f621a2e22d74749583f546d550ba127b72
2022-11-28 20:02:20 +08:00
openharmony_ci 1bdee9f58e !939 feat: 更新PR模板, 添加对外变更
Merge pull request !939 from zhushengle/pr
2022-11-28 11:59:22 +00:00
wangchen 97a638bc1c fix: vfs 分区格式化逻辑修改
方案描述:
1,删除fat分区时调用的adddevice的动作
2,修改格式化的判断逻辑

fix #I63FDV
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-28 03:53:54 +00:00
zhushengle 55238c805a feat: 更新PR模板, 添加对外变确认项
在PR模板中添加对外变更的确认选项

fix #I636LO

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I96025b27f771f86cc03c8e60d0e307a9a6c0e404
2022-11-26 17:17:02 +08:00
openharmony_ci 0841ece718 !930 Fix : 内核告警清理
Merge pull request !930 from yinjiaming/fix
2022-11-23 04:09:25 +00:00
yinjiaming a4087a6537 Fix: 内核告警清理
消除了多余的空格

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ibe90fcf8c46ef9a60c0a8f4dbba07d399e139b8c
2022-11-23 10:49:31 +08:00
openharmony_ci 9f19fd2e7a !918 Fix : POSIX 测试用例补充
Merge pull request !918 from yinjiaming/test-3
2022-11-22 06:58:12 +00:00
openharmony_ci c10037d379 !877 更新liteos_m内核架构图
Merge pull request !877 from zhushengle/arch
2022-11-22 03:44:02 +00:00
yinjiaming b483627ec7 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-21 19:29:44 +08:00
openharmony_ci d120f1e57a !921 其他分区已mount时会引起格式化失败
Merge pull request !921 from wangchen/1117_m
2022-11-18 09:34:41 +00:00
openharmony_ci 765add9660 !917 告警清理
Merge pull request !917 from 乔克叔叔/master
2022-11-18 09:15:46 +00:00
openharmony_ci a650df0575 !916 修复用例告警
Merge pull request !916 from xuxinyu/1116
2022-11-18 09:14:03 +00:00
wangchen 08436dec9e fix: 其他分区已mount时会引起格式化失败
【背景】其他分区已mount时会引起格式化失败

【修改方案】
1, 格式化时判断方式修改为路径

【影响】
对现有的产品编译不会有影响。
re #I61P4K
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-18 06:31:12 +00:00
openharmony_ci 0818b28aa7 !919 fix:逗号格式错误
Merge pull request !919 from Hongjin Li/warning
2022-11-17 12:57:15 +00:00
Hongjin Li 2dc3998956 fix: add space after comma
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-17 20:15:53 +08:00
zhushengle 266a49fb88 feat: 更新liteos_m内核架构图
Close #I61OZZ

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I90afb1c83a9a34597e7b9699a784ad0fbff30f81
2022-11-17 18:41:40 +08:00
liuwenxin fa6f0c393d fix:告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-17 17:23:44 +08:00
openharmony_ci 3019311435 !910 Fix : POSIX 测试用例补充
Merge pull request !910 from yinjiaming/test-2
2022-11-16 09:50:31 +00:00
xuxinyu b25148107b fix:修复用例告警
Signed-off-by: xuxinyu <xuxinyu6@huawei.com>
Change-Id: Ide6f04adcd3bb12ae296f981cab84f9d7ce867fc
2022-11-16 15:55:34 +08:00
openharmony_ci aee957bb1f !909 修复mount接口对MS_REMOUNT的支持
Merge pull request !909 from Far/master
2022-11-15 14:17:19 +00:00
Far 64d15df9ea fix: fix the MS_REMOUNT support
The mount interface can't deal with MS_REMOUNT flag now, fix it.

Signed-off-by: Far <yesiyuan2@huawei.com>
Change-Id: Id0960c8d92ce767b8d8ef98b3ba2e1d1ab7db15d
2022-11-15 17:05:21 +08:00
yinjiaming 8e58b984ea fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-15 16:54:28 +08:00
openharmony_ci be1267fafa !903 fix: 修复测试用例断言宏使用不规范的问题
Merge pull request !903 from Zhaotianyu/20221110test_fix_assert
2022-11-14 09:41:12 +00:00
openharmony_ci 6cb544b158 !892 m告警清理
Merge pull request !892 from 乔克叔叔/master
2022-11-14 08:50:22 +00:00
openharmony_ci 5e8225273f !904 Fix : 内核告警清理
Merge pull request !904 from yinjiaming/fix
2022-11-14 08:35:08 +00:00
openharmony_ci aec7a45411 !894 Fix : POSIX 测试用例补充
Merge pull request !894 from yinjiaming/test-1
2022-11-14 08:34:29 +00:00
liuwenxin 2806c4af75 Fix:m核告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-11 17:40:25 +08:00
yinjiaming 7e442ddd61 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix/mqueue 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I64efeb7d3ae3dbd966b716bf8e296a9eb0f5db06
2022-11-11 11:56:13 +08:00
openharmony_ci 527cec6e27 !906 RISC-V架构解依赖平台soc.h
Merge pull request !906 from zhushengle/soc
2022-11-10 12:47:40 +00:00
zhushengle d68b5f0ab3 task: RISC-V架构解依赖平台soc.h
Close #I5M7JE

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I98f9f2a5d69576540a270778bf37899594c527f2
2022-11-10 18:45:27 +08:00
openharmony_ci 1cd2ae7b4e !901 risc-v系统异常时无法输出异常信息
Merge pull request !901 from zhushengle/medeleg
2022-11-10 10:30:50 +00:00
arvinzzz 27ed27eb89 fix: 修复测试用例断言宏使用不规范的问题
Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
2022-11-10 17:45:43 +08:00
yinjiaming 098c5ea24d fix: 内核告警清理
Change-Id: Ic6d335964da545bc71edd40669c82b6f85e1bad6
Signed-off-by: yinjiaming <yinjiaming@huawei.com>
2022-11-10 17:32:52 +08:00
zhushengle 914913fab6 task: risc-v系统异常时取消对medeleg寄存器的保存
部分开源架构不支持该寄存器,且非常用寄存器

Close #I60IS5
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: I8db31f84a24cc6143513c725691e4ba780ca99e9
2022-11-10 16:29:27 +08:00
openharmony_ci 2f08268983 !895 fix: buffersize paramter type error
Merge pull request !895 from Hongjin Li/fix
2022-11-09 09:29:57 +00:00
Hongjin Li 807c7e64cb fix: buffersize parameter type error
Signed-off-by: Hongjin Li <lihongjin1@huawei.com>
2022-11-09 16:49:59 +08:00
openharmony_ci fc87e459d1 !891 在LOS_QueueReadCopy 和 LOS_QueueWriteCopy中增加hook函数
Merge pull request !891 from Hongjin Li/add_hook_call
2022-11-09 08:41:16 +00:00
lihongjin c3d75f64b1 feat: add hook call in LOS_QueueReadCopy and LOS_QueueWriteCopy
Signed-off-by: lihongjin <lihongjin1@huawei.com>
Change-Id: I0c8ecb6e364d8e01b48f78847c25da6bc4cb961c
2022-11-08 18:32:41 +08:00
openharmony_ci f447d15e78 !893 M核fs用例整改
Merge pull request !893 from wangchen/1108_test
2022-11-08 08:04:55 +00:00
wangchen 642d5ef709 fix: M核fs用例整改
【背景】M核fs用例整改

【修改方案】
1,增加部分判断,适配fatfs
2,增加部分接口

【影响】
对现有的产品编译不会有影响。
re #I5Z4DL
Signed-off-by: wangchen <wangchen240@huawei.com>
2022-11-08 07:26:06 +00:00
openharmony_ci 74bbfa4893 !853 fix:修复文档中失效链接
Merge pull request !853 from zhangdengyu/fix_links_1019
2022-11-08 03:31:18 +00:00
openharmony_ci fe5a091ca2 !864 feat: 支持mutex trace
Merge pull request !864 from zhangdengyu/add_mutex_trace_1028
2022-11-08 03:07:54 +00:00
openharmony_ci c83b98ecbf !868 告警清理
Merge pull request !868 from 乔克叔叔/master
2022-11-07 10:57:34 +00:00
openharmony_ci c9a96bc4b3 !886 cortex-m4支持iar编译器的gn适配
Merge pull request !886 from yiweiniunan/master
2022-11-07 10:34:19 +00:00
yiweiniunan 62cd8fec46 cortex-m4支持iar编译器的gn适配
Signed-off-by: yiweiniunan <michael.likai@huawei.com>
2022-11-07 16:15:29 +08:00
liuwenxin 8b54493665 fix:告警清理
Signed-off-by: liuwenxin <liuwenxin11@huawei.com>
2022-11-07 14:58:48 +08:00
zhangdengyu a940dda69a feat: 增加mutex trace功能
Close: #I5YJOZ

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: Id36ed4f4d23b9aa59ae9ee8cdb17c06d7e3c151b
2022-11-07 08:42:06 +08:00
openharmony_ci 1bc63d743b !881 feat: 提供死机场景下dump文件能力
Merge pull request !881 from Zhaotianyu/20221105vfs_lock
2022-11-07 00:41:11 +00:00
arvinzzz 474201593d feat: 提供死机场景下dump文件的能力
死机场景下,vfs层锁会放开,提供dump文件的能力

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: Id8c9e63fbf011dbc6690b9b4557bd3370353bf21
2022-11-05 17:58:37 +08:00
openharmony_ci 3f54fdc898 !846 修复shell删除命令误删目录的问题
Merge pull request !846 from 方烨/master
2022-11-04 08:24:17 +00:00
openharmony_ci 8ac6771e0d !869 Fix : 给LOS_MuxDelete 函数前添加(VOID)
Merge pull request !869 from yinjiaming/fix
2022-11-04 08:23:38 +00:00
openharmony_ci 7101ddbeb8 !874 feat: pm idle添加到menuconfig中
Merge pull request !874 from zhushengle/pm_ilde
2022-11-03 14:10:34 +00:00
openharmony_ci abbed4430e !847 解决部分平台ping失败
Merge pull request !847 from huohongpeng/ping_checksum
2022-11-03 14:05:50 +00:00
zhushengle 98d20e90ed feat: pm idle添加到menuconfig中
Close #I5ZD5L
Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: Ibdedff3043a0902aa3cd9539497ef97fb6a1ce6c
2022-11-03 21:32:45 +08:00
openharmony_ci 9767191392 !859 Fix : POSIX 测试用例补充
Merge pull request !859 from yinjiaming/test-4
2022-11-03 02:17:32 +00:00
openharmony_ci e540254ed9 !862 feature:支持厂商自定义malloc替换系统默认实现
Merge pull request !862 from Zhaotianyu/20221028iar_malloc
2022-11-01 13:48:15 +00:00
yinjiaming ad4ef11410 fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I65adfd00faec185bcad3c1e38e305ce9e8cb9346
2022-11-01 16:26:56 +08:00
yinjiaming 20ffd89865 fix: 给函数LOS_MutexDelete 前添加(VOID)
Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: I49a7c305e955bccca78b80ddeea66330e8b03ac0
2022-11-01 15:43:18 +08:00
arvinzzz ae8d4fd275 feature: 支持厂商定制malloc替换系统默认实现
malloc的相关支持可以通过make menuconfig配置

close: #I5YBPE

Signed-off-by: arvinzzz <zhaotianyu9@huawei.com>
Change-Id: Ic40968aa83f43f539f7551c1dcec05f4f9832983
2022-10-28 18:53:53 +08:00
openharmony_ci 972d765c6e !861 Test : POSIX 测试用例补充
Merge pull request !861 from vincent-zhang/myfeature
2022-10-28 02:09:45 +00:00
vincent 47f883c11a zhangadong@huawei.com
Signed-off-by: vincent <zhangadong@huawei.com>
2022-10-28 09:33:36 +08:00
openharmony_ci 478b41b457 !857 Fix : POSIX 测试用例补充
Merge pull request !857 from yinjiaming/test-2
2022-10-26 06:33:41 +00:00
yinjiaming 69d17d522c fix: POSIX 测试用例后续补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ib8ab772f9893e243ace9319cb7af1486a6bd2937
2022-10-25 15:45:33 +08:00
fangye d4bfb577ef fix: 修复shell删除命令误删目录的问题
Signed-off-by: fangye <fangye@talkweb.com.cn>
Change-Id: Ia8f26ff4b250a6540f5644e2dd38fb22cd85d326
2022-10-25 12:19:46 +08:00
openharmony_ci 6e6cbe5de6 !855 Fix : POSIX 测试用例补充
Merge pull request !855 from yinjiaming/test-1
2022-10-24 11:11:57 +00:00
yinjiaming 383a1d23e9 fix: POSIX 测试用例补充
【背景】
kernel_litos_m 中需要补充 POSIX 相关的测试用例

【修改方案】
从 A 核中移植了一部分的POSIX 相关的测试用例
到 sample/posix 目录下

【影响】
对现有的产品编译不会有影响

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Ib8ab772f9893e243ace9319cb7af1486a6bd2937
2022-10-24 15:39:20 +08:00
openharmony_ci b24353cf4b !854 Fix : 使用 newlibc 编译测试用例时报错
Merge pull request !854 from yinjiaming/master
2022-10-21 09:58:50 +00:00
openharmony_ci f1ad086665 !842 cmsis测试用例补充
Merge pull request !842 from 乔克叔叔/branchname
2022-10-21 09:12:17 +00:00
yinjiaming 8fff50f59f fix: newlibc 编译错误修正
【背景】
使用newlibc 编译测试用例时会有编译错误

【修改方案】
删去了 newlibc 中没有的宏定义

【影响】
对现有的产品编译不会有影响。

Signed-off-by: yinjiaming <yinjiaming@huawei.com>
Change-Id: Id753640253e1b297654b3e523ddd5ca0abdca698
2022-10-20 19:52:32 +08:00
zhangdengyu 373d4f5649 fix: 修复文档中失效链接
Close: #I5WGWU

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: I8c37da09e85e823edd59ebf65a3e284596b7bef9
2022-10-19 10:21:05 +08:00
Hongpeng Huo 3c8d20a89e fix: icmp hardware checksum failed for dwc gmac ip core
Signed-off-by: Hongpeng Huo <hongpeng.huo@hpmicro.com>
2022-10-17 20:33:11 +08:00
wenxin-liu_admin a502a0917c :cmsis 测试用例补充
Signed-off-by: wenxin-liu_admin <liuwenxin11@huawei.com>
Change-Id: Iaa133871c465e20170a3bf2204cb1c6ba40fda72
2022-09-30 15:53:58 +08:00
332 changed files with 16533 additions and 3429 deletions
+6
View File
@@ -10,6 +10,12 @@
### 测试用例(新增、改动、可能影响的功能) ### 测试用例(新增、改动、可能影响的功能)
### 是否涉及对外变更(典型的如:对外API规格变更、新增对外接口等等)
必须选择一项(在MarkDown模式下用[x]替换[ ]即可勾选对应选项):
- [ ] 是,涉及对外变更: 需要在commit message中按【[模板要求](https://gitee.com/openharmony/kernel_liteos_m/wikis/Commit%20message%E8%A7%84%E8%8C%83)】描述变更点
- [ ] 否,不涉及对外变更
### 是否需要同步至release(如:3.0LTS ... )分支? ### 是否需要同步至release(如:3.0LTS ... )分支?
必须选择一项(在MarkDown模式下用[x]替换[ ]即可勾选对应选项): 必须选择一项(在MarkDown模式下用[x]替换[ ]即可勾选对应选项):
+6 -5
View File
@@ -91,8 +91,9 @@ config("dialect_config") {
} }
config("misc_config") { config("misc_config") {
defines = []
if (!defined(LOSCFG_COMPILER_ICCARM)) { if (!defined(LOSCFG_COMPILER_ICCARM)) {
defines = [ "__LITEOS__" ] defines += [ "__LITEOS__" ]
defines += [ "__LITEOS_M__" ] defines += [ "__LITEOS_M__" ]
} }
if (!defined(LOSCFG_DEBUG_VERSION)) { if (!defined(LOSCFG_DEBUG_VERSION)) {
@@ -136,8 +137,8 @@ config("public") {
] ]
if (BOARD_SOC_FEATURE) { if (BOARD_SOC_FEATURE) {
configs += [ "//device/board/$device_company:public" ] configs += [ "$DEVICE_BOARD_DIR/$device_company:public" ]
configs += [ "//device/soc/$LOSCFG_SOC_COMPANY:public" ] configs += [ "$DEVICE_SOC_DIR/$LOSCFG_SOC_COMPANY:public" ]
} else { } else {
if (HAVE_DEVICE_SDK) { if (HAVE_DEVICE_SDK) {
configs += [ "$device_path:public" ] configs += [ "$device_path:public" ]
@@ -157,8 +158,8 @@ group("modules") {
] ]
if (BOARD_SOC_FEATURE) { if (BOARD_SOC_FEATURE) {
deps += [ "//device/board/$device_company" ] deps += [ "$DEVICE_BOARD_DIR/$device_company" ]
deps += [ "//device/soc/$LOSCFG_SOC_COMPANY" ] deps += [ "$DEVICE_SOC_DIR/$LOSCFG_SOC_COMPANY" ]
} else { } else {
if (HAVE_DEVICE_SDK) { if (HAVE_DEVICE_SDK) {
deps += [ device_path ] deps += [ device_path ]
+465
View File
@@ -0,0 +1,465 @@
# (2022-03-30)
### Bug Fixes
* c-sky等芯片架构的BUILD.gn优化 ([3311d73](https://gitee.com/openharmony/kernel_liteos_m/commits/3311d73406b68d289b6f715a099e90f62c86abd1)), closes [#I4D129](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D129)
* change the sensitive words ([8e2248c](https://gitee.com/openharmony/kernel_liteos_m/commits/8e2248c062aaca2444cc1001873fe8e8d8cdd3c6)), closes [#I4K7LL](https://gitee.com/openharmony/kernel_liteos_m/issues/I4K7LL)
* cortex-m55栈优化 ([59e9c6e](https://gitee.com/openharmony/kernel_liteos_m/commits/59e9c6ed73caeeed56081a768198eccc7448df6c)), closes [#I4SQIQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I4SQIQ)
* csky等新增模块的HalTickStart函数定义和实现不一致 ([07ab6a5](https://gitee.com/openharmony/kernel_liteos_m/commits/07ab6a5b77c6955f6093beeab976bdc1b32d1db9)), closes [#I4D1HY](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D1HY)
* FD_SETSIZE compatible newlibc ([82c6d5f](https://gitee.com/openharmony/kernel_liteos_m/commits/82c6d5f17478fb47ea5977a32fb76d783ee3e815))
* fix compile warning saying dereference void * pointer ([29126a9](https://gitee.com/openharmony/kernel_liteos_m/commits/29126a98fe7a8f75695910bdf8fa1ccc6ff67288))
* gcc编译testsuite编译问题修复 ([f7d26b8](https://gitee.com/openharmony/kernel_liteos_m/commits/f7d26b8e12fb1ba4bebe6c0fc9ca9e392537419f)), closes [#I4DAOU](https://gitee.com/openharmony/kernel_liteos_m/issues/I4DAOU)
* Kconfig中打开littlefs选项默认关联打开LOSCFG_SUPPORT_LITTLEFS宏 ([b2bcab3](https://gitee.com/openharmony/kernel_liteos_m/commits/b2bcab3a5bd794c86dd4d93b1b5aeca2d097289b)), closes [#I4ENQ1](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ENQ1)
* kernel接口融合,添加/修改kernel函数 ([cee9714](https://gitee.com/openharmony/kernel_liteos_m/commits/cee9714a90f2660a0b4455f4f5a2fc42870a6aa5))
* L0 pthread_cond_timedwait接口实现存在的几个问题 ([2219c32](https://gitee.com/openharmony/kernel_liteos_m/commits/2219c32784071b6c37ea57185382e3228ed4b0a7)), closes [#I4N9P8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N9P8)
* liteos_kernel_only=true编译内核报错 ([adc2105](https://gitee.com/openharmony/kernel_liteos_m/commits/adc21052b2b9b55de9fc493cf74645f470edf9b5)), closes [#I4O204](https://gitee.com/openharmony/kernel_liteos_m/issues/I4O204)
* los_exc.S中_ExcInMsp主栈中异常处理函数中异常返回类型错误 ([c51df7a](https://gitee.com/openharmony/kernel_liteos_m/commits/c51df7a94c1f21803db25f46a73a7fb291588eda)), closes [#I4EJI4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4EJI4)
* los_interrupt.c存在未使用的参数编译出错 ([5af4c2e](https://gitee.com/openharmony/kernel_liteos_m/commits/5af4c2e2139cabe49049283f7a4280460bbf353a)), closes [#I4SJPZ](https://gitee.com/openharmony/kernel_liteos_m/issues/I4SJPZ)
* LOS_Panic接口中增加需要增加LOS_BackTrace(),方便定位主动异常位置 ([f51d675](https://gitee.com/openharmony/kernel_liteos_m/commits/f51d675fee217e0ad519f2fa79f70b033f313dce)), closes [#I4IGGY](https://gitee.com/openharmony/kernel_liteos_m/issues/I4IGGY)
* los_trace.h接口注释错误修正 ([693468e](https://gitee.com/openharmony/kernel_liteos_m/commits/693468e5274af310721f5962602a915d701a7bf0)), closes #I4CYPZ
* m4核在任务中异常时backtrace使用的是MSP所在的栈,而不是PSP所在的栈 ([3e8aea2](https://gitee.com/openharmony/kernel_liteos_m/commits/3e8aea224e481322efef9397e4aafc3450a09d28)), closes [#I4D7GE](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D7GE)
* M核posix接口fs模块用例完善 ([ee380fb](https://gitee.com/openharmony/kernel_liteos_m/commits/ee380fb9be45ef033979ec3b8875d980b7f13198)), closes [#I4L7BF](https://gitee.com/openharmony/kernel_liteos_m/issues/I4L7BF)
* optimize default configuration ([b2e3849](https://gitee.com/openharmony/kernel_liteos_m/commits/b2e3849bfbd470981602b0dc02f47bffb38bfe11)), closes [#I4FSC9](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FSC9)
* OsGetAllTskInfo调用和异常时无任务回调函数地址 ([1c605a3](https://gitee.com/openharmony/kernel_liteos_m/commits/1c605a338ad2317aeb464bdac85df5b9a79c99fd)), closes [#I4MG2T](https://gitee.com/openharmony/kernel_liteos_m/issues/I4MG2T)
* pm codex告警清零 ([9666380](https://gitee.com/openharmony/kernel_liteos_m/commits/96663805ecfd3248e33b4deb877c8d55cc4e8eec)), closes [#I4OWPE](https://gitee.com/openharmony/kernel_liteos_m/issues/I4OWPE)
* pm模块解冻线程时存在删除空链表且时间片频繁唤醒系统 ([9f185b5](https://gitee.com/openharmony/kernel_liteos_m/commits/9f185b5b52ed9506a4913f233c9ddfe45452ec05)), closes [#I4AKUS](https://gitee.com/openharmony/kernel_liteos_m/issues/I4AKUS)
* **posix unittest:** posix unittest 融合 ([ad6f249](https://gitee.com/openharmony/kernel_liteos_m/commits/ad6f249d1ea878f06864d79bdbed772b21eeac49))
* **posix:** posix兼容回退 ([207efc1](https://gitee.com/openharmony/kernel_liteos_m/commits/207efc15b859fe18d8b1dac2a3da9d7a5831aa6e))
* **posix:** posix接口融合,接口规范兼容性修改 ([e0b1275](https://gitee.com/openharmony/kernel_liteos_m/commits/e0b12758da4a25e42110ba32da25b6d18ebed8ef))
* **posix接口融合:** posix接口融合,接口规范兼容性修改 ([4b607fd](https://gitee.com/openharmony/kernel_liteos_m/commits/4b607fd0740a5379cd373890482235845d782b62))
* posix线程和LOS_TaskCreate任务不兼容,补齐接口防护,防止访问野指针 ([60805e1](https://gitee.com/openharmony/kernel_liteos_m/commits/60805e1a7c3736db86695ed86cd03cfaab70a427))
* pr模板补充说明 ([7b86f69](https://gitee.com/openharmony/kernel_liteos_m/commits/7b86f69cc0ccd5512b69fd3a1181b3440747ddb2))
* ReadMe中无对动态加载模块待加载的共享库的限制说明。 ([f86b971](https://gitee.com/openharmony/kernel_liteos_m/commits/f86b97180f97903bb2def271b7b11fc1ae1bf9bb)), closes [#I4ICK8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ICK8)
* shell 输入不识别命令时内存泄漏 ([0245b1a](https://gitee.com/openharmony/kernel_liteos_m/commits/0245b1a7b24fd36d23f9602d0755b274581a84ce)), closes [#I4UR9P](https://gitee.com/openharmony/kernel_liteos_m/issues/I4UR9P)
* **shell:** cat针对大文件无法工作 ([d518bad](https://gitee.com/openharmony/kernel_liteos_m/commits/d518bad0dc7dd9e3fbb45423a7db5cb8c1c922dc)), closes [#I4J4TK](https://gitee.com/openharmony/kernel_liteos_m/issues/I4J4TK)
* shell模块task命令踩内存问题修改 ([6ffd55d](https://gitee.com/openharmony/kernel_liteos_m/commits/6ffd55dcd07ce17b693a97bb678668f763480e4d)), closes [#I4A70V](https://gitee.com/openharmony/kernel_liteos_m/issues/I4A70V)
* switch inet_addr to a function ([b30e913](https://gitee.com/openharmony/kernel_liteos_m/commits/b30e9139d5502acab8c36ae9a56d4cd640786c44)), closes [#I4G4I4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4G4I4)
* **testsuites:** cpup和测试套解耦 ([692651f](https://gitee.com/openharmony/kernel_liteos_m/commits/692651fe40f668f19b479186e52fea34d092b458))
* tick timer时钟频率赋值修改为运行时赋值 ([ae02afc](https://gitee.com/openharmony/kernel_liteos_m/commits/ae02afc8504f64ff6bc09828f55e9602bcbcae56)), closes [#I4PGUR](https://gitee.com/openharmony/kernel_liteos_m/issues/I4PGUR)
* tick中断处理时,无挂起任务时应更新当前运行任务的时间片, 并触发一次调度 ([ea12d40](https://gitee.com/openharmony/kernel_liteos_m/commits/ea12d40caf1301b4a7b6d60a2c599ceff4746c90)), closes [#I4LRZG](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LRZG)
* **time_func_test_01.c:** 修复testTimes测试单板配置LOSCFG_BASE_CORE_TICK_PER_SECOND = 1000的问题 ([5c982f1](https://gitee.com/openharmony/kernel_liteos_m/commits/5c982f1087f95174f2836c72648eab58adf37fd7))
* 中断向量表对齐大小支持可配置 ([cf9c838](https://gitee.com/openharmony/kernel_liteos_m/commits/cf9c8387e3785d994aacf948b7c1b61324a3dd63)), closes [#I4M20E](https://gitee.com/openharmony/kernel_liteos_m/issues/I4M20E)
* 优化trace buffer初始化,删除swtmr 桩中的无效参数 ([afbc9a5](https://gitee.com/openharmony/kernel_liteos_m/commits/afbc9a593b61461072556cb5531d90b30ce2e394)), closes [#I4DPR7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4DPR7)
* 优化低功耗流程 ([c6600d9](https://gitee.com/openharmony/kernel_liteos_m/commits/c6600d9dddb666f397ba659d47d64f334691af6b)), closes [#I46VXK](https://gitee.com/openharmony/kernel_liteos_m/issues/I46VXK)
* 修复arch目录调整影响到的target目录下的文件 ([d5725b2](https://gitee.com/openharmony/kernel_liteos_m/commits/d5725b22644da8ab3e719169230303e44c7d8750)), closes [#I4JM7Z](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JM7Z)
* 修复cortex-m系列系统提供的timer在低频下时间不准的问题 ([3e569ba](https://gitee.com/openharmony/kernel_liteos_m/commits/3e569bac587d90dcd21aff7d8ec53216dfbb8f1c)), closes [#I4HBGR](https://gitee.com/openharmony/kernel_liteos_m/issues/I4HBGR)
* 修复hook层LOS_HOOK_TYPE_SEM_PEND的runningTask入参可能为空 ([3fd22ac](https://gitee.com/openharmony/kernel_liteos_m/commits/3fd22ac2b0b4c690669a659246aba099fd4311ec)), closes [#I4BU4P](https://gitee.com/openharmony/kernel_liteos_m/issues/I4BU4P)
* 修复irqNum = HwiNumGet()编译错误的问题 ([16e87d7](https://gitee.com/openharmony/kernel_liteos_m/commits/16e87d78d89bec7d85c076fc738ed4ad0614b865)), closes [#I4S81B](https://gitee.com/openharmony/kernel_liteos_m/issues/I4S81B)
* 修复Kconfig信息错误 ([bb04582](https://gitee.com/openharmony/kernel_liteos_m/commits/bb045829104211522cd12a7273d5853400c1ea26)), closes [#I4MZ1F](https://gitee.com/openharmony/kernel_liteos_m/issues/I4MZ1F)
* 修复L0_Emulator 门禁高概率失败的问题 ([7ad2f62](https://gitee.com/openharmony/kernel_liteos_m/commits/7ad2f62a03481a3919fef1f1e46e4c9677b1e65c)), closes [#I4NB0N](https://gitee.com/openharmony/kernel_liteos_m/issues/I4NB0N)
* 修复liteos-m在iar环境下的编译问题 ([4c4784e](https://gitee.com/openharmony/kernel_liteos_m/commits/4c4784e33d7944e7850009be192375aaa6e2b125)), closes [#I4Q5Q5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4Q5Q5)
* 修复los_interrupt.c文件中HalHwiInit函数里未使能未对齐异常问题 ([d32e25f](https://gitee.com/openharmony/kernel_liteos_m/commits/d32e25f3ae8e8e5ec24effa98dc8f0b3ba94d0c1)), closes [#I4EJGR](https://gitee.com/openharmony/kernel_liteos_m/issues/I4EJGR)
* 修复newlib缺省PTHREAD_KEYS_MAX 问题 ([65f04bf](https://gitee.com/openharmony/kernel_liteos_m/commits/65f04bf093376a478e9585dadfc1238158cc3641)), closes [#I4OX47](https://gitee.com/openharmony/kernel_liteos_m/issues/I4OX47)
* 修复OsQueueMailFree提早释放内存的问题 ([ec88d16](https://gitee.com/openharmony/kernel_liteos_m/commits/ec88d1628937b3def6dd613246116f6bfa4141eb))
* 修复pm编译告警导致内核编译失败 ([18b0524](https://gitee.com/openharmony/kernel_liteos_m/commits/18b052458e1cea113df7a6bb4798a6d5e1eb751e)), closes [#I49MIN](https://gitee.com/openharmony/kernel_liteos_m/issues/I49MIN)
* 修复pthread 编译告警 ([cc57f81](https://gitee.com/openharmony/kernel_liteos_m/commits/cc57f81ab85a5eb9bb4be9bd7d2863978996bcf3)), closes [#I4U16U](https://gitee.com/openharmony/kernel_liteos_m/issues/I4U16U)
* 修复pthread_create相关问题 ([cd949dd](https://gitee.com/openharmony/kernel_liteos_m/commits/cd949ddae0aa4e7291b0b7f6ba83c2034cdf1301)), closes [#I4P78J](https://gitee.com/openharmony/kernel_liteos_m/issues/I4P78J)
* 修复pthread_create行为与posix不一致问题 ([2b1e5a7](https://gitee.com/openharmony/kernel_liteos_m/commits/2b1e5a7a130fbca1b86a787b54f474e183541d6d)), closes [#I49W9F](https://gitee.com/openharmony/kernel_liteos_m/issues/I49W9F)
* 修复readme中文档链接错误 ([8ee70a0](https://gitee.com/openharmony/kernel_liteos_m/commits/8ee70a0f8f856da29139a36ba6f8589201cdb109)), closes [#I4FD5G](https://gitee.com/openharmony/kernel_liteos_m/issues/I4FD5G)
* 修复risc-v异常时,异常信息混乱且backtrace无法输出的问题 ([0fb49d4](https://gitee.com/openharmony/kernel_liteos_m/commits/0fb49d4422245e83c2435468eb7f2690f2e2c6e4)), closes #I4BPHX
* 修复shcmd.h需要用宏包起来的问题 ([a7a8a62](https://gitee.com/openharmony/kernel_liteos_m/commits/a7a8a62bcb7398b4194b37f62098da9cb1ce717e)), closes [#I45FU2](https://gitee.com/openharmony/kernel_liteos_m/issues/I45FU2)
* 修复shell 模块存在大量的编译告警及codeCheck。 ([e0d8b53](https://gitee.com/openharmony/kernel_liteos_m/commits/e0d8b5328f53dcef9427a34e8b0462250bb6a40f)), closes [#I48V2J](https://gitee.com/openharmony/kernel_liteos_m/issues/I48V2J)
* 修复任务栈对齐问题及补充posix和cmsis测试用例 ([ed863e9](https://gitee.com/openharmony/kernel_liteos_m/commits/ed863e90dd9aceb5d3b6d92b0a94703101b83f80))
* 修复公版gcc编译内核,调用calloc崩溃 ([8d0ced2](https://gitee.com/openharmony/kernel_liteos_m/commits/8d0ced206951f35d5caab61969344b0ab259e5fb)), closes [#I4OFG6](https://gitee.com/openharmony/kernel_liteos_m/issues/I4OFG6)
* 修复未使用的参数和类型比较编译报错问题 ([21b46e8](https://gitee.com/openharmony/kernel_liteos_m/commits/21b46e82f31030703d052369701f4d6d736a4a86))
* 修复调度时间最大值不一致问题 ([9f393bc](https://gitee.com/openharmony/kernel_liteos_m/commits/9f393bcc6df592efb6940e9864ff93e932ae59ad))
* 修正liteos-m内核README不准确信息 ([0e067b2](https://gitee.com/openharmony/kernel_liteos_m/commits/0e067b239354c28e16b05489274b33051d002508)), closes [#I4PLWP](https://gitee.com/openharmony/kernel_liteos_m/issues/I4PLWP)
* 修正部分编码风格问题 ([91903a3](https://gitee.com/openharmony/kernel_liteos_m/commits/91903a37165ef364750916104be4f7dfd1d8f9a6)), closes [#I4K8M7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4K8M7)
* 内核ERR打印,线程信息,不方便问题定位。 ([232fec2](https://gitee.com/openharmony/kernel_liteos_m/commits/232fec27ac8cd2f46b5a2f5cfbe4677d0e287314)), closes #I4DAKM
* 内源检视问题修复 ([c24363b](https://gitee.com/openharmony/kernel_liteos_m/commits/c24363bc50364b0be1fba3b993a83c6936fc3d08))
* 删除C文件中无用的__cplusplus ([7fe3aad](https://gitee.com/openharmony/kernel_liteos_m/commits/7fe3aaddf56b300ffcb2b186ae01ed64bef1c069)), closes [#I4D0YK](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D0YK)
* 删除OsMemboxExcInfoGetSub内存调测方法中多余的赋值语句。 ([94db0fe](https://gitee.com/openharmony/kernel_liteos_m/commits/94db0fe7a30edaa10786101f1ef662987a27734a)), closes [#I4CFNX](https://gitee.com/openharmony/kernel_liteos_m/issues/I4CFNX)
* 去掉没有使用的入参consoleid。 ([a627953](https://gitee.com/openharmony/kernel_liteos_m/commits/a62795304da31e13021ea2c675d124afd2594102)), closes [#I43CVE](https://gitee.com/openharmony/kernel_liteos_m/issues/I43CVE)
* 去掉编译选项-fno-short-enums ([b542aab](https://gitee.com/openharmony/kernel_liteos_m/commits/b542aab09dd92397f8c1305ac656ef14a012b5f8)), closes [#I4JY32](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JY32)
* 取消cpu进入低功耗前开中断操作 ([bd39e9e](https://gitee.com/openharmony/kernel_liteos_m/commits/bd39e9e6d67310222c363e132141bb7fee1213f1)), closes [#I4KDP8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4KDP8)
* 告警修复 ([7d2fd01](https://gitee.com/openharmony/kernel_liteos_m/commits/7d2fd01c2d7d6d4c653a307a1419bc094f5332f0))
* 告警修复 ([2d7bf3b](https://gitee.com/openharmony/kernel_liteos_m/commits/2d7bf3b7d8ea84961e802c366899aca891f38377))
* 在头文件中补充LOSCFG_MEM_FREE_BY_TASKID函数的声明 ([ad18026](https://gitee.com/openharmony/kernel_liteos_m/commits/ad18026a59fc2853c9580e040f959f9f42082640)), closes [#I4JBOV](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JBOV)
* 将curl依赖的函数新增至newlib库 ([bd04d9f](https://gitee.com/openharmony/kernel_liteos_m/commits/bd04d9f29a0b77445a71378f88b01ffdae24554f)), closes [#I4RG71](https://gitee.com/openharmony/kernel_liteos_m/issues/I4RG71)
* 将未定义小写"true""false"改为"TRUE""FALSE"。 ([9819eb5](https://gitee.com/openharmony/kernel_liteos_m/commits/9819eb567636adf1774de9fd6039d274bee8f69b)), closes [#I43D20](https://gitee.com/openharmony/kernel_liteos_m/issues/I43D20)
* 当前仓代码编译告警的问题 ([194ac58](https://gitee.com/openharmony/kernel_liteos_m/commits/194ac5898d1e2ffaa17f6dca405614b73da6f8bb)), closes #I4N50W
* 支持硬浮点编译 ([988fd85](https://gitee.com/openharmony/kernel_liteos_m/commits/988fd85fae454a0d9fe01ef1c921b4f3667d5ac8)), closes [#I48KJP](https://gitee.com/openharmony/kernel_liteos_m/issues/I48KJP)
* 测试用例任务栈的宏定义重复定义,导致在osTest.h中修改不生效 ([ce6cf68](https://gitee.com/openharmony/kernel_liteos_m/commits/ce6cf6879f4564393765a24c4d65448e0fddc3eb))
* 添加L0 测试门禁 ([5c168fc](https://gitee.com/openharmony/kernel_liteos_m/commits/5c168fc3e0d08dd4a8924696e17a498eb444fa70)), closes #I4C5R4
* 添加newlib对ipv6的支持 ([f7400fb](https://gitee.com/openharmony/kernel_liteos_m/commits/f7400fbcb275cbb3b75f1aef2af1459b794432de)), closes [#I4M1DB](https://gitee.com/openharmony/kernel_liteos_m/issues/I4M1DB)
* 添加文件版权头等信息 ([cf4e017](https://gitee.com/openharmony/kernel_liteos_m/commits/cf4e017970f8a3113bc8b6028d75775f747512c6)), closes [#I4BXBH](https://gitee.com/openharmony/kernel_liteos_m/issues/I4BXBH)
* 清除因g_tm变量没有使用引入的编译告警 ([9689522](https://gitee.com/openharmony/kernel_liteos_m/commits/9689522a8e08b79244ad339dc24074843b99d33b)), closes [#I4LW3H](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LW3H)
* 移除los_arch_interrupt.h文件中冗余声明的函数VOID OsExcInit(VOID) ([136952f](https://gitee.com/openharmony/kernel_liteos_m/commits/136952f193fe97cfd6a88932e71811e12edfa7a5)), closes [#I4D9OO](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D9OO)
* 补充net相关头文件 ([93f616b](https://gitee.com/openharmony/kernel_liteos_m/commits/93f616b64e961013be5c5267e50d58a40b5cc6c9))
* 解决gmtime和localtime接口由于g_tm全局变量导致的竞态问题 ([1454b76](https://gitee.com/openharmony/kernel_liteos_m/commits/1454b76482d42e78c1904028de55d82261e5ecaa)), closes [#I4LW3H](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LW3H)
* 解决los_pm.c:743:19: warning 编译告警 ([0c72c8b](https://gitee.com/openharmony/kernel_liteos_m/commits/0c72c8bf94b053ff90bbf2019006c52adf1eb8df)), closes [#I4D4L8](https://gitee.com/openharmony/kernel_liteos_m/issues/I4D4L8)
* 解决定时器超时但还在队列中无法删除的问题 ([ecce17e](https://gitee.com/openharmony/kernel_liteos_m/commits/ecce17ea4878c7bdf7d7de9a6848e6bf871563de)), closes [#I4LFVD](https://gitee.com/openharmony/kernel_liteos_m/issues/I4LFVD)
* 解除net对cmsis的依赖,net属于内核模块,不应该依赖内核对外接口 ([9982624](https://gitee.com/openharmony/kernel_liteos_m/commits/99826240d979c3aa820ab2aace62e3338978e6d1))
* 调度中将pm相关的部分用LOSCFG_KERNEL_PM包含 ([d7c0059](https://gitee.com/openharmony/kernel_liteos_m/commits/d7c0059dc4fcca3f85d2cad1012353892ce28021)), closes [#I4L00F](https://gitee.com/openharmony/kernel_liteos_m/issues/I4L00F)
* 调用LOS_TaskDetach操作已退出的joinable的任务时,未正确回收该任务 ([49c93b3](https://gitee.com/openharmony/kernel_liteos_m/commits/49c93b37c5e215612bbeb4619e73c809f9eb1cac)), closes [#I4DZL7](https://gitee.com/openharmony/kernel_liteos_m/issues/I4DZL7)
* 针对pr是否同步至release分支,增加原因说明规则 ([1ee543d](https://gitee.com/openharmony/kernel_liteos_m/commits/1ee543d5d31524d543ffb297b121224dedf8602f))
* 队列相关的API实现中,参数的校验不完全,导致程序异常 ([eef7c80](https://gitee.com/openharmony/kernel_liteos_m/commits/eef7c80a725d68af254ae55091bd36f978cf4284))
### Features
* adapt net ([8594ee4](https://gitee.com/openharmony/kernel_liteos_m/commits/8594ee469ad2d40a363e5d77f94f292ab3cb8c21))
* add option for ioctl ([5e8ac4b](https://gitee.com/openharmony/kernel_liteos_m/commits/5e8ac4b8883f64bbffa5bb3f063a601112058396)), closes [#I4I3W5](https://gitee.com/openharmony/kernel_liteos_m/issues/I4I3W5)
* add option SIOCGIFBRDADDR for ioctl ([33ee492](https://gitee.com/openharmony/kernel_liteos_m/commits/33ee49295329e3c394d1cc7b16f77a23ac2255a8)), closes [#I4EGNG](https://gitee.com/openharmony/kernel_liteos_m/issues/I4EGNG)
* added assembly atomic interface ([1513f50](https://gitee.com/openharmony/kernel_liteos_m/commits/1513f50a474d1227a83fb655ad18c19cd792f235))
* backtrace for arm9 ([03de7f3](https://gitee.com/openharmony/kernel_liteos_m/commits/03de7f37450a8821ea05e60e94a5d1dd359c4f99)), closes [#I4BMLG](https://gitee.com/openharmony/kernel_liteos_m/issues/I4BMLG)
* Board 和 SoC分离,编译适配 ([3f1c04d](https://gitee.com/openharmony/kernel_liteos_m/commits/3f1c04dd57bca0379ce37162d9d824801e7d880f))
* **build:** add module_group and comment out arch_cflags ([e5636f7](https://gitee.com/openharmony/kernel_liteos_m/commits/e5636f7acaf7e8b7d14dc07930b2a16c86e63c85))
* **build:** support Kconfig ([7e67343](https://gitee.com/openharmony/kernel_liteos_m/commits/7e673430dc42c55b3a0a6d955ba8fea21d6d58ea))
* **cmsis:** support max_count for osSemaphoreNew ([d478152](https://gitee.com/openharmony/kernel_liteos_m/commits/d478152762013975551e1af154df42987596c9a6))
* cortex-m55支持psplimit ([db7d641](https://gitee.com/openharmony/kernel_liteos_m/commits/db7d641c223db8ab25501d79c2a6331f743d830b)), closes [#I4T7R3](https://gitee.com/openharmony/kernel_liteos_m/issues/I4T7R3)
* littlefs最大打开文件个数修改为可通过menuconfig配置 ([9bc9f3a](https://gitee.com/openharmony/kernel_liteos_m/commits/9bc9f3aa53be7bf392d3da09adcb184dec8e3da2))
* newlib支持pthread_equal ([ce5357e](https://gitee.com/openharmony/kernel_liteos_m/commits/ce5357eee1daf1c1b3a3aa7bdeaef0cc5a8901bf)), closes [#I4QERS](https://gitee.com/openharmony/kernel_liteos_m/issues/I4QERS)
* provide read write for socket by #define ([d044eda](https://gitee.com/openharmony/kernel_liteos_m/commits/d044eda3c3640ae135ef528739d0c9609f40c822)), closes [#I4H8TL](https://gitee.com/openharmony/kernel_liteos_m/issues/I4H8TL)
* synchronizing arch api ([04bf3a6](https://gitee.com/openharmony/kernel_liteos_m/commits/04bf3a682f149482d8ebdbb9ff96d6889edb487a)), closes [#I4N7XV](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N7XV)
* synchronous los_hwicreate interface ([6c68ada](https://gitee.com/openharmony/kernel_liteos_m/commits/6c68adad4db7f6112990764eafe6a3bd5f8759a5))
* 低内存资源回收low memory killer ([ab886d8](https://gitee.com/openharmony/kernel_liteos_m/commits/ab886d848ab809942c11d0e408b8ff76c41b92b2)), closes [#I4ID0M](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ID0M)
* 低功耗支持冻结线程等需求 ([9b5739a](https://gitee.com/openharmony/kernel_liteos_m/commits/9b5739ab11ae7a89d35ba6f54fc62137ddc6d897)), closes [#I49FJF](https://gitee.com/openharmony/kernel_liteos_m/issues/I49FJF)
* 内核提供Interrupt框架,支持多架构多平台通用化 ([e8538d0](https://gitee.com/openharmony/kernel_liteos_m/commits/e8538d041a93817cea4ae3914afcfdc6182483e7))
* 内核提供tick timer框架,支持多架构多平台通用化 ([f635450](https://gitee.com/openharmony/kernel_liteos_m/commits/f635450d7cf7f674de3803b5eb9d759b6e4d005b)), closes [#I4N7XV](https://gitee.com/openharmony/kernel_liteos_m/issues/I4N7XV)
* 同步调度部分优化至liteos_m ([fb11ab1](https://gitee.com/openharmony/kernel_liteos_m/commits/fb11ab181e69289f7a2edfd5857595b89f1d5d67))
* 支持cortex-m55 ([6e17805](https://gitee.com/openharmony/kernel_liteos_m/commits/6e1780546c173365262c7a50b81896f5b3c46389)), closes [#I4Q9OQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I4Q9OQ)
* 支持Lms ([7b838e8](https://gitee.com/openharmony/kernel_liteos_m/commits/7b838e8a7b8e9f7fb34ca495e5cb46d70d12722b)), closes [#I4HYBG](https://gitee.com/openharmony/kernel_liteos_m/issues/I4HYBG)
* 支持posix 和 cmsis join能力 ([ecfdf7f](https://gitee.com/openharmony/kernel_liteos_m/commits/ecfdf7ff9bf1adf06835968dc6f06b7c45e04862)), closes [#I44V26](https://gitee.com/openharmony/kernel_liteos_m/issues/I44V26)
* 支持posix线程私有数据能力 ([a856303](https://gitee.com/openharmony/kernel_liteos_m/commits/a856303b9cdadcfade33de0d3a335db0332f5761)), closes [#I4ODEB](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ODEB)
* 支持pthread_condattr_setclock ([68dad2c](https://gitee.com/openharmony/kernel_liteos_m/commits/68dad2ccc9856dc2c1ac112bc8f30a703c1af5d9)), closes [#I4ETLN](https://gitee.com/openharmony/kernel_liteos_m/issues/I4ETLN)
* 支持pthread_mutex属性相关接口 ([d2be4d7](https://gitee.com/openharmony/kernel_liteos_m/commits/d2be4d7a460365844a7732df8a3eb59e6bb64897)), closes [#I4G4RQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I4G4RQ)
* 支持select.h的FD_SETSIZE宏配置 ([05642f0](https://gitee.com/openharmony/kernel_liteos_m/commits/05642f05ae6b220df977f4402bc31f396bf08603)), closes [#I4RYK4](https://gitee.com/openharmony/kernel_liteos_m/issues/I4RYK4)
* 支持任务栈可配置 ([96cc92d](https://gitee.com/openharmony/kernel_liteos_m/commits/96cc92d03561e1a9f1030c71916068584b349626))
* 调度、任务及pm解耦 ([cc8a794](https://gitee.com/openharmony/kernel_liteos_m/commits/cc8a794229f4236a1611183fd482740b3badbcd7)), closes [#I4JTN6](https://gitee.com/openharmony/kernel_liteos_m/issues/I4JTN6)
* 适配三方库FatFs升级至r0.14a版本 ([92ea355](https://gitee.com/openharmony/kernel_liteos_m/commits/92ea355756ebd92b8809ecb638ffb5355d89c5e9))
### BREAKING CHANGES
* pthread_create 支持任务栈设置
osThreadNew 支持任务栈设置
TSK_INIT_PARAM_S 结构体添加stackAddr 字段
* 涉及接口修改:
LOS_HwiCreate LOS_HwiDelete
改动内容:
中断处理函数参数类型由HWI_ARG_T统一改为HwiIrqParam,封装原有arg参数及riscv部分实际使用变量pDevId, 这样一方面统一LiteOS接口,也统一了中断处理函数的arg参数
同步LOS_HwiDelete接口入参,新增HWI_IRQ_PARAM_S *irqParam参数,为后续共享中断功能的添加预留
* 新增接口:
LOS_TaskResRecycle
LOS_CurrNanosec
LOS_MDelay
接口修改:
LOS_QueueCreate:第一个入参添加const修饰并增加一种异常情况处理
los_memory.c中 OS_ERROR 修改为LOS_NOK,重定义LOS_NOK为(UINT32-1。
接口位置转移:
LOS_UDelay 由los_task.h/.c 转移到los_tick.h/.c
宏修改:
LOS_ERRNO_MUX_PEND_INTERR 改名为 LOS_ERRNO_MUX_IN_INTERR
* **posix接口融合:**
接口修改:
calloc
pthread_mutex_init
mq_unlink
pthread_join
pthread_exit
pthread_attr_init
pthread_attr_destroy
pthread_condattr_destroy
pthread_cond_timedwait
pthread_mutexattr_init
pthread_mutexattr_settype
pthread_mutex_destroy
pthread_mutex_timedlock
pthread_mutex_trylockk
pthread_mutex_unlock
sem_getvalue
sem_timedwait
pthread_cond_timedwait
nanosleep
timer_create
timer_settime
timer_gettime
testStdlibStrtoull005
testStdlibStrtol011
testStdlibStrtoul007
testPthread004
新增接口:
CheckForCancel
pthread_setcancelstate
pthread_setcanceltype
pthread_once
pthread_setschedprio
pthread_attr_setstack
pthread_attr_getstack
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_condattr_getclock
pthread_mutexattr_gettype
CheckMutexAttr
OsMuxPreCheck
sem_trywait
MuxPendForPosix
MuxPostForPosix
增加overrun功能
接口变化:
mq_getsetattr 改为内部接口MqGetSetAttr
GetTickTimeFromNow->OsGetTickTimeFromNow
接口位置转移:
pthread_equal接口由newlib下转移到kal/posix/src/pthread.c中
* **posix:** 接口修改:
calloc
pthread_mutex_init
mq_unlink
pthread_join
pthread_exit
pthread_attr_init
pthread_attr_destroy
pthread_condattr_destroy
pthread_cond_timedwait
pthread_mutexattr_init
pthread_mutexattr_settype
pthread_mutex_destroy
pthread_mutex_timedlock
pthread_mutex_trylockk
pthread_mutex_unlock
sem_getvalue
新增接口:
CheckForCancel
pthread_setcancelstate
pthread_setcanceltype
pthread_once
pthread_setschedprio
pthread_attr_setstack
pthread_attr_getstack
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_condattr_getclock
pthread_mutexattr_gettype
CheckMutexAttr
OsMuxPreCheck
sem_trywait
接口变化:
mq_getsetattr 改为内部接口OsMqGetSetAttr
接口位置转移:
pthread_equal接口由newlib下转移到kal/posix/src/pthread.c中
* 新增接口:
LOS_HwiTrigger ArchIntTrigger
LOS_HwiEnable ArchIntEnable
LOS_HwiDisable ArchIntDisable
LOS_HwiClear ArchIntClear
LOS_HwiSetPriority ArchIntSetPriority
* Assembly implementation:
ArchAtomicRead
ArchAtomicSet
ArchAtomicAdd
ArchAtomicSub
ArchAtomicInc
ArchAtomicIncRet
ArchAtomicDec
ArchAtomicDecRet
* 原来版本中每个架构下提供的tick timer相关操作函数为弱函数:
WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler);
WEAK VOID HalSysTickReload(UINT64 nextResponseTime);
WEAK UINT64 HalGetTickCycle(UINT32 *period);
WEAK VOID HalTickLock(VOID);
WEAK VOID HalTickUnlock(VOID);
用户如果需要启用自己的tick timer需要自己实现相关接口(强属性),在 "内核初始化之前" 通过调用:
LOS_TickTimerRegister 接口替换系统默认提供的tick timer相关接口。
无论用户提供的tick timer 还是系统默认提供的,均在内核初始化时启动。
* int pthread_key_create(pthread_key_t *k, void (*dtor)(void *))
int pthread_key_delete(pthread_key_t k)
int pthread_setspecific(pthread_key_t k, const void *x)
void *pthread_getspecific(pthread_key_t k)
* 1.修改arch/include下接口,以ArchXX命名函数
2.提取公共函数声明:ArchAtomicXchg32bits、ArchAtomicDecRet、ArchAtomicCmpXchg32bits
3.新增部分原子操作c内联实现
* 增加低内存资源回收注册相关接口LOS_LmkOpsNodeRegister、LOS_LmkOpsNodeUnregister和内存资源释放和任务恢复接口LOS_LmkTasksKill和LOS_LmkTasksRestore.
* SwtmrHandlerItem结构体新增swtmrID字段,用于标识超时队列中软件定时器id
* 新增支持API:
LOS_LmsCheckPoolAdd使能检测指定内存池
LOS_LmsCheckPoolDel不检测指定内存池
LOS_LmsAddrProtect为指定内存段上锁,不允许访问
LOS_LmsAddrDisableProtect去能指定内存段的访问保护
# (2021-09-30)
### Bug Fixes
* M核代码告警清零 ([cb5f862](https://gitee.com/openharmony/kernel_liteos_m/commits/cb5f862eafd91675bf53d0320616cc8f707a6e5a)), closes [#I4386N](https://gitee.com/openharmony/kernel_liteos_m/issues/I4386N)
* M核告警消除 ([5a9d53b](https://gitee.com/openharmony/kernel_liteos_m/commits/5a9d53b6444a3bbe084f575ef079f0da36c27c2a)), closes [#I46LHG](https://gitee.com/openharmony/kernel_liteos_m/issues/I46LHG)
* M核编译配置修改 ([deff7c9](https://gitee.com/openharmony/kernel_liteos_m/commits/deff7c921f606ed85663f91d21c12163c15aa7f8)), closes [#I46XEA](https://gitee.com/openharmony/kernel_liteos_m/issues/I46XEA)
* shell模块task命令踩内存问题修改 ([b5e84d5](https://gitee.com/openharmony/kernel_liteos_m/commits/b5e84d5516b599257151f88b5a830d6fe9e0e188)), closes #II4
* trustzone 中断适配 ([15a2c17](https://gitee.com/openharmony/kernel_liteos_m/commits/15a2c17f791b7d6703863718d92fa35402c41067)), closes [#I42TFV](https://gitee.com/openharmony/kernel_liteos_m/issues/I42TFV)
* add API LOS_HwiCreate and LOS_HwDelete ([eb668eb](https://gitee.com/openharmony/kernel_liteos_m/commits/eb668eb9e0021961230858f9bfa1599646da9a8f)), closes [#I3R75F](https://gitee.com/openharmony/kernel_liteos_m/issues/I3R75F)
* add liteos_m vfs ([5479dd6](https://gitee.com/openharmony/kernel_liteos_m/commits/5479dd66d7ec96d2206a9890586fe5f07d50fbb9)), closes [#I3R493](https://gitee.com/openharmony/kernel_liteos_m/issues/I3R493)
* backtrace代码段判断函数定义成弱函数,如果有多个代码段,那么可根据实际情况重定义 ([8692ed3](https://gitee.com/openharmony/kernel_liteos_m/commits/8692ed33a3b975bac7aa5b6ce3c40a84e281f6c5)), closes [#I420PQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I420PQ)
* change cpup retval range ([d00a35b](https://gitee.com/openharmony/kernel_liteos_m/commits/d00a35ba9288047e9eaba06a8ed1d15806bfca40))
* change description according to review ([a38365e](https://gitee.com/openharmony/kernel_liteos_m/commits/a38365ed097fb398f922a5d1a72305933ae3e7b3))
* change queuePosion to queuePosition ([e772ccb](https://gitee.com/openharmony/kernel_liteos_m/commits/e772ccb3ccd3b31269066fa59a434a23af98ce51))
* change to OpenHarmony LiteOS-M ([259fb54](https://gitee.com/openharmony/kernel_liteos_m/commits/259fb54b3c1a208c5672f1f6551ba0424505e4b2))
* comment error ([a37b73d](https://gitee.com/openharmony/kernel_liteos_m/commits/a37b73d7599a62a728dbf564de9d9927f995ec1b))
* compile warning fix ([8dea15c](https://gitee.com/openharmony/kernel_liteos_m/commits/8dea15c4fcaff2957c60351781180f964c0a882d)), closes #I4330
* compile warnings ([75f6187](https://gitee.com/openharmony/kernel_liteos_m/commits/75f61870a002e238385bc9a7632d42b0b2488c9a)), closes [#I3Y57X](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y57X)
* correct ECB in comment ([e2aeb1f](https://gitee.com/openharmony/kernel_liteos_m/commits/e2aeb1ff1d4cd54a752c9f6ef976ee8e353da620))
* correct spelling ([dd5cefb](https://gitee.com/openharmony/kernel_liteos_m/commits/dd5cefb0dace4b7a7276c880e45d5520950e9844))
* correct spelling ([e7ea50f](https://gitee.com/openharmony/kernel_liteos_m/commits/e7ea50f13142e34a9860e75be051538fe91e234e))
* correct the counter of exception type ([bff6587](https://gitee.com/openharmony/kernel_liteos_m/commits/bff65877a281ac1cdcbefd325dcd3ad4933edac9))
* correct typo ([3ceface](https://gitee.com/openharmony/kernel_liteos_m/commits/3ceface13e1c15d107bc3c8460c17b9dd4c95e26))
* cpup funciton repair ([c842251](https://gitee.com/openharmony/kernel_liteos_m/commits/c842251bab7ea6365f2bee8ae880e6efb60f0c73))
* delete unused symbols for default config ([7ad3a22](https://gitee.com/openharmony/kernel_liteos_m/commits/7ad3a22b4d62c8b00876ff338c4ce8d1e3f3cbe2)), closes [#I45HN3](https://gitee.com/openharmony/kernel_liteos_m/issues/I45HN3)
* fix __cplusplus typo ([c3eb3e5](https://gitee.com/openharmony/kernel_liteos_m/commits/c3eb3e59e692371f67a4e21e4b38004195ce5e10))
* fix backtrace check issue ([b6664e6](https://gitee.com/openharmony/kernel_liteos_m/commits/b6664e66f14d432b02101c883a53cb333dc4c195))
* fix bad params def in HalTickStart ([4443b74](https://gitee.com/openharmony/kernel_liteos_m/commits/4443b74ea63d2e458af69723a7198bbbaeb856ea)), closes [#I48YWT](https://gitee.com/openharmony/kernel_liteos_m/issues/I48YWT)
* fix comment typo issue ([0c2a675](https://gitee.com/openharmony/kernel_liteos_m/commits/0c2a675e2d163eaf05aff7df226404888d78ca37))
* fix destroy typo ([4ba6259](https://gitee.com/openharmony/kernel_liteos_m/commits/4ba6259e94bd677764922b0470fddc2590f6efa5))
* fix function name ([f7d50d0](https://gitee.com/openharmony/kernel_liteos_m/commits/f7d50d0fbf53cdd352e94a387cf707083f1641bb))
* fix length typo ([98d6580](https://gitee.com/openharmony/kernel_liteos_m/commits/98d65801de9e37199b5df9c8734ebcb6ff5d853d))
* fix LOS_MEMBOX_ALIGNED macro name ([fced899](https://gitee.com/openharmony/kernel_liteos_m/commits/fced8992cf4fbc26c9722d528d642a7afe479170))
* fix LOS_TaskNameGet comment ([c70b28b](https://gitee.com/openharmony/kernel_liteos_m/commits/c70b28bf785da12fd60ecc92a5a63fb54e52c22a))
* fix macro typo ([1600360](https://gitee.com/openharmony/kernel_liteos_m/commits/16003604a948d081151ca4fcf0cfeea91c9e1960))
* fix misspell in comments ([4572814](https://gitee.com/openharmony/kernel_liteos_m/commits/457281427ba286e24386d7916c4bc81f112f1c60))
* fix NULL UNUSED redefined issue ([765bd55](https://gitee.com/openharmony/kernel_liteos_m/commits/765bd551990e906f457ec1145aea4f2bf5856547))
* fix OS_TASK_STACK_PROTECT_SIZE undeclared error ([2a5a515](https://gitee.com/openharmony/kernel_liteos_m/commits/2a5a515f50a0f344d416218046bf0880facfb97c)), closes [#I4C5RW](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C5RW)
* fix print format compilation warning ([ef12c89](https://gitee.com/openharmony/kernel_liteos_m/commits/ef12c89c7a79791665125a0b7391f9e533a06a0f))
* fix readme link issue ([9e332c6](https://gitee.com/openharmony/kernel_liteos_m/commits/9e332c69a5813027575786424b78f0ae2f9a4c5a))
* fix some typo issues ([f6b8cab](https://gitee.com/openharmony/kernel_liteos_m/commits/f6b8cab2539e4d1ee9e47ab8e3eb12f1630f7393))
* fix typo in comment ([811d3fa](https://gitee.com/openharmony/kernel_liteos_m/commits/811d3fae8a39686a1c66dfd61c897b7fd3fac2ac))
* fix typos ([191644e](https://gitee.com/openharmony/kernel_liteos_m/commits/191644e4412fccb7142cfcd34316ad8e2d24fcdf))
* Fixed a spelling error in FS_LOCK_TIMEOUT_SEC. ([42dc308](https://gitee.com/openharmony/kernel_liteos_m/commits/42dc3083693be13c5fa8f2ad8213245465e28adf)), closes [#I3TL66](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TL66)
* include file log_config.h in los_mpu.c ([1932d71](https://gitee.com/openharmony/kernel_liteos_m/commits/1932d714a589c9e87258d7c8ed647b6110bde543))
* L0 GN compilation problem ([2f9bfcc](https://gitee.com/openharmony/kernel_liteos_m/commits/2f9bfcc6ee436ee3568d0c8158a8e43c9ef02623)), closes [I3ORHS](https://gitee.com/openharmony/kernel_liteos_m/issues/I3ORHS)
* l0 shell adapt new master ([fd2227e](https://gitee.com/openharmony/kernel_liteos_m/commits/fd2227e5c858c840f63629c27e559580e1cbdf2f))
* littlefs inappropriate return value and errno ([452f364](https://gitee.com/openharmony/kernel_liteos_m/commits/452f36403dd4376572d8b52352d0d8129a4617e4)), closes [I3YIVT](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YIVT)
* littlefs三方源码采用GN编译修改上库 ([bdb614b](https://gitee.com/openharmony/kernel_liteos_m/commits/bdb614bc2b82011d77c7c8ffb95e415d2640d19d))
* LOS_QueueInfoGet函数统计等待读写任务有误 ([215a1f6](https://gitee.com/openharmony/kernel_liteos_m/commits/215a1f6dc06cf2348c5875f7b05193b26ec17dde)), closes [#I4C6P2](https://gitee.com/openharmony/kernel_liteos_m/issues/I4C6P2)
* los_swtmr.h不满足自包含要求对los_config.h存在依赖,但未包含los_config.h ([ad8e96a](https://gitee.com/openharmony/kernel_liteos_m/commits/ad8e96a00f2fcaebe57feae4e3f23f99d7f1d066)), closes [#I40DHM](https://gitee.com/openharmony/kernel_liteos_m/issues/I40DHM)
* **mbedtls:** mbedtls l0 support ([761b860](https://gitee.com/openharmony/kernel_liteos_m/commits/761b86096c3cf5642c95e556c11a45a3d5f413e4))
* misspell ([30578a6](https://gitee.com/openharmony/kernel_liteos_m/commits/30578a6a68a0d3a203b9a00e7bd1a946356d13d2))
* modify event API description ([9481f1d](https://gitee.com/openharmony/kernel_liteos_m/commits/9481f1d8406960b8b859cc5a84b3831eadaf040c))
* modify the return type of LOS_IntLock from UINTPTR to UINT32. ([bcc34e2](https://gitee.com/openharmony/kernel_liteos_m/commits/bcc34e22ede5aeccea63aba9f9ce3cb9aa92cbeb))
* modify type INLNIE ([294a6d2](https://gitee.com/openharmony/kernel_liteos_m/commits/294a6d246b6a1f7cba8ce1bc4eeb9ae11f17a003))
* Mutex锁释放后,无任务持有的情况下,owner未清空 ([c136cfd](https://gitee.com/openharmony/kernel_liteos_m/commits/c136cfdf973ae0068154606afa3a23858822c347)), closes [#I40OC8](https://gitee.com/openharmony/kernel_liteos_m/issues/I40OC8)
* M核littlefs当文件open失败时,需要回收fd,否则会有fd泄露 ([b458e12](https://gitee.com/openharmony/kernel_liteos_m/commits/b458e12ed54905db6667f9d5db1410f94a3d6c71)), closes [#I3XU6R](https://gitee.com/openharmony/kernel_liteos_m/issues/I3XU6R)
* m核上littlefs新增错误码功能 ([a062378](https://gitee.com/openharmony/kernel_liteos_m/commits/a06237863121816fa6421aed233446a3fa4e2665)), closes [#I3UVMQ](https://gitee.com/openharmony/kernel_liteos_m/issues/#I3UVMQ)
* net compile fix ([299813c](https://gitee.com/openharmony/kernel_liteos_m/commits/299813cdb43ae1e24200f0a6b006e04e4d4fcb05))
* open shell & fix qemu compile ([911a767](https://gitee.com/openharmony/kernel_liteos_m/commits/911a767992ee540a96ee9f67e0b87195656c3eab))
* ping cmd compile fail ([ae05de3](https://gitee.com/openharmony/kernel_liteos_m/commits/ae05de3ffda86d312d33b2e38f237dd76daf4949))
* protect from accssing NULL pointer, access g_handle after fslock ([bc7a914](https://gitee.com/openharmony/kernel_liteos_m/commits/bc7a914bce1b227a4f57265d5ecc3f82d78533e7)), closes [#I3UCX3](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UCX3)
* remove changelog in README ([37ef8ca](https://gitee.com/openharmony/kernel_liteos_m/commits/37ef8ca7ae73bf78f56dfef36c48bcd790afb6ff)), closes [#I3ZECY](https://gitee.com/openharmony/kernel_liteos_m/issues/I3ZECY)
* remove libsec_kernel ([1144b75](https://gitee.com/openharmony/kernel_liteos_m/commits/1144b75f3ff9ce9e8fa114cf614d3deade8ac7c2))
* remove project files ([4ad01ce](https://gitee.com/openharmony/kernel_liteos_m/commits/4ad01ced93684e5c7ba144ca267f8fcc2fe03105))
* remove targets project files ([f39da5a](https://gitee.com/openharmony/kernel_liteos_m/commits/f39da5a6da59a3b1291c6b9ef7c50e6185df5ea1))
* risc-v 锁中断在调度后失效 ([70f3aa1](https://gitee.com/openharmony/kernel_liteos_m/commits/70f3aa1c112e949d9af8e0245af5879140adefba)), closes [#I42OLJ](https://gitee.com/openharmony/kernel_liteos_m/issues/I42OLJ)
* riscv_nuclei 编译失败 ([d3fb23c](https://gitee.com/openharmony/kernel_liteos_m/commits/d3fb23cca06580b6e447a9476a9c16643c4ea8fe)), closes [#I41PQJ](https://gitee.com/openharmony/kernel_liteos_m/issues/I41PQJ)
* rollback resources when opendir failed ([82fad6c](https://gitee.com/openharmony/kernel_liteos_m/commits/82fad6c36f183de93d936dd2007b899c2932bcee)), closes [#I3Y577](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y577)
* Scheduling module code to join GN compilation. ([8bf166b](https://gitee.com/openharmony/kernel_liteos_m/commits/8bf166b418ce1a6c027dc304d45fc9431923764c)), closes [#I3OA95](https://gitee.com/openharmony/kernel_liteos_m/issues/I3OA95)
* The hook module fails to compile under the c99 compilation standard. ([a078c30](https://gitee.com/openharmony/kernel_liteos_m/commits/a078c3086fa47e05e3ffdc4e94ca202284a1487b)), closes [#I3S4ME](https://gitee.com/openharmony/kernel_liteos_m/issues/I3S4ME)
* tick 动态化计算优化,减小中断执行时间对系统总体时间的影响,保证软件定时器的响应精度。 ([2118c84](https://gitee.com/openharmony/kernel_liteos_m/commits/2118c84616cce5b5d4569d5a82a4d5de02af1e1c)), closes [#I3YGP1](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YGP1)
* timer qemu 头文件缺失 ([12fed74](https://gitee.com/openharmony/kernel_liteos_m/commits/12fed747226c377c656b8acb8346154627845b6f))
* update according to review comments ([4dc0d31](https://gitee.com/openharmony/kernel_liteos_m/commits/4dc0d313d1b4a39ebb62156d0bb6429ebb8b996d))
* update arch_spec.md ([cf43988](https://gitee.com/openharmony/kernel_liteos_m/commits/cf439885234e0955bab09834b3b876d627c81605))
* update doc usage ([5c19fd4](https://gitee.com/openharmony/kernel_liteos_m/commits/5c19fd4beca15a8b7faad847a13943a9abfe3c8c))
* update document description ([954c2fc](https://gitee.com/openharmony/kernel_liteos_m/commits/954c2fcfb531d0da1dcc6354a0c0b14335566ed7))
* update macro to config item ([be57ece](https://gitee.com/openharmony/kernel_liteos_m/commits/be57ece9ce6200c8868164bc0bb2f26e3062cd37))
* 以g_sysSchedStartTime是否为0判断时间轴是否生效存在极限场景导致调度时间不生效 ([509cf59](https://gitee.com/openharmony/kernel_liteos_m/commits/509cf59befb40839a376be31958d615f066c66fd)), closes [#I45HP5](https://gitee.com/openharmony/kernel_liteos_m/issues/I45HP5)
* 修复littlefs的多分区挂载时,对pathname的处理逻辑异常 ([b55cfc1](https://gitee.com/openharmony/kernel_liteos_m/commits/b55cfc1ba7fc470b876c555ac7d3be0aa1d3d363)), closes [#I3WWFA](https://gitee.com/openharmony/kernel_liteos_m/issues/I3WWFA)
* 修复littlefs编译fs.c缺少头文件件依赖配置+若干musl库的缺失问题+多分区规格宏配置问题 ([7259289](https://gitee.com/openharmony/kernel_liteos_m/commits/7259289bd98a743f596060bc607f77ab8f149129)), closes [#I3VT11](https://gitee.com/openharmony/kernel_liteos_m/issues/I3VT11)
* 修复M核littlefs GN编译的若干错误 ([d77828e](https://gitee.com/openharmony/kernel_liteos_m/commits/d77828e206f3324424c3b1372332828a0afb84c2))
* 修复M核上musl库缺失strdup,c的问题 ([139f83a](https://gitee.com/openharmony/kernel_liteos_m/commits/139f83af391a4f5e64ab0fccbd783dd651b87e6a)), closes [#I3VZSI](https://gitee.com/openharmony/kernel_liteos_m/issues/I3VZSI)
* 修复QUEUE_INFO_S中waitReadTask无法保存大于32的任务编号 ([704cca9](https://gitee.com/openharmony/kernel_liteos_m/commits/704cca97b17972d1640fd33b1fa0b5917bb92b19)), closes [#I41N78](https://gitee.com/openharmony/kernel_liteos_m/issues/I41N78)
* 修复task命令格式错误,增加copyright ([ad15bbd](https://gitee.com/openharmony/kernel_liteos_m/commits/ad15bbd6a4d298aabc05b26d7838de6425dbc5c5))
* 修复timer_settime只设置第一次到期时间时,到期时间不准的缺陷 ([a5f4e37](https://gitee.com/openharmony/kernel_liteos_m/commits/a5f4e37e535bff39a333c469e2f1bf1817216fe8)), closes [#I3TCHA](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TCHA)
* 修复timer_settime只设置第一次到期时间时,到期时间不准的缺陷 ([e4b5d4e](https://gitee.com/openharmony/kernel_liteos_m/commits/e4b5d4ebe9677d49d490fe74e5ac33c4a29435a2)), closes [#I3TCHA](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TCHA)
* 修复不规范的copyright ([2d9bbd2](https://gitee.com/openharmony/kernel_liteos_m/commits/2d9bbd2769e71e7b464bd22fc335999dd8000682)), closes [#I3SPJ1](https://gitee.com/openharmony/kernel_liteos_m/issues/I3SPJ1)
* 修复中断操作接口头文件位置变更,导致的编译错误 ([013a953](https://gitee.com/openharmony/kernel_liteos_m/commits/013a953926ca7cefd8a2f7c74d23c36c49765b59)), closes [#I4665Z](https://gitee.com/openharmony/kernel_liteos_m/issues/I4665Z)
* 修复文档链接失效问题 ([5d53c84](https://gitee.com/openharmony/kernel_liteos_m/commits/5d53c848124319a95f509b56ba001357c6dd8b05)), closes [#I4529I](https://gitee.com/openharmony/kernel_liteos_m/issues/I4529I)
* 内核模块编译增加-Werror编译选项,且清除内核编译告警 ([3798091](https://gitee.com/openharmony/kernel_liteos_m/commits/3798091d87441ea445ec642de57e036dbbc8370e)), closes [#I46E6S](https://gitee.com/openharmony/kernel_liteos_m/issues/I46E6S)
* 删除MQ内冗余的重复宏定义 ([6d72916](https://gitee.com/openharmony/kernel_liteos_m/commits/6d7291660ad04682f05850876f81dfd0cba8ea6b)), closes [#I3U5QQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I3U5QQ)
* 删除延时节点后,存在时间无法有效刷新的场景 ([0a87c04](https://gitee.com/openharmony/kernel_liteos_m/commits/0a87c04d58d11da2082470698de0760d72259533)), closes [#I45I9Y](https://gitee.com/openharmony/kernel_liteos_m/issues/I45I9Y)
* 在内核初始化前期启动tick timer ([b3841ed](https://gitee.com/openharmony/kernel_liteos_m/commits/b3841ed1ddbfb3359c7a0ceca04fc0f645d440c3)), closes [#I410F0](https://gitee.com/openharmony/kernel_liteos_m/issues/I410F0)
* 增加MPU功能的开关宏,默认关闭 ([9709d29](https://gitee.com/openharmony/kernel_liteos_m/commits/9709d29b87a3888412ffda586e16eba86adccfe7)), closes [#I3WE0S](https://gitee.com/openharmony/kernel_liteos_m/issues/I3WE0S)
* 宏LOSCFG_SUPPORT_FATFS在fs.c中存在使用问题,导致无fatfs的情况下,编译出错 ([c1614ce](https://gitee.com/openharmony/kernel_liteos_m/commits/c1614ce2b4d4dfcda9532cbeeff25ad7a6558196)), closes [#I44XNR](https://gitee.com/openharmony/kernel_liteos_m/issues/I44XNR)
* 延时队列为NULL时,返回的响应时间为64位最大值,导致无法更新tick timer的响应周期 ([bcec32e](https://gitee.com/openharmony/kernel_liteos_m/commits/bcec32e389634097102a203ee7e937ed3193c984)), closes [#I3W1LF](https://gitee.com/openharmony/kernel_liteos_m/issues/I3W1LF)
* 支持smoke 测试用例 ([3ad5942](https://gitee.com/openharmony/kernel_liteos_m/commits/3ad5942301a1094a2c6b6ffee280cf09cfdb2a88)), closes [#I424RX](https://gitee.com/openharmony/kernel_liteos_m/issues/I424RX)
* 新增函数regcomp,regfree和regexec支持 ([86d5544](https://gitee.com/openharmony/kernel_liteos_m/commits/86d5544a3fd5f41f7f2abe3b143e9f1dc9b430f8)), closes [#I3U9LE](https://gitee.com/openharmony/kernel_liteos_m/issues/I3U9LE)
* 清理残留无效的trace代码 ([3c48951](https://gitee.com/openharmony/kernel_liteos_m/commits/3c489518576583ab6bf0d581810ef0a02b6ccd51)), closes [#I3ZMB4](https://gitee.com/openharmony/kernel_liteos_m/issues/I3ZMB4)
* 解决arm9编译冲突问题 ([c1a6245](https://gitee.com/openharmony/kernel_liteos_m/commits/c1a624536887fef44fed37134638bf40191b9aae)), closes [#I420PQ](https://gitee.com/openharmony/kernel_liteos_m/issues/I420PQ)
* 调度过程低概率触发OsSchedTaskEnQueue断言,导致系统异常 ([e5e9289](https://gitee.com/openharmony/kernel_liteos_m/commits/e5e9289a08cf1db71c09647b71a864f5a1f8a4a2)), closes [#I3VX9Y](https://gitee.com/openharmony/kernel_liteos_m/issues/I3VX9Y)
* 调整hook类型和位置,方便调试 ([369320d](https://gitee.com/openharmony/kernel_liteos_m/commits/369320de3710486f252c55c522e8c06e19541b77)), closes [#I3TGZS](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TGZS)
### Features
* add cmsis ThreadFlags support ([cea551e](https://gitee.com/openharmony/kernel_liteos_m/commits/cea551e99ea0da8eefbaa826de2f68813252fb83))
* add deps to musl and securec ([bfa25fc](https://gitee.com/openharmony/kernel_liteos_m/commits/bfa25fcaa355c28a6139f683c4453f677e23abd7))
* add file type support for LfsStat ([ceaed2d](https://gitee.com/openharmony/kernel_liteos_m/commits/ceaed2dc86de2ed242aab4dd02c1f34e064583b3)), closes [#I3ZCDR](https://gitee.com/openharmony/kernel_liteos_m/issues/I3ZCDR)
* add interface of dhcp_is_bound ([84a180d](https://gitee.com/openharmony/kernel_liteos_m/commits/84a180d585686cda693bf8c6ed6b86f7c5dd5eee)), closes [#I46W08](https://gitee.com/openharmony/kernel_liteos_m/issues/I46W08)
* add L0 shell function ([97283b7](https://gitee.com/openharmony/kernel_liteos_m/commits/97283b7c5dd44b266e94fcf0f5d21e63ee1ec7e0))
* add LOS_ListHeadInsert function ([430b186](https://gitee.com/openharmony/kernel_liteos_m/commits/430b186be7ec1554a29a6d509188eb877d796a7e)), closes [#I3TAQA](https://gitee.com/openharmony/kernel_liteos_m/issues/I3TAQA)
* **kernel:** 补充获取最高、最低优先级接口 ([c24c38b](https://gitee.com/openharmony/kernel_liteos_m/commits/c24c38b084c13a2cdc5616f88bb5f63153600c28)), closes [#I42HM7](https://gitee.com/openharmony/kernel_liteos_m/issues/I42HM7)
* L0 armquem 剥离工具链 ([67d7455](https://gitee.com/openharmony/kernel_liteos_m/commits/67d74559d1bb3820bd51da2e2bf43e41e1224314))
* L0 支持Trace ([56c93a6](https://gitee.com/openharmony/kernel_liteos_m/commits/56c93a641b3c7a3d1ef9293ee3c95cccb559191f)), closes [#I41Y9Y](https://gitee.com/openharmony/kernel_liteos_m/issues/I41Y9Y)
* L0 支持低功耗框架 ([558ce14](https://gitee.com/openharmony/kernel_liteos_m/commits/558ce14becab05102497afca90a43d89abaf5531)), closes [#I3UDNV](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UDNV)
* L0 测试用例支持risc-v qemu 编译运行 ([2dd6c08](https://gitee.com/openharmony/kernel_liteos_m/commits/2dd6c080daab52eaf61e5eefe7b581190670e8a7)), closes [#I3YILG](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YILG)
* **liteos_m:** support backtrace for riscv ([ca1792a](https://gitee.com/openharmony/kernel_liteos_m/commits/ca1792aa4b5a85ca4ea6e41b265858c6b24a6897)), closes [#I3RVXY](https://gitee.com/openharmony/kernel_liteos_m/issues/I3RVXY)
* los_memory.c代码重复率处理 ([475db62](https://gitee.com/openharmony/kernel_liteos_m/commits/475db62db1ac285fc6cab91f09af618870269580)), closes [#I44WNU](https://gitee.com/openharmony/kernel_liteos_m/issues/I44WNU)
* M33平台支持GCC环境的Trustzone ([d469da2](https://gitee.com/openharmony/kernel_liteos_m/commits/d469da29c6d316640eaa7865f98ad8d6e2eb6d44)), closes [#I3Y85I](https://gitee.com/openharmony/kernel_liteos_m/issues/I3Y85I)
* provide getifaddrs for liteos_m ([948501a](https://gitee.com/openharmony/kernel_liteos_m/commits/948501ac73e7887f4585eca156ad760acc2a3b1f)), closes [#I400S5](https://gitee.com/openharmony/kernel_liteos_m/issues/I400S5)
* risc-v gn 编译框架添加汇编编译选项 ([76dc343](https://gitee.com/openharmony/kernel_liteos_m/commits/76dc343c888ec4e65eba43feb49921111b144640)), closes [#I3YS5Y](https://gitee.com/openharmony/kernel_liteos_m/issues/I3YS5Y)
* Support arm9 ([6d7c9df](https://gitee.com/openharmony/kernel_liteos_m/commits/6d7c9dfe597affb260e8bd74fa606b6d68c2b49a)), closes [#I3WLCN](https://gitee.com/openharmony/kernel_liteos_m/issues/I3WLCN)
* Support arm9 fiq swi mode and using system mode. ([97b5b08](https://gitee.com/openharmony/kernel_liteos_m/commits/97b5b0837be4b8df1381af29a6f650f243322840)), closes [#I3WLCN](https://gitee.com/openharmony/kernel_liteos_m/issues/I3WLCN)
* support non-continuous memory regions ([0facb0c](https://gitee.com/openharmony/kernel_liteos_m/commits/0facb0c0179f29a08b037655bbe691c98384dc84)), closes [#I43XOP](https://gitee.com/openharmony/kernel_liteos_m/issues/I43XOP)
* 完善m核qemu串口驱动,支持shell输入 ([c4dc5ab](https://gitee.com/openharmony/kernel_liteos_m/commits/c4dc5ab0f8b5caae55efdbedf59ab07f5006f6c2)), closes [#I46N7F](https://gitee.com/openharmony/kernel_liteos_m/issues/I46N7F)
* 按任务统计已经alloc的内存大小 ([53117f9](https://gitee.com/openharmony/kernel_liteos_m/commits/53117f9f47a8dd3023e83dc0cc0de224eab9719f)), closes [#I44WNU](https://gitee.com/openharmony/kernel_liteos_m/issues/I44WNU)
* 支持native动态加载组件 ([d753834](https://gitee.com/openharmony/kernel_liteos_m/commits/d75383400efe5d9ca0ae4093e4f2e65fee03024b)), closes [#I418HJ](https://gitee.com/openharmony/kernel_liteos_m/issues/I418HJ)
* 新增LOSCFG_BASE_CORE_TSK_SWITCH_HOOK 宏定义配置 ([39efd6f](https://gitee.com/openharmony/kernel_liteos_m/commits/39efd6fb30ee7dc9159811f5d37dffcdfe81bae0)), closes [#I40Q9O](https://gitee.com/openharmony/kernel_liteos_m/issues/I40Q9O)
* 新增ROM/RAM分析工具 ([ee3403d](https://gitee.com/openharmony/kernel_liteos_m/commits/ee3403deaf24dc612b51354f31f795fb0b9a49b5))
* 补充fs相关函数用例 ([2a95af5](https://gitee.com/openharmony/kernel_liteos_m/commits/2a95af5bf1b412de27b4518d0abf7c335366d4d7)), closes [#I3UQ4F](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UQ4F)
* 解决fclose等函数工具链重定义问题 ([b244ad4](https://gitee.com/openharmony/kernel_liteos_m/commits/b244ad4ad0da8d151b69071fdd6db808c91f85a5)), closes [#I3UG6O](https://gitee.com/openharmony/kernel_liteos_m/issues/I3UG6O)
### BREAKING CHANGES
* 新增4个对外接口,声明在los_dynlink.h文件中,分别为:
(1) LOS_DynlinkInit: 动态加载模块初始化。
(2) LOS_SoLoad: 加载指定路径的共享库。
(3) LOS_FindSym: 根据共享库句柄查找指定符号。
(4) LOS_SoUnload: 卸载共享库。
* 1.新增一系列trace的对外API,位于los_trace.h中.
LOS_TRACE_EASY简易插桩
LOS_TRACE标准插桩
LOS_TraceInit配置Trace缓冲区的地址和大小
LOS_TraceStart开启事件记录
LOS_TraceStop停止事件记录
LOS_TraceRecordDump输出Trace缓冲区数据
LOS_TraceRecordGet获取Trace缓冲区的首地址
LOS_TraceReset清除Trace缓冲区中的事件
LOS_TraceEventMaskSet设置事件掩码,仅记录某些模块的事件
LOS_TraceHwiFilterHookReg注册过滤特定中断号事件的钩子函数
* 1.原调度中基于tick timer的低功耗扩展和当前的pm模块合并,删除原对外接口LOS_SchedSleepInit,
 变为pm模块统一提供的LOS_PmRegistered接口.
2.原来在arch los_timer.h下提供的低功耗模式为枚举LOS_SysSleepEnum,其中OS_SYS_NORMAL_SLEEP
和OS_SYS_DEEP_SLEEP不符合对外定义,统一修改为LOS_SYS_NORMAL_SLEEP和LOS_SYS_DEEP_SLEEP,
并移至los_pm.h中.
3.VOID HalEnterSleep(LOS_SysSleepEnum sleep) 变更为UINT32 HalEnterSleep(VOID).
+17 -1
View File
@@ -335,6 +335,14 @@ config KERNEL_PM
Configuration item for low power frame tailoring. Configuration item for low power frame tailoring.
If you wish to build LiteOS with support for power management. If you wish to build LiteOS with support for power management.
config KERNEL_PM_IDLE
bool "Enable Power Management Idle"
default n
depends on KERNEL_PM
help
Configuration item for low power frame tailoring.
If you wish to build LiteOS with support for power management idle.
config KERNEL_PM_TASK_PTIORITY config KERNEL_PM_TASK_PTIORITY
int "Power Management Task Priority" int "Power Management Task Priority"
default 1 default 1
@@ -513,6 +521,14 @@ config DEBUG_QUEUE
help help
Answer Y to enable debug queue. Answer Y to enable debug queue.
config MUTEX_CREATE_TRACE
bool "Enable Mutex Trace Debugging"
default n
depends on ARCH_ARM
depends on DEBUG_KERNEL
help
Answer Y to enable debug mutex trace.
config DEBUG_DEADLOCK config DEBUG_DEADLOCK
bool "Enable Mutex Deadlock Debugging" bool "Enable Mutex Deadlock Debugging"
default n default n
@@ -601,7 +617,7 @@ config VM_OVERLAP_CHECK
depends on DEBUG_VERSION && MEM_DEBUG depends on DEBUG_VERSION && MEM_DEBUG
help help
Answer Y to enable vm overlap check. Answer Y to enable vm overlap check.
config TASK_MEM_USED config TASK_MEM_USED
bool "Enable show task mem used or not" bool "Enable show task mem used or not"
default n default n
+4 -6
View File
@@ -78,7 +78,7 @@ The OpenHarmony LiteOS-M kernel build system is a modular build system based on
### Setting Up the Environment ### Setting Up the Environment
Before setting up the environment for a development board, you must set up the basic system environment for OpenHarmony first. The basic system environment includes the OpenHarmony build environment and development environment. For details, see [Setting Up Development Environment](https://gitee.com/openharmony/docs/blob/HEAD/en/device-dev/quick-start/quickstart-lite-env-setup.md). Before setting up the environment for a development board, you must set up the basic system environment for OpenHarmony first. The basic system environment includes the OpenHarmony build environment and development environment. For details, see [Setting Up Development Environment](https://gitee.com/openharmony/docs/blob/master/en/device-dev/quick-start/Readme-EN.md).
### Obtaining the OpenHarmony Source Code ### Obtaining the OpenHarmony Source Code
@@ -108,7 +108,7 @@ The LiteOS-M kernel porting projects for specific development boards are provide
## Contribution<a name="section1371123476307"></a> ## Contribution<a name="section1371123476307"></a>
[How to involve](https://gitee.com/openharmony/docs/blob/HEAD/en/contribute/contribution.md) [How to involve](https://gitee.com/openharmony/docs/blob/master/en/contribute/how-to-contribute.md)
[Commit message spec](https://gitee.com/openharmony/kernel_liteos_m/wikis/Commit%20message%E8%A7%84%E8%8C%83) [Commit message spec](https://gitee.com/openharmony/kernel_liteos_m/wikis/Commit%20message%E8%A7%84%E8%8C%83)
@@ -116,12 +116,10 @@ The LiteOS-M kernel porting projects for specific development boards are provide
How to contribute a chip based on Liteos-M kernel: How to contribute a chip based on Liteos-M kernel:
[ Board-Level Directory Specifications](https://gitee.com/openharmony/docs/blob/HEAD/en/device-dev/porting/porting-chip-board-overview.md) [Mini System SoC Porting Guide](https://gitee.com/openharmony/docs/blob/master/en/device-dev/porting/Readme-EN.md)
[Mini System SoC Porting Guide](https://gitee.com/openharmony/docs/blob/HEAD/en/device-dev/porting/porting-minichip.md)
## Repositories Involved<a name="section1371113476307"></a> ## Repositories Involved<a name="section1371113476307"></a>
[Kernel Subsystem](https://gitee.com/openharmony/docs/blob/HEAD/en/readme/kernel-subsystem.md) [Kernel Subsystem](https://gitee.com/openharmony/docs/blob/master/en/readme/kernel.md)
[kernel\_liteos\_m](https://gitee.com/openharmony/kernel_liteos_m/blob/master/README.md) [kernel\_liteos\_m](https://gitee.com/openharmony/kernel_liteos_m/blob/master/README.md)
+3 -7
View File
@@ -11,7 +11,7 @@
OpenHarmony LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无关层,硬件相关层提供统一的HALHardware Abstraction Layer)接口,提升硬件易适配性,不同编译工具链和芯片架构的组合分类,满足AIoT类型丰富的硬件和编译工具链的拓展。其架构图如图1所示: OpenHarmony LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无关层,硬件相关层提供统一的HALHardware Abstraction Layer)接口,提升硬件易适配性,不同编译工具链和芯片架构的组合分类,满足AIoT类型丰富的硬件和编译工具链的拓展。其架构图如图1所示:
**图 1** OpenHarmony LiteOS-M核内核架构图<a name="fig0865152210223"></a> **图 1** OpenHarmony LiteOS-M核内核架构图<a name="fig0865152210223"></a>
![](figures/OpenHarmony-LiteOS-M核内核架构图.png "OpenHarmony-LiteOS-M核内核架构图") ![](figures/OpenHarmony-LiteOS-M核内核架构图.png "OpenHarmony-LiteOS-M核内核架构图")
## 目录<a name="section161941989596"></a> ## 目录<a name="section161941989596"></a>
@@ -77,7 +77,7 @@ LiteOS-M内核的编译构建系统是一个基于gn和ninja的组件化构建
### 搭建系统基础环境 ### 搭建系统基础环境
在搭建各个开发板环境前,需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境,详细介绍请参考官方站点[开发环境准备](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md)。开发者需要根据环境搭建文档完成环境搭建。 在搭建各个开发板环境前,需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境,详细介绍请参考官方站点[开发环境准备](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/Readme-CN.md)。开发者需要根据环境搭建文档完成环境搭建。
### 获取OpenHarmony源码 ### 获取OpenHarmony源码
@@ -115,11 +115,7 @@ LiteOS-M内核移植的具体开发板的工程由社区开发者提供,可以
如何基于Liteos-M内核贡献一款芯片: 如何基于Liteos-M内核贡献一款芯片:
[板级目录规范](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/device-dev/porting/porting-chip-board-overview.md) [轻量系统芯片移植指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/Readme-CN.md)
[轻量系统芯片移植指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/porting-minichip.md)
[轻量系统芯片移植案例](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/porting/porting-minichip-cases.md)
## 相关仓<a name="section1371113476307"></a> ## 相关仓<a name="section1371113476307"></a>
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -27,13 +27,21 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if LIBC_MUSL import("//kernel/liteos_m/liteos.gni")
config LIBC_MUSL_FS module_name = "arch"
bool "Enable POSIX file system API support" kernel_module(module_name) {
default y sources = [
depends on FS_VFS "los_context.c",
help "los_dispatch.S",
This enables POSIX style file system related APIs. "los_exc.S",
"los_interrupt.c",
"los_mpu.c",
"los_timer.c",
]
configs += [ "$LITEOSTOPDIR:warn_config" ]
}
endif # LIBC_MUSL config("public") {
include_dirs = [ "." ]
}
+17 -1
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -62,6 +62,14 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
__asm("mrs %0, msp" : "=r" (msp)); __asm("mrs %0, msp" : "=r" (msp));
return msp; return msp;
} }
#define ARCH_LR_GET() \
({ \
UINTPTR lr; \
__asm("mov %0, lr" : "=r" (lr)); \
(lr); \
})
#define ArchLRGet ARCH_LR_GET
#elif defined(__CLANG_ARM) || defined(__GNUC__) #elif defined(__CLANG_ARM) || defined(__GNUC__)
STATIC INLINE UINTPTR ArchSpGet(VOID) STATIC INLINE UINTPTR ArchSpGet(VOID)
{ {
@@ -83,6 +91,14 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
__asm volatile("mrs %0, msp" : "=r" (msp)); __asm volatile("mrs %0, msp" : "=r" (msp));
return msp; return msp;
} }
#define ARCH_LR_GET() \
({ \
UINTPTR lr; \
__asm volatile("mov %0, lr" : "=r" (lr)); \
(lr); \
})
#define ArchLRGet ARCH_LR_GET
#else #else
/* Other platforms to be improved */ /* Other platforms to be improved */
#endif #endif
+4 -2
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -63,6 +63,9 @@
#define RISCV_MIE_MEIE 0x000000800 #define RISCV_MIE_MEIE 0x000000800
/************************** mcause ***********************/ /************************** mcause ***********************/
#ifndef MCAUSE_INT_ID_MASK
#define MCAUSE_INT_ID_MASK 0x7FFFFFF
#endif
#define RISCV_MCAUSE_ECALL_U 8 #define RISCV_MCAUSE_ECALL_U 8
#define RISCV_USER_SOFT_IRQ 0 #define RISCV_USER_SOFT_IRQ 0
@@ -72,7 +75,6 @@
#define RISCV_USER_EXT_IRQ 8 #define RISCV_USER_EXT_IRQ 8
#define RISCV_MACH_EXT_IRQ 11 #define RISCV_MACH_EXT_IRQ 11
#define READ_CSR(reg) ({ \ #define READ_CSR(reg) ({ \
UINT32 _tmp; \ UINT32 _tmp; \
__asm__ volatile("csrr %0, " #reg : "=r"(_tmp) : : "memory"); \ __asm__ volatile("csrr %0, " #reg : "=r"(_tmp) : : "memory"); \
+5 -1
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -43,6 +43,10 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 0)
#error "LOSCFG_PLATFORM_HWI_WITH_ARG must be set to 1 !!!"
#endif
/** /**
* @ingroup los_arch_interrupt * @ingroup los_arch_interrupt
* Define the type of a hardware interrupt vector table function. * Define the type of a hardware interrupt vector table function.
+2 -2
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -35,7 +35,7 @@
#include "los_task.h" #include "los_task.h"
#include "los_sched.h" #include "los_sched.h"
#include "los_memory.h" #include "los_memory.h"
#include "soc.h" #include "soc_common.h"
STATIC UINT32 g_sysNeedSched = FALSE; STATIC UINT32 g_sysNeedSched = FALSE;
+2 -2
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -29,7 +29,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "soc.h" #include "soc_common.h"
.global HalEnableIRQ .global HalEnableIRQ
.global HalDisableIRQ .global HalDisableIRQ
+3 -4
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -31,7 +31,7 @@
#ifndef _LOS_EXC_S #ifndef _LOS_EXC_S
#define _LOS_EXC_S #define _LOS_EXC_S
#include "soc.h" #include "soc_common.h"
.macro PUSH_CALLER_REG .macro PUSH_CALLER_REG
addi sp, sp, -(32 * REGBYTES) addi sp, sp, -(32 * REGBYTES)
@@ -139,8 +139,7 @@ HalTrapEntry:
sw a0, 0 * REGBYTES(sp) sw a0, 0 * REGBYTES(sp)
csrr t0, mtval csrr t0, mtval
sw t0, 1 * REGBYTES(sp) sw t0, 1 * REGBYTES(sp)
csrr t0, medeleg sw zero, 2 * REGBYTES(sp)
sw t0, 2 * REGBYTES(sp)
sw gp, 3 * REGBYTES(sp) sw gp, 3 * REGBYTES(sp)
mv a0, sp mv a0, sp
csrw mscratch, sp csrw mscratch, sp
+9 -3
View File
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2020, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -167,6 +167,7 @@ LITE_OS_SEC_TEXT UINT32 ArchHwiCreate(HWI_HANDLE_T hwiNum,
HWI_PROC_FUNC hwiHandler, HWI_PROC_FUNC hwiHandler,
HwiIrqParam *irqParam) HwiIrqParam *irqParam)
{ {
(VOID)hwiMode;
UINT32 intSave; UINT32 intSave;
if (hwiHandler == NULL) { if (hwiHandler == NULL) {
@@ -283,7 +284,7 @@ STATIC VOID ExcInfoDisplayContext(const LosExcInfo *exc)
ExcBackTrace(taskContext->s0); ExcBackTrace(taskContext->s0);
} }
STATIC VOID ExcInfoDisplay(const LosExcContext *excBufAddr) STATIC VOID ExcInfoDisplay(VOID)
{ {
PRINTK("\nException Information \n"); PRINTK("\nException Information \n");
@@ -305,6 +306,11 @@ STATIC VOID ExcInfoDisplay(const LosExcContext *excBufAddr)
WEAK UINT32 HalUnalignedAccessFix(UINTPTR mcause, UINTPTR mepc, UINTPTR mtval, VOID *sp) WEAK UINT32 HalUnalignedAccessFix(UINTPTR mcause, UINTPTR mepc, UINTPTR mtval, VOID *sp)
{ {
(VOID)mcause;
(VOID)mepc;
(VOID)mtval;
(VOID)sp;
/* Unaligned access fixes are not supported by default */ /* Unaligned access fixes are not supported by default */
PRINTK("Unaligned access fixes are not supported by default!\n"); PRINTK("Unaligned access fixes are not supported by default!\n");
return LOS_NOK; return LOS_NOK;
@@ -329,7 +335,7 @@ VOID HalExcEntry(const LosExcContext *excBufAddr)
} }
} }
ExcInfoDisplay(excBufAddr); ExcInfoDisplay();
if (LOS_TaskIsRunning()) { if (LOS_TaskIsRunning()) {
PRINTK("----------------All Task information ------------\n"); PRINTK("----------------All Task information ------------\n");
+2 -2
View File
@@ -28,7 +28,7 @@
"name": "liteos_m", "name": "liteos_m",
"subsystem": "kernel", "subsystem": "kernel",
"syscap": [ "syscap": [
"SystemCapability.Kernel.liteos-m" "SystemCapability.Kernel.Liteos-M"
], ],
"features": [], "features": [],
"adapted_system_type": [ "adapted_system_type": [
@@ -58,4 +58,4 @@
"test": [] "test": []
} }
} }
} }
+1 -1
View File
@@ -43,7 +43,7 @@
judgment condition to support multiple code sections. */ judgment condition to support multiple code sections. */
WEAK BOOL OsStackDataIsCodeAddr(UINTPTR value) WEAK BOOL OsStackDataIsCodeAddr(UINTPTR value)
{ {
if ((value >= CODE_START_ADDR) && (value < CODE_END_ADDR)) { if ((value > CODE_START_ADDR) && (value < CODE_END_ADDR)) {
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
+77 -63
View File
@@ -58,6 +58,9 @@
#define OS_CPUP_RECORD_PERIOD (g_sysClock) #define OS_CPUP_RECORD_PERIOD (g_sysClock)
#define OS_SYS_CYCLE_TO_US(cycle) ((cycle) / (g_sysClock)) * OS_SYS_US_PER_SECOND + \
((cycle) % (g_sysClock) * OS_SYS_US_PER_SECOND / (g_sysClock))
LITE_OS_SEC_BSS UINT16 g_cpupInitFlg = 0; LITE_OS_SEC_BSS UINT16 g_cpupInitFlg = 0;
LITE_OS_SEC_BSS OsCpupCB *g_cpup = NULL; LITE_OS_SEC_BSS OsCpupCB *g_cpup = NULL;
LITE_OS_SEC_BSS UINT64 g_lastRecordTime; LITE_OS_SEC_BSS UINT64 g_lastRecordTime;
@@ -167,6 +170,15 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsCpupInit()
return LOS_OK; return LOS_OK;
} }
/* The calculation time unit is changed to us to decouple the influence of
* system frequency modulation on CPUP
*/
STATIC UINT64 CpupTimeUsGet(VOID)
{
UINT64 time = LOS_SysCycleGet();
return OS_SYS_CYCLE_TO_US(time);
}
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleStart Function : OsTskCycleStart
Description: start task to get cycles count in current task beginning Description: start task to get cycles count in current task beginning
@@ -183,10 +195,11 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleStart(VOID)
taskID = g_losTask.newTask->taskID; taskID = g_losTask.newTask->taskID;
g_cpup[taskID].cpupID = taskID; g_cpup[taskID].cpupID = taskID;
g_cpup[taskID].startTime = LOS_SysCycleGet(); g_cpup[taskID].startTime = CpupTimeUsGet();
return; return;
} }
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleEnd Function : OsTskCycleEnd
Description: quit task and get cycle count Description: quit task and get cycle count
@@ -196,7 +209,7 @@ Return : None
LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID) LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID)
{ {
UINT32 taskID; UINT32 taskID;
UINT64 cpuCycle; UINT64 cpuTime;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
return; return;
@@ -208,16 +221,17 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEnd(VOID)
return; return;
} }
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (cpuCycle < g_cpup[taskID].startTime) { if (cpuTime < g_cpup[taskID].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_cpup[taskID].allTime += (cpuCycle - g_cpup[taskID].startTime); g_cpup[taskID].allTime += (cpuTime - g_cpup[taskID].startTime);
g_cpup[taskID].startTime = 0; g_cpup[taskID].startTime = 0;
return; return;
} }
/***************************************************************************** /*****************************************************************************
Function : OsTskCycleEndStart Function : OsTskCycleEndStart
Description: start task to get cycles count in current task ending Description: start task to get cycles count in current task ending
@@ -227,7 +241,7 @@ Return : None
LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID) LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
{ {
UINT32 taskID; UINT32 taskID;
UINT64 cpuCycle; UINT64 cpuTime;
UINT16 loopNum; UINT16 loopNum;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
@@ -235,23 +249,23 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
} }
taskID = g_losTask.runTask->taskID; taskID = g_losTask.runTask->taskID;
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (g_cpup[taskID].startTime != 0) { if (g_cpup[taskID].startTime != 0) {
if (cpuCycle < g_cpup[taskID].startTime) { if (cpuTime < g_cpup[taskID].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_cpup[taskID].allTime += (cpuCycle - g_cpup[taskID].startTime); g_cpup[taskID].allTime += (cpuTime - g_cpup[taskID].startTime);
g_cpup[taskID].startTime = 0; g_cpup[taskID].startTime = 0;
} }
taskID = g_losTask.newTask->taskID; taskID = g_losTask.newTask->taskID;
g_cpup[taskID].cpupID = taskID; g_cpup[taskID].cpupID = taskID;
g_cpup[taskID].startTime = cpuCycle; g_cpup[taskID].startTime = cpuTime;
if ((cpuCycle - g_lastRecordTime) > OS_CPUP_RECORD_PERIOD) { if ((cpuTime - g_lastRecordTime) > OS_CPUP_RECORD_PERIOD) {
g_lastRecordTime = cpuCycle; g_lastRecordTime = cpuTime;
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
g_cpup[loopNum].historyTime[g_hisPos] = g_cpup[loopNum].allTime; g_cpup[loopNum].historyTime[g_hisPos] = g_cpup[loopNum].allTime;
@@ -267,12 +281,12 @@ LITE_OS_SEC_TEXT_MINOR VOID OsTskCycleEndStart(VOID)
return; return;
} }
LITE_OS_SEC_TEXT_MINOR static inline UINT16 OsGetPrePos(UINT16 curPos) LITE_OS_SEC_TEXT_MINOR STATIC INLINE UINT16 OsGetPrePos(UINT16 curPos)
{ {
return (curPos == 0) ? (OS_CPUP_HISTORY_RECORD_NUM - 1) : (curPos - 1); return (curPos == 0) ? (OS_CPUP_HISTORY_RECORD_NUM - 1) : (curPos - 1);
} }
LITE_OS_SEC_TEXT_MINOR static VOID OsGetPositions(UINT16 mode, UINT16* curPosAddr, UINT16* prePosAddr) LITE_OS_SEC_TEXT_MINOR STATIC VOID OsGetPositions(UINT16 mode, UINT16* curPosAddr, UINT16* prePosAddr)
{ {
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
@@ -298,7 +312,7 @@ Return : cpupRet:current CPU usage
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
UINT16 loopNum; UINT16 loopNum;
UINT32 intSave; UINT32 intSave;
@@ -312,12 +326,12 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_SysCpuUsage(VOID)
OsTskCycleEnd(); OsTskCycleEnd();
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
cpuCycleAll += g_cpup[loopNum].allTime; cpuTimeAll += g_cpup[loopNum].allTime;
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * cpupRet = LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION *
g_cpup[g_idleTaskID].allTime) / cpuCycleAll); g_cpup[g_idleTaskID].allTime) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -334,7 +348,7 @@ Return : cpupRet:CPU usage history
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 idleCycleAll = 0; UINT64 idleCycleAll = 0;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
UINT16 loopNum; UINT16 loopNum;
@@ -354,9 +368,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
@@ -367,8 +381,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT16 mode)
idleCycleAll += g_cpup[g_idleTaskID].allTime - g_cpup[g_idleTaskID].historyTime[curPos]; idleCycleAll += g_cpup[g_idleTaskID].allTime - g_cpup[g_idleTaskID].historyTime[curPos];
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * idleCycleAll) / cpuCycleAll)); cpupRet = (LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * idleCycleAll) / cpuTimeAll));
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -385,7 +399,7 @@ Return : cpupRet:CPU usage of certain task
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT16 loopNum; UINT16 loopNum;
UINT32 intSave; UINT32 intSave;
UINT32 cpupRet = 0; UINT32 cpupRet = 0;
@@ -410,11 +424,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuUsage(UINT32 taskID)
if ((g_cpup[loopNum].status & OS_TASK_STATUS_UNUSED) || (g_cpup[loopNum].status == 0)) { if ((g_cpup[loopNum].status & OS_TASK_STATUS_UNUSED) || (g_cpup[loopNum].status == 0)) {
continue; continue;
} }
cpuCycleAll += g_cpup[loopNum].allTime; cpuTimeAll += g_cpup[loopNum].allTime;
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (UINT32)((LOS_CPUP_PRECISION * g_cpup[taskID].allTime) / cpuCycleAll); cpupRet = (UINT32)((LOS_CPUP_PRECISION * g_cpup[taskID].allTime) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -432,8 +446,8 @@ Return : cpupRet:CPU usage history of task
*****************************************************************************/ *****************************************************************************/
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode)
{ {
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 cpuCycleCurTsk = 0; UINT64 cpuTimeCurTsk = 0;
UINT16 loopNum, curPos; UINT16 loopNum, curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
@@ -463,19 +477,19 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskID, UINT16 mode
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleCurTsk += g_cpup[taskID].historyTime[curPos] - g_cpup[taskID].historyTime[prePos]; cpuTimeCurTsk += g_cpup[taskID].historyTime[curPos] - g_cpup[taskID].historyTime[prePos];
} else { } else {
cpuCycleCurTsk += g_cpup[taskID].allTime - g_cpup[taskID].historyTime[curPos]; cpuTimeCurTsk += g_cpup[taskID].allTime - g_cpup[taskID].historyTime[curPos];
} }
if (cpuCycleAll) { if (cpuTimeAll) {
cpupRet = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTsk) / cpuCycleAll); cpupRet = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurTsk) / cpuTimeAll);
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -490,8 +504,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
UINT64 cpuCycleCurTsk = 0; UINT64 cpuTimeCurTsk = 0;
if (g_cpupInitFlg == 0) { if (g_cpupInitFlg == 0) {
return LOS_ERRNO_CPUP_NO_INIT; return LOS_ERRNO_CPUP_NO_INIT;
@@ -513,9 +527,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeAll += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeAll += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
} }
@@ -526,16 +540,16 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllTaskCpuUsage(CPUP_INFO_S *cpupInfo, UINT16
} }
if (mode == CPUP_IN_1S) { if (mode == CPUP_IN_1S) {
cpuCycleCurTsk += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos]; cpuTimeCurTsk += g_cpup[loopNum].historyTime[curPos] - g_cpup[loopNum].historyTime[prePos];
} else { } else {
cpuCycleCurTsk += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos]; cpuTimeCurTsk += g_cpup[loopNum].allTime - g_cpup[loopNum].historyTime[curPos];
} }
cpupInfo[loopNum].usStatus = g_cpup[loopNum].status; cpupInfo[loopNum].usStatus = g_cpup[loopNum].status;
if (cpuCycleAll) { if (cpuTimeAll) {
cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTsk) / cpuCycleAll); cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurTsk) / cpuTimeAll);
} }
cpuCycleCurTsk = 0; cpuTimeCurTsk = 0;
} }
OsTskCycleStart(); OsTskCycleStart();
@@ -606,13 +620,13 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqStart(UINT32 intNum)
return; return;
} }
g_irqCpup[intNum].startTime = LOS_SysCycleGet(); g_irqCpup[intNum].startTime = CpupTimeUsGet();
return; return;
} }
LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum) LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
{ {
UINT64 cpuCycle; UINT64 cpuTime;
UINT64 usedTime; UINT64 usedTime;
if (g_irqCpupInitFlg == 0) { if (g_irqCpupInitFlg == 0) {
@@ -623,14 +637,14 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
return; return;
} }
cpuCycle = LOS_SysCycleGet(); cpuTime = CpupTimeUsGet();
if (cpuCycle < g_irqCpup[intNum].startTime) { if (cpuTime < g_irqCpup[intNum].startTime) {
cpuCycle += g_cyclesPerTick; cpuTime += OS_US_PER_TICK;
} }
g_irqCpup[intNum].cpupID = intNum; g_irqCpup[intNum].cpupID = intNum;
g_irqCpup[intNum].status = OS_CPUP_USED; g_irqCpup[intNum].status = OS_CPUP_USED;
usedTime = cpuCycle - g_irqCpup[intNum].startTime; usedTime = cpuTime - g_irqCpup[intNum].startTime;
if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */ if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */
g_irqCpup[intNum].allTime += usedTime; g_irqCpup[intNum].allTime += usedTime;
@@ -672,12 +686,12 @@ LITE_OS_SEC_TEXT_MINOR STATIC VOID OsGetIrqPositions(UINT16 mode, UINT16* curPos
LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllTime(VOID) LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllTime(VOID)
{ {
INT32 i; INT32 i;
UINT64 cpuCycleAll = 0; UINT64 cpuTimeAll = 0;
for (i = 0; i < OS_CPUP_HISTORY_RECORD_NUM; i++) { for (i = 0; i < OS_CPUP_HISTORY_RECORD_NUM; i++) {
cpuCycleAll += g_cpuHistoryTime[i]; cpuTimeAll += g_cpuHistoryTime[i];
} }
return cpuCycleAll; return cpuTimeAll;
} }
LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllHisTime(UINT32 num) LITE_OS_SEC_TEXT_MINOR STATIC UINT64 OsGetIrqAllHisTime(UINT32 num)
@@ -697,8 +711,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
UINT16 curPos; UINT16 curPos;
UINT16 prePos = 0; UINT16 prePos = 0;
UINT32 intSave; UINT32 intSave;
UINT64 cpuCycleAll; UINT64 cpuTimeAll;
UINT64 cpuCycleCurIrq; UINT64 cpuTimeCurIrq;
if (g_irqCpupInitFlg == 0) { if (g_irqCpupInitFlg == 0) {
return LOS_ERRNO_CPUP_NO_INIT; return LOS_ERRNO_CPUP_NO_INIT;
@@ -712,9 +726,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
OsGetIrqPositions(mode, &curPos, &prePos); OsGetIrqPositions(mode, &curPos, &prePos);
if (mode == CPUP_IN_10S) { if (mode == CPUP_IN_10S) {
cpuCycleAll = OsGetIrqAllTime(); cpuTimeAll = OsGetIrqAllTime();
} else { } else {
cpuCycleAll = g_cpuHistoryTime[curPos] - g_cpuHistoryTime[prePos]; cpuTimeAll = g_cpuHistoryTime[curPos] - g_cpuHistoryTime[prePos];
} }
for (loopNum = 0; loopNum < LOSCFG_PLATFORM_HWI_LIMIT; loopNum++) { for (loopNum = 0; loopNum < LOSCFG_PLATFORM_HWI_LIMIT; loopNum++) {
@@ -725,13 +739,13 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllIrqCpuUsage(UINT16 mode, CPUP_INFO_S *cp
cpupInfo[loopNum].usStatus = g_irqCpup[loopNum].status; cpupInfo[loopNum].usStatus = g_irqCpup[loopNum].status;
if (mode == CPUP_IN_10S) { if (mode == CPUP_IN_10S) {
cpuCycleCurIrq = OsGetIrqAllHisTime(loopNum); cpuTimeCurIrq = OsGetIrqAllHisTime(loopNum);
} else { } else {
cpuCycleCurIrq = g_irqCpup[loopNum].historyTime[curPos] - g_irqCpup[loopNum].historyTime[prePos]; cpuTimeCurIrq = g_irqCpup[loopNum].historyTime[curPos] - g_irqCpup[loopNum].historyTime[prePos];
} }
if (cpuCycleAll != 0) { if (cpuTimeAll != 0) {
cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurIrq) / cpuCycleAll); cpupInfo[loopNum].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuTimeCurIrq) / cpuTimeAll);
} }
} }
+1 -1
View File
@@ -28,7 +28,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/FatFs/FatFs.gni") import("$THIRDPARTY_FATFS_DIR/FatFs.gni")
module_switch = defined(LOSCFG_FS_FAT) module_switch = defined(LOSCFG_FS_FAT)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
-1
View File
@@ -32,7 +32,6 @@ config FS_FAT
default n default n
depends on FS_VFS depends on FS_VFS
select SUPPORT_FATFS select SUPPORT_FATFS
select KAL_CMSIS
help help
Answer Y to enable LiteOS support fat filesystem. Answer Y to enable LiteOS support fat filesystem.
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -28,7 +28,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/littlefs/littlefs.gni") import("$THIRDPARTY_LITTLEFS_DIR/littlefs.gni")
module_switch = defined(LOSCFG_FS_LITTLEFS) module_switch = defined(LOSCFG_FS_LITTLEFS)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
+16 -17
View File
@@ -32,15 +32,13 @@
#define _GNU_SOURCE 1 #define _GNU_SOURCE 1
#include "lfs_adapter.h" #include "lfs_adapter.h"
#include "los_config.h" #include "los_config.h"
#include "los_fs.h"
#include "vfs_files.h" #include "vfs_files.h"
#include "vfs_operations.h" #include "vfs_operations.h"
#include "vfs_partition.h" #include "vfs_partition.h"
#include "vfs_maps.h" #include "vfs_maps.h"
#include "vfs_mount.h" #include "vfs_mount.h"
#include "securec.h" #include "securec.h"
#include "los_fs.h"
static pthread_mutex_t g_fsLocalMutex = PTHREAD_MUTEX_INITIALIZER;
static struct PartitionCfg g_partitionCfg; static struct PartitionCfg g_partitionCfg;
static struct DeviceDesc *g_lfsDevice = NULL; static struct DeviceDesc *g_lfsDevice = NULL;
@@ -184,7 +182,13 @@ int LfsMount(struct MountPoint *mp, unsigned long mountflags, const void *data)
goto errout; goto errout;
} }
mountHdl = (lfs_t *)malloc(sizeof(lfs_t) + sizeof(struct lfs_config)); if (mountflags & MS_REMOUNT) {
errno = ENOSYS;
ret = (int)LOS_NOK;
goto errout;
}
mountHdl = (lfs_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_t) + sizeof(struct lfs_config));
if (mountHdl == NULL) { if (mountHdl == NULL) {
errno = ENODEV; errno = ENODEV;
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
@@ -204,7 +208,7 @@ int LfsMount(struct MountPoint *mp, unsigned long mountflags, const void *data)
} }
} }
if (ret != 0) { if (ret != 0) {
free(mountHdl); LOSCFG_FS_FREE_HOOK(mountHdl);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
@@ -233,7 +237,7 @@ int LfsUmount(struct MountPoint *mp)
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(mp->mData); LOSCFG_FS_FREE_HOOK(mp->mData);
mp->mData = NULL; mp->mData = NULL;
return ret; return ret;
} }
@@ -327,7 +331,7 @@ int LfsOpendir(struct Dir *dir, const char *dirName)
} }
lfs_t *lfs = (lfs_t *)dir->dMp->mData; lfs_t *lfs = (lfs_t *)dir->dMp->mData;
lfs_dir_t *dirInfo = (lfs_dir_t *)malloc(sizeof(lfs_dir_t)); lfs_dir_t *dirInfo = (lfs_dir_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_dir_t));
if (dirInfo == NULL) { if (dirInfo == NULL) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -336,7 +340,7 @@ int LfsOpendir(struct Dir *dir, const char *dirName)
(void)memset_s(dirInfo, sizeof(lfs_dir_t), 0, sizeof(lfs_dir_t)); (void)memset_s(dirInfo, sizeof(lfs_dir_t), 0, sizeof(lfs_dir_t));
ret = lfs_dir_open(lfs, dirInfo, dirName); ret = lfs_dir_open(lfs, dirInfo, dirName);
if (ret != 0) { if (ret != 0) {
free(dirInfo); LOSCFG_FS_FREE_HOOK(dirInfo);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
goto errout; goto errout;
} }
@@ -371,7 +375,6 @@ int LfsReaddir(struct Dir *dir, struct dirent *dent)
ret = lfs_dir_read(lfs, dirInfo, &lfsInfo); ret = lfs_dir_read(lfs, dirInfo, &lfsInfo);
if (ret == TRUE) { if (ret == TRUE) {
pthread_mutex_lock(&g_fsLocalMutex);
(void)strncpy_s(dent->d_name, sizeof(dent->d_name), lfsInfo.name, strlen(lfsInfo.name) + 1); (void)strncpy_s(dent->d_name, sizeof(dent->d_name), lfsInfo.name, strlen(lfsInfo.name) + 1);
if (lfsInfo.type == LFS_TYPE_DIR) { if (lfsInfo.type == LFS_TYPE_DIR) {
dent->d_type = DT_DIR; dent->d_type = DT_DIR;
@@ -380,7 +383,6 @@ int LfsReaddir(struct Dir *dir, struct dirent *dent)
} }
dent->d_reclen = lfsInfo.size; dent->d_reclen = lfsInfo.size;
pthread_mutex_unlock(&g_fsLocalMutex);
return LOS_OK; return LOS_OK;
} }
@@ -415,7 +417,7 @@ int LfsClosedir(struct Dir *dir)
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(dirInfo); LOSCFG_FS_FREE_HOOK(dirInfo);
dir->dData = NULL; dir->dData = NULL;
return ret; return ret;
@@ -432,7 +434,7 @@ int LfsOpen(struct File *file, const char *pathName, int openFlag)
return (int)LOS_NOK; return (int)LOS_NOK;
} }
lfsHandle = (lfs_file_t *)malloc(sizeof(lfs_file_t)); lfsHandle = (lfs_file_t *)LOSCFG_FS_MALLOC_HOOK(sizeof(lfs_file_t));
if (lfsHandle == NULL) { if (lfsHandle == NULL) {
errno = ENOMEM; errno = ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
@@ -441,7 +443,7 @@ int LfsOpen(struct File *file, const char *pathName, int openFlag)
int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag); int lfsOpenFlag = ConvertFlagToLfsOpenFlag(openFlag);
ret = lfs_file_open((lfs_t *)file->fMp->mData, lfsHandle, pathName, lfsOpenFlag); ret = lfs_file_open((lfs_t *)file->fMp->mData, lfsHandle, pathName, lfsOpenFlag);
if (ret != 0) { if (ret != 0) {
free(lfsHandle); LOSCFG_FS_FREE_HOOK(lfsHandle);
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
goto errout; goto errout;
} }
@@ -560,16 +562,13 @@ int LfsClose(struct File *file)
return (int)LOS_NOK; return (int)LOS_NOK;
} }
pthread_mutex_lock(&g_fsLocalMutex);
ret = lfs_file_close((lfs_t *)mp->mData, lfsHandle); ret = lfs_file_close((lfs_t *)mp->mData, lfsHandle);
pthread_mutex_unlock(&g_fsLocalMutex);
if (ret != 0) { if (ret != 0) {
errno = LittlefsErrno(ret); errno = LittlefsErrno(ret);
ret = (int)LOS_NOK; ret = (int)LOS_NOK;
} }
free(file->fData); LOSCFG_FS_FREE_HOOK(file->fData);
file->fData = NULL; file->fData = NULL;
return ret; return ret;
} }
+4 -4
View File
@@ -41,14 +41,14 @@ kernel_module(module_name) {
] ]
include_dirs = [ include_dirs = [
"//kernel/liteos_m/kernel/arch/include", "$LITEOSTOPDIR/kernel/arch/include",
"//kernel/liteos_m/kernel/include", "$LITEOSTOPDIR/kernel/include",
"//kernel/liteos_m/utils", "$LITEOSTOPDIR/utils",
"../", "../",
".", ".",
] ]
deps = [ "//kernel/liteos_m/kal" ] deps = [ "$LITEOSTOPDIR/kal" ]
configs += [ "$LITEOSTOPDIR:warn_config" ] configs += [ "$LITEOSTOPDIR:warn_config" ]
if (!defined(LOSCFG_COMPILER_ICCARM)) { if (!defined(LOSCFG_COMPILER_ICCARM)) {
cflags = [ "-Wno-parentheses" ] cflags = [ "-Wno-parentheses" ]
+17
View File
@@ -30,6 +30,23 @@
config FS_VFS config FS_VFS
bool "Enable FS VFS" bool "Enable FS VFS"
default y default y
select POSIX_FS_API
help help
Answer Y to enable LiteOS support VFS. Answer Y to enable LiteOS support VFS.
if FS_VFS
config FS_LOCK_TIMEOUT
int "Filesystem global lock timeout value in tick. -1 for waiting forever"
default -1
help
The timeout value of getting filesystem lock in tick. -1 for waiting forever
config FS_SUPPORT_MOUNT_TARGET_RECURSIVE
bool "Mount target can be recursive"
default n
depends on FS_VFS
help
Answer Y to enable LiteOS support VFS mount recursively. For example, "/system/bin".
endif
+41 -33
View File
@@ -38,6 +38,7 @@
#define _LOS_FS_H_ #define _LOS_FS_H_
#include "los_config.h" #include "los_config.h"
#include "los_memory.h"
#include "dirent.h" #include "dirent.h"
#include "sys/mount.h" #include "sys/mount.h"
#include "sys/statfs.h" #include "sys/statfs.h"
@@ -45,6 +46,7 @@
#include "sys/uio.h" #include "sys/uio.h"
#include "unistd.h" #include "unistd.h"
#include <stdarg.h> #include <stdarg.h>
#include "vfs_maps.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
@@ -52,40 +54,13 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
int LOS_Open(const char *path, int flags, ...); #ifndef LOSCFG_FS_MALLOC_HOOK
int LOS_Close(int fd); #define LOSCFG_FS_MALLOC_HOOK(size) LOS_MemAlloc((VOID *)OS_SYS_MEM_ADDR, size)
ssize_t LOS_Read(int fd, void *buff, size_t bytes); #endif
ssize_t LOS_Write(int fd, const void *buff, size_t bytes);
off_t LOS_Lseek(int fd, off_t off, int whence);
int LOS_Stat(const char *path, struct stat *stat);
int LOS_Statfs(const char *path, struct statfs *buf);
int LOS_Unlink(const char *path);
int LOS_Rename(const char *oldpath, const char *newpath);
int LOS_Fsync(int fd);
DIR *LOS_Opendir(const char *path);
struct dirent *LOS_Readdir(DIR *dir);
int LOS_Closedir(DIR *dir);
int LOS_Mkdir(const char *path, mode_t mode);
int LOS_Rmdir(const char *path);
int LOS_Lstat(const char *path, struct stat *buffer);
int LOS_Fstat(int fd, struct stat *buf);
int LOS_Fcntl(int fd, int cmd, ...);
int LOS_Ioctl(int fd, int req, ...);
ssize_t LOS_Readv(int fd, const struct iovec *iovBuf, int iovcnt);
ssize_t LOS_Writev(int fd, const struct iovec *iovBuf, int iovcnt);
ssize_t LOS_Pread(int fd, void *buff, size_t bytes, off_t off);
ssize_t LOS_Pwrite(int fd, const void *buff, size_t bytes, off_t off);
int LOS_Isatty(int fd);
int LOS_Access(const char *path, int amode);
int LOS_Ftruncate(int fd, off_t length);
int LOS_FsUmount(const char *target);
int LOS_FsUmount2(const char *target, int flag);
int LOS_FsMount(const char *source, const char *target,
const char *fsType, unsigned long mountflags,
const void *data);
int OsFcntl(int fd, int cmd, va_list ap); #ifndef LOSCFG_FS_FREE_HOOK
int OsIoctl(int fd, int req, va_list ap); #define LOSCFG_FS_FREE_HOOK(ptr) LOS_MemFree((VOID *)OS_SYS_MEM_ADDR, ptr)
#endif
struct PartitionCfg { struct PartitionCfg {
/* partition low-level read func */ /* partition low-level read func */
@@ -143,6 +118,39 @@ int LOS_DiskPartition(const char *dev, const char *fsType, int *lengthArray, int
*/ */
int LOS_PartitionFormat(const char *partName, char *fsType, void *data); int LOS_PartitionFormat(const char *partName, char *fsType, void *data);
/*
* @brief new file system callbacks register.
* These callback functions are the adaptation layer implemented by the developer,
* used to interconnect the vfs with the new file system.
*
* LOS_FsRegister must be called after kernel initialization is complete.
*
* @param fsType file system type, don't register the same type fs more than once.
* @param fsMops mount operation of the fs.
* @param fsFops file operation of the fs.
* @param fsMgt management operation of the fs.
*
* @return Return LOS_OK if success.
* Return LOS_NOK if error.
* errno EINVAL: input errors, such as null pointers.
* errno ENOMEM: memory may malloc failed.
*
*/
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
const struct FileOps *fsFops, const struct FsManagement *fsMgt);
/*
* @brief Lock the whole filesystem to forbid filesystem access.
*
* @return Return LOS_NOK if error. Return LOS_OK if seccess.
*/
int LOS_FsLock(void);
/*
* @brief Unlock the whole filesystem to allow filesystem access.
*/
void LOS_FsUnlock(void);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {
+9 -8
View File
@@ -49,21 +49,17 @@
#ifdef LOSCFG_FS_FAT #ifdef LOSCFG_FS_FAT
#include "fatfs_conf.h" #include "fatfs_conf.h"
#define __FAT_NFILE FAT_MAX_OPEN_FILES
#else
#define __FAT_NFILE 0
#endif #endif
#ifdef LOSCFG_FS_LITTLEFS #ifdef LOSCFG_FS_LITTLEFS
#include "lfs_conf.h" #include "lfs_conf.h"
#define __LFS_NFILE LOSCFG_LFS_MAX_OPEN_FILES
#else
#define __LFS_NFILE 0
#endif #endif
#define CONFIG_NFILE_DESCRIPTORS (__FAT_NFILE + __LFS_NFILE) #ifndef CONFIG_NFILE_DESCRIPTORS
#define CONFIG_NFILE_DESCRIPTORS 256
#endif
#define NR_OPEN_DEFAULT CONFIG_NFILE_DESCRIPTORS #define NR_OPEN_DEFAULT (CONFIG_NFILE_DESCRIPTORS - MIN_START_FD)
/* time configure */ /* time configure */
@@ -88,4 +84,9 @@
#define MAX_DIRENT_NUM 14 // 14 means 4096 length buffer can store 14 dirent, see struct DIR #define MAX_DIRENT_NUM 14 // 14 means 4096 length buffer can store 14 dirent, see struct DIR
/* max number of open directories */
#ifndef LOSCFG_MAX_OPEN_DIRS
#define LOSCFG_MAX_OPEN_DIRS 10
#endif
#endif #endif
+1 -1
View File
@@ -78,7 +78,7 @@ struct File {
off_t fOffset; off_t fOffset;
INT32 fOwner; INT32 fOwner;
struct MountPoint *fMp; struct MountPoint *fMp;
void *fData; /* file system opreations handle, fatfs FIL, etc. */ void *fData; /* file system operations handle, fatfs FIL, etc. */
const char *fullPath; const char *fullPath;
}; };
+588 -575
View File
File diff suppressed because it is too large Load Diff
+29 -10
View File
@@ -33,6 +33,7 @@
#include "securec.h" #include "securec.h"
#include "los_debug.h" #include "los_debug.h"
#include "los_compiler.h" #include "los_compiler.h"
#include "los_fs.h"
struct FsMap *g_fsMap = NULL; struct FsMap *g_fsMap = NULL;
@@ -40,49 +41,67 @@ struct FsMap *VfsFsMapGet(const char *fsType)
{ {
struct FsMap *curr = g_fsMap; struct FsMap *curr = g_fsMap;
(void)VfsLock(); (void)LOS_FsLock();
while (curr != NULL) { while (curr != NULL) {
if ((curr->fsType != NULL) && (fsType != NULL) && if ((curr->fsType != NULL) && (fsType != NULL) &&
(strcmp(curr->fsType, fsType) == 0)) { (strcmp(curr->fsType, fsType) == 0)) {
(void)VfsUnlock(); LOS_FsUnlock();
return curr; return curr;
} }
curr = curr->next; curr = curr->next;
} }
VfsUnlock(); LOS_FsUnlock();
return NULL; return NULL;
} }
int OsFsRegister(const char *fsType, struct MountOps *fsMops, int OsFsRegister(const char *fsType, const struct MountOps *fsMops,
struct FileOps *fsFops, struct FsManagement *fsMgt) const struct FileOps *fsFops, const struct FsManagement *fsMgt)
{ {
size_t len;
if ((fsMops == NULL) || (fsFops == NULL)) { if ((fsMops == NULL) || (fsFops == NULL)) {
VFS_ERRNO_SET(EINVAL);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
struct FsMap *newfs = (struct FsMap *)malloc(sizeof(struct FsMap)); struct FsMap *newfs = (struct FsMap *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct FsMap));
if (newfs == NULL) { if (newfs == NULL) {
PRINT_ERR("Fs register malloc failed, fsType %s.\n", fsType); PRINT_ERR("Fs register malloc failed, fsType %s.\n", fsType);
VFS_ERRNO_SET(ENOMEM);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)memset_s(newfs, sizeof(struct FsMap), 0, sizeof(struct FsMap)); (void)memset_s(newfs, sizeof(struct FsMap), 0, sizeof(struct FsMap));
newfs->fsType = strdup(fsType); len = strlen(fsType) + 1;
newfs->fsType = LOSCFG_FS_MALLOC_HOOK(len);
if (newfs->fsType == NULL) { if (newfs->fsType == NULL) {
free(newfs); LOSCFG_FS_FREE_HOOK(newfs);
VFS_ERRNO_SET(ENOMEM);
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)strcpy_s((char *)newfs->fsType, len, fsType);
newfs->fsMops = fsMops; newfs->fsMops = fsMops;
newfs->fsFops = fsFops; newfs->fsFops = fsFops;
newfs->fsMgt = fsMgt; newfs->fsMgt = fsMgt;
newfs->fsRefs = 0; newfs->fsRefs = 0;
(void)VfsLock(); (void)LOS_FsLock();
newfs->next = g_fsMap; newfs->next = g_fsMap;
g_fsMap = newfs; g_fsMap = newfs;
VfsUnlock(); LOS_FsUnlock();
return LOS_OK; return LOS_OK;
} }
int LOS_FsRegister(const char *fsType, const struct MountOps *fsMops,
const struct FileOps *fsFops, const struct FsManagement *fsMgt)
{
if (VfsFsMapGet(fsType) != NULL) {
PRINT_ERR("fsType has been registered or fsType error\n");
VFS_ERRNO_SET(EINVAL);
return (int)LOS_NOK;
}
return OsFsRegister(fsType, fsMops, fsFops, fsMgt);
}
+2 -2
View File
@@ -56,8 +56,8 @@ struct FsMap {
struct FsMap *next; struct FsMap *next;
}; };
int OsFsRegister(const char *fsType, struct MountOps *fsMops, int OsFsRegister(const char *fsType, const struct MountOps *fsMops,
struct FileOps *fsFops, struct FsManagement *fsMgt); const struct FileOps *fsFops, const struct FsManagement *fsMgt);
struct FsMap *VfsFsMapGet(const char *fsType); struct FsMap *VfsFsMapGet(const char *fsType);
#ifdef __cplusplus #ifdef __cplusplus
+144 -52
View File
@@ -33,6 +33,9 @@
#include "vfs_config.h" #include "vfs_config.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h" #include "string.h"
#include "limits.h"
#include "errno.h"
#include "securec.h"
#include "vfs_operations.h" #include "vfs_operations.h"
#include "los_compiler.h" #include "los_compiler.h"
#include "los_debug.h" #include "los_debug.h"
@@ -60,14 +63,13 @@ static void MpDeleteFromList(struct MountPoint *mp)
} }
} }
#if (LOSCFG_FS_SUPPORT_MOUNT_TARGET_RECURSIVE == 1)
struct MountPoint *VfsMpFind(const char *path, const char **pathInMp) struct MountPoint *VfsMpFind(const char *path, const char **pathInMp)
{ {
struct MountPoint *mp = g_mountPoints; struct MountPoint *mp = g_mountPoints;
struct MountPoint *bestMp = NULL; struct MountPoint *bestMp = NULL;
int bestMatches = 0; int bestMatches = 0;
if (path == NULL) {
return NULL;
}
if (pathInMp != NULL) { if (pathInMp != NULL) {
*pathInMp = NULL; *pathInMp = NULL;
} }
@@ -119,29 +121,85 @@ struct MountPoint *VfsMpFind(const char *path, const char **pathInMp)
next: next:
mp = mp->mNext; mp = mp->mNext;
} }
return bestMp; return bestMp;
} }
#else
struct MountPoint *VfsMpFind(const char *path, const char **pathInMp)
{
struct MountPoint *mp = g_mountPoints;
const char *iPath = path;
const char *mPath = NULL;
const char *target = NULL;
STATIC struct MountPoint *MountPointInit(const char *target, const char *fsType, unsigned long mountflags) if (pathInMp != NULL) {
*pathInMp = NULL;
}
while (*iPath == '/') {
++iPath;
}
while ((mp != NULL) && (mp->mPath != NULL)) {
mPath = mp->mPath;
target = iPath;
while (*mPath == '/') {
++mPath;
}
while ((*mPath != '\0') && (*mPath != '/') &&
(*target != '\0') && (*target != '/')) {
if (*mPath != *target) {
break;
}
++mPath;
++target;
}
if (((*mPath == '\0') || (*mPath == '/')) &&
((*target == '\0') || (*target == '/'))) {
if (pathInMp != NULL) {
*pathInMp = path;
}
return mp;
}
mp = mp->mNext;
}
return NULL;
}
#endif
STATIC struct MountPoint *VfsMountPointInit(const char *source, const char *target,
const char *fsType, unsigned long mountflags)
{ {
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
const char *pathInMp = NULL; const char *pathInMp = NULL;
struct FsMap *mFs = NULL; struct FsMap *mFs = NULL;
size_t ssize = 0;
size_t tsize;
/* find mp by target, to see if it was mounted */ /* find mp by target, to see if it was mounted */
mp = VfsMpFind(target, &pathInMp); mp = VfsMpFind(target, &pathInMp);
if (mp != NULL && pathInMp != NULL) { if (mp != NULL && pathInMp != NULL) {
errno = EINVAL;
return NULL; return NULL;
} }
/* Find fsMap coresponding to the fsType */ /* Find fsMap corresponding to the fsType */
mFs = VfsFsMapGet(fsType); mFs = VfsFsMapGet(fsType);
if ((mFs == NULL) || (mFs->fsMops == NULL) || (mFs->fsMops->mount == NULL)) { if ((mFs == NULL) || (mFs->fsMops == NULL) || (mFs->fsMops->mount == NULL)) {
errno = ENODEV;
return NULL; return NULL;
} }
mp = (struct MountPoint *)malloc(sizeof(struct MountPoint)); if (source != NULL) {
ssize = strlen(source) + 1;
}
tsize = strlen(target) + 1;
mp = (struct MountPoint *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct MountPoint) + ssize + tsize);
if (mp == NULL) { if (mp == NULL) {
errno = ENOMEM;
return NULL; return NULL;
} }
@@ -150,45 +208,86 @@ STATIC struct MountPoint *MountPointInit(const char *target, const char *fsType,
mp->mRefs = 0; mp->mRefs = 0;
mp->mWriteEnable = (mountflags & MS_RDONLY) ? FALSE : TRUE; mp->mWriteEnable = (mountflags & MS_RDONLY) ? FALSE : TRUE;
mp->mFs->fsRefs++; mp->mFs->fsRefs++;
mp->mNext = g_mountPoints;
if (source != NULL && strcpy_s((char *)mp + sizeof(struct MountPoint), ssize, source) != EOK) {
LOSCFG_FS_FREE_HOOK(mp);
errno = ENOMEM;
return NULL;
}
if (strcpy_s((char *)mp + sizeof(struct MountPoint) + ssize, tsize, target) != EOK) {
LOSCFG_FS_FREE_HOOK(mp);
errno = ENOMEM;
return NULL;
}
mp->mDev = source ? (char *)mp + sizeof(struct MountPoint) : NULL;
mp->mPath = (char *)mp + sizeof(struct MountPoint) + ssize;
return mp; return mp;
} }
int LOS_FsMount(const char *source, const char *target, STATIC int VfsRemount(const char *source, const char *target,
const char *fsType, unsigned long mountflags,
const void *data)
{
(VOID)source;
(VOID)fsType;
struct MountPoint *mp;
mp = VfsMpFind(target, NULL);
if (mp == NULL) {
errno = EINVAL;
return (int)LOS_NOK;
}
LOS_ASSERT(mp->mFs != NULL);
LOS_ASSERT(mp->mFs->fsMops != NULL);
LOS_ASSERT(mp->mFs->fsMops->mount != NULL);
return mp->mFs->fsMops->mount(mp, mountflags, data);
}
STATIC int VfsMountPathCheck(const char *target)
{
/* target must begin with '/', for example /system, /data, etc. */
if ((target == NULL) || (target[0] != '/')) {
errno = EINVAL;
return (int)LOS_NOK;
}
if (strlen(target) >= PATH_MAX) {
errno = ENAMETOOLONG;
return (int)LOS_NOK;
}
return LOS_OK;
}
int mount(const char *source, const char *target,
const char *fsType, unsigned long mountflags, const char *fsType, unsigned long mountflags,
const void *data) const void *data)
{ {
int ret; int ret;
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
/* target must begin with '/', for example /system, /data, etc. */ if (VfsMountPathCheck(target) != LOS_OK) {
if ((target == NULL) || (target[0] != '/')) {
return (int)LOS_NOK; return (int)LOS_NOK;
} }
(void)VfsLock(); (void)LOS_FsLock();
mp = MountPointInit(target, fsType, mountflags); if (mountflags & MS_REMOUNT) {
ret = VfsRemount(source, target, fsType, mountflags, data);
LOS_FsUnlock();
return ret;
}
mp = VfsMountPointInit(source, target, fsType, mountflags);
if (mp == NULL) { if (mp == NULL) {
VfsUnlock(); LOS_FsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
if (source != NULL) {
mp->mDev = strdup(source);
if (mp->mDev == NULL) {
free(mp);
VfsUnlock();
return (int)LOS_NOK;
}
}
mp->mPath = strdup(target);
if (mp->mPath == NULL) {
goto errout;
}
ret = mp->mFs->fsMops->mount(mp, mountflags, data); ret = mp->mFs->fsMops->mount(mp, mountflags, data);
if (ret != 0) { if (ret != 0) {
/* errno is set */ /* errno is set */
@@ -196,30 +295,28 @@ int LOS_FsMount(const char *source, const char *target,
goto errout; goto errout;
} }
mp->mNext = g_mountPoints;
g_mountPoints = mp; g_mountPoints = mp;
VfsUnlock(); LOS_FsUnlock();
return LOS_OK; return LOS_OK;
errout: errout:
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK(mp);
free((void *)mp->mDev); LOS_FsUnlock();
free(mp);
VfsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
int LOS_FsUmount(const char *target) int umount(const char *target)
{ {
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
const char *pathInMp = NULL;
int ret = (int)LOS_NOK; int ret = (int)LOS_NOK;
(void)VfsLock(); (void)LOS_FsLock();
if (target == NULL) { if (VfsMountPathCheck(target) != LOS_OK) {
goto errout; goto errout;
} }
mp = VfsMpFind(target, &pathInMp); mp = VfsMpFind(target, NULL);
if ((mp == NULL) || (mp->mRefs != 0)) { if ((mp == NULL) || (mp->mRefs != 0)) {
goto errout; goto errout;
} }
@@ -238,16 +335,14 @@ int LOS_FsUmount(const char *target)
/* delete mp from mount list */ /* delete mp from mount list */
MpDeleteFromList(mp); MpDeleteFromList(mp);
mp->mFs->fsRefs--; mp->mFs->fsRefs--;
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK(mp);
free((void *)mp->mDev);
free(mp);
VfsUnlock(); LOS_FsUnlock();
return LOS_OK; return LOS_OK;
errout: errout:
PRINT_ERR("umount2 failed, target %s.\n", target); PRINT_ERR("umount2 failed, target %s.\n", target);
VfsUnlock(); LOS_FsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
@@ -266,18 +361,17 @@ static void CloseFdsInMp(const struct MountPoint *mp)
} }
} }
int LOS_FsUmount2(const char *target, int flag) int umount2(const char *target, int flag)
{ {
struct MountPoint *mp = NULL; struct MountPoint *mp = NULL;
const char *pathInMp = NULL;
int ret = (int)LOS_NOK; int ret = (int)LOS_NOK;
(void)VfsLock(); (void)LOS_FsLock();
if (target == NULL) { if (VfsMountPathCheck(target) != LOS_OK) {
goto errout; goto errout;
} }
mp = VfsMpFind(target, &pathInMp); mp = VfsMpFind(target, NULL);
if ((mp == NULL) || (mp->mRefs != 0) || if ((mp == NULL) || (mp->mRefs != 0) ||
(mp->mFs == NULL) || (mp->mFs->fsMops == NULL) || (mp->mFs == NULL) || (mp->mFs->fsMops == NULL) ||
(mp->mFs->fsMops->umount2 == NULL)) { (mp->mFs->fsMops->umount2 == NULL)) {
@@ -298,15 +392,13 @@ int LOS_FsUmount2(const char *target, int flag)
/* delete mp from mount list */ /* delete mp from mount list */
MpDeleteFromList(mp); MpDeleteFromList(mp);
mp->mFs->fsRefs--; mp->mFs->fsRefs--;
free((void *)mp->mPath); LOSCFG_FS_FREE_HOOK(mp);
free((void *)mp->mDev);
free(mp);
VfsUnlock(); LOS_FsUnlock();
return LOS_OK; return LOS_OK;
errout: errout:
PRINT_ERR("umount2 failed, target %s.\n", target); PRINT_ERR("umount2 failed, target %s.\n", target);
VfsUnlock(); LOS_FsUnlock();
return (int)LOS_NOK; return (int)LOS_NOK;
} }
-2
View File
@@ -52,8 +52,6 @@ extern "C" {
extern UINT32 g_fsMutex; extern UINT32 g_fsMutex;
int OsVfsInit(void); int OsVfsInit(void);
int VfsLock(void);
void VfsUnlock(void);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
+17 -15
View File
@@ -77,6 +77,7 @@ struct DeviceDesc *getDeviceList(VOID)
static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int *addrArray, static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int *addrArray,
int partNum) int partNum)
{ {
size_t len;
struct DeviceDesc *prev = NULL; struct DeviceDesc *prev = NULL;
for (prev = g_deviceList; prev != NULL; prev = prev->dNext) { for (prev = g_deviceList; prev != NULL; prev = prev->dNext) {
if (strcmp(prev->dDev, dev) == 0) { if (strcmp(prev->dDev, dev) == 0) {
@@ -90,21 +91,25 @@ static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int
return (int)LOS_NOK; return (int)LOS_NOK;
} }
prev = (struct DeviceDesc *)malloc(sizeof(struct DeviceDesc)); prev = (struct DeviceDesc *)LOSCFG_FS_MALLOC_HOOK(sizeof(struct DeviceDesc));
if (prev == NULL) { if (prev == NULL) {
errno = -ENOMEM; errno = -ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
} }
prev->dDev = strdup(dev); len = strlen(dev) + 1;
prev->dFsType = strdup(fsType); prev->dDev = LOSCFG_FS_MALLOC_HOOK(len);
prev->dAddrArray = (int *)malloc(partNum * sizeof(int)); len = strlen(fsType) + 1;
prev->dFsType = LOSCFG_FS_MALLOC_HOOK(len);
prev->dAddrArray = (int *)LOSCFG_FS_MALLOC_HOOK(partNum * sizeof(int));
if (prev->dDev == NULL || prev->dFsType == NULL || prev->dAddrArray == NULL) { if (prev->dDev == NULL || prev->dFsType == NULL || prev->dAddrArray == NULL) {
goto errout; goto errout;
} }
(void)strcpy_s((char *)prev->dDev, len, dev);
(void)strcpy_s((char *)prev->dFsType, len, fsType);
(void)memcpy_s(prev->dAddrArray, partNum * sizeof(int), addrArray, partNum * sizeof(int)); (void)memcpy_s(prev->dAddrArray, partNum * sizeof(int), addrArray, partNum * sizeof(int));
if (lengthArray != NULL) { if (lengthArray != NULL) {
prev->dLengthArray = (int *)malloc(partNum * sizeof(int)); prev->dLengthArray = (int *)LOSCFG_FS_MALLOC_HOOK(partNum * sizeof(int));
if (prev->dLengthArray == NULL) { if (prev->dLengthArray == NULL) {
goto errout; goto errout;
} }
@@ -117,19 +122,19 @@ static int AddDevice(const char *dev, const char *fsType, int *lengthArray, int
return LOS_OK; return LOS_OK;
errout: errout:
if (prev->dDev != NULL) { if (prev->dDev != NULL) {
free((void *)prev->dDev); LOSCFG_FS_FREE_HOOK((void *)prev->dDev);
} }
if (prev->dFsType != NULL) { if (prev->dFsType != NULL) {
free((void *)prev->dFsType); LOSCFG_FS_FREE_HOOK((void *)prev->dFsType);
} }
if (prev->dAddrArray != NULL) { if (prev->dAddrArray != NULL) {
free((void *)prev->dAddrArray); LOSCFG_FS_FREE_HOOK((void *)prev->dAddrArray);
} }
if (prev->dLengthArray != NULL) { if (prev->dLengthArray != NULL) {
free((void *)prev->dLengthArray); LOSCFG_FS_FREE_HOOK((void *)prev->dLengthArray);
} }
free(prev); LOSCFG_FS_FREE_HOOK(prev);
errno = -ENOMEM; errno = -ENOMEM;
return (int)LOS_NOK; return (int)LOS_NOK;
} }
@@ -143,9 +148,7 @@ int LOS_DiskPartition(const char *dev, const char *fsType, int *lengthArray, int
if ((fMap != NULL) && (fMap->fsMgt != NULL) && if ((fMap != NULL) && (fMap->fsMgt != NULL) &&
(fMap->fsMgt->fdisk != NULL)) { (fMap->fsMgt->fdisk != NULL)) {
ret = fMap->fsMgt->fdisk(dev, lengthArray, partNum); ret = fMap->fsMgt->fdisk(dev, lengthArray, partNum);
if (ret == (int)LOS_NOK) { return ret;
return ret;
}
} }
ret = AddDevice(dev, fsType, lengthArray, addrArray, partNum); ret = AddDevice(dev, fsType, lengthArray, addrArray, partNum);
@@ -160,8 +163,7 @@ int LOS_PartitionFormat(const char *partName, char *fsType, void *data)
format is not allowed when the device has been mounted. */ format is not allowed when the device has been mounted. */
struct MountPoint *iter = NULL; struct MountPoint *iter = NULL;
LOS_MP_FOR_EACH_ENTRY(iter) { LOS_MP_FOR_EACH_ENTRY(iter) {
if ((iter->mFs != NULL) && (iter->mFs->fsType != NULL) && if ((iter->mPath != NULL) && (strcmp(iter->mPath, partName) == 0)) {
strcmp(iter->mFs->fsType, fsType) == 0) {
errno = EBUSY; errno = EBUSY;
return (int)LOS_NOK; return (int)LOS_NOK;
} }
+20 -20
View File
@@ -93,20 +93,25 @@ EXIT:
STATIC LmsMemListNode *OsLmsGetPoolNodeFromAddr(UINTPTR addr) STATIC LmsMemListNode *OsLmsGetPoolNodeFromAddr(UINTPTR addr)
{ {
LmsMemListNode *current = NULL; LmsMemListNode *current = NULL;
LmsMemListNode *previous = NULL;
LOS_DL_LIST *listHead = &g_lmsCheckPoolList; LOS_DL_LIST *listHead = &g_lmsCheckPoolList;
if (LOS_ListEmpty(&g_lmsCheckPoolList)) { if (LOS_ListEmpty(&g_lmsCheckPoolList)) {
goto EXIT; return NULL;
} }
LOS_DL_LIST_FOR_EACH_ENTRY(current, listHead, LmsMemListNode, node) { LOS_DL_LIST_FOR_EACH_ENTRY(current, listHead, LmsMemListNode, node) {
if ((addr >= current->poolAddr) && (addr < current->poolAddr + current->poolSize)) { if ((addr < current->poolAddr) || (addr >= (current->poolAddr + current->poolSize))) {
return current; continue;
}
if ((previous == NULL) ||
((previous->poolAddr <= current->poolAddr) &&
((current->poolAddr + current->poolSize) <= (previous->poolAddr + previous->poolSize)))) {
previous = current;
} }
} }
EXIT: return previous;
return NULL;
} }
STATIC LmsMemListNode *OsLmsCheckPoolCreate(VOID) STATIC LmsMemListNode *OsLmsCheckPoolCreate(VOID)
@@ -136,18 +141,12 @@ UINT32 LOS_LmsCheckPoolAdd(const VOID *pool, UINT32 size)
LMS_LOCK(intSave); LMS_LOCK(intSave);
lmsPoolNode = OsLmsGetPoolNodeFromAddr((UINTPTR)pool); lmsPoolNode = OsLmsGetPoolNode(pool);
if (lmsPoolNode != NULL) { /* if pool range already on checklist */ if (lmsPoolNode != NULL) { /* if pool already on checklist */
if (lmsPoolNode->poolAddr != (UINTPTR)pool) { /* pool is a subset of lmsPoolNode->poolAddr */ /* Re-initialize the same pool, maybe with different size */
/* do not add it again, just return */ /* delete the old node, then add a new one */
PRINT_DEBUG("[LMS]pool %p already on lms checklist !\n", pool); lmsPoolNode->used = LMS_POOL_UNUSED;
LMS_UNLOCK(intSave); LOS_ListDelete(&(lmsPoolNode->node));
return size; /* return size indicate the shadow memory init successful */
} else { /* Re-initialize the same pool, maybe with different size */
/* delete the old node, then add a new one */
lmsPoolNode->used = LMS_POOL_UNUSED;
LOS_ListDelete(&(lmsPoolNode->node));
}
} }
lmsPoolNode = OsLmsCheckPoolCreate(); lmsPoolNode = OsLmsCheckPoolCreate();
@@ -163,7 +162,7 @@ UINT32 LOS_LmsCheckPoolAdd(const VOID *pool, UINT32 size)
lmsPoolNode->shadowStart = (UINTPTR)poolAddr + realSize; lmsPoolNode->shadowStart = (UINTPTR)poolAddr + realSize;
lmsPoolNode->shadowSize = poolAddr + size - lmsPoolNode->shadowStart; lmsPoolNode->shadowSize = poolAddr + size - lmsPoolNode->shadowStart;
/* init shadow value */ /* init shadow value */
(VOID)memset((VOID *)lmsPoolNode->shadowStart, LMS_SHADOW_AFTERFREE_U8, lmsPoolNode->shadowSize); (VOID)memset_s((VOID *)lmsPoolNode->shadowStart, lmsPoolNode->shadowSize, LMS_SHADOW_AFTERFREE_U8, lmsPoolNode->shadowSize);
LOS_ListAdd(&g_lmsCheckPoolList, &(lmsPoolNode->node)); LOS_ListAdd(&g_lmsCheckPoolList, &(lmsPoolNode->node));
@@ -193,10 +192,11 @@ RELEASE:
VOID OsLmsInit(VOID) VOID OsLmsInit(VOID)
{ {
(VOID)memset(g_lmsCheckPoolArray, 0, sizeof(g_lmsCheckPoolArray)); (VOID)memset_s(g_lmsCheckPoolArray, sizeof(g_lmsCheckPoolArray), 0, sizeof(g_lmsCheckPoolArray));
LOS_ListInit(&g_lmsCheckPoolList); LOS_ListInit(&g_lmsCheckPoolList);
static LmsHook hook = { static LmsHook hook = {
.init = LOS_LmsCheckPoolAdd, .init = LOS_LmsCheckPoolAdd,
.deInit = LOS_LmsCheckPoolDel,
.mallocMark = OsLmsLosMallocMark, .mallocMark = OsLmsLosMallocMark,
.freeMark = OsLmsLosFreeMark, .freeMark = OsLmsLosFreeMark,
.simpleMark = OsLmsSimpleMark, .simpleMark = OsLmsSimpleMark,
@@ -609,7 +609,7 @@ VOID OsLmsReportError(UINTPTR p, UINT32 size, UINT32 errMod)
LMS_LOCK(intSave); LMS_LOCK(intSave);
g_checkDepth += 1; g_checkDepth += 1;
(VOID)memset(&info, 0, sizeof(LmsAddrInfo)); (VOID)memset_s(&info, sizeof(LmsAddrInfo), 0, sizeof(LmsAddrInfo));
PRINT_ERR("***** Kernel Address Sanitizer Error Detected Start *****\n"); PRINT_ERR("***** Kernel Address Sanitizer Error Detected Start *****\n");
+2 -1
View File
@@ -95,6 +95,7 @@ typedef struct {
typedef struct { typedef struct {
UINT32 (*init)(const VOID *pool, UINT32 size); UINT32 (*init)(const VOID *pool, UINT32 size);
VOID (*deInit)(const VOID *pool);
VOID (*mallocMark)(const VOID *curNodeStart, const VOID *nextNodeStart, UINT32 nodeHeadSize); VOID (*mallocMark)(const VOID *curNodeStart, const VOID *nextNodeStart, UINT32 nodeHeadSize);
VOID (*freeMark)(const VOID *curNodeStart, const VOID *nextNodeStart, UINT32 nodeHeadSize); VOID (*freeMark)(const VOID *curNodeStart, const VOID *nextNodeStart, UINT32 nodeHeadSize);
VOID (*simpleMark)(UINTPTR startAddr, UINTPTR endAddr, UINT32 value); VOID (*simpleMark)(UINTPTR startAddr, UINTPTR endAddr, UINT32 value);
@@ -133,4 +134,4 @@ extern SANITIZER_INTERFACE_ATTRIBUTE VOID __asan_handle_no_return(VOID);
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* _LOS_LMS_PRI_H */ #endif /* _LOS_LMS_PRI_H */
+2 -2
View File
@@ -27,14 +27,14 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("$LITEOSTHIRDPARTY/lwip/lwip.gni")
import("$LITEOSTOPDIR/components/net/lwip-2.1/lwip_porting.gni") import("$LITEOSTOPDIR/components/net/lwip-2.1/lwip_porting.gni")
import("$THIRDPARTY_LWIP_DIR/lwip.gni")
module_switch = defined(LOSCFG_NET_LWIP_SACK) module_switch = defined(LOSCFG_NET_LWIP_SACK)
module_name = "lwip" module_name = "lwip"
kernel_module(module_name) { kernel_module(module_name) {
sources = LWIP_PORTING_FILES + LWIPNOAPPSFILES - [ "$LWIPDIR/api/sockets.c" ] sources = LWIP_PORTING_FILES + LWIPNOAPPSFILES - [ "$LWIPDIR/api/sockets.c" ]
include_dirs = [ "//commonlibrary/utils_lite/include" ] include_dirs = [ "$COMMONLIBRARY_UTILS_LITE_DIR/include" ]
} }
config("public") { config("public") {
@@ -125,7 +125,7 @@ int ip6addr_aton(const char *cp, ip6_addr_t *addr)
int squash_pos = ipv6_blocks; int squash_pos = ipv6_blocks;
int i; int i;
const unsigned char *sc = (const unsigned char *)cp; const unsigned char *sc = (const unsigned char *)cp;
const char *ss = cp-1; const unsigned char *ss = (const unsigned char *)(cp - 1);
for (; ; sc++) { for (; ; sc++) {
if (current_block_index >= ipv6_blocks) { if (current_block_index >= ipv6_blocks) {
@@ -142,7 +142,7 @@ int ip6addr_aton(const char *cp, ip6_addr_t *addr)
break; break;
} else if (*sc == ':') { } else if (*sc == ':') {
if (sc - ss == 1) { if (sc - ss == 1) {
if (sc != cp || sc[1] != ':') { if (sc != (const unsigned char *)cp || sc[1] != ':') {
return 0; // address begins with a single ':' or contains ":::" return 0; // address begins with a single ':' or contains ":::"
} // else address begins with one valid "::" } // else address begins with one valid "::"
} else { } else {
@@ -163,7 +163,7 @@ int ip6addr_aton(const char *cp, ip6_addr_t *addr)
#if LWIP_IPV4 #if LWIP_IPV4
} else if (*sc == '.' && current_block_index < ipv6_blocks - 1) { } else if (*sc == '.' && current_block_index < ipv6_blocks - 1) {
ip4_addr_t ip4; ip4_addr_t ip4;
int ret = ip4addr_aton(ss+1, &ip4); int ret = ip4addr_aton((const char *)(ss + 1), &ip4);
if (!ret) { if (!ret) {
return 0; return 0;
} }
@@ -79,7 +79,7 @@ struct ifconfig_option {
unsigned char ethaddr[6]; unsigned char ethaddr[6];
u16_t mtu; u16_t mtu;
/* when using telnet, print to the telnet socket will result in system */ /* when using telnet, print to the telnet socket will result in system */
/* deadlock. So we cahe the prinf data to a buf, and when the tcpip */ /* deadlock. So we cache the prinf data to a buf, and when the tcpip */
/* callback returns, then print the data out to the telnet socket */ /* callback returns, then print the data out to the telnet socket */
sys_sem_t cb_completed; sys_sem_t cb_completed;
char cb_print_buf[PRINT_BUF_LEN]; char cb_print_buf[PRINT_BUF_LEN];
@@ -319,7 +319,7 @@ LWIP_STATIC int OsPingFunc(u32_t *parg)
u32_t succ_cnt = 0; u32_t succ_cnt = 0;
u32_t failed_cnt = 0; u32_t failed_cnt = 0;
struct timespec start, end; struct timespec start, end;
long timout_ms; long timeout_ms;
struct pollfd pfd; struct pollfd pfd;
long rtt; long rtt;
int ret = 0; int ret = 0;
@@ -373,7 +373,10 @@ LWIP_STATIC int OsPingFunc(u32_t *parg)
while (!ping_kill && (forever || (i < cnt))) { while (!ping_kill && (forever || (i < cnt))) {
iecho->seqno = htons((u16_t)i); iecho->seqno = htons((u16_t)i);
iecho->chksum = 0; iecho->chksum = 0;
#if (CHECKSUM_GEN_ICMP > 0)
iecho->chksum = inet_chksum((void *)iecho, iecho_len); iecho->chksum = inet_chksum((void *)iecho, iecho_len);
#endif
ret = sendto(sfd, iecho, iecho_len, 0, (struct sockaddr *)&to, (socklen_t)sizeof(to)); ret = sendto(sfd, iecho, iecho_len, 0, (struct sockaddr *)&to, (socklen_t)sizeof(to));
if (ret < 0) { if (ret < 0) {
@@ -428,17 +431,17 @@ LWIP_STATIC int OsPingFunc(u32_t *parg)
((ICMPH_TYPE(iecho_resp) == ICMP_ECHO) && (iphdr_resp->src.addr == to.sin_addr.s_addr))) { ((ICMPH_TYPE(iecho_resp) == ICMP_ECHO) && (iphdr_resp->src.addr == to.sin_addr.s_addr))) {
/* second type timeout event */ /* second type timeout event */
(void)clock_gettime(CLOCK_MONOTONIC_RAW, &end); (void)clock_gettime(CLOCK_MONOTONIC_RAW, &end);
timout_ms = ((end.tv_sec - start.tv_sec) * OS_SYS_MS_PER_SECOND + \ timeout_ms = ((end.tv_sec - start.tv_sec) * OS_SYS_MS_PER_SECOND + \
(end.tv_nsec - start.tv_nsec) / OS_SYS_NS_PER_MS); (end.tv_nsec - start.tv_nsec) / OS_SYS_NS_PER_MS);
timout_ms = LWIP_SHELL_CMD_PING_TIMEOUT - timout_ms; timeout_ms = LWIP_SHELL_CMD_PING_TIMEOUT - timeout_ms;
} else { } else {
timout_ms = 0; timeout_ms = 0;
break; break;
} }
} while (timout_ms >= 0); } while (timeout_ms >= 0);
/* all timeout events are true timeout */ /* all timeout events are true timeout */
if ((timout_ms < 0) || (timeout_flag == TRUE)) { if ((timeout_ms < 0) || (timeout_flag == TRUE)) {
failed_cnt++; failed_cnt++;
i++; i++;
PRINTK("\nPing: destination unreachable ..."); PRINTK("\nPing: destination unreachable ...");
+24 -11
View File
@@ -101,21 +101,27 @@ STATIC VOID OsPmTickTimerStart(LosPmCB *pm)
} }
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
if ((tickTimer->timerStop != NULL) && (pm->enterSleepTime != 0)) { if (tickTimer->timerStop != NULL) {
/* Restore the main CPU frequency */ if (pm->enterSleepTime != 0) {
sleepTime = tickTimer->timerCycleGet(); /* Restore the main CPU frequency */
tickTimer->timerStop(); sleepTime = tickTimer->timerCycleGet();
tickTimer->timerStop();
realSleepTime = OS_SYS_CYCLE_TO_NS(sleepTime, tickTimer->freq); realSleepTime = OS_SYS_CYCLE_TO_NS(sleepTime, tickTimer->freq);
realSleepTime = OS_SYS_NS_TO_CYCLE(realSleepTime, g_sysClock); realSleepTime = OS_SYS_NS_TO_CYCLE(realSleepTime, g_sysClock);
currTime = pm->enterSleepTime + realSleepTime; currTime = pm->enterSleepTime + realSleepTime;
pm->enterSleepTime = 0; pm->enterSleepTime = 0;
OsTickTimerBaseReset(currTime); OsTickTimerBaseReset(currTime);
OsSchedResetSchedResponseTime(0); OsSchedResetSchedResponseTime(0);
/* Restart the system tick timer */
tickTimer->tickUnlock();
}
return;
} }
#endif #endif
/* Restore the system tick timer */
tickTimer->tickUnlock(); tickTimer->tickUnlock();
return; return;
} }
@@ -142,14 +148,21 @@ STATIC BOOL OsPmTickTimerStop(LosPmCB *pm)
sleepCycle = OS_SYS_CYCLE_TO_NS(realSleepTime, g_sysClock); sleepCycle = OS_SYS_CYCLE_TO_NS(realSleepTime, g_sysClock);
sleepCycle = OS_SYS_NS_TO_CYCLE(sleepCycle, tickTimer->freq); sleepCycle = OS_SYS_NS_TO_CYCLE(sleepCycle, tickTimer->freq);
if (sleepCycle == 0) {
pm->sysMode = LOS_SYS_NORMAL_SLEEP;
return FALSE;
}
/* The main CPU reduces the frequency */ /* The main CPU reduces the frequency */
pm->enterSleepTime = LOS_SysCycleGet(); pm->enterSleepTime = LOS_SysCycleGet();
/* Turn off the system tick timer and clear the count value to zero */
tickTimer->tickLock(); tickTimer->tickLock();
tickTimer->timerStart(sleepCycle); tickTimer->timerStart(sleepCycle);
return TRUE; return TRUE;
} }
#endif #endif
/* Pause the system tick timer */
tickTimer->tickLock(); tickTimer->tickLock();
return TRUE; return TRUE;
} }
@@ -167,7 +180,7 @@ STATIC VOID OsPmCpuResume(LosPmCB *pm)
STATIC VOID OsPmCpuSuspend(LosPmCB *pm) STATIC VOID OsPmCpuSuspend(LosPmCB *pm)
{ {
/* cpu enter low power mode */ /* cpu enter low-power mode */
if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) { if (pm->sysMode == LOS_SYS_NORMAL_SLEEP) {
pm->sysctrl->normalSuspend(); pm->sysctrl->normalSuspend();
+31 -19
View File
@@ -39,7 +39,7 @@
/** /**
* @ingroup los_pm * @ingroup los_pm
* Pm error code: Invalid low power mode. * Pm error code: Invalid low-power mode.
* *
* Value: 0x02002001 * Value: 0x02002001
* *
@@ -141,21 +141,33 @@ typedef enum {
} LOS_PmNodeType; } LOS_PmNodeType;
typedef struct { typedef struct {
UINT32 (*suspend)(UINT32 mode); /* The device enters low power consumption, Unlocked task scheduling. */ UINT32 (*suspend)(UINT32 mode); /* The device enters low-power consumption, Unlocked task scheduling. */
VOID (*resume)(UINT32 mode); /* The device exits from low power consumption, Unlocked task scheduling. */ VOID (*resume)(UINT32 mode); /* The device exits from low-power consumption, Unlocked task scheduling. */
} LosPmDevice; } LosPmDevice;
typedef struct { typedef struct {
UINT32 freq; /* The frequency of the low power timer */ /* Low-power timer related implementation functions.
VOID (*timerStart)(UINT64); /* Start the low power timer */ * The function is not NULL, the low-power timer is enabled.
VOID (*timerStop)(VOID); /* Stop the low power timer */ */
UINT64 (*timerCycleGet)(VOID); /* Gets the running time of the low power timer in unit cycle */ UINT32 freq; /* The frequency of the low-power timer */
VOID (*tickLock)(VOID); /* Pause the system tick timer */ VOID (*timerStart)(UINT64); /* Start the low-power timer and set the response period */
VOID (*tickUnlock)(VOID); /* Restore the system tick timer */ VOID (*timerStop)(VOID); /* Turn off the low-power timer */
UINT64 (*timerCycleGet)(VOID); /* Gets the time the system sleeps */
/* When the low-power timer is enabled, the function of tickLock is to turn off the system tick timer and
* clear the timer's count value to zero.
* When the low-power timer is disabled, the function of tickLock is to pause the system timer.
*/
VOID (*tickLock)(VOID);
/* When the low-power timer is enabled, the function of tickUnlock is to restart the system tick timer.
* When the low-power timer is disabled, the function of tickUnlock is to restore the system tick timer.
*/
VOID (*tickUnlock)(VOID);
} LosPmTickTimer; } LosPmTickTimer;
typedef struct { typedef struct {
/* Preparations before the CPU enters low power consumption. /* Preparations before the CPU enters low-power consumption.
* All modes except normal mode are invoked. * All modes except normal mode are invoked.
* Unlocked task scheduling. * Unlocked task scheduling.
*/ */
@@ -203,10 +215,10 @@ typedef struct {
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Initialize system low power frame. * @brief Initialize system low-power frame.
* *
* @par Description: * @par Description:
* This API is used to initialize the system low power frame. * This API is used to initialize the system low-power frame.
* *
* @attention None. * @attention None.
* *
@@ -221,10 +233,10 @@ UINT32 OsPmInit(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Whether the low power consumption condition is met. * @brief Whether the low-power consumption condition is met.
* *
* @par Description: * @par Description:
* This API is used to check whether low power consumption is met. * This API is used to check whether low-power consumption is met.
* *
* @attention None. * @attention None.
* *
@@ -302,10 +314,10 @@ VOID LOS_PmWakeSet(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Get the low power mode of the current system. * @brief Get the low-power mode of the current system.
* *
* @par Description: * @par Description:
* This API is used to get the low power mode of the current system. * This API is used to get the low-power mode of the current system.
* *
* @attention None. * @attention None.
* *
@@ -320,14 +332,14 @@ LOS_SysSleepEnum LOS_PmModeGet(VOID);
/** /**
* @ingroup los_pm * @ingroup los_pm
* @brief Set low power mode. * @brief Set low-power mode.
* *
* @par Description: * @par Description:
* This API is used to set low power mode. * This API is used to set low-power mode.
* *
* @attention None. * @attention None.
* *
* @param mode [IN] low power mode. * @param mode [IN] low-power mode.
* *
* @retval error code, LOS_OK means success. * @retval error code, LOS_OK means success.
* @par Dependency: * @par Dependency:
+1 -1
View File
@@ -33,5 +33,5 @@ module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) { kernel_module(module_name) {
sources = [] sources = []
deps = [ "//third_party/musl/porting/liteos_m/user" ] deps = [ "$THIRDPARTY_MUSL_DIR/porting/liteos_m/user" ]
} }
+5
View File
@@ -19,6 +19,11 @@ config SHELL_PRIO
range 1 31 range 1 31
depends on SHELL depends on SHELL
config SHELL_STACK_SIZE
int "Shell Task Stack Size"
default 4096
depends on SHELL
config SHELL_LK config SHELL_LK
bool "Enable Shell lk" bool "Enable Shell lk"
default y default y
+1 -1
View File
@@ -258,7 +258,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LosShellInit(VOID)
} }
task1.pfnTaskEntry = (TSK_ENTRY_FUNC)ShellTaskEntry; task1.pfnTaskEntry = (TSK_ENTRY_FUNC)ShellTaskEntry;
task1.uwStackSize = 0x1000; task1.uwStackSize = LOSCFG_SHELL_STACK_SIZE;
task1.pcName = "ShellTaskEntry"; task1.pcName = "ShellTaskEntry";
task1.usTaskPrio = LOSCFG_SHELL_PRIO; task1.usTaskPrio = LOSCFG_SHELL_PRIO;
ret = LOS_TaskCreate(&taskID1, &task1); ret = LOS_TaskCreate(&taskID1, &task1);
+25 -4
View File
@@ -181,6 +181,7 @@ VOID OsLs(const CHAR *pathname)
d = opendir(path); d = opendir(path);
if (d == NULL) { if (d == NULL) {
PRINT_ERR("No such directory = %s\n", path); PRINT_ERR("No such directory = %s\n", path);
free(path);
} else { } else {
PRINTK("Directory %s:\n", path); PRINTK("Directory %s:\n", path);
do { do {
@@ -625,6 +626,24 @@ STATIC INT32 OsIsContainersWildcard(const CHAR *filename)
return 0; return 0;
} }
/* Delete a non directory file */
STATIC INT32 OsRmFileOnly(const CHAR *fullpath)
{
struct stat statInfo = {0};
INT32 ret = stat(fullpath, &statInfo);
if (ret == 0) {
if (!S_ISDIR(statInfo.st_mode)) {
ret = unlink(fullpath);
} else {
ret = 0;
PRINTK("rm: cannot remove '%s': Is a directory\n", fullpath);
}
} else {
PRINTK("stat: get '%s' statInfo fail!\n", fullpath);
}
return ret;
}
/* Delete a matching file or directory */ /* Delete a matching file or directory */
STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark) STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
@@ -636,7 +655,7 @@ STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
ret = OsShellCmdDoRmdir(fullpath); ret = OsShellCmdDoRmdir(fullpath);
break; break;
case RM_FILE: case RM_FILE:
ret = unlink(fullpath); ret = OsRmFileOnly(fullpath);
break; break;
case RM_DIR: case RM_DIR:
ret = rmdir(fullpath); ret = rmdir(fullpath);
@@ -649,8 +668,6 @@ STATIC INT32 OsWildcardDeleteFileOrDir(const CHAR *fullpath, wildcard_type mark)
perror("rm/rmdir error!"); perror("rm/rmdir error!");
return ret; return ret;
} }
PRINTK("%s match successful!delete!\n", fullpath);
return 0; return 0;
} }
@@ -728,6 +745,10 @@ STATIC INT32 OsWildcardExtractDirectory(CHAR *fullpath, VOID *dst, wildcard_type
break; break;
} }
if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, "..")) {
continue;
}
ret = strcpy_s(src, PATH_MAX, f); ret = strcpy_s(src, PATH_MAX, f);
if (ret != EOK) { if (ret != EOK) {
goto closedir_out; goto closedir_out;
@@ -910,7 +931,7 @@ INT32 OsShellCmdRm(INT32 argc, const CHAR **argv)
if (OsIsContainersWildcard(fullpath)) { if (OsIsContainersWildcard(fullpath)) {
ret = OsWildcardExtractDirectory(fullpath, NULL, RM_FILE); ret = OsWildcardExtractDirectory(fullpath, NULL, RM_FILE);
} else { } else {
ret = unlink(fullpath); ret = OsRmFileOnly(fullpath);
} }
} }
if (ret == -1) { if (ret == -1) {
+2
View File
@@ -235,7 +235,9 @@ VOID OsTraceCnvInit(VOID)
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ_COPY, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW); LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE_COPY, LOS_TraceQueueRW);
LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate); LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate);
LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete); LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete);
LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost); LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost);
Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 97 KiB

+1 -1
View File
@@ -28,7 +28,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/cmsis/cmsis.gni") import("$THIRDPARTY_CMSIS_DIR/cmsis.gni")
module_switch = defined(LOSCFG_KAL_CMSIS) module_switch = defined(LOSCFG_KAL_CMSIS)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
+10
View File
@@ -42,6 +42,9 @@
#include "los_task.h" #include "los_task.h"
#include "los_timer.h" #include "los_timer.h"
#include "los_debug.h" #include "los_debug.h"
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
#include "los_arch.h"
#endif
#include "string.h" #include "string.h"
#include "securec.h" #include "securec.h"
@@ -1002,6 +1005,10 @@ osMutexId_t osMutexNew(const osMutexAttr_t *attr)
UINT32 ret; UINT32 ret;
UINT32 muxId; UINT32 muxId;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
UNUSED(attr); UNUSED(attr);
if (OS_INT_ACTIVE) { if (OS_INT_ACTIVE) {
@@ -1010,6 +1017,9 @@ osMutexId_t osMutexNew(const osMutexAttr_t *attr)
ret = LOS_MuxCreate(&muxId); ret = LOS_MuxCreate(&muxId);
if (ret == LOS_OK) { if (ret == LOS_OK) {
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(muxId), regLR);
#endif
return (osMutexId_t)(GET_MUX(muxId)); return (osMutexId_t)(GET_MUX(muxId));
} else { } else {
return (osMutexId_t)NULL; return (osMutexId_t)NULL;
+2 -4
View File
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -35,14 +35,12 @@ choice
config LIBC_MUSL config LIBC_MUSL
bool "musl libc" bool "musl libc"
rsource "musl/Kconfig"
config LIBC_NEWLIB config LIBC_NEWLIB
bool "newlibc" bool "newlibc"
rsource "newlib/Kconfig"
config LIBC_ICCARM config LIBC_ICCARM
bool "iar libc" bool "iar libc"
rsource "iccarm/Kconfig" depends on COMPILER_ICCARM
endchoice endchoice
+2 -2
View File
@@ -27,14 +27,14 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/musl/porting/liteos_m_iccarm/kernel/iccarm.gni") import("$THIRDPARTY_MUSL_DIR/porting/liteos_m_iccarm/kernel/iccarm.gni")
module_switch = defined(LOSCFG_LIBC_ICCARM) module_switch = defined(LOSCFG_LIBC_ICCARM)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) { kernel_module(module_name) {
configs += [ "$LITEOSTOPDIR:warn_config" ] configs += [ "$LITEOSTOPDIR:warn_config" ]
deps = [ "//third_party/musl/porting/liteos_m_iccarm/kernel" ] deps = [ "$THIRDPARTY_MUSL_DIR/porting/liteos_m_iccarm/kernel" ]
} }
config("public") { config("public") {
+3 -7
View File
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -28,18 +28,14 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/musl/porting/liteos_m/kernel/musl.gni") import("$THIRDPARTY_MUSL_DIR/porting/liteos_m/kernel/musl.gni")
module_switch = defined(LOSCFG_LIBC_MUSL) module_switch = defined(LOSCFG_LIBC_MUSL)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) { kernel_module(module_name) {
sources = [
"fs.c",
"malloc.c",
]
configs += [ "$LITEOSTOPDIR:warn_config" ] configs += [ "$LITEOSTOPDIR:warn_config" ]
deps = [ "//third_party/musl/porting/liteos_m/kernel" ] deps = [ "$THIRDPARTY_MUSL_DIR/porting/liteos_m/kernel" ]
} }
config("public") { config("public") {
-329
View File
@@ -1,329 +0,0 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define _GNU_SOURCE
#include "los_config.h"
#include <errno.h>
#include <stdarg.h>
#include <dirent.h>
#include <sys/mount.h>
#include <sys/statfs.h>
#include <sys/stat.h>
#include <unistd.h>
#ifdef LOSCFG_LIBC_MUSL_FS
#include "los_fs.h"
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data)
{
return LOS_FsMount(source, target, filesystemtype, mountflags, data);
}
int umount(const char *target)
{
return LOS_FsUmount(target);
}
int umount2(const char *target, int flag)
{
return LOS_FsUmount2(target, flag);
}
int open(const char *path, int oflag, ...)
{
va_list vaList;
va_start(vaList, oflag);
int ret;
ret = LOS_Open(path, oflag, vaList);
va_end(vaList);
return ret;
}
int close(int fd)
{
return LOS_Close(fd);
}
ssize_t read(int fd, void *buf, size_t nbyte)
{
return LOS_Read(fd, buf, nbyte);
}
ssize_t write(int fd, const void *buf, size_t nbyte)
{
return LOS_Write(fd, buf, nbyte);
}
off_t lseek(int fd, off_t offset, int whence)
{
return LOS_Lseek(fd, offset, whence);
}
int unlink(const char *path)
{
return LOS_Unlink(path);
}
int fstat(int fd, struct stat *buf)
{
return LOS_Fstat(fd, buf);
}
int stat(const char *path, struct stat *buf)
{
return LOS_Stat(path, buf);
}
int fsync(int fd)
{
return LOS_Fsync(fd);
}
int mkdir(const char *path, mode_t mode)
{
return LOS_Mkdir(path, mode);
}
DIR *opendir(const char *dirName)
{
return LOS_Opendir(dirName);
}
struct dirent *readdir(DIR *dir)
{
return LOS_Readdir(dir);
}
int closedir(DIR *dir)
{
return LOS_Closedir(dir);
}
int rmdir(const char *path)
{
return LOS_Unlink(path);
}
int rename(const char *oldName, const char *newName)
{
return LOS_Rename(oldName, newName);
}
int statfs(const char *path, struct statfs *buf)
{
return LOS_Statfs(path, buf);
}
int ftruncate(int fd, off_t length)
{
return LOS_Ftruncate(fd, length);
}
ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset)
{
return LOS_Pread(fd, buf, nbyte, offset);
}
ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset)
{
return LOS_Pwrite(fd, buf, nbyte, offset);
}
int access(const char *path, int mode)
{
struct stat st;
if (stat(path, &st) < 0) {
return -1;
}
if ((st.st_mode & S_IFDIR) || (st.st_mode & S_IFREG)) {
return 0;
}
if ((mode & W_OK) && !(st.st_mode & S_IWRITE)) {
return -1;
}
return 0;
}
int fcntl(int fd, int cmd, ...)
{
int ret;
va_list vaList;
va_start(vaList, cmd);
ret = OsFcntl(fd, cmd, vaList);
va_end(vaList);
return ret;
}
int ioctl(int fd, int req, ...)
{
int ret;
va_list vaList;
va_start(vaList, req);
ret = OsIoctl(fd, req, vaList);
va_end(vaList);
return ret;
}
#else /* #ifdef LOSCFG_FS_VFS */
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data)
{
return -1;
}
int umount(const char *target)
{
return -1;
}
int umount2(const char *target, int flag)
{
return -1;
}
int open(const char *path, int oflag, ...)
{
return -1;
}
int close(int fd)
{
return -1;
}
ssize_t read(int fd, void *buf, size_t nbyte)
{
return -1;
}
ssize_t write(int fd, const void *buf, size_t nbyte)
{
return -1;
}
off_t lseek(int fd, off_t offset, int whence)
{
return -1;
}
int unlink(const char *path)
{
return -1;
}
int fstat(int fd, struct stat *buf)
{
return -1;
}
int stat(const char *path, struct stat *buf)
{
return -1;
}
int fsync(int fd)
{
return -1;
}
int mkdir(const char *path, mode_t mode)
{
return -1;
}
DIR *opendir(const char *dirName)
{
return NULL;
}
struct dirent *readdir(DIR *dir)
{
return NULL;
}
int closedir(DIR *dir)
{
return -1;
}
int rmdir(const char *path)
{
return -1;
}
int rename(const char *oldName, const char *newName)
{
return -1;
}
int statfs(const char *path, struct statfs *buf)
{
return -1;
}
int ftruncate(int fd, off_t length)
{
return -1;
}
ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset)
{
return -1;
}
ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset)
{
return -1;
}
int access(const char *path, int mode)
{
return -1;
}
int fcntl(int fd, int cmd, ...)
{
return -1;
}
int ioctl(int fd, int req, ...)
{
return -1;
}
#endif
+4 -7
View File
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -33,20 +33,17 @@ module_switch = defined(LOSCFG_LIBC_NEWLIB)
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) { kernel_module(module_name) {
sources = [ sources = [
"porting/src/fs.c", "porting/src/hook_adapt.c",
"porting/src/malloc.c",
"porting/src/network/htonl.c", "porting/src/network/htonl.c",
"porting/src/network/htons.c", "porting/src/network/htons.c",
"porting/src/network/ntohl.c", "porting/src/network/ntohl.c",
"porting/src/network/ntohs.c", "porting/src/network/ntohs.c",
"porting/src/other_adapt.c",
"porting/src/time.c",
] ]
configs += [ "$LITEOSTOPDIR:warn_config" ] configs += [ "$LITEOSTOPDIR:warn_config" ]
if (defined(LOSCFG_LIBC_NEWLIB_FS)) { if (defined(LOSCFG_FS_VFS)) {
sources += sources +=
[ "//third_party/musl/porting/liteos_m/kernel/src/misc/realpath.c" ] [ "$THIRDPARTY_MUSL_DIR/porting/liteos_m/kernel/src/misc/realpath.c" ]
} }
} }
-39
View File
@@ -1,39 +0,0 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if LIBC_NEWLIB
config LIBC_NEWLIB_FS
bool "Enable POSIX file system API support"
default y
depends on FS_VFS
help
This enables POSIX style file system related APIs.
endif # LIBC_NEWLIB
@@ -49,6 +49,7 @@ typedef struct {
int sem_init(sem_t *sem, int shared, unsigned value); int sem_init(sem_t *sem, int shared, unsigned value);
int sem_destroy(sem_t *sem); int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem); int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem); int sem_post(sem_t *sem);
int sem_timedwait(sem_t *__restrict sem, const struct timespec *__restrict timeout); int sem_timedwait(sem_t *__restrict sem, const struct timespec *__restrict timeout);
int sem_getvalue(sem_t *__restrict sem, int *__restrict currVal); int sem_getvalue(sem_t *__restrict sem, int *__restrict currVal);
@@ -50,6 +50,7 @@
#define _POSIX_THREAD_PRIORITY_SCHEDULING #define _POSIX_THREAD_PRIORITY_SCHEDULING
#define _UNIX98_THREAD_MUTEX_ATTRIBUTES #define _UNIX98_THREAD_MUTEX_ATTRIBUTES
#define _POSIX_THREAD_PROCESS_SHARED #define _POSIX_THREAD_PROCESS_SHARED
#define _POSIX_PRIORITY_SCHEDULING
#include_next <sys/features.h> #include_next <sys/features.h>
-271
View File
@@ -1,271 +0,0 @@
/*
* Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define _GNU_SOURCE
#include "los_config.h"
#include <errno.h>
#include <stdio.h>
#include <stdarg.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#ifdef LOSCFG_LIBC_NEWLIB_FS
#include "los_fs.h"
#endif
#ifdef LOSCFG_LIBC_NEWLIB_FS
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data)
{
return LOS_FsMount(source, target, filesystemtype, mountflags, data);
}
int umount(const char *target)
{
return LOS_FsUmount(target);
}
int umount2(const char *target, int flag)
{
return LOS_FsUmount2(target, flag);
}
int _open(const char *path, int oflag, ...)
{
va_list vaList;
va_start(vaList, oflag);
int ret;
ret = LOS_Open(path, oflag);
va_end(vaList);
return ret;
}
int _close(int fd)
{
return LOS_Close(fd);
}
ssize_t _read(int fd, void *buf, size_t nbyte)
{
return LOS_Read(fd, buf, nbyte);
}
ssize_t _write(int fd, const void *buf, size_t nbyte)
{
return LOS_Write(fd, buf, nbyte);
}
off_t _lseek(int fd, off_t offset, int whence)
{
return LOS_Lseek(fd, offset, whence);
}
int _unlink(const char *path)
{
return LOS_Unlink(path);
}
int _fstat(int fd, struct stat *buf)
{
return LOS_Fstat(fd, buf);
}
int _stat(const char *path, struct stat *buf)
{
return LOS_Stat(path, buf);
}
int fsync(int fd)
{
return LOS_Fsync(fd);
}
int mkdir(const char *path, mode_t mode)
{
return LOS_Mkdir(path, mode);
}
DIR *opendir(const char *dirName)
{
return LOS_Opendir(dirName);
}
struct dirent *readdir(DIR *dir)
{
return LOS_Readdir(dir);
}
int closedir(DIR *dir)
{
return LOS_Closedir(dir);
}
int rmdir(const char *path)
{
return LOS_Unlink(path);
}
int rename(const char *oldName, const char *newName)
{
return LOS_Rename(oldName, newName);
}
int statfs(const char *path, struct statfs *buf)
{
return LOS_Statfs(path, buf);
}
int ftruncate(int fd, off_t length)
{
return LOS_Ftruncate(fd, length);
}
int fcntl(int fd, int cmd, ...)
{
int ret;
va_list vaList;
va_start(vaList, cmd);
ret = OsFcntl(fd, cmd, vaList);
va_end(vaList);
return ret;
}
int ioctl(int fd, int req, ...)
{
int ret;
va_list vaList;
va_start(vaList, req);
ret = OsIoctl(fd, req, vaList);
va_end(vaList);
return ret;
}
ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset)
{
return LOS_Pread(fd, buf, nbyte, offset);
}
ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset)
{
return LOS_Pwrite(fd, buf, nbyte, offset);
}
int access(const char *path, int mode)
{
struct stat st;
if (stat(path, &st) < 0) {
return -1;
}
if ((st.st_mode & S_IFDIR) || (st.st_mode & S_IFREG)) {
return 0;
}
if ((mode & W_OK) && !(st.st_mode & S_IWRITE)) {
return -1;
}
return 0;
}
int remove(const char *filename)
{
int ret = unlink(filename);
if (ret == -EISDIR) {
ret = rmdir(filename);
}
return ret;
}
#else /* #ifdef LOSCFG_FS_VFS */
int _open(const char *path, int oflag, ...)
{
return -1;
}
int _close(int fd)
{
return -1;
}
ssize_t _read(int fd, void *buf, size_t nbyte)
{
return -1;
}
ssize_t _write(int fd, const void *buf, size_t nbyte)
{
return -1;
}
off_t _lseek(int fd, off_t offset, int whence)
{
return -1;
}
int _unlink(const char *path)
{
return -1;
}
int _fstat(int fd, struct stat *buf)
{
return -1;
}
int _stat(const char *path, struct stat *buf)
{
return -1;
}
int access(const char *path, int mode)
{
return -1;
}
int remove(const char *filename)
{
return -1;
}
int fcntl(int fd, int cmd, ...)
{
return -1;
}
int ioctl(int fd, int req, ...)
{
return -1;
}
#endif
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021-2022 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2021-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -35,6 +35,12 @@
#include <unistd.h> #include <unistd.h>
#include <pthread.h> #include <pthread.h>
/*
* fs adapter interface, such as _read, see component/fs
* time adapter interface, such as _gettimeofday, see posix/src/time.c
* malloc adapter interface, such as _malloc_r, see posix/src/malloc.c
*/
int _isatty(int file) int _isatty(int file)
{ {
return (int)(file <= 2); // 2: stderr return (int)(file <= 2); // 2: stderr
@@ -57,4 +63,3 @@ void _exit(int status)
while (1) { while (1) {
} }
} }
-113
View File
@@ -1,113 +0,0 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "securec.h"
#include "los_config.h"
#include "los_memory.h"
#include <malloc.h>
void *zalloc(size_t size)
{
void *ptr = NULL;
if (size == 0) {
return NULL;
}
ptr = LOS_MemAlloc(OS_SYS_MEM_ADDR, size);
if (ptr != NULL) {
(void)memset_s(ptr, size, 0, size);
}
return ptr;
}
void __wrap__free_r(struct _reent *reent, void *aptr)
{
if (aptr == NULL) {
return;
}
LOS_MemFree(OS_SYS_MEM_ADDR, aptr);
}
size_t __wrap__malloc_usable_size_r(struct _reent *reent, void *aptr)
{
return 0;
}
void *__wrap__malloc_r(struct _reent *reent, size_t nbytes)
{
if (nbytes == 0) {
return NULL;
}
return LOS_MemAlloc(OS_SYS_MEM_ADDR, nbytes);
}
void *__wrap__memalign_r(struct _reent *reent, size_t align, size_t nbytes)
{
if (nbytes == 0) {
return NULL;
}
return LOS_MemAllocAlign(OS_SYS_MEM_ADDR, nbytes, align);
}
void *__wrap__realloc_r(struct _reent *reent, void *aptr, size_t nbytes)
{
if (aptr == NULL) {
return malloc(nbytes);
}
if (nbytes == 0) {
free(aptr);
return NULL;
}
return LOS_MemRealloc(OS_SYS_MEM_ADDR, aptr, nbytes);
}
void *__wrap__calloc_r(struct _reent *reent, size_t nitems, size_t size)
{
size_t real_size;
void *ptr = NULL;
if (nitems == 0 || size == 0) {
return NULL;
}
real_size = (size_t)(nitems * size);
ptr = LOS_MemAlloc(OS_SYS_MEM_ADDR, real_size);
if (ptr != NULL) {
(void)memset_s(ptr, real_size, 0, real_size);
}
return ptr;
}
+1 -1
View File
@@ -28,7 +28,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
import("//third_party/bounds_checking_function/libsec_src.gni") import("$THIRDPARTY_BOUNDS_CHECKING_FUNCTION_DIR/libsec_src.gni")
module_name = get_path_info(rebase_path("."), "name") module_name = get_path_info(rebase_path("."), "name")
kernel_module(module_name) { kernel_module(module_name) {
+6 -1
View File
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -35,6 +35,7 @@ kernel_module(module_name) {
sources = [ sources = [
"src/errno.c", "src/errno.c",
"src/libc.c", "src/libc.c",
"src/map_error.c",
] ]
configs += [ "$LITEOSTOPDIR:warn_config" ] configs += [ "$LITEOSTOPDIR:warn_config" ]
@@ -67,6 +68,10 @@ kernel_module(module_name) {
if (defined(LOSCFG_POSIX_SIGNAL_API)) { if (defined(LOSCFG_POSIX_SIGNAL_API)) {
sources += [ "src/signal.c" ] sources += [ "src/signal.c" ]
} }
if (defined(LOSCFG_POSIX_MALLOC_API)) {
sources += [ "src/malloc.c" ]
}
} }
config("public") { config("public") {
+14 -1
View File
@@ -1,5 +1,5 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. # Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. # Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met: # are permitted provided that the following conditions are met:
@@ -73,4 +73,17 @@ config POSIX_SIGNAL_API
help help
Answer Y to enable LiteOS support POSIX Signal API. Answer Y to enable LiteOS support POSIX Signal API.
config POSIX_FS_API
bool "Enable POSIX FS API"
default y
depends on FS_VFS
help
Answer Y to enable LiteOS support POSIX FS API.
config POSIX_MALLOC_API
bool "Enable POSIX MALLOC API"
default y
help
Answer Y to enable LiteOS support POSIX MALLOC API.
endif # POSIX_API endif # POSIX_API
@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -34,9 +34,15 @@
#include "los_config.h" #include "los_config.h"
#include "los_memory.h" #include "los_memory.h"
#if (LOSCFG_LIBC_NEWLIB == 1)
void *__wrap__calloc_r(struct _reent *reent, size_t nitems, size_t size)
#else
void *calloc(size_t nitems, size_t size) void *calloc(size_t nitems, size_t size)
#endif
{ {
#if (LOSCFG_LIBC_NEWLIB == 1)
(void)reent;
#endif
size_t real_size; size_t real_size;
void *ptr = NULL; void *ptr = NULL;
@@ -52,8 +58,15 @@ void *calloc(size_t nitems, size_t size)
return ptr; return ptr;
} }
#if (LOSCFG_LIBC_NEWLIB == 1)
void __wrap__free_r(struct _reent *reent, void *ptr)
#else
void free(void *ptr) void free(void *ptr)
#endif
{ {
#if (LOSCFG_LIBC_NEWLIB == 1)
(void)reent;
#endif
if (ptr == NULL) { if (ptr == NULL) {
return; return;
} }
@@ -61,8 +74,24 @@ void free(void *ptr)
LOS_MemFree(OS_SYS_MEM_ADDR, ptr); LOS_MemFree(OS_SYS_MEM_ADDR, ptr);
} }
void *malloc(size_t size) #if (LOSCFG_LIBC_NEWLIB == 1)
size_t __wrap__malloc_usable_size_r(struct _reent *reent, void *aptr)
{ {
(void)reent;
(void)aptr;
return 0;
}
#endif
#if (LOSCFG_LIBC_NEWLIB == 1)
void *__wrap__malloc_r(struct _reent *reent, size_t size)
#else
void *malloc(size_t size)
#endif
{
#if (LOSCFG_LIBC_NEWLIB == 1)
(void)reent;
#endif
if (size == 0) { if (size == 0) {
return NULL; return NULL;
} }
@@ -85,8 +114,15 @@ void *zalloc(size_t size)
return ptr; return ptr;
} }
#if (LOSCFG_LIBC_NEWLIB == 1)
void *__wrap__memalign_r(struct _reent *reent, size_t boundary, size_t size)
#else
void *memalign(size_t boundary, size_t size) void *memalign(size_t boundary, size_t size)
#endif
{ {
#if (LOSCFG_LIBC_NEWLIB == 1)
(void)reent;
#endif
if (size == 0) { if (size == 0) {
return NULL; return NULL;
} }
@@ -94,8 +130,15 @@ void *memalign(size_t boundary, size_t size)
return LOS_MemAllocAlign(OS_SYS_MEM_ADDR, size, boundary); return LOS_MemAllocAlign(OS_SYS_MEM_ADDR, size, boundary);
} }
#if (LOSCFG_LIBC_NEWLIB == 1)
void *__wrap__realloc_r(struct _reent *reent, void *ptr, size_t size)
#else
void *realloc(void *ptr, size_t size) void *realloc(void *ptr, size_t size)
#endif
{ {
#if (LOSCFG_LIBC_NEWLIB == 1)
(void)reent;
#endif
if (ptr == NULL) { if (ptr == NULL) {
return malloc(size); return malloc(size);
} }
@@ -107,4 +150,3 @@ void *realloc(void *ptr, size_t size)
return LOS_MemRealloc(OS_SYS_MEM_ADDR, ptr, size); return LOS_MemRealloc(OS_SYS_MEM_ADDR, ptr, size);
} }
+100
View File
@@ -0,0 +1,100 @@
/*
* Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "los_mux.h"
#include "los_queue.h"
#include "los_sem.h"
#include "los_task.h"
#include <errno.h>
INT32 map_errno(UINT32 err)
{
if (err == LOS_OK) {
return 0;
}
switch (err) {
case LOS_ERRNO_QUEUE_INVALID:
case LOS_ERRNO_QUEUE_WRITE_PTR_NULL:
case LOS_ERRNO_QUEUE_WRITESIZE_ISZERO:
case LOS_ERRNO_QUEUE_SIZE_TOO_BIG:
case LOS_ERRNO_QUEUE_CREAT_PTR_NULL:
case LOS_ERRNO_QUEUE_PARA_ISZERO:
case LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG:
case LOS_ERRNO_TSK_ID_INVALID:
case LOS_ERRNO_TSK_PTR_NULL:
case LOS_ERRNO_TSK_NAME_EMPTY:
case LOS_ERRNO_TSK_ENTRY_NULL:
case LOS_ERRNO_TSK_PRIOR_ERROR:
case LOS_ERRNO_TSK_STKSZ_TOO_LARGE:
case LOS_ERRNO_TSK_STKSZ_TOO_SMALL:
case LOS_ERRNO_TSK_NOT_CREATED:
case OS_ERROR:
case LOS_ERRNO_SEM_INVALID:
case LOS_ERRNO_SEM_UNAVAILABLE:
errno = EINVAL;
break;
case LOS_ERRNO_QUEUE_ISFULL:
case LOS_ERRNO_QUEUE_ISEMPTY:
errno = EAGAIN;
break;
case LOS_ERRNO_QUEUE_CREATE_NO_MEMORY:
case LOS_ERRNO_TSK_TCB_UNAVAILABLE:
case LOS_ERRNO_SEM_ALL_BUSY:
errno = ENOSPC;
break;
case LOS_ERRNO_QUEUE_TIMEOUT:
case LOS_ERRNO_SEM_TIMEOUT:
errno = ETIMEDOUT;
break;
case LOS_ERRNO_QUEUE_CB_UNAVAILABLE:
errno = ENFILE;
break;
case LOS_ERRNO_QUEUE_READ_IN_INTERRUPT:
case LOS_ERRNO_QUEUE_WRITE_IN_INTERRUPT:
case LOS_ERRNO_SEM_PEND_INTERR:
errno = EINTR;
break;
case LOS_ERRNO_TSK_NO_MEMORY:
case LOS_ERRNO_SEM_OVERFLOW:
errno = ENOMEM;
break;
case LOS_ERRNO_SEM_PENDED:
errno = EBUSY;
break;
case LOS_ERRNO_SEM_PEND_IN_LOCK:
errno = EPERM;
break;
default:
errno = EINVAL;
break;
}
return errno;
}
@@ -1,6 +1,5 @@
/* /*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -29,28 +28,21 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef COMMON_TEST_H #ifndef _POSIX_MAP_ERROR_H
#define COMMON_TEST_H #define _POSIX_MAP_ERROR_H
#define TESTCOUNT_NUM_1 1
#define TESTCOUNT_NUM_2 2
#define TESTCOUNT_NUM_3 3
#define TESTCOUNT_NUM_4 4
#define TESTCOUNT_NUM_5 5
#define DELAY_TICKS_1 1
#define DELAY_TICKS_5 5
#define DELAY_TICKS_10 10
#define TEST_TASK_STACK_SIZE 0x600
#define TASK_LOOP_NUM 0x10000000
#define TEST_TIME 10
#define THREAD_COUNT_MIN 3
#define THREAD_COUNT_MAX 30
#define THREAD_STACK_SPACE_MAX 4096
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
#endif extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */
INT32 map_errno(UINT32 err);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cplusplus */
#endif /* __cplusplus */
#endif #endif
+1 -1
View File
@@ -694,7 +694,7 @@ UINT32 OsPipeInit(VOID)
ret = LOS_MuxCreate(&g_devFdMutex); ret = LOS_MuxCreate(&g_devFdMutex);
if (ret != LOS_OK) { if (ret != LOS_OK) {
LOS_MuxDelete(g_devListMutex); (VOID)LOS_MuxDelete(g_devListMutex);
return ret; return ret;
} }
+6 -4
View File
@@ -40,6 +40,7 @@
#include "los_config.h" #include "los_config.h"
#include "los_task.h" #include "los_task.h"
#include "los_debug.h" #include "los_debug.h"
#include "map_error.h"
#define PTHREAD_DEFAULT_NAME "pthread" #define PTHREAD_DEFAULT_NAME "pthread"
#define PTHREAD_DEFAULT_NAME_LEN 8 #define PTHREAD_DEFAULT_NAME_LEN 8
@@ -207,9 +208,10 @@ int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
return ret; return ret;
} }
if (LOS_TaskCreateOnly(&taskID, &taskInitParam) != LOS_OK) { ret = LOS_TaskCreateOnly(&taskID, &taskInitParam);
if (ret != LOS_OK) {
free((VOID *)(UINTPTR)taskInitParam.uwArg); free((VOID *)(UINTPTR)taskInitParam.uwArg);
return EINVAL; return map_errno(ret);
} }
PthreadData *pthreadData = (PthreadData *)taskInitParam.uwArg; PthreadData *pthreadData = (PthreadData *)taskInitParam.uwArg;
@@ -221,10 +223,10 @@ int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
LOS_ListAdd(&g_pthreadListHead, &pthreadData->threadList); LOS_ListAdd(&g_pthreadListHead, &pthreadData->threadList);
LOS_IntRestore(intSave); LOS_IntRestore(intSave);
(void)LOS_TaskResume(taskID);
*thread = (pthread_t)taskID; *thread = (pthread_t)taskID;
(void)LOS_TaskResume(taskID);
return 0; return 0;
} }
-1
View File
@@ -303,7 +303,6 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
PRINT_ERR("%s: %d failed\n", __FUNCTION__, __LINE__); PRINT_ERR("%s: %d failed\n", __FUNCTION__, __LINE__);
} }
(VOID)LOS_EventClear(&(cond->event), 0);
ret = (INT32)LOS_EventRead(&(cond->event), 0x0f, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, (UINT32)absTicks); ret = (INT32)LOS_EventRead(&(cond->event), 0x0f, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, (UINT32)absTicks);
if (pthread_mutex_lock(mutex) != 0) { if (pthread_mutex_lock(mutex) != 0) {
+32
View File
@@ -38,6 +38,9 @@
#include "los_debug.h" #include "los_debug.h"
#include "los_hook.h" #include "los_hook.h"
#include "los_sched.h" #include "los_sched.h"
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
#include "los_arch.h"
#endif
#define MUTEXATTR_TYPE_MASK 0x0FU #define MUTEXATTR_TYPE_MASK 0x0FU
#define OS_SYS_NS_PER_MSECOND 1000000 #define OS_SYS_NS_PER_MSECOND 1000000
@@ -130,6 +133,10 @@ int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexA
UINT32 muxHandle; UINT32 muxHandle;
UINT32 ret; UINT32 ret;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
if (mutex == NULL) { if (mutex == NULL) {
return EINVAL; return EINVAL;
} }
@@ -148,6 +155,9 @@ int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexA
mutex->stAttr = useAttr; mutex->stAttr = useAttr;
mutex->magic = _MUX_MAGIC; mutex->magic = _MUX_MAGIC;
mutex->handle = muxHandle; mutex->handle = muxHandle;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
return 0; return 0;
} }
@@ -324,6 +334,10 @@ int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *absTi
struct timespec curTime = {0}; struct timespec curTime = {0};
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet())); ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
if (ret != 0) { if (ret != 0) {
return (INT32)ret; return (INT32)ret;
@@ -337,6 +351,9 @@ int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *absTi
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) && if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
@@ -364,6 +381,11 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
{ {
UINT32 ret; UINT32 ret;
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
LosTaskCB *runTask = OS_TCB_FROM_TID(LOS_CurTaskIDGet()); LosTaskCB *runTask = OS_TCB_FROM_TID(LOS_CurTaskIDGet());
ret = MuxPreCheck(mutex, runTask); ret = MuxPreCheck(mutex, runTask);
@@ -376,6 +398,9 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) && if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
@@ -394,6 +419,10 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
UINT32 ret; UINT32 ret;
LosMuxCB *muxPended = NULL; LosMuxCB *muxPended = NULL;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR regLR = ArchLRGet();
#endif
ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet())); ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
if (ret != 0) { if (ret != 0) {
return (INT32)ret; return (INT32)ret;
@@ -404,6 +433,9 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
if (ret != LOS_OK) { if (ret != LOS_OK) {
return MapError(ret); return MapError(ret);
} }
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
#endif
} else { } else {
muxPended = GET_MUX(mutex->handle); muxPended = GET_MUX(mutex->handle);
if ((mutex->stAttr.type != PTHREAD_MUTEX_RECURSIVE) && (muxPended->muxCount != 0)) { if ((mutex->stAttr.type != PTHREAD_MUTEX_RECURSIVE) && (muxPended->muxCount != 0)) {
+59 -34
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022-2022 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2022-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@@ -50,7 +50,6 @@
/* accumulative time delta from discontinuous modify */ /* accumulative time delta from discontinuous modify */
STATIC struct timespec g_accDeltaFromSet; STATIC struct timespec g_accDeltaFromSet;
#ifndef __USE_NEWLIB__
STATIC const UINT16 g_daysInMonth[2][13] = { STATIC const UINT16 g_daysInMonth[2][13] = {
/* Normal years. */ /* Normal years. */
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
@@ -59,20 +58,18 @@ STATIC const UINT16 g_daysInMonth[2][13] = {
}; };
STATIC const UINT8 g_montbl[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; STATIC const UINT8 g_montbl[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
#endif
#ifndef __USE_NEWLIB__ #if (LOSCFG_LIBC_NEWLIB == 1)
#define g_timezone timezone #define TIMEZONE _timezone
#else #else
#define g_Timezone _timezone #define TIMEZONE timezone
#endif
/* /*
* Time zone information, stored in seconds, * Time zone information, stored in seconds,
* negative values indicate the east of UTC, * negative values indicate the east of UTC,
* positive values indicate the west of UTC. * positive values indicate the west of UTC.
*/ */
long g_timezone = -8 * 60 * 60; // set default to CST(UTC+8) long TIMEZONE = -8 * 60 * 60; // set default to CST(UTC+8)
#endif
/* /*
* store register rtc func * store register rtc func
@@ -529,7 +526,6 @@ time_t time(time_t *timer)
} }
} }
#ifndef __USE_NEWLIB__
/* /*
* Compute the `struct tm' representation of T, * Compute the `struct tm' representation of T,
* offset OFFSET seconds east of UTC, * offset OFFSET seconds east of UTC,
@@ -617,11 +613,22 @@ struct tm *gmtime(const time_t *timer)
struct tm *localtime_r(const time_t *timep, struct tm *result) struct tm *localtime_r(const time_t *timep, struct tm *result)
{ {
INT32 ret;
if ((timep == NULL) || (result == NULL)) { if ((timep == NULL) || (result == NULL)) {
errno = EFAULT; errno = EFAULT;
return NULL; return NULL;
} }
if (!ConvertSecs2Utc(*timep, -g_timezone, result)) {
if (g_rtcTimeFunc.RtcGetTimezoneHook != NULL) {
INT32 tempTimezone = 0;
g_rtcTimeFunc.RtcGetTimezoneHook(&tempTimezone);
ret = ConvertSecs2Utc(*timep, -tempTimezone, result);
} else {
ret = ConvertSecs2Utc(*timep, -TIMEZONE, result);
}
if (!ret) {
errno = EINVAL; errno = EINVAL;
return NULL; return NULL;
} }
@@ -664,7 +671,14 @@ static time_t ConvertUtc2Secs(struct tm *tm)
seconds += (tm->tm_mday - 1) * SECS_PER_DAY; seconds += (tm->tm_mday - 1) * SECS_PER_DAY;
seconds += tm->tm_hour * SECS_PER_HOUR + tm->tm_min * SECS_PER_MIN + tm->tm_sec; seconds += tm->tm_hour * SECS_PER_HOUR + tm->tm_min * SECS_PER_MIN + tm->tm_sec;
seconds -= tm->__tm_gmtoff; // sub time zone to get UTC time if (g_rtcTimeFunc.RtcGetTimezoneHook != NULL) {
INT32 tempTimezone = 0;
g_rtcTimeFunc.RtcGetTimezoneHook(&tempTimezone);
seconds += tempTimezone;
} else {
seconds += TIMEZONE;
}
return seconds; return seconds;
} }
@@ -690,7 +704,14 @@ time_t mktime(struct tm *tmptr)
} }
timeInSeconds = ConvertUtc2Secs(tmptr); timeInSeconds = ConvertUtc2Secs(tmptr);
/* normalize tm_wday and tm_yday */ /* normalize tm_wday and tm_yday */
ConvertSecs2Utc(timeInSeconds, tmptr->__tm_gmtoff, tmptr); if (g_rtcTimeFunc.RtcGetTimezoneHook != NULL) {
INT32 tempTimezone = 0;
g_rtcTimeFunc.RtcGetTimezoneHook(&tempTimezone);
ConvertSecs2Utc(timeInSeconds, -tempTimezone, tmptr);
} else {
ConvertSecs2Utc(timeInSeconds, -TIMEZONE, tmptr);
}
return timeInSeconds; return timeInSeconds;
} }
@@ -722,32 +743,34 @@ int gettimeofday(struct timeval *tv, void *ptz)
tv->tv_usec = ts.tv_nsec / OS_SYS_NS_PER_US; tv->tv_usec = ts.tv_nsec / OS_SYS_NS_PER_US;
} }
} }
if (tz != NULL) { if (tz != NULL) {
INT32 timeZone = 0;
if (g_rtcTimeFunc.RtcGetTimezoneHook != NULL) { if (g_rtcTimeFunc.RtcGetTimezoneHook != NULL) {
g_rtcTimeFunc.RtcGetTimezoneHook(&timeZone); INT32 tempTimezone = 0;
tz->tz_minuteswest = timezone / SECS_PER_MIN; g_rtcTimeFunc.RtcGetTimezoneHook(&tempTimezone);
tz->tz_minuteswest = tempTimezone / SECS_PER_MIN;
} else { } else {
tz->tz_minuteswest = g_timezone / SECS_PER_MIN; tz->tz_minuteswest = TIMEZONE / SECS_PER_MIN;
} }
tz->tz_dsttime = 0; tz->tz_dsttime = 0;
} }
return 0; return 0;
} }
#if (LOSCFG_LIBC_NEWLIB == 1)
FUNC_ALIAS(gettimeofday, _gettimeofday, (struct timeval *tv, void *ptz), int);
#endif #endif
int settimeofday(const struct timeval *tv, const struct timezone *tz) int settimeofday(const struct timeval *tv, const struct timezone *tz)
{ {
struct timespec ts; struct timespec ts;
if (tv == NULL) { if ((tv == NULL) && (tz == NULL)) {
errno = EFAULT; errno = EFAULT;
return -1; return -1;
} }
if (tv->tv_usec >= OS_SYS_US_PER_SECOND) { if ((tv != NULL) && (tv->tv_usec >= OS_SYS_US_PER_SECOND)) {
errno = EINVAL; errno = EINVAL;
return -1; return -1;
} }
@@ -755,29 +778,31 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz)
if (tz != NULL) { if (tz != NULL) {
if ((tz->tz_minuteswest >= TIME_ZONE_MIN) && if ((tz->tz_minuteswest >= TIME_ZONE_MIN) &&
(tz->tz_minuteswest <= TIME_ZONE_MAX)) { (tz->tz_minuteswest <= TIME_ZONE_MAX)) {
g_timezone = tz->tz_minuteswest * SECS_PER_MIN; TIMEZONE = tz->tz_minuteswest * SECS_PER_MIN;
} else { } else {
errno = EINVAL; errno = EINVAL;
return -1; return -1;
} }
if (g_rtcTimeFunc.RtcSetTimezoneHook != NULL) { if (g_rtcTimeFunc.RtcSetTimezoneHook != NULL) {
g_rtcTimeFunc.RtcSetTimezoneHook(g_timezone); g_rtcTimeFunc.RtcSetTimezoneHook(TIMEZONE);
} }
} }
if (g_rtcTimeFunc.RtcSetTimeHook != NULL) { if (tv != NULL) {
UINT64 usec; if (g_rtcTimeFunc.RtcSetTimeHook != NULL) {
g_rtcTimeBase = tv->tv_sec * OS_SYS_MS_PER_SECOND + tv->tv_usec / OS_SYS_MS_PER_SECOND; UINT64 usec;
usec = tv->tv_sec * OS_SYS_US_PER_SECOND + tv->tv_usec; g_rtcTimeBase = tv->tv_sec * OS_SYS_MS_PER_SECOND + tv->tv_usec / OS_SYS_MS_PER_SECOND;
if (-1 == g_rtcTimeFunc.RtcSetTimeHook(g_rtcTimeBase, &usec)) { usec = tv->tv_sec * OS_SYS_US_PER_SECOND + tv->tv_usec;
return -1; if (g_rtcTimeFunc.RtcSetTimeHook(g_rtcTimeBase, &usec) < 0) {
} return -1;
} else { }
ts.tv_sec = tv->tv_sec; } else {
ts.tv_nsec = tv->tv_usec * OS_SYS_NS_PER_US; ts.tv_sec = tv->tv_sec;
if (-1 == clock_settime(CLOCK_REALTIME, &ts)) { ts.tv_nsec = tv->tv_usec * OS_SYS_NS_PER_US;
return -1; if (clock_settime(CLOCK_REALTIME, &ts) < 0) {
return -1;
}
} }
} }
+8
View File
@@ -679,6 +679,14 @@ extern UINT8 *m_aucSysMem0;
#define LOSCFG_KERNEL_PM_IDLE 0 #define LOSCFG_KERNEL_PM_IDLE 0
#endif #endif
/**
* @ingroup los_config
* Configuration item to set shell stack size.
*/
#ifndef LOSCFG_SHELL_STACK_SIZE
#define LOSCFG_SHELL_STACK_SIZE 0x1000
#endif
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }
+66
View File
@@ -490,6 +490,72 @@ extern UINT32 LOS_MemIntegrityCheck(const VOID *pool);
* </ul> * </ul>
* @see None. * @see None.
*/ */
/* Supposing a Second Level Index: SLI = 3. */
#define OS_MEM_SLI 3
/* Giving 1 free list for each small bucket: 4, 8, 12, up to 124. */
#define OS_MEM_SMALL_BUCKET_COUNT 31
#define OS_MEM_SMALL_BUCKET_MAX_SIZE 128
/* Giving 2^OS_MEM_SLI free lists for each large bucket. */
#define OS_MEM_LARGE_BUCKET_COUNT 24
/* OS_MEM_SMALL_BUCKET_MAX_SIZE to the power of 2 is 7. */
#define OS_MEM_LARGE_START_BUCKET 7
/* The count of free list. */
#define OS_MEM_FREE_LIST_COUNT (OS_MEM_SMALL_BUCKET_COUNT + (OS_MEM_LARGE_BUCKET_COUNT << OS_MEM_SLI))
/* The bitmap is used to indicate whether the free list is empty, 1: not empty, 0: empty. */
#define OS_MEM_BITMAP_WORDS ((OS_MEM_FREE_LIST_COUNT >> 5) + 1)
struct OsMemNodeHead {
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
UINT32 magic;
#endif
#if (LOSCFG_MEM_LEAKCHECK == 1)
UINTPTR linkReg[LOSCFG_MEM_RECORD_LR_CNT];
#endif
union {
struct OsMemNodeHead *prev; /* The prev is used for current node points to the previous node */
struct OsMemNodeHead *next; /* The next is used for sentinel node points to the expand node */
} ptr;
#if (LOSCFG_TASK_MEM_USED == 1)
UINT32 taskID;
UINT32 sizeAndFlag;
#elif (LOSCFG_MEM_FREE_BY_TASKID == 1)
UINT32 taskID : 6;
UINT32 sizeAndFlag : 26;
#else
UINT32 sizeAndFlag;
#endif
};
struct OsMemFreeNodeHead {
struct OsMemNodeHead header;
struct OsMemFreeNodeHead *prev;
struct OsMemFreeNodeHead *next;
};
struct OsMemPoolInfo {
VOID *pool;
UINT32 totalSize;
UINT32 attr;
#if (LOSCFG_MEM_WATERLINE == 1)
UINT32 waterLine; /* Maximum usage size in a memory pool */
UINT32 curUsedSize; /* Current usage size in a memory pool */
#endif
#if (LOSCFG_MEM_MUL_REGIONS == 1)
UINT32 totalGapSize;
#endif
};
struct OsMemPoolHead {
struct OsMemPoolInfo info;
UINT32 freeListBitmap[OS_MEM_BITMAP_WORDS];
struct OsMemFreeNodeHead *freeList[OS_MEM_FREE_LIST_COUNT];
#if (LOSCFG_MEM_MUL_POOL == 1)
VOID *nextPool;
#endif
};
extern VOID LOS_MemUnlockEnable(VOID *pool); extern VOID LOS_MemUnlockEnable(VOID *pool);
extern UINT32 OsMemSystemInit(VOID); extern UINT32 OsMemSystemInit(VOID);
+10 -1
View File
@@ -39,7 +39,6 @@
#include "los_task.h" #include "los_task.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {
@@ -302,6 +301,9 @@ typedef struct {
UINT32 muxID; /**< Handle ID */ UINT32 muxID; /**< Handle ID */
LOS_DL_LIST muxList; /**< Mutex linked list */ LOS_DL_LIST muxList; /**< Mutex linked list */
LosTaskCB *owner; /**< The current thread that is locking a mutex */ LosTaskCB *owner; /**< The current thread that is locking a mutex */
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
UINTPTR createInfo; /**< Return address of the caller */
#endif
UINT16 priority; /**< Priority of the thread that is locking a mutex */ UINT16 priority; /**< Priority of the thread that is locking a mutex */
} LosMuxCB; } LosMuxCB;
@@ -351,6 +353,13 @@ extern UINT32 OsMuxInit(VOID);
*/ */
#define GET_MUX_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosMuxCB, muxList) #define GET_MUX_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosMuxCB, muxList)
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
STATIC INLINE VOID OsSetMutexCreateInfo(LosMuxCB *mux, UINTPTR val)
{
mux->createInfo = val;
}
#endif /* LOSCFG_MUTEX_CREATE_TRACE == 1 */
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }
+8 -8
View File
@@ -453,7 +453,7 @@ extern UINT32 LOS_QueueCreateStatic(const CHAR *queueName,
* first.</li> * first.</li>
* <li>bufferAddr stores the obtained data.</li> * <li>bufferAddr stores the obtained data.</li>
* <li>Do not read or write a queue in unblocking modes such as an interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as an interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
* </ul> * </ul>
* *
@@ -498,7 +498,7 @@ extern UINT32 LOS_QueueReadCopy(UINT32 queueID,
* <ul> * <ul>
* <li>The specific queue should be created firstly.</li> * <li>The specific queue should be created firstly.</li>
* <li>Do not read or write a queue in unblocking modes such as interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The data to be written is of the size specified by bufferSize and is stored at the address specified by * <li>The data to be written is of the size specified by bufferSize and is stored at the address specified by
* BufferAddr.</li> * BufferAddr.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
@@ -547,7 +547,7 @@ extern UINT32 LOS_QueueWriteCopy(UINT32 queueID,
* read first.</li> * read first.</li>
* <li>bufferAddr stores the obtained data address.</li> * <li>bufferAddr stores the obtained data address.</li>
* <li>Do not read or write a queue in unblocking modes such as an interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as an interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
* <li>The bufferSize is not really used in LOS_QueueRead, because the interface is only used to * <li>The bufferSize is not really used in LOS_QueueRead, because the interface is only used to
* obtain the address of data.</li> * obtain the address of data.</li>
@@ -592,7 +592,7 @@ extern UINT32 LOS_QueueRead(UINT32 queueID,
* <ul> * <ul>
* <li>The specific queue should be created firstly.</li> * <li>The specific queue should be created firstly.</li>
* <li>Do not read or write a queue in unblocking modes such as an interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as an interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by * <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li> * BufferAddr is to be written.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
@@ -639,7 +639,7 @@ extern UINT32 LOS_QueueWrite(UINT32 queueID,
* @attention * @attention
* <ul> * <ul>
* <li>Do not read or write a queue in unblocking modes such as an interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as an interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by * <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li> * BufferAddr is to be written.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
@@ -686,7 +686,7 @@ extern UINT32 LOS_QueueWriteHead(UINT32 queueID,
* @attention * @attention
* <ul> * <ul>
* <li>Do not read or write a queue in unblocking modes such as an interrupt.</li> * <li>Do not read or write a queue in unblocking modes such as an interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The address of the data of the size specified by bufferSize and stored at the address specified by * <li>The address of the data of the size specified by bufferSize and stored at the address specified by
* BufferAddr is to be written.</li> * BufferAddr is to be written.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
@@ -889,7 +889,7 @@ extern LosQueueCB *g_allQueue;
* @attention * @attention
* <ul> * <ul>
* <li>Do not alloc memory in unblocking modes such as interrupt.</li> * <li>Do not alloc memory in unblocking modes such as interrupt.</li>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* <li>The argument timeOut is a relative time.</li> * <li>The argument timeOut is a relative time.</li>
* </ul> * </ul>
* *
@@ -913,7 +913,7 @@ extern VOID *OsQueueMailAlloc(UINT32 queueID, VOID *mailPool, UINT32 timeOut);
* This API is used to free a stationary memory for a mail according to queueID. * This API is used to free a stationary memory for a mail according to queueID.
* @attention * @attention
* <ul> * <ul>
* <li>This API cannot be called before the Huawei LiteOS is initialized.</li> * <li>This API cannot be called before the kernel is initialized.</li>
* </ul> * </ul>
* *
* @param queueID [IN] Queue ID. The value range is [1,LOSCFG_BASE_IPC_QUEUE_LIMIT]. * @param queueID [IN] Queue ID. The value range is [1,LOSCFG_BASE_IPC_QUEUE_LIMIT].
+5
View File
@@ -96,6 +96,11 @@ STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID)
return LOS_SysCycleGet(); return LOS_SysCycleGet();
} }
STATIC INLINE BOOL OsCheckKernelRunning(VOID)
{
return (g_taskScheduled && LOS_CHECK_SCHEDULE);
}
/** /**
* @ingroup los_sched * @ingroup los_sched
* @brief Get the time, in nanoseconds, remaining before the next tick interrupt response. * @brief Get the time, in nanoseconds, remaining before the next tick interrupt response.
+1 -17
View File
@@ -114,27 +114,13 @@ LITE_OS_SEC_TEXT_INIT VOID LOS_Panic(const CHAR *fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
PRINT_ERR(fmt, ap); PRINT_ERR(fmt, ap);
va_end(ap); va_end(ap);
OsDoExcHook(EXC_PANIC);
#if (LOSCFG_BACKTRACE_TYPE != 0) #if (LOSCFG_BACKTRACE_TYPE != 0)
LOS_BackTrace(); LOS_BackTrace();
#endif #endif
ArchSysExit(); ArchSysExit();
} }
/*****************************************************************************
Function : OsRegister
Description : Configuring the maximum number of tasks
Input : None
Output : None
Return : None
*****************************************************************************/
LITE_OS_SEC_TEXT_INIT static VOID OsRegister(VOID)
{
g_taskMaxNum = LOSCFG_BASE_CORE_TSK_LIMIT + 1; /* Reserved 1 for IDLE */
return;
}
LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID) LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID)
{ {
return ArchStartSchedule(); return ArchStartSchedule();
@@ -156,8 +142,6 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_KernelInit(VOID)
OsBackTraceInit(); OsBackTraceInit();
#endif #endif
OsRegister();
#ifdef LOSCFG_KERNEL_LMS #ifdef LOSCFG_KERNEL_LMS
OsLmsInit(); OsLmsInit();
#endif #endif
+7 -3
View File
@@ -37,7 +37,6 @@
#include "los_memory.h" #include "los_memory.h"
#include "los_sched.h" #include "los_sched.h"
#if (LOSCFG_BASE_IPC_MUX == 1) #if (LOSCFG_BASE_IPC_MUX == 1)
LITE_OS_SEC_BSS LosMuxCB* g_allMux = NULL; LITE_OS_SEC_BSS LosMuxCB* g_allMux = NULL;
@@ -71,6 +70,9 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsMuxInit(VOID)
muxNode->muxID = index; muxNode->muxID = index;
muxNode->owner = (LosTaskCB *)NULL; muxNode->owner = (LosTaskCB *)NULL;
muxNode->muxStat = OS_MUX_UNUSED; muxNode->muxStat = OS_MUX_UNUSED;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
muxNode->createInfo = 0;
#endif
LOS_ListTailInsert(&g_unusedMuxList, &muxNode->muxList); LOS_ListTailInsert(&g_unusedMuxList, &muxNode->muxList);
} }
return LOS_OK; return LOS_OK;
@@ -149,7 +151,9 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxDelete(UINT32 muxHandle)
LOS_ListAdd(&g_unusedMuxList, &muxDeleted->muxList); LOS_ListAdd(&g_unusedMuxList, &muxDeleted->muxList);
muxDeleted->muxStat = OS_MUX_UNUSED; muxDeleted->muxStat = OS_MUX_UNUSED;
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
muxDeleted->createInfo = 0;
#endif
LOS_IntRestore(intSave); LOS_IntRestore(intSave);
OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted); OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted);
@@ -320,5 +324,5 @@ LITE_OS_SEC_TEXT UINT32 LOS_MuxPost(UINT32 muxHandle)
return LOS_OK; return LOS_OK;
} }
#endif /* (LOSCFG_BASE_IPC_MUX == 1) */
#endif /* (LOSCFG_BASE_IPC_MUX == 1) */
+8
View File
@@ -451,6 +451,10 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueReadCopy(UINT32 queueID,
} }
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_READ, OS_QUEUE_HEAD, OS_QUEUE_NOT_POINT); operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_READ, OS_QUEUE_HEAD, OS_QUEUE_NOT_POINT);
OsHookCall(LOS_HOOK_TYPE_QUEUE_READ_COPY, (LosQueueCB *)GET_QUEUE_HANDLE(queueID),
operateType, *bufferSize, timeOut);
return OsQueueOperate(queueID, operateType, bufferAddr, bufferSize, timeOut); return OsQueueOperate(queueID, operateType, bufferAddr, bufferSize, timeOut);
} }
@@ -485,6 +489,10 @@ LITE_OS_SEC_TEXT UINT32 LOS_QueueWriteCopy(UINT32 queueID,
} }
operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_WRITE, OS_QUEUE_TAIL, OS_QUEUE_NOT_POINT); operateType = OS_QUEUE_OPERATE_TYPE(OS_QUEUE_WRITE, OS_QUEUE_TAIL, OS_QUEUE_NOT_POINT);
OsHookCall(LOS_HOOK_TYPE_QUEUE_WRITE_COPY, (LosQueueCB *)GET_QUEUE_HANDLE(queueID),
operateType, bufferSize, timeOut);
return OsQueueOperate(queueID, operateType, bufferAddr, &bufferSize, timeOut); return OsQueueOperate(queueID, operateType, bufferAddr, &bufferSize, timeOut);
} }
+1 -1
View File
@@ -618,7 +618,7 @@ VOID LOS_SchedTickHandler(VOID)
VOID LOS_Schedule(VOID) VOID LOS_Schedule(VOID)
{ {
if (g_taskScheduled && LOS_CHECK_SCHEDULE) { if (OsCheckKernelRunning()) {
ArchTaskSchedule(); ArchTaskSchedule();
} }
} }
+30 -15
View File
@@ -75,7 +75,7 @@
* @ingroup los_task * @ingroup los_task
* @brief check task id's validation * @brief check task id's validation
*/ */
#define OS_TASK_ID_CHECK(taskID) LOS_ASSERT_COND(OS_TSK_GET_INDEX(taskID) < g_taskMaxNum) #define OS_TASK_ID_CHECK(taskID) (OS_TSK_GET_INDEX(taskID) < g_taskMaxNum)
/** /**
* @ingroup los_task * @ingroup los_task
@@ -256,9 +256,9 @@ UINT32 OsGetTaskWaterLine(UINT32 taskID)
} }
#if (LOSCFG_BASE_CORE_CPUP == 1) #if (LOSCFG_BASE_CORE_CPUP == 1)
LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskCpupInfo(CPUP_INFO_S **cpuLessOneSec, STATIC UINT32 GetAllTskCpupInfo(CPUP_INFO_S **cpuLessOneSec,
CPUP_INFO_S **cpuTenSec, CPUP_INFO_S **cpuTenSec,
CPUP_INFO_S **cpuOneSec) CPUP_INFO_S **cpuOneSec)
{ {
if ((cpuLessOneSec == NULL) || (cpuTenSec == NULL) || (cpuOneSec == NULL)) { if ((cpuLessOneSec == NULL) || (cpuTenSec == NULL) || (cpuOneSec == NULL)) {
return OS_ERROR; return OS_ERROR;
@@ -304,7 +304,26 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskCpupInfo(CPUP_INFO_S **cpuLessOneSec,
} }
#endif #endif
LITE_OS_SEC_TEXT_MINOR VOID OsPrintAllTskInfoHeader(VOID) STATIC VOID PrintTskInfo(const LosTaskCB *taskCB)
{
UINT32 semID;
if (taskCB->taskStatus & OS_TASK_STATUS_EXIT) {
PRINTK("%4u%9u%10s%#10x%#10x%#11x%#11x%#10x%#7x",
taskCB->taskID, taskCB->priority, OsConvertTskStatus(taskCB->taskStatus),
taskCB->stackSize, 0, 0, 0, 0, 0);
return;
}
semID = (taskCB->taskSem == NULL) ? OS_NULL_SHORT : (((LosSemCB *)taskCB->taskSem)->semID);
PRINTK("%4u%9u%10s%#10x%#10x%#11x%#11x%#10x%#7x",
taskCB->taskID, taskCB->priority, OsConvertTskStatus(taskCB->taskStatus),
taskCB->stackSize, OsGetTaskWaterLine(taskCB->taskID),
(UINT32)(UINTPTR)taskCB->stackPointer, taskCB->topOfStack, taskCB->eventMask, semID);
return;
}
STATIC VOID PrintTskInfoHeader(VOID)
{ {
PRINTK("\r\n TID Priority Status StackSize WaterLine StackPoint TopOfStack EventMask SemID"); PRINTK("\r\n TID Priority Status StackSize WaterLine StackPoint TopOfStack EventMask SemID");
#if (LOSCFG_TASK_MEM_USED == 1) #if (LOSCFG_TASK_MEM_USED == 1)
@@ -341,7 +360,6 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskInfo(VOID)
#if (LOSCFG_KERNEL_PRINTF != 0) #if (LOSCFG_KERNEL_PRINTF != 0)
LosTaskCB *taskCB = (LosTaskCB *)NULL; LosTaskCB *taskCB = (LosTaskCB *)NULL;
UINT32 loopNum; UINT32 loopNum;
UINT32 semID;
#if (LOSCFG_BASE_CORE_CPUP == 1) #if (LOSCFG_BASE_CORE_CPUP == 1)
CPUP_INFO_S *cpuLessOneSec = (CPUP_INFO_S *)NULL; CPUP_INFO_S *cpuLessOneSec = (CPUP_INFO_S *)NULL;
CPUP_INFO_S *cpuTenSec = (CPUP_INFO_S *)NULL; CPUP_INFO_S *cpuTenSec = (CPUP_INFO_S *)NULL;
@@ -354,12 +372,12 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskInfo(VOID)
#endif #endif
#if (LOSCFG_BASE_CORE_CPUP == 1) #if (LOSCFG_BASE_CORE_CPUP == 1)
if (OsGetAllTskCpupInfo(&cpuLessOneSec, &cpuTenSec, &cpuOneSec) != LOS_OK) { if (GetAllTskCpupInfo(&cpuLessOneSec, &cpuTenSec, &cpuOneSec) != LOS_OK) {
return OS_ERROR; return OS_ERROR;
} }
#endif #endif /* LOSCFG_BASE_CORE_CPUP */
OsPrintAllTskInfoHeader(); PrintTskInfoHeader();
for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) { for (loopNum = 0; loopNum < g_taskMaxNum; loopNum++) {
taskCB = (((LosTaskCB *)g_taskCBArray) + loopNum); taskCB = (((LosTaskCB *)g_taskCBArray) + loopNum);
@@ -367,11 +385,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskInfo(VOID)
continue; continue;
} }
semID = (taskCB->taskSem == NULL) ? OS_NULL_SHORT : (((LosSemCB *)taskCB->taskSem)->semID); PrintTskInfo(taskCB);
PRINTK("%4u%9u%10s%#10x%#10x%#11x%#11x%#10x%#7x",
taskCB->taskID, taskCB->priority, OsConvertTskStatus(taskCB->taskStatus),
taskCB->stackSize, OsGetTaskWaterLine(taskCB->taskID),
(UINT32)(UINTPTR)taskCB->stackPointer, taskCB->topOfStack, taskCB->eventMask, semID);
#if (LOSCFG_TASK_MEM_USED == 1) #if (LOSCFG_TASK_MEM_USED == 1)
PRINTK("%#10x", g_taskMemUsed[loopNum]); PRINTK("%#10x", g_taskMemUsed[loopNum]);
#endif #endif
@@ -409,6 +423,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsTaskInit(VOID)
UINT32 size; UINT32 size;
UINT32 index; UINT32 index;
g_taskMaxNum = LOSCFG_BASE_CORE_TSK_LIMIT + 1; /* Reserved 1 for IDLE */
size = (g_taskMaxNum + 1) * sizeof(LosTaskCB); size = (g_taskMaxNum + 1) * sizeof(LosTaskCB);
g_taskCBArray = (LosTaskCB *)LOS_MemAlloc(m_aucSysMem0, size); g_taskCBArray = (LosTaskCB *)LOS_MemAlloc(m_aucSysMem0, size);
if (g_taskCBArray == NULL) { if (g_taskCBArray == NULL) {
@@ -856,7 +871,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
UINT32 retErr = OS_ERROR; UINT32 retErr = OS_ERROR;
BOOL needSched = FALSE; BOOL needSched = FALSE;
if (taskID > LOSCFG_BASE_CORE_TSK_LIMIT) { if (!OS_TASK_ID_CHECK(taskID)) {
return LOS_ERRNO_TSK_ID_INVALID; return LOS_ERRNO_TSK_ID_INVALID;
} }
+1 -1
View File
@@ -64,7 +64,7 @@ LITE_OS_SEC_TEXT STATIC VOID OsUpdateSysTimeBase(VOID)
LITE_OS_SEC_TEXT VOID OsTickTimerBaseReset(UINT64 currTime) LITE_OS_SEC_TEXT VOID OsTickTimerBaseReset(UINT64 currTime)
{ {
LOS_ASSERT(currTime > g_tickTimerBase); LOS_ASSERT(currTime >= g_tickTimerBase);
g_tickTimerBase = currTime; g_tickTimerBase = currTime;
} }
+26 -77
View File
@@ -59,21 +59,6 @@ VOID *g_poolHead = NULL;
/* The following is the macro definition and interface implementation related to the TLSF. */ /* The following is the macro definition and interface implementation related to the TLSF. */
/* Supposing a Second Level Index: SLI = 3. */
#define OS_MEM_SLI 3
/* Giving 1 free list for each small bucket: 4, 8, 12, up to 124. */
#define OS_MEM_SMALL_BUCKET_COUNT 31
#define OS_MEM_SMALL_BUCKET_MAX_SIZE 128
/* Giving 2^OS_MEM_SLI free lists for each large bucket. */
#define OS_MEM_LARGE_BUCKET_COUNT 24
/* OS_MEM_SMALL_BUCKET_MAX_SIZE to the power of 2 is 7. */
#define OS_MEM_LARGE_START_BUCKET 7
/* The count of free list. */
#define OS_MEM_FREE_LIST_COUNT (OS_MEM_SMALL_BUCKET_COUNT + (OS_MEM_LARGE_BUCKET_COUNT << OS_MEM_SLI))
/* The bitmap is used to indicate whether the free list is empty, 1: not empty, 0: empty. */
#define OS_MEM_BITMAP_WORDS ((OS_MEM_FREE_LIST_COUNT >> 5) + 1)
#define OS_MEM_BITMAP_MASK 0x1FU #define OS_MEM_BITMAP_MASK 0x1FU
/* Used to find the first bit of 1 in bitmap. */ /* Used to find the first bit of 1 in bitmap. */
@@ -120,60 +105,10 @@ STATIC INLINE UINT32 OsMemSlGet(UINT32 size, UINT32 fl)
#error "When enter here, LOSCFG_BASE_CORE_TSK_LIMIT larger than 63 is not support" #error "When enter here, LOSCFG_BASE_CORE_TSK_LIMIT larger than 63 is not support"
#endif #endif
struct OsMemNodeHead {
#if (LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK == 1)
UINT32 magic;
#endif
#if (LOSCFG_MEM_LEAKCHECK == 1)
UINTPTR linkReg[LOSCFG_MEM_RECORD_LR_CNT];
#endif
union {
struct OsMemNodeHead *prev; /* The prev is used for current node points to the previous node */
struct OsMemNodeHead *next; /* The next is used for sentinel node points to the expand node */
} ptr;
#if (LOSCFG_TASK_MEM_USED == 1)
UINT32 taskID;
UINT32 sizeAndFlag;
#elif (LOSCFG_MEM_FREE_BY_TASKID == 1)
UINT32 taskID : 6;
UINT32 sizeAndFlag : 26;
#else
UINT32 sizeAndFlag;
#endif
};
struct OsMemUsedNodeHead { struct OsMemUsedNodeHead {
struct OsMemNodeHead header; struct OsMemNodeHead header;
}; };
struct OsMemFreeNodeHead {
struct OsMemNodeHead header;
struct OsMemFreeNodeHead *prev;
struct OsMemFreeNodeHead *next;
};
struct OsMemPoolInfo {
VOID *pool;
UINT32 totalSize;
UINT32 attr;
#if (LOSCFG_MEM_WATERLINE == 1)
UINT32 waterLine; /* Maximum usage size in a memory pool */
UINT32 curUsedSize; /* Current usage size in a memory pool */
#endif
#if (LOSCFG_MEM_MUL_REGIONS == 1)
UINT32 totalGapSize;
#endif
};
struct OsMemPoolHead {
struct OsMemPoolInfo info;
UINT32 freeListBitmap[OS_MEM_BITMAP_WORDS];
struct OsMemFreeNodeHead *freeList[OS_MEM_FREE_LIST_COUNT];
#if (LOSCFG_MEM_MUL_POOL == 1)
VOID *nextPool;
#endif
};
/* The memory pool support expand. */ /* The memory pool support expand. */
#define OS_MEM_POOL_EXPAND_ENABLE 0x01 #define OS_MEM_POOL_EXPAND_ENABLE 0x01
/* The memory pool support no lock. */ /* The memory pool support no lock. */
@@ -539,7 +474,7 @@ RETRY:
OsMemFreeNodeAdd(pool, (struct OsMemFreeNodeHead *)newNode); OsMemFreeNodeAdd(pool, (struct OsMemFreeNodeHead *)newNode);
endNode = OS_MEM_END_NODE(newNode, size); endNode = OS_MEM_END_NODE(newNode, size);
(VOID)memset(endNode, 0, sizeof(*endNode)); (VOID)memset_s(endNode, sizeof(*endNode), 0, sizeof(*endNode));
endNode->ptr.next = NULL; endNode->ptr.next = NULL;
OS_MEM_SET_MAGIC(endNode); OS_MEM_SET_MAGIC(endNode);
OsMemSentinelNodeSet(endNode, NULL, 0); OsMemSentinelNodeSet(endNode, NULL, 0);
@@ -649,7 +584,8 @@ STATIC INLINE VOID OsMemLeakCheckInfoRecord(struct OsMemNodeHead *node)
STATIC INLINE VOID OsMemLeakCheckInit(VOID) STATIC INLINE VOID OsMemLeakCheckInit(VOID)
{ {
(VOID)memset(g_leakCheckRecord, 0, sizeof(struct OsMemLeakCheckInfo) * LOSCFG_MEM_LEAKCHECK_RECORD_MAX_NUM); (VOID)memset_s(g_leakCheckRecord, sizeof(struct OsMemLeakCheckInfo) * LOSCFG_MEM_LEAKCHECK_RECORD_MAX_NUM,
0, sizeof(struct OsMemLeakCheckInfo) * LOSCFG_MEM_LEAKCHECK_RECORD_MAX_NUM);
g_leakCheckRecordCnt = 0; g_leakCheckRecordCnt = 0;
} }
@@ -923,6 +859,9 @@ STATIC UINT32 OsMemPoolInit(VOID *pool, UINT32 size)
struct OsMemPoolHead *poolHead = (struct OsMemPoolHead *)pool; struct OsMemPoolHead *poolHead = (struct OsMemPoolHead *)pool;
struct OsMemNodeHead *newNode = NULL; struct OsMemNodeHead *newNode = NULL;
struct OsMemNodeHead *endNode = NULL; struct OsMemNodeHead *endNode = NULL;
(VOID)memset_s(poolHead, size, 0, sizeof(struct OsMemPoolHead));
#ifdef LOSCFG_KERNEL_LMS #ifdef LOSCFG_KERNEL_LMS
UINT32 resize = 0; UINT32 resize = 0;
if (g_lms != NULL) { if (g_lms != NULL) {
@@ -934,7 +873,6 @@ STATIC UINT32 OsMemPoolInit(VOID *pool, UINT32 size)
size = (resize == 0) ? size : resize; size = (resize == 0) ? size : resize;
} }
#endif #endif
(VOID)memset(poolHead, 0, sizeof(struct OsMemPoolHead));
poolHead->info.pool = pool; poolHead->info.pool = pool;
poolHead->info.totalSize = size; poolHead->info.totalSize = size;
@@ -972,9 +910,14 @@ STATIC UINT32 OsMemPoolInit(VOID *pool, UINT32 size)
} }
#if (LOSCFG_MEM_MUL_POOL == 1) #if (LOSCFG_MEM_MUL_POOL == 1)
STATIC VOID OsMemPoolDeinit(VOID *pool) STATIC VOID OsMemPoolDeInit(VOID *pool, UINT32 size)
{ {
(VOID)memset(pool, 0, sizeof(struct OsMemPoolHead)); #ifdef LOSCFG_KERNEL_LMS
if (g_lms != NULL) {
g_lms->deInit(pool);
}
#endif
(VOID)memset_s(pool, size, 0, sizeof(struct OsMemPoolHead));
} }
STATIC UINT32 OsMemPoolAdd(VOID *pool, UINT32 size) STATIC UINT32 OsMemPoolAdd(VOID *pool, UINT32 size)
@@ -1053,7 +996,7 @@ UINT32 LOS_MemInit(VOID *pool, UINT32 size)
#if (LOSCFG_MEM_MUL_POOL == 1) #if (LOSCFG_MEM_MUL_POOL == 1)
if (OsMemPoolAdd(pool, size)) { if (OsMemPoolAdd(pool, size)) {
(VOID)OsMemPoolDeinit(pool); (VOID)OsMemPoolDeInit(pool, size);
return LOS_NOK; return LOS_NOK;
} }
#endif #endif
@@ -1066,17 +1009,23 @@ UINT32 LOS_MemInit(VOID *pool, UINT32 size)
#if (LOSCFG_MEM_MUL_POOL == 1) #if (LOSCFG_MEM_MUL_POOL == 1)
UINT32 LOS_MemDeInit(VOID *pool) UINT32 LOS_MemDeInit(VOID *pool)
{ {
if (pool == NULL) { struct OsMemPoolHead *tmpPool = (struct OsMemPoolHead *)pool;
if (tmpPool == NULL) {
return LOS_NOK; return LOS_NOK;
} }
if (OsMemPoolDelete(pool)) { if ((tmpPool->info.pool != pool) || (tmpPool->info.totalSize <= OS_MEM_MIN_POOL_SIZE)) {
return LOS_NOK; return LOS_NOK;
} }
OsMemPoolDeinit(pool); if (OsMemPoolDelete(tmpPool)) {
return LOS_NOK;
}
OsHookCall(LOS_HOOK_TYPE_MEM_DEINIT, pool); OsMemPoolDeInit(tmpPool, tmpPool->info.totalSize);
OsHookCall(LOS_HOOK_TYPE_MEM_DEINIT, tmpPool);
return LOS_OK; return LOS_OK;
} }
@@ -2015,7 +1964,7 @@ UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)
return LOS_NOK; return LOS_NOK;
} }
(VOID)memset(poolStatus, 0, sizeof(LOS_MEM_POOL_STATUS)); (VOID)memset_s(poolStatus, sizeof(LOS_MEM_POOL_STATUS), 0, sizeof(LOS_MEM_POOL_STATUS));
OsAllMemNodeDoHandle(pool, OsMemNodeInfoGetHandle, (VOID *)poolStatus); OsAllMemNodeDoHandle(pool, OsMemNodeInfoGetHandle, (VOID *)poolStatus);
@@ -2297,7 +2246,7 @@ STATIC VOID OsMemExcInfoGetSub(struct OsMemPoolHead *pool, MemInfoCB *memExcInfo
UINT32 taskID = OS_TASK_ERRORID; UINT32 taskID = OS_TASK_ERRORID;
UINT32 intSave = 0; UINT32 intSave = 0;
(VOID)memset(memExcInfo, 0, sizeof(MemInfoCB)); (VOID)memset_s(memExcInfo, sizeof(MemInfoCB), 0, sizeof(MemInfoCB));
MEM_LOCK(pool, intSave); MEM_LOCK(pool, intSave);
memExcInfo->type = MEM_MANG_MEMORY; memExcInfo->type = MEM_MANG_MEMORY;
+13 -2
View File
@@ -51,8 +51,19 @@ exec_script("//build/lite/run_shell_cmd.py",
import("$root_out_dir/config.gni") import("$root_out_dir/config.gni")
LITEOSTOPDIR = "//kernel/liteos_m" LITEOSTOPDIR = "//kernel/liteos_m"
LITEOSTHIRDPARTY = "//third_party"
HDFTOPDIR = "//drivers/hdf_core/adapter/khdf/liteos_m" HDFTOPDIR = "//drivers/hdf_core/adapter/khdf/liteos_m"
THIRDPARTY_BOUNDS_CHECKING_FUNCTION_DIR =
"//third_party/bounds_checking_function"
LITEOSTHIRDPARTY = "//third_party"
THIRDPARTY_FATFS_DIR = "//third_party/FatFs"
THIRDPARTY_MUSL_DIR = "//third_party/musl"
THIRDPARTY_LITTLEFS_DIR = "//third_party/littlefs"
THIRDPARTY_CMSIS_DIR = "//third_party/cmsis"
THIRDPARTY_LWIP_DIR = "//third_party/lwip"
DEVICE_BOARD_DIR = "//device/board"
DEVICE_SOC_DIR = "//device/soc"
COMMONLIBRARY_UTILS_LITE_DIR = "//commonlibrary/utils_lite"
TEST_XTS_TOOLS_DIR = "//test/xts/tools"
ARCH = "" ARCH = ""
if (defined(LOSCFG_ARCH_ARM_AARCH32)) { if (defined(LOSCFG_ARCH_ARM_AARCH32)) {
@@ -163,8 +174,8 @@ set_defaults("kernel_module") {
"$LITEOSTOPDIR:los_config", "$LITEOSTOPDIR:los_config",
] ]
visibility = [ visibility = [
"$LITEOSTOPDIR:*",
":*", ":*",
"$LITEOSTOPDIR:*",
"..:*", "..:*",
"../..:*", "../..:*",
] ]
+3
View File
@@ -27,6 +27,7 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/config.gni")
import("//kernel/liteos_m/liteos.gni") import("//kernel/liteos_m/liteos.gni")
config("include") { config("include") {
@@ -36,6 +37,8 @@ config("include") {
if (defined(LOSCFG_KERNEL_TEST_FULL)) { if (defined(LOSCFG_KERNEL_TEST_FULL)) {
defines += [ "LOS_KERNEL_TEST_FULL=1" ] defines += [ "LOS_KERNEL_TEST_FULL=1" ]
} }
cflags = warn_config_cflags
asmflags = warn_config_asmflags
} }
module_switch = defined(LOSCFG_TEST) module_switch = defined(LOSCFG_TEST)
+3 -1
View File
@@ -26,8 +26,10 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("test_cmsis") { static_library("test_cmsis") {
sources = [ "cmsis_func_test.c" ] sources = [ "cmsis_func_test.c" ]
configs += [ "//kernel/liteos_m/testsuites:include" ] configs += [ "$LITEOSTOPDIR/testsuites:include" ]
} }
+69 -25
View File
@@ -91,7 +91,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis007, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0}; osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR *name = NULL; CHAR *name = NULL;
INT32 ret; INT32 ret;
@@ -112,19 +111,20 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis007, Function | MediumTest | Level1)
ICUNIT_ASSERT_EQUAL(name, NULL, name); ICUNIT_ASSERT_EQUAL(name, NULL, name);
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
ICUNIT_ASSERT_NOT_EQUAL(msgQueueId, NULL, msgQueueId); ICUNIT_ASSERT_NOT_EQUAL(msgQueueId, NULL, msgQueueId);
name = osMessageQueueGetName(msgQueueId); name = (CHAR *)osMessageQueueGetName(msgQueueId);
ret = strcmp(name, "q1"); ret = strcmp(name, "q1");
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = osMessageQueueDelete(msgQueueId); ret = osMessageQueueDelete(msgQueueId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
name = osMessageQueueGetName(msgQueueId); name = (CHAR *)osMessageQueueGetName(msgQueueId);
ICUNIT_ASSERT_EQUAL(name, NULL, name); ICUNIT_ASSERT_EQUAL(name, NULL, name);
#endif #endif
@@ -155,13 +155,13 @@ static VOID CmsisQueueTestThread1(VOID)
osStatus_t status; osStatus_t status;
ret = osMessageQueuePut(g_msgQueueId1, &g_strbuff1, 0U, 0U); ret = osMessageQueuePut(g_msgQueueId1, &g_strbuff1, 0U, 0U);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, osOK, ret);
status = osMessageQueueGet(g_msgQueueId2, &data, NULL, QUEUE_WAIT_TIMEOUT); status = osMessageQueueGet(g_msgQueueId2, &data, NULL, QUEUE_WAIT_TIMEOUT);
ICUNIT_ASSERT_EQUAL(status, osOK, status); ICUNIT_ASSERT_EQUAL_VOID(status, osOK, status);
ret = strcmp(data, "world"); ret = strcmp(data, "world");
ICUNIT_ASSERT_EQUAL(ret, 0, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, 0, ret);
} }
static VOID CmsisQueueTestThread2(VOID) static VOID CmsisQueueTestThread2(VOID)
@@ -171,13 +171,13 @@ static VOID CmsisQueueTestThread2(VOID)
osStatus_t status; osStatus_t status;
status = osMessageQueueGet(g_msgQueueId1, &data, NULL, QUEUE_WAIT_TIMEOUT); status = osMessageQueueGet(g_msgQueueId1, &data, NULL, QUEUE_WAIT_TIMEOUT);
ICUNIT_ASSERT_EQUAL(status, osOK, status); ICUNIT_ASSERT_EQUAL_VOID(status, osOK, status);
ret = strcmp(data, "hello"); ret = strcmp(data, "hello");
ICUNIT_ASSERT_EQUAL(ret, 0, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, 0, ret);
ret = osMessageQueuePut(g_msgQueueId2, &g_strbuff2, 0U, 0U); ret = osMessageQueuePut(g_msgQueueId2, &g_strbuff2, 0U, 0U);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, osOK, ret);
} }
static INT32 ThreadReadWriteTest(VOID) static INT32 ThreadReadWriteTest(VOID)
@@ -193,10 +193,10 @@ static INT32 ThreadReadWriteTest(VOID)
g_msgQueueId2 = osMessageQueueNew(1, strlen(g_strbuff2), &attr); g_msgQueueId2 = osMessageQueueNew(1, strlen(g_strbuff2), &attr);
ICUNIT_ASSERT_NOT_EQUAL(g_msgQueueId2, NULL, g_msgQueueId2); ICUNIT_ASSERT_NOT_EQUAL(g_msgQueueId2, NULL, g_msgQueueId2);
threadId1 = osThreadNew(CmsisQueueTestThread1, NULL, NULL); threadId1 = osThreadNew((osThreadFunc_t)CmsisQueueTestThread1, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(threadId1, NULL, threadId1); ICUNIT_ASSERT_NOT_EQUAL(threadId1, NULL, threadId1);
threadId2 = osThreadNew(CmsisQueueTestThread2, NULL, NULL); threadId2 = osThreadNew((osThreadFunc_t)CmsisQueueTestThread2, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(threadId2, NULL, threadId2); ICUNIT_ASSERT_NOT_EQUAL(threadId2, NULL, threadId2);
osThreadJoin(threadId1); osThreadJoin(threadId1);
@@ -239,8 +239,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis006, Function | MediumTest | Level1)
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR data[STATCI_BUFF_SIZE] = {0}; CHAR data[STATCI_BUFF_SIZE] = {0};
INT32 ret; INT32 ret;
@@ -272,6 +270,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis005, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
@@ -311,8 +311,6 @@ EXIT:
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
CHAR data[STATCI_BUFF_SIZE] = {0}; CHAR data[STATCI_BUFF_SIZE] = {0};
INT32 ret; INT32 ret;
@@ -335,6 +333,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = strlen(strbuff) + 1; attr.mq_size = strlen(strbuff) + 1;
msgQueueId = osMessageQueueNew(1, strlen(strbuff), &attr); msgQueueId = osMessageQueueNew(1, strlen(strbuff), &attr);
@@ -352,15 +352,10 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis004, Function | MediumTest | Level1)
ret = strcmp(staticBuff, strbuff); ret = strcmp(staticBuff, strbuff);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT);
ret = osMessageQueueDelete(msgQueueId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
#endif
return LOS_OK;
EXIT: EXIT:
ret = osMessageQueueDelete(msgQueueId); ret = osMessageQueueDelete(msgQueueId);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret); ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
#endif
return LOS_OK; return LOS_OK;
} }
@@ -373,8 +368,6 @@ EXIT:
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
/* dynmic test */ /* dynmic test */
@@ -386,6 +379,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(0, strlen(strbuff), &attr); msgQueueId = osMessageQueueNew(0, strlen(strbuff), &attr);
@@ -417,8 +412,6 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis003, Function | MediumTest | Level1)
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1) LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
{ {
osMessageQueueId_t msgQueueId; osMessageQueueId_t msgQueueId;
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
CHAR strbuff[] = "hello world"; CHAR strbuff[] = "hello world";
INT32 ret; INT32 ret;
@@ -434,6 +427,8 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
#if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1) #if (LOSCFG_BASE_IPC_QUEUE_STATIC == 1)
/* static test */ /* static test */
osMessageQueueAttr_t attr = {0};
CHAR staticBuff[STATCI_BUFF_SIZE] = {0};
attr.mq_mem = staticBuff; attr.mq_mem = staticBuff;
attr.mq_size = STATCI_BUFF_SIZE; attr.mq_size = STATCI_BUFF_SIZE;
msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr); msgQueueId = osMessageQueueNew(1, STATCI_BUFF_SIZE, &attr);
@@ -449,6 +444,53 @@ LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsis002, Function | MediumTest | Level1)
return LOS_OK; return LOS_OK;
}; };
static VOID timerCallback(void *arg)
{
return;
}
/**
* @tc.name: TestCmsisTimer001
* @tc.desc: Timer Management test
* @tc.type: FUNC
* @tc.require: issueI5TQ0T
*/
LITE_TEST_CASE(CmsisFuncTestSuite, TestCmsisTimer001, Function | MediumTest | Level1)
{
osTimerId_t time_id;
const char *timerGetName = NULL;
osStatus_t ret;
time_id = osTimerNew(timerCallback, osTimerOnce, NULL, NULL);
ICUNIT_ASSERT_NOT_EQUAL(time_id, NULL, time_id);
ret = osTimerStart(time_id, 100U); // 100, just for test
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
timerGetName = osTimerGetName(time_id);
ICUNIT_GOTO_EQUAL(timerGetName, NULL, timerGetName, EXIT1);
ret = osTimerIsRunning(time_id);
ICUNIT_GOTO_EQUAL(ret, 1, ret, EXIT1);
ret = osTimerStop(time_id);
ICUNIT_GOTO_EQUAL(ret, osOK, ret, EXIT1);
ret = osTimerIsRunning(time_id);
ICUNIT_GOTO_EQUAL(ret, 0, ret, EXIT1);
ret = osTimerDelete(time_id);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return LOS_OK;
EXIT1:
ret = osTimerDelete(time_id);
ICUNIT_ASSERT_EQUAL(ret, osOK, ret);
return LOS_OK;
};
void CmsisFuncTestSuite(void) void CmsisFuncTestSuite(void)
{ {
@@ -465,5 +507,7 @@ void CmsisFuncTestSuite(void)
#endif #endif
ADD_TEST_CASE(TestCmsis007); ADD_TEST_CASE(TestCmsis007);
ADD_TEST_CASE(TestCmsisTimer001);
} }
+3 -1
View File
@@ -27,6 +27,8 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("test_atomic") { static_library("test_atomic") {
sources = [ sources = [
"it_los_atomic.c", "it_los_atomic.c",
@@ -43,5 +45,5 @@ static_library("test_atomic") {
"it_los_atomic_011.c", "it_los_atomic_011.c",
] ]
include_dirs = [ "." ] include_dirs = [ "." ]
configs += [ "//kernel/liteos_m/testsuites:include" ] configs += [ "$LITEOSTOPDIR/testsuites:include" ]
} }
@@ -46,7 +46,7 @@ static VOID TaskF01(VOID)
ICUNIT_ASSERT_EQUAL_VOID(g_testAtomicID03, i, g_testAtomicID03); ICUNIT_ASSERT_EQUAL_VOID(g_testAtomicID03, i, g_testAtomicID03);
ICUNIT_ASSERT_EQUAL_VOID(ret, g_testAtomicID03, ret); ICUNIT_ASSERT_EQUAL_VOID(ret, g_testAtomicID03, ret);
LOS_AtomicAdd(&g_testCount, 1); LOS_AtomicAdd((Atomic *)(&g_testCount), 1);
} }
static UINT32 TestCase(VOID) static UINT32 TestCase(VOID)
@@ -62,9 +62,9 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(20); // delay 20 ticks. LOS_TaskDelay(20); // delay 20 ticks.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
ICUNIT_GOTO_EQUAL(g_testAtomicID05, TEST_LOOP, g_testAtomicID05, EXIT); ICUNIT_ASSERT_EQUAL(g_testAtomicID05, TEST_LOOP, g_testAtomicID05);
EXIT:
return LOS_OK; return LOS_OK;
} }
@@ -232,8 +232,8 @@ static UINT32 TestCase(VOID)
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(20); // delay 20 ticks. LOS_TaskDelay(20); // delay 20 ticks.
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
EXIT:
return LOS_OK; return LOS_OK;
} }
+3 -10
View File
@@ -27,6 +27,8 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("test_dynlink") { static_library("test_dynlink") {
sources = [ sources = [
"It_los_dynlink.c", "It_los_dynlink.c",
@@ -52,14 +54,5 @@ static_library("test_dynlink") {
"It_los_dynlink_020.c", "It_los_dynlink_020.c",
] ]
include_dirs = [ configs += [ "$LITEOSTOPDIR/testsuites:include" ]
"../../../../kernel/include",
"../../../../kernel/arch/include",
"../../../include",
"../../../../utils",
"../../../../components/dynlink",
".",
"../../../../components/cpup",
"//third_party/bounds_checking_function/include",
]
} }
@@ -51,6 +51,7 @@ VOID ItLosDynlink007(VOID);
VOID ItLosDynlink008(VOID); VOID ItLosDynlink008(VOID);
VOID ItLosDynlink009(VOID); VOID ItLosDynlink009(VOID);
VOID ItLosDynlink010(VOID); VOID ItLosDynlink010(VOID);
VOID ItLosDynlink011(VOID);
VOID ItLosDynlink012(VOID); VOID ItLosDynlink012(VOID);
VOID ItLosDynlink013(VOID); VOID ItLosDynlink013(VOID);
VOID ItLosDynlink014(VOID); VOID ItLosDynlink014(VOID);
@@ -33,8 +33,8 @@
/* Test invalid params */ /* Test invalid params */
STATIC UINT32 TestCase(VOID) STATIC UINT32 TestCase(VOID)
{ {
VOID *handle = NULL; CHAR *handle = NULL;
VOID *invalHandle = NULL; CHAR *invalHandle = NULL;
INT32 (*func)(INT32, INT32) = NULL; INT32 (*func)(INT32, INT32) = NULL;
CHAR *symbolName = "test_api"; CHAR *symbolName = "test_api";
CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_align4.so"); CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_align4.so");
@@ -36,7 +36,6 @@ STATIC UINT32 TestCase(VOID)
VOID *handle = NULL; VOID *handle = NULL;
CHAR *dsoNeedOthers = DSO_FULL_PATH("Align4_dynamic_need_others.so"); CHAR *dsoNeedOthers = DSO_FULL_PATH("Align4_dynamic_need_others.so");
CHAR *dsoWithoutPIC = DSO_FULL_PATH("Align4_dynamic_nopic.so"); CHAR *dsoWithoutPIC = DSO_FULL_PATH("Align4_dynamic_nopic.so");
INT32 ret;
handle = (VOID *)LOS_SoLoad(dsoNeedOthers, NULL); handle = (VOID *)LOS_SoLoad(dsoNeedOthers, NULL);
ICUNIT_ASSERT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_EQUAL(handle, NULL, handle);
@@ -34,7 +34,7 @@
STATIC UINT32 TestCase(VOID) STATIC UINT32 TestCase(VOID)
{ {
VOID *handle = NULL; VOID *handle = NULL;
INT32 (*func)() = NULL; INT32 (*func)(VOID) = NULL;
INT32 *pValue = NULL; INT32 *pValue = NULL;
CHAR *symbolName1 = "dyn_bss_func"; CHAR *symbolName1 = "dyn_bss_func";
CHAR *symbolName2 = "test_array"; CHAR *symbolName2 = "test_array";
@@ -44,7 +44,7 @@ STATIC UINT32 TestCase(VOID)
handle = (VOID *)LOS_SoLoad(dsoName, NULL); handle = (VOID *)LOS_SoLoad(dsoName, NULL);
ICUNIT_ASSERT_NOT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_NOT_EQUAL(handle, NULL, handle);
func = (INT32 (*)())LOS_FindSym(handle, symbolName1); func = (INT32 (*)(VOID))LOS_FindSym(handle, symbolName1);
ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT); ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT);
ret = func(); ret = func();
ICUNIT_GOTO_EQUAL(ret, 2117, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 2117, ret, EXIT);
@@ -34,7 +34,7 @@
STATIC UINT32 TestCase(VOID) STATIC UINT32 TestCase(VOID)
{ {
VOID *handle = NULL; VOID *handle = NULL;
INT32 (*func)() = NULL; INT32 (*func)(VOID) = NULL;
INT32 *pValueAddr = NULL; INT32 *pValueAddr = NULL;
INT32 **ppValueAddr = NULL; INT32 **ppValueAddr = NULL;
CHAR *symbolName1 = "get_value100"; CHAR *symbolName1 = "get_value100";
@@ -49,12 +49,12 @@ STATIC UINT32 TestCase(VOID)
handle = (VOID *)LOS_SoLoad(dsoName, NULL); handle = (VOID *)LOS_SoLoad(dsoName, NULL);
ICUNIT_ASSERT_NOT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_NOT_EQUAL(handle, NULL, handle);
func = (INT32 (*)())LOS_FindSym(handle, symbolName1); func = (INT32 (*)(VOID))LOS_FindSym(handle, symbolName1);
ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT); ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT);
ret = func(); ret = func();
ICUNIT_GOTO_EQUAL(ret, 100, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 100, ret, EXIT);
func = (INT32 (*)())LOS_FindSym(handle, symbolName2); func = (INT32 (*)(VOID))LOS_FindSym(handle, symbolName2);
ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT); ICUNIT_GOTO_NOT_EQUAL(func, NULL, func, EXIT);
ret = func(); ret = func();
ICUNIT_GOTO_EQUAL(ret, 200, ret, EXIT); ICUNIT_GOTO_EQUAL(ret, 200, ret, EXIT);
@@ -34,9 +34,7 @@
STATIC UINT32 TestCase(VOID) STATIC UINT32 TestCase(VOID)
{ {
VOID *handle = NULL; VOID *handle = NULL;
VOID (*func)(INT32, INT32) = NULL;
CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_stdlib.so"); CHAR *dsoName = DSO_FULL_PATH("Align4_dynamic_stdlib.so");
INT32 ret;
handle = (VOID *)LOS_SoLoad(dsoName, NULL); handle = (VOID *)LOS_SoLoad(dsoName, NULL);
ICUNIT_ASSERT_EQUAL(handle, NULL, handle); ICUNIT_ASSERT_EQUAL(handle, NULL, handle);
+3 -1
View File
@@ -27,6 +27,8 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//kernel/liteos_m/liteos.gni")
static_library("test_event") { static_library("test_event") {
sources = [ sources = [
"It_los_event.c", "It_los_event.c",
@@ -74,5 +76,5 @@ static_library("test_event") {
"It_los_event_043.c", "It_los_event_043.c",
] ]
configs += [ "//kernel/liteos_m/testsuites:include" ] configs += [ "$LITEOSTOPDIR/testsuites:include" ]
} }
@@ -33,7 +33,7 @@
#include "osTest.h" #include "osTest.h"
#include "It_los_event.h" #include "It_los_event.h"
static VOID TaskF01() static VOID TaskF01(VOID)
{ {
UINT32 ret; UINT32 ret;

Some files were not shown because too many files have changed in this diff Show More