From f48036b1fbff82b93f06e5379ca9e20097221d68 Mon Sep 17 00:00:00 2001 From: zhangzheng <1358745329@qq.comwq> Date: Sat, 16 Sep 2023 17:32:10 +0800 Subject: [PATCH] =?UTF-8?q?env=E6=94=AF=E6=8C=81=EF=BC=8Capp=5Floader?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- Readme.md | 10 +- mkrtos_knl/CMakeLists.txt | 1 + mkrtos_knl/inc/knl/log.h | 16 +- mkrtos_knl/inc/knl/prot.h | 16 +- mkrtos_knl/knl/sys.c | 20 +- mkrtos_user/lib/libc_backend/src/fs_backend.c | 5 +- .../lib/mlibc/src/env/__libc_start_main.c | 84 ++++--- mkrtos_user/lib/sys/inc/u_sys.h | 3 +- mkrtos_user/lib/sys/src/u_env.c | 2 - mkrtos_user/lib/sys/src/u_sys.c | 7 +- mkrtos_user/lib/sys_util/CMakeLists.txt | 2 + mkrtos_user/lib/sys_util/inc/u_app_loader.h | 3 + mkrtos_user/lib/{sys => sys_util}/inc/u_env.h | 7 +- mkrtos_user/lib/sys_util/src/u_app_loader.c | 218 ++++++++++++++++++ mkrtos_user/lib/sys_util/src/u_env.c | 20 ++ mkrtos_user/server/init/src/main.c | 9 +- mkrtos_user/server/init/src/namespace.c | 59 +++++ mkrtos_user/server/shell/src/main.c | 17 +- setting.cmake | 2 +- 20 files changed, 426 insertions(+), 78 deletions(-) delete mode 100644 mkrtos_user/lib/sys/src/u_env.c create mode 100644 mkrtos_user/lib/sys_util/inc/u_app_loader.h rename mkrtos_user/lib/{sys => sys_util}/inc/u_env.h (54%) create mode 100644 mkrtos_user/lib/sys_util/src/u_app_loader.c create mode 100644 mkrtos_user/lib/sys_util/src/u_env.c create mode 100644 mkrtos_user/server/init/src/namespace.c diff --git a/.vscode/settings.json b/.vscode/settings.json index ec333f0ae..474cf6ded 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -133,7 +133,8 @@ "queue.h": "c", "irq.h": "c", "irq_sender.h": "c", - "u_irq_sender.h": "c" + "u_irq_sender.h": "c", + "u_env.h": "c" }, "cortex-debug.showRTOS": false, } \ No newline at end of file diff --git a/Readme.md b/Readme.md index 9e8b0042c..655b8d7bf 100755 --- a/Readme.md +++ b/Readme.md @@ -10,6 +10,7 @@ - 1.服务间数据交互不经过第三方组件。 - 2.服务间最简接口原则。 - 3.内核最小功能原则。 +- 4.类L4内核(第三代微内核)。 ### MKRTOS 内核 #### done - 1.处理器:默认支持 Cortex-M3 处理器 @@ -20,14 +21,15 @@ - 4.多线程:支持多线程管理,线程与task分离,设计跟合理。 - 5.多进程:支持内存空间与对象空间,进程只管理资源。 - 6.MPU实现进程隔离。 +- 7.irq对象支持,用于内核中断转发到用户态。 +- 8.IPC功能完善。 #### todo - 1.Cortex-M其它系列处理器、RISC-V,龙芯支持。 - 2.硬件浮点支持。 -- 3.irq对象支持,用于内核中断转发到用户态。 -- 4.支持MMU实现进程隔离。 -- 5.内核futex支持(用于实现用户态的锁)。 +- 3.支持MMU实现进程隔离。 +- 4.内核futex支持(用于实现用户态的锁)。 #### doing -- 1.IPC功能完善。 +- 1.完善内核. ### MKRTOS 用户态基础支持 #### done diff --git a/mkrtos_knl/CMakeLists.txt b/mkrtos_knl/CMakeLists.txt index 058b5be79..664563e53 100755 --- a/mkrtos_knl/CMakeLists.txt +++ b/mkrtos_knl/CMakeLists.txt @@ -6,6 +6,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ -DKNL_OFFSET=$ENV{KEN_OFFSET} \ -DKNL_TEXT=$ENV{KNL_TEXT} \ -DINIT_OFFSET=$ENV{INIT_OFFSET} \ +-DBOOTFS_ADDR_OFFSET=$ENV{BOOTFS_ADDR_OFFSET} \ -DSMP=1 \ -Wno-unused-parameter \ -Wno-unused-function \ diff --git a/mkrtos_knl/inc/knl/log.h b/mkrtos_knl/inc/knl/log.h index 7f7d72cd7..e4ee95fab 100755 --- a/mkrtos_knl/inc/knl/log.h +++ b/mkrtos_knl/inc/knl/log.h @@ -1,10 +1,12 @@ -/* - * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git - * @Date: 2023-08-14 09:47:54 - * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git - * @LastEditTime: 2023-08-14 12:50:38 - * @FilePath: /mkrtos-real/mkrtos_knl/inc/knl/log.h - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE +/** + * @file log.h + * @author zhangzheng (1358745329@qq.com) + * @brief + * @version 0.1 + * @date 2023-09-16 + * + * @copyright Copyright (c) 2023 + * */ #pragma once diff --git a/mkrtos_knl/inc/knl/prot.h b/mkrtos_knl/inc/knl/prot.h index bf9b9253d..43486ba31 100755 --- a/mkrtos_knl/inc/knl/prot.h +++ b/mkrtos_knl/inc/knl/prot.h @@ -1,10 +1,12 @@ -/* - * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git - * @Date: 2023-08-14 09:47:54 - * @LastEditors: zhangzheng 1358745329@qq.com - * @LastEditTime: 2023-08-14 13:04:22 - * @FilePath: /mkrtos-real/mkrtos_knl/inc/knl/prot.h - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE +/** + * @file prot.h + * @author zhangzheng (1358745329@qq.com) + * @brief + * @version 0.1 + * @date 2023-09-16 + * + * @copyright Copyright (c) 2023 + * */ #pragma once diff --git a/mkrtos_knl/knl/sys.c b/mkrtos_knl/knl/sys.c index 8794a9fde..db1d6520d 100755 --- a/mkrtos_knl/knl/sys.c +++ b/mkrtos_knl/knl/sys.c @@ -1,12 +1,13 @@ -/* - * @Author: zhangzheng 1358745329@qq.com - * @Date: 2023-08-14 09:47:54 - * @LastEditors: zhangzheng 1358745329@qq.com - * @LastEditTime: 2023-08-14 13:10:35 - * @FilePath: /mkrtos-real/mkrtos_knl/knl/log.c - * @Description: 内核的信息输出对象,用户态使用该对象进行数据输出。 +/** + * @file sys.c + * @author zhangzheng (1358745329@qq.com) + * @brief 内核的信息输出对象,用户态使用该对象进行数据输出。 + * @version 0.1 + * @date 2023-09-16 + * + * @copyright Copyright (c) 2023 + * */ - #include "log.h" #include "factory.h" #include "kobject.h" @@ -42,7 +43,7 @@ INIT_KOBJ(sys_reg); static void sys_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f) { msg_tag_t tag = msg_tag_init4(0, 0, 0, -EINVAL); - if (sys_p.prot != LOG_PROT) + if (sys_p.prot != SYS_PROT) { f->r[0] = msg_tag_init4(0, 0, 0, -EPROTO).raw; return; @@ -52,6 +53,7 @@ static void sys_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, case SYS_INFO_GET: { f->r[1] = sys_tick_cnt_get(); + f->r[2] = KNL_TEXT + BOOTFS_ADDR_OFFSET; tag = msg_tag_init4(0, 0, 0, 0); } break; diff --git a/mkrtos_user/lib/libc_backend/src/fs_backend.c b/mkrtos_user/lib/libc_backend/src/fs_backend.c index 8cd9665a1..8587456dd 100644 --- a/mkrtos_user/lib/libc_backend/src/fs_backend.c +++ b/mkrtos_user/lib/libc_backend/src/fs_backend.c @@ -5,6 +5,7 @@ #include #include #include +#include #include static long be_read(long fd, char *buf, long size) { @@ -17,7 +18,7 @@ static long be_write(long fd, char *buf, long size) case 0: case 1: case 2: - ulog_write_bytes(LOG_PROT, buf, size); + ulog_write_bytes(u_get_global_env()->log_hd, buf, size); return size; default: return -ENOSYS; @@ -29,7 +30,7 @@ static long be_writev(long fd, const struct iovec *iov, long iovcnt) long wlen = 0; for (int i = 0; i < iovcnt; i++) { - ulog_write_bytes(LOG_PROT, iov[i].iov_base, iov[i].iov_len); + ulog_write_bytes(u_get_global_env()->log_hd, iov[i].iov_base, iov[i].iov_len); wlen += iov[i].iov_len; } return wlen; diff --git a/mkrtos_user/lib/mlibc/src/env/__libc_start_main.c b/mkrtos_user/lib/mlibc/src/env/__libc_start_main.c index 2b7e28879..300faf4af 100644 --- a/mkrtos_user/lib/mlibc/src/env/__libc_start_main.c +++ b/mkrtos_user/lib/mlibc/src/env/__libc_start_main.c @@ -20,39 +20,60 @@ weak_alias(dummy1, __init_ssp); #ifdef __GNUC__ __attribute__((__noinline__)) #endif -void __init_libc(char **envp, char *pn) +void +__init_libc(char **envp, char *pn) { - size_t i, *auxv, aux[AUX_CNT] = { 0 }; + size_t i, *auxv, aux[AUX_CNT] = {0}; __environ = envp; - for (i=0; envp[i]; i++); - libc.auxv = auxv = (void *)(envp+i+1); - for (i=0; auxv[i]; i+=2) if (auxv[i]sys_tick = r1; + info->bootfs_start_addr = r2; } - return msg_tag_init(r0); + return tag; } diff --git a/mkrtos_user/lib/sys_util/CMakeLists.txt b/mkrtos_user/lib/sys_util/CMakeLists.txt index 56780fd1b..3f7d1c45a 100644 --- a/mkrtos_user/lib/sys_util/CMakeLists.txt +++ b/mkrtos_user/lib/sys_util/CMakeLists.txt @@ -19,6 +19,7 @@ target_include_directories( PUBLIC ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/inc ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/cpio ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/arm/ ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/generic @@ -33,6 +34,7 @@ target_link_libraries( PUBLIC sys muslc + cpio ) add_dependencies(sys_util sys) add_dependencies(sys_util muslc) diff --git a/mkrtos_user/lib/sys_util/inc/u_app_loader.h b/mkrtos_user/lib/sys_util/inc/u_app_loader.h new file mode 100644 index 000000000..5a4f33635 --- /dev/null +++ b/mkrtos_user/lib/sys_util/inc/u_app_loader.h @@ -0,0 +1,3 @@ +#pragma once + +int app_load(const char *name); diff --git a/mkrtos_user/lib/sys/inc/u_env.h b/mkrtos_user/lib/sys_util/inc/u_env.h similarity index 54% rename from mkrtos_user/lib/sys/inc/u_env.h rename to mkrtos_user/lib/sys_util/inc/u_env.h index dd5410eef..e17f8d83e 100644 --- a/mkrtos_user/lib/sys/inc/u_env.h +++ b/mkrtos_user/lib/sys_util/inc/u_env.h @@ -2,11 +2,14 @@ #include "u_types.h" -//!< 暂时只能是16字节 typedef struct uenv { obj_handler_t log_hd; - obj_handler_t rev0; + obj_handler_t ns_hd; obj_handler_t rev1; obj_handler_t rev2; } uenv_t; + +uenv_t *u_get_global_env(void); +void u_env_init(void *in_env); +void u_env_default_init(void); diff --git a/mkrtos_user/lib/sys_util/src/u_app_loader.c b/mkrtos_user/lib/sys_util/src/u_app_loader.c new file mode 100644 index 000000000..5bab0a03a --- /dev/null +++ b/mkrtos_user/lib/sys_util/src/u_app_loader.c @@ -0,0 +1,218 @@ + +#include "u_types.h" +#include "u_prot.h" +#include "u_app.h" +#include "u_factory.h" +#include "u_mm.h" +#include "u_task.h" +#include "u_hd_man.h" +#include "u_thread.h" +#include "u_ipc.h" +#include "cpiofs.h" +#include "u_env.h" +#include "u_sys.h" +#include +#include +#include +#include +#include + +/** + * @brief 向栈中存放数据 + * + * @param stack + * @param val + * @return umword_t + */ +static umword_t app_stack_push(umword_t *stack, umword_t val) +{ + *stack = val; + stack++; + return (umword_t)stack; +} + +/** + * @brief 加载并执行一个app + * + * @param name app的名字 + * @return int + */ +int app_load(const char *name) +{ + msg_tag_t tag; + sys_info_t sys_info; + uenv_t *cur_env = u_get_global_env(); + + tag = sys_read_info(SYS_PROT, &sys_info); + if (msg_tag_get_val(tag)) + { + return -ENOENT; + } + umword_t addr = cpio_find_file((umword_t)sys_info.bootfs_start_addr, (umword_t)(-1), name); + + if (!addr) + { + return -ENOENT; + } + + app_info_t *app = (app_info_t *)addr; + printf("app addr is 0x%x\n", app); + umword_t ram_base; + obj_handler_t hd_task = handler_alloc(); + obj_handler_t hd_thread = handler_alloc(); + // obj_handler_t hd_ipc = handler_alloc(); + + if (hd_task == HANDLER_INVALID) + { + goto end; + } + if (hd_thread == HANDLER_INVALID) + { + goto end; + } + // if (hd_ipc == HANDLER_INVALID) + // { + // goto end; + // } + + tag = factory_create_task(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, hd_task)); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = factory_create_thread(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, hd_thread)); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + // tag = factory_create_ipc(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, hd_ipc)); + // if (msg_tag_get_prot(tag) < 0) + // { + // goto end_del_obj; + // } + // printf("ipc hd is %d\n", hd_ipc); + + tag = task_alloc_ram_base(hd_task, app->i.ram_size, &ram_base); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = task_map(hd_task, hd_task, TASK_PROT, 0); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = task_map(hd_task, LOG_PROT, LOG_PROT, 0); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + // tag = task_map(hd_task, hd_ipc, hd_ipc, 0); + // if (msg_tag_get_prot(tag) < 0) + // { + // goto end_del_obj; + // } + tag = task_map(hd_task, hd_thread, THREAD_MAIN, 0); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = task_map(hd_task, FACTORY_PROT, FACTORY_PROT, 0); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = task_map(hd_task, MM_PROT, MM_PROT, 0); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + + tag = thread_msg_buf_set(hd_thread, (void *)(ram_base + app->i.ram_size)); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + tag = thread_bind_task(hd_thread, hd_task); + if (msg_tag_get_prot(tag) < 0) + { + goto end_del_obj; + } + // tag = ipc_bind(hd_ipc, hd_thread, 0); + // if (msg_tag_get_prot(tag) < 0) + // { + // goto end_del_obj; + // } + void *sp_addr = (char *)ram_base + app->i.stack_offset - app->i.data_offset; + void *sp_addr_top = (char *)sp_addr + app->i.stack_size; + + umword_t usp_top = ((umword_t)((umword_t)sp_addr_top - 8) & ~0x7UL) - MSG_BUG_LEN; + + /**处理传参*/ + umword_t *buf; + thread_msg_buf_get(THREAD_MAIN, (umword_t *)(&buf), NULL); + umword_t *buf_bk = buf; +#define ARG_WORD_NR 10 + buf = (umword_t *)app_stack_push(buf, 1); //!< argc 24 + buf = (umword_t *)app_stack_push(buf, (umword_t)usp_top + ARG_WORD_NR * 4); //!< argv[0] + buf = (umword_t *)app_stack_push(buf, 0); //!< NULL + buf = (umword_t *)app_stack_push(buf, (umword_t)usp_top + ARG_WORD_NR * 4 + 16); //!< env[0...N] + buf = (umword_t *)app_stack_push(buf, 0); //!< NULL + + buf = (umword_t *)app_stack_push(buf, (umword_t)AT_PAGESZ); //!< auxvt[0...N] + buf = (umword_t *)app_stack_push(buf, MK_PAGE_SIZE); //!< auxvt[0...N] + buf = (umword_t *)app_stack_push(buf, 0xfe); //!< auxvt[0...N] mkrtos_env + buf = (umword_t *)app_stack_push(buf, (umword_t)usp_top + ARG_WORD_NR * 4 + 16 + 16); //!< auxvt[0...N] + buf = (umword_t *)app_stack_push(buf, 0); //!< NULL + + // set args & env. + memcpy((char *)buf_bk + ARG_WORD_NR * 4, name, strlen(name) + 1); + memcpy((char *)buf_bk + ARG_WORD_NR * 4 + 16, "PATH=/", strlen("PATH=/") + 1); + + // set user env. + uenv_t *uenv = (uenv_t *)((char *)buf_bk + 9 * 4 + 16 + 16); + uenv->log_hd = LOG_PROT; + uenv->ns_hd = cur_env->ns_hd; + uenv->rev1 = HANDLER_INVALID; + uenv->rev2 = HANDLER_INVALID; + + tag = thread_exec_regs(hd_thread, (umword_t)addr, (umword_t)sp_addr_top, ram_base, 1); + assert(msg_tag_get_prot(tag) >= 0); + + /*启动线程运行*/ + tag = thread_run(hd_thread, 2); + assert(msg_tag_get_prot(tag) >= 0); + + // umword_t len; + // thread_msg_buf_get(THREAD_MAIN, (umword_t *)(&buf), NULL); + // strcpy((char *)buf, "hello shell.\n"); + // ipc_call(hd_ipc, msg_tag_init4(0, ROUND_UP(strlen((char *)buf), WORD_BYTES), 0, 0), ipc_timeout_create2(0, 0)); + // printf("test ok\n"); + return 0; +end_del_obj: + if (hd_task != HANDLER_INVALID) + { + task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, hd_task)); + } + if (hd_thread != HANDLER_INVALID) + { + task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, hd_thread)); + } + // if (hd_ipc != HANDLER_INVALID) + // { + // task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, hd_ipc)); + // } +end: + if (hd_task != HANDLER_INVALID) + { + handler_free(hd_task); + } + if (hd_thread != HANDLER_INVALID) + { + handler_free(hd_thread); + } + // if (hd_ipc != HANDLER_INVALID) + // { + // } + return -ENOMEM; +} diff --git a/mkrtos_user/lib/sys_util/src/u_env.c b/mkrtos_user/lib/sys_util/src/u_env.c new file mode 100644 index 000000000..9d05cf6c1 --- /dev/null +++ b/mkrtos_user/lib/sys_util/src/u_env.c @@ -0,0 +1,20 @@ +#include "u_env.h" +#include "u_prot.h" +#include "u_hd_man.h" +static uenv_t env; + +uenv_t *u_get_global_env(void) +{ + return &env; +} + +void u_env_default_init(void) +{ + env.log_hd = LOG_PROT; + env.ns_hd = HANDLER_INVALID; +} + +void u_env_init(void *in_env) +{ + env = *((uenv_t *)in_env); +} \ No newline at end of file diff --git a/mkrtos_user/server/init/src/main.c b/mkrtos_user/server/init/src/main.c index 2bd5df2aa..db57673b0 100644 --- a/mkrtos_user/server/init/src/main.c +++ b/mkrtos_user/server/init/src/main.c @@ -10,6 +10,8 @@ #include "u_ipc.h" #include "u_hd_man.h" #include "u_irq_sender.h" +#include "u_app_loader.h" + #include "test/test.h" extern void futex_init(void); int main(int argc, char *args[]) @@ -27,8 +29,13 @@ int main(int argc, char *args[]) map_test(); ipc_timeout_test(); mm_test(); -#endif app_test(); +#endif + int ret = app_load("shell"); + if (ret < 0) + { + printf("app load fail, 0x%x\n", ret); + } task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS)); // 删除当前task,以及申请得所有对象 printf("exit init.\n"); return 0; diff --git a/mkrtos_user/server/init/src/namespace.c b/mkrtos_user/server/init/src/namespace.c new file mode 100644 index 000000000..a62750975 --- /dev/null +++ b/mkrtos_user/server/init/src/namespace.c @@ -0,0 +1,59 @@ + +#include +#include +#include "u_hd_man.h" +#define NAMESPACE_PATH_LEN 32 +#define NAMESAPCE_NR 32 + +typedef struct namespace_entry +{ + char path[NAMESPACE_PATH_LEN]; + obj_handler_t hd; +} namespace_entry_t; + +typedef struct namespace +{ + namespace_entry_t ne_list[NAMESAPCE_NR]; +} +namespace_t; + +static namespace_t ns; + +static int ns_alloc(const char *path, obj_handler_t hd) +{ + for (int i = 0; i < NAMESAPCE_NR; i++) + { + if (ns.ne_list[i].hd == HANDLER_INVALID) + { + ns.ne_list[i].hd = hd; + strncpy(ns.ne_list[i].path, path, NAMESPACE_PATH_LEN); + ns.ne_list[i].path[NAMESPACE_PATH_LEN - 1] = 0; + return i; + } + } + return -1; +} + +int ns_register(const char *path, obj_handler_t hd) +{ + if (ns_alloc(path, hd) < 0) + { + return -1; + } + return 0; +} +int ns_query(const char *path, obj_handler_t *hd) +{ + for (int i = 0; i < NAMESAPCE_NR; i++) + { + if (ns.ne_list[i].hd == HANDLER_INVALID) + { + if (strncmp(ns.ne_list[i].path, path, NAMESPACE_PATH_LEN) == 0) + { + *hd = ns.ne_list[i].hd; + return 0; + } + } + } + return -1; +} diff --git a/mkrtos_user/server/shell/src/main.c b/mkrtos_user/server/shell/src/main.c index 857096529..a003dd0f1 100644 --- a/mkrtos_user/server/shell/src/main.c +++ b/mkrtos_user/server/shell/src/main.c @@ -6,6 +6,7 @@ #include "u_thread.h" #include "u_task.h" #include "u_ipc.h" +#include "u_env.h" #include "test.h" #include #include @@ -30,16 +31,16 @@ void malloc_test(void) int main(int argc, char *args[]) { printf("argc:%d args[0]:%s\n", argc, args[0]); - ulog_write_str(LOG_PROT, "MKRTOS:\n"); + ulog_write_str(u_get_global_env()->log_hd, "MKRTOS:\n"); malloc_test(); irq_test(); - ipc_wait(12, 0); - ipc_reply(12, msg_tag_init4(0, 0, 0, 0)); - char *buf; - umword_t len; - thread_msg_buf_get(THREAD_MAIN, (umword_t *)(&buf), NULL); - printf(buf); + // ipc_wait(12, 0); + // ipc_reply(12, msg_tag_init4(0, 0, 0, 0)); + // char *buf; + // umword_t len; + // thread_msg_buf_get(THREAD_MAIN, (umword_t *)(&buf), NULL); + // printf(buf); task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS)); - ulog_write_str(LOG_PROT, "Error.\n"); + ulog_write_str(u_get_global_env()->log_hd, "Error.\n"); return 0; } diff --git a/setting.cmake b/setting.cmake index a5558ae56..0c50087b3 100755 --- a/setting.cmake +++ b/setting.cmake @@ -20,7 +20,7 @@ set(CMAKE_SIZE "${CROSS_COMPILE}size" CACHE PATH "" FORCE) # -mfloat-abi=soft -u _printf_float -set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb -Os -g -lc -lrdimon -mfloat-abi=soft \ +set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb -O0 -g -lc -lrdimon -mfloat-abi=soft \ -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \ -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \ --gc-sections -fno-stack-protector \