posix文件借口修复

This commit is contained in:
zhangzheng
2023-12-02 22:02:56 +08:00
parent 8c4692ac39
commit 2d68c1b480
42 changed files with 237 additions and 117 deletions

View File

@@ -264,7 +264,8 @@
"shell_cfg.h": "c",
"__memory": "c",
"optional": "c",
"system_error": "c"
"system_error": "c",
"__dirent.h": "c"
},
"cortex-debug.showRTOS": false,
"cortex-debug.variableUseNaturalFormat": false,

View File

@@ -18,7 +18,7 @@
#include "mm_man.h"
#include "ipc.h"
static mem_t global_mem; //!< 全局内存管理块
static uint8_t mem_block[59 * 1024]; //!< 内核内存分配堆 TODO:自动识别大小或者从bootstrap中读取
static uint8_t mem_block[1019 * 1024]; //!< 内核内存分配堆 TODO:自动识别大小或者从bootstrap中读取
static kobject_t *kobj_ls[FACTORY_FUNC_MAX]; //!< 全局静态内核对象
void global_reg_kobj(kobject_t *kobj, int inx)

View File

@@ -1,7 +1,7 @@
ENTRY(Reset_Handler)
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 1024K
FLASH (rx) : ORIGIN = 0x8000000 + 0x2000, LENGTH = 64K - 0x2000
}
SECTIONS

View File

@@ -9,7 +9,7 @@ export INIT_OFFSET=0x10000
export BOOTFS_ADDR_OFFSET=0x20000
export KNL_TEXT=0x8000000
export KNL_DATA=0x20000000
export KNL_DATA_SIZE=64K
export KNL_DATA_SIZE=1024K
export BOARD=STM32F2x
export ARCH=cortex-m3
export PYTHON_EXECUTABLE=python3

View File

@@ -15,7 +15,7 @@ add_library(LetterShell
../../src/shell_companion.c
../../src/shell_ext.c
../../src/shell_cmd_list.c
../../extensions/fs_support/shell_fs.c
# ../../extensions/fs_support/shell_fs.c
../../extensions/log/log.c
# ../../extensions/telnet/telnetd.c
../../extensions/shell_enhance/shell_passthrough.c

View File

@@ -39,14 +39,14 @@
* @brief 是否使用shell伴生对象
* 一些扩展的组件(文件系统支持,日志工具等)需要使用伴生对象
*/
#define SHELL_USING_COMPANION 1
#define SHELL_USING_COMPANION 0
#endif /** SHELL_USING_COMPANION */
#ifndef SHELL_SUPPORT_END_LINE
/**
* @brief 支持shell尾行模式
*/
#define SHELL_SUPPORT_END_LINE 0
#define SHELL_SUPPORT_END_LINE 1
#endif /** SHELL_SUPPORT_END_LINE */
#ifndef SHELL_HELP_LIST_USER
@@ -107,7 +107,7 @@
* 启用后,可以通过`exec [addr] [args]`直接执行对应地址的函数
* @attention 如果地址错误,可能会直接引起程序崩溃
*/
#define SHELL_EXEC_UNDEF_FUNC 1
#define SHELL_EXEC_UNDEF_FUNC 0
#endif /** SHELL_EXEC_UNDEF_FUNC */
#ifndef SHELL_PARAMETER_MAX_NUMBER

View File

@@ -4,6 +4,7 @@
#include "u_types.h"
#include <sys/uio.h>
#include <time.h>
#include <sys/stat.h>
// #include <unistd.h>
#define ARG_1_BE(ap, arg0, type0) \
@@ -51,6 +52,9 @@ long syscall_backend(long sys_inx, ...);
void fs_backend_init(void);
long be_lseek(long fd, long offset, long whence);
int be_open(const char *path, int flags, mode_t mode);
int be_close(int fd);
long be_read(long fd, char *buf, long size);
long be_write(long fd, char *buf, long size);
long be_readv(long fd, const struct iovec *iov, long iovcnt);

View File

@@ -21,6 +21,47 @@ void fs_backend_init(void)
assert(fd_map_alloc(0, 1, FD_TTY) >= 0);
assert(fd_map_alloc(0, 2, FD_TTY) >= 0);
}
int be_open(const char *path, int flags, mode_t mode)
{
int fd = fs_open(path, flags, mode);
if (fd < 0)
{
return fd;
}
int user_fd = fd_map_alloc(0, fd, FD_FS);
if (user_fd < 0)
{
be_close(user_fd);
}
return user_fd;
}
int be_close(int fd)
{
fd_map_entry_t u_fd;
int ret = fd_map_free(fd, &u_fd);
if (ret < 0)
{
return -EBADF;
}
switch (u_fd.type)
{
case FD_TTY:
{
}
break;
case FD_FS:
{
return fs_close(u_fd.priv_fd);
}
break;
default:
return -ENOSYS;
}
return 0;
}
static int be_tty_read(char *buf, long size)
{
pid_t pid;
@@ -75,7 +116,7 @@ long be_read(long fd, char *buf, long size)
break;
case FD_FS:
{
return fs_read(fd, buf, size);
return fs_read(u_fd.priv_fd, buf, size);
}
break;
default:
@@ -113,7 +154,7 @@ long be_write(long fd, char *buf, long size)
break;
case FD_FS:
{
return fs_write(fd, buf, size);
return fs_write(u_fd.priv_fd, buf, size);
}
break;
default:
@@ -164,7 +205,7 @@ long be_readv(long fd, const struct iovec *iov, long iovcnt)
break;
case FD_FS:
{
int rsize = fs_read(fd, iov[i].iov_base, iov[i].iov_len);
int rsize = fs_read(u_fd.priv_fd, iov[i].iov_base, iov[i].iov_len);
wlen += rsize;
}
@@ -207,7 +248,7 @@ long be_writev(long fd, const struct iovec *iov, long iovcnt)
break;
case FD_FS:
{
int wsize = fs_write(fd, iov[i].iov_base, iov[i].iov_len);
int wsize = fs_write(u_fd.priv_fd, iov[i].iov_base, iov[i].iov_len);
wlen += wsize;
}
@@ -267,3 +308,28 @@ long sys_be_ioctl(va_list ap)
#undef ARG2
return be_ioctl(fd, request, args);
}
long be_lseek(long fd, long offset, long whence)
{
fd_map_entry_t u_fd;
int ret = fd_map_get(fd, &u_fd);
if (ret < 0)
{
return -EBADF;
}
switch (u_fd.type)
{
case FD_TTY:
{
}
break;
case FD_FS:
{
return fs_lseek(u_fd.priv_fd, offset, whence);
}
break;
default:
return -ENOSYS;
}
return 0;
}

View File

@@ -516,7 +516,7 @@
#define SYS_personality 136
#define SYS_setfsuid 138
#define SYS_setfsgid 139
#define SYS__llseek 140
// #define SYS__llseek 140
#define SYS_getdents 141
#define SYS__newselect 142
#define SYS_flock 143

View File

@@ -4,16 +4,22 @@
#include <stdlib.h>
#include "__dirent.h"
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
DIR *opendir(const char *name)
{
int fd;
DIR *dir;
if ((fd = open(name, O_RDONLY|O_DIRECTORY|O_CLOEXEC)) < 0)
#ifdef NO_LITTLE_MODE
if ((fd = open(name, O_RDONLY | O_DIRECTORY | O_CLOEXEC)) < 0)
#else
if ((fd = be_open(name, O_RDONLY | O_DIRECTORY | O_CLOEXEC, 0)) < 0)
#endif
return 0;
if (!(dir = calloc(1, sizeof *dir))) {
__syscall(SYS_close, fd);
be_close(fd);
return 0;
}
dir->fd = fd;

View File

@@ -29,7 +29,7 @@ int fcntl(int fd, int cmd, ...)
}
ret = __syscall(SYS_fcntl, fd, F_DUPFD_CLOEXEC, 0);
if (ret != -EINVAL) {
if (ret >= 0) __syscall(SYS_close, ret);
if (ret >= 0) be_close(ret);
return __syscall_ret(-EINVAL);
}
ret = __syscall(SYS_fcntl, fd, F_DUPFD, arg);

View File

@@ -1,20 +1,27 @@
#include <fcntl.h>
#include <stdarg.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
int open(const char *filename, int flags, ...)
{
mode_t mode = 0;
if ((flags & O_CREAT) || (flags & O_TMPFILE) == O_TMPFILE) {
if ((flags & O_CREAT) || (flags & O_TMPFILE) == O_TMPFILE)
{
va_list ap;
va_start(ap, flags);
mode = va_arg(ap, mode_t);
va_end(ap);
}
#ifdef NO_LITTLE_MODE
int fd = __sys_open_cp(filename, flags, mode);
if (fd>=0 && (flags & O_CLOEXEC))
#else
int fd = be_open(filename, flags, mode);
#endif
if (fd >= 0 && (flags & O_CLOEXEC))
__syscall(SYS_fcntl, fd, F_SETFD, FD_CLOEXEC);
return __syscall_ret(fd);

View File

@@ -6,7 +6,9 @@
#include <unistd.h>
#include <semaphore.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
struct args {
sem_t sem;
int sock;
@@ -68,7 +70,7 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev)
sigfillset(&allmask);
pthread_sigmask(SIG_BLOCK, &allmask, &origmask);
if (pthread_create(&td, &attr, start, &args)) {
__syscall(SYS_close, s);
be_close(s);
pthread_sigmask(SIG_SETMASK, &origmask, 0);
errno = EAGAIN;
return -1;
@@ -80,7 +82,7 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev)
sem_destroy(&args.sem);
if (args.err) {
__syscall(SYS_close, s);
be_close(s);
pthread_join(td, 0);
pthread_setcancelstate(cs, 0);
errno = args.err;

View File

@@ -5,7 +5,9 @@
#include <string.h>
#include <errno.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
char *if_indextoname(unsigned index, char *name)
{
struct ifreq ifr;
@@ -14,7 +16,7 @@ char *if_indextoname(unsigned index, char *name)
if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) return 0;
ifr.ifr_ifindex = index;
r = ioctl(fd, SIOCGIFNAME, &ifr);
__syscall(SYS_close, fd);
be_close(fd);
if (r < 0) {
if (errno == ENODEV) errno = ENXIO;
return 0;

View File

@@ -4,7 +4,9 @@
#include <sys/ioctl.h>
#include <string.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
unsigned if_nametoindex(const char *name)
{
struct ifreq ifr;
@@ -13,6 +15,6 @@ unsigned if_nametoindex(const char *name)
if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) return 0;
strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
r = ioctl(fd, SIOCGIFINDEX, &ifr);
__syscall(SYS_close, fd);
be_close(fd);
return r < 0 ? 0 : ifr.ifr_ifindex;
}

View File

@@ -14,12 +14,14 @@
#include "stdio_impl.h"
#include "syscall.h"
#include "lookup.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
static void cleanup(void *p)
{
struct pollfd *pfd = p;
for (int i=0; pfd[i].fd >= -1; i++)
if (pfd[i].fd >= 0) __syscall(SYS_close, pfd[i].fd);
if (pfd[i].fd >= 0) be_close(pfd[i].fd);
}
static unsigned long mtime()
@@ -303,7 +305,7 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries,
* Immediately close TCP socket so as not to consume
* resources we no longer need. */
alens[i] = alen;
__syscall(SYS_close, pfd[i].fd);
be_close(pfd[i].fd);
pfd[i].fd = -1;
}
}

View File

@@ -110,13 +110,13 @@ static int child(void *args_vp)
ret = __syscall(SYS_dup, p);
if (ret < 0)
goto fail;
__syscall(SYS_close, p);
be_close(p);
p = ret;
}
switch (op->cmd)
{
case FDOP_CLOSE:
__syscall(SYS_close, op->fd);
be_close(op->fd);
break;
case FDOP_DUP2:
fd = op->srcfd;
@@ -147,7 +147,7 @@ static int child(void *args_vp)
{
if ((ret = __sys_dup2(fd, op->fd)) < 0)
goto fail;
__syscall(SYS_close, fd);
be_close(fd);
}
break;
case FDOP_CHDIR:

View File

@@ -2,7 +2,9 @@
#include <fcntl.h>
#include <errno.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
int fchmodat(int fd, const char *path, mode_t mode, int flag)
{
if (!flag) return syscall(SYS_fchmodat, fd, path, mode, flag);
@@ -32,6 +34,6 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag)
else ret = syscall(SYS_fchmodat, AT_FDCWD, proc, mode);
}
__syscall(SYS_close, fd2);
be_close(fd2);
return ret;
}

View File

@@ -2,7 +2,9 @@
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
FILE *fopen(const char *restrict filename, const char *restrict mode)
{
FILE *f;
@@ -26,6 +28,6 @@ FILE *fopen(const char *restrict filename, const char *restrict mode)
f = __fdopen(fd, mode);
if (f) return f;
__syscall(SYS_close, fd);
be_close(fd);
return 0;
}

View File

@@ -5,7 +5,9 @@
#include <spawn.h>
#include "stdio_impl.h"
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
extern char **__environ;
FILE *popen(const char *cmd, const char *mode)
@@ -27,8 +29,8 @@ FILE *popen(const char *cmd, const char *mode)
if (pipe2(p, O_CLOEXEC)) return NULL;
f = fdopen(p[op], mode);
if (!f) {
__syscall(SYS_close, p[0]);
__syscall(SYS_close, p[1]);
be_close(p[0]);
be_close(p[1]);
return NULL;
}
@@ -44,7 +46,7 @@ FILE *popen(const char *cmd, const char *mode)
f->pipe_pid = pid;
if (!strchr(mode, 'e'))
fcntl(p[op], F_SETFD, 0);
__syscall(SYS_close, p[1-op]);
be_close(p[1-op]);
__ofl_unlock();
return f;
}
@@ -54,7 +56,7 @@ fail:
posix_spawn_file_actions_destroy(&fa);
}
fclose(f);
__syscall(SYS_close, p[1-op]);
be_close(p[1-op]);
errno = e;
return 0;

View File

@@ -2,7 +2,9 @@
#include <fcntl.h>
#include <stdlib.h>
#include "stdio_impl.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
#define MAXTRIES 100
FILE *tmpfile(void)
@@ -21,7 +23,7 @@ FILE *tmpfile(void)
__syscall(SYS_unlinkat, AT_FDCWD, s, 0);
#endif
f = __fdopen(fd, "w+");
if (!f) __syscall(SYS_close, fd);
if (!f) be_close(fd);
return f;
}
}

View File

@@ -2,7 +2,9 @@
#include <fcntl.h>
#include <sys/stat.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
const char unsigned *__map_file(const char *pathname, size_t *size)
{
struct stat st;
@@ -13,6 +15,6 @@ const char unsigned *__map_file(const char *pathname, size_t *size)
map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
*size = st.st_size;
}
__syscall(SYS_close, fd);
be_close(fd);
return map == MAP_FAILED ? 0 : map;
}

View File

@@ -2,7 +2,9 @@
#include <errno.h>
#include "aio_impl.h"
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
static int dummy(int fd)
{
return fd;
@@ -13,7 +15,12 @@ weak_alias(dummy, __aio_close);
int close(int fd)
{
fd = __aio_close(fd);
#ifdef NO_LITTLE_MODE
int r = __syscall_cp(SYS_close, fd);
if (r == -EINTR) r = 0;
#else
int r = be_close(fd);
#endif
if (r == -EINTR)
r = 0;
return __syscall_ret(r);
}

View File

@@ -64,7 +64,7 @@ int faccessat(int fd, const char *filename, int amode, int flag)
__block_all_sigs(&set);
pid = __clone(checker, stack + sizeof stack, 0, &c);
__syscall(SYS_close, p[1]);
be_close(p[1]);
#ifdef NO_LITTLE_MODE
if (pid < 0 || __syscall(SYS_read, p[0], &ret, sizeof ret) != sizeof(ret))
@@ -73,7 +73,7 @@ int faccessat(int fd, const char *filename, int amode, int flag)
if (pid < 0 || be_read(p[0], &ret, sizeof ret) != sizeof(ret))
ret = -EBUSY;
#endif
__syscall(SYS_close, p[0]);
be_close(p[0]);
__syscall(SYS_wait4, pid, &status, __WCLONE, 0);
__restore_sigs(&set);

View File

@@ -1,13 +1,19 @@
#include <unistd.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
off_t __lseek(int fd, off_t offset, int whence)
{
#ifdef SYS__llseek
off_t result;
return syscall(SYS__llseek, fd, offset>>32, offset, &result, whence) ? -1 : result;
return syscall(SYS__llseek, fd, offset >> 32, offset, &result, whence) ? -1 : result;
#else
#ifdef NO_LITTLE_MODE
return syscall(SYS_lseek, fd, offset, whence);
#else
return be_lseek(fd, offset, whence);
#endif
#endif
}

View File

@@ -1,7 +1,14 @@
#include <unistd.h>
#include "syscall.h"
#ifndef NO_LITTLE_MODE
#include "syscall_backend.h"
#endif
ssize_t write(int fd, const void *buf, size_t count)
{
#ifdef NO_LITTLE_MODE
return syscall_cp(SYS_write, fd, buf, count);
#else
return be_write(fd, buf, count);
#endif
}

View File

@@ -1,4 +1,5 @@
#pragma once
#include <u_types.h>
#include <string.h>
int cons_write(const uint8_t *data, int len);
static inline int cons_write_str(const char *str)

View File

@@ -61,7 +61,7 @@ int app_load(const char *name, uenv_t *cur_env, pid_t *pid)
printf("app format is error.\n");
return -1;
}
printf("%s addr is 0x%x\n", name, app);
printf("%s addr is [0x%x]\n", name, app);
umword_t ram_base;
obj_handler_t hd_task = handler_alloc();
obj_handler_t hd_thread = handler_alloc();

View File

@@ -18,4 +18,4 @@ add_subdirectory(app)
add_subdirectory(fs)
add_subdirectory(hello)
add_subdirectory(drv)
# add_subdirectory(path_manager)
add_subdirectory(test)

View File

@@ -5,11 +5,12 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER=1 -DSTM32F10X_XL ")
file(
GLOB deps
ff15/source/*.c
ext_disk_drv/*.c
# ext_disk_drv/*.c
ram_disk_drv/*.c
*.c
)
list(REMOVE_ITEM deps mkrtos_user/server/fs/fatfs/ram_disk_drv/*.*)
# list(REMOVE_ITEM deps mkrtos_user/server/fs/fatfs/ram_disk_drv/*.*)
add_executable(
fatfs.elf

View File

@@ -8,11 +8,13 @@
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <assert.h>
#include "rpc_prot.h"
static fs_t fs;
void fs_svr_init(void)
{
fs_init(&fs);
meta_reg_svr_obj(&fs.svr, FS_PROT);
}
typedef struct file_desc
{
@@ -140,7 +142,7 @@ int fs_svr_open(const char *path, int flags, int mode)
else
{
file->type = 0;
cons_write_str("open file..\n");
// cons_write_str("open file..\n");
}
return fatfs_err_conv(ret);

View File

@@ -1,5 +1,5 @@
#pragma once
void fs_svr_init(obj_handler_t ipc);
void fs_svr_init(void);
void fs_svr_loop(void);
void *file_temp_buf_get(void);

View File

@@ -1,5 +1,5 @@
#define HEAP_SIZE 0
#define HEAP_SIZE 512
#define STACK_SIZE 1024 * 2
#if defined(__CC_ARM)

View File

@@ -15,12 +15,14 @@ static MKFS_PARM defopt = {FM_ANY, 0, 0, 0};
int main(int args, char *argv[])
{
obj_handler_t ipc_hd;
int ret = rpc_creaite_bind_ipc(THREAD_MAIN, NULL, &ipc_hd);
assert(ret >= 0);
ns_register("/mnt", ipc_hd);
obj_handler_t hd;
int ret;
ret = rpc_meta_init(THREAD_MAIN, &hd);
assert(ret >= 0);
fs_svr_init();
ns_register("/mnt", hd);
fs_svr_init(ipc_hd);
FRESULT res = f_mount(&fs, "0:", 1);
if (res != FR_OK)

View File

@@ -9,7 +9,7 @@
#include "ff.h" /* Obtains integer types */
#include "diskio.h" /* Declarations of disk functions */
// #include "ram_disk.h"
#include "ram_disk.h"
#include <stdio.h>
/* Definitions of physical drive number for each drive */
#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */

View File

@@ -6,10 +6,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER=1 \
")
add_executable(shell.elf
add_executable(test.elf
${deps}
)
target_link_libraries(shell.elf
target_link_libraries(test.elf
PUBLIC
start
muslc
@@ -19,7 +19,7 @@ target_link_libraries(shell.elf
${GCC_LIB_PATH}/libgcc.a
)
target_include_directories(
shell.elf
test.elf
PUBLIC
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/inc
@@ -33,35 +33,35 @@ target_include_directories(
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/obj/include
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/include
${CMAKE_SOURCE_DIR}/mkrtos_user/server/shell/bsp/core_inc
${CMAKE_SOURCE_DIR}/mkrtos_user/server/shell/bsp/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/server/test/bsp/core_inc
${CMAKE_SOURCE_DIR}/mkrtos_user/server/test/bsp/inc
)
add_dependencies(shell.elf
add_dependencies(test.elf
muslc
)
set_target_properties(shell.elf PROPERTIES LINK_FLAGS
set_target_properties(test.elf PROPERTIES LINK_FLAGS
"-T ${CMAKE_CURRENT_LIST_DIR}/link.lds -pie --gc-section -no-dynamic-linker "
#--no-warn-rwx-segments
)
add_custom_target(
shell_dump ALL
test_dump ALL
COMMAND
${CMAKE_OBJDUMP} -s -S shell.elf > ${CMAKE_SOURCE_DIR}/build/output/shell.S
${CMAKE_OBJDUMP} -s -S test.elf > ${CMAKE_SOURCE_DIR}/build/output/test.S
COMMAND
${CMAKE_READELF} -a shell.elf > ${CMAKE_SOURCE_DIR}/build/output/shell.txt
${CMAKE_READELF} -a test.elf > ${CMAKE_SOURCE_DIR}/build/output/test.txt
COMMAND
${CMAKE_OBJCOPY} -O binary -S shell.elf shell.bin
${CMAKE_OBJCOPY} -O binary -S test.elf test.bin
COMMAND
${CMAKE_SIZE} shell.elf
${CMAKE_SIZE} test.elf
COMMAND
mkdir -p ${CMAKE_SOURCE_DIR}/build/output/cpio
COMMAND
cp shell.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/shell
cp test.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/test
COMMAND
cp shell.elf ${CMAKE_SOURCE_DIR}/build/output/shell.elf
cp test.elf ${CMAKE_SOURCE_DIR}/build/output/test.elf
)
add_dependencies(shell_dump shell.elf)
add_dependencies(shell_dump sys)
add_dependencies(shell_dump sys_util)
add_dependencies(test_dump test.elf)
add_dependencies(test_dump sys)
add_dependencies(test_dump sys_util)

View File

@@ -11,21 +11,19 @@
#include "u_ns.h"
#include "test.h"
#include "u_rpc.h"
#include "cons_cli.h"
#include <assert.h>
#include <stdio.h>
int main(int argc, char *args[])
{
printf("argc:%d args[0]:%s\n", argc, args[0]);
ulog_write_str(u_get_global_env()->log_hd, "MKRTOS:\n");
#if 0
malloc_test();
rpc_test();
ns_test();
#endif
irq_test();
#endif
fs_test();
task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS));
ulog_write_str(u_get_global_env()->log_hd, "Error.\n");
return 0;
}

View File

@@ -1,21 +1,29 @@
#include "fs_cli.h"
#include "cons_cli.h"
#include <string.h>
#include <fcntl.h>
#include <assert.h>
#include <stddef.h>
#include <unistd.h>
#include <stdio.h>
void fs_test(void)
{
char tmp[4] = "123";
int fd = fs_open("/test", O_CREAT | O_RDWR, 0777);
assert(fd >= 0);
int wlen = fs_write(fd, tmp, 4);
assert(wlen == 4);
int ret = fs_lseek(fd, 0, SEEK_SET);
assert(ret >= 0);
int rlen = fs_read(fd, tmp, 4);
assert(rlen == 4);
assert(strcmp(tmp, "123") == 0);
fs_close(fd);
int i = 1000;
while (i--)
{
char tmp[4] = "123";
int fd = open("/mnt/1.txt", O_CREAT | O_RDWR, 0777);
assert(fd >= 0);
int wlen = write(fd, tmp, 4);
assert(wlen == 4);
int ret = lseek(fd, 0, SEEK_SET);
assert(ret >= 0);
int rlen = read(fd, tmp, 4);
assert(rlen == 4);
assert(strcmp(tmp, "123") == 0);
close(fd);
}
printf("%s ok.\n", __func__);
}

View File

@@ -33,7 +33,7 @@ void irq_test(void)
assert(obj != HANDLER_INVALID);
msg_tag_t tag = factory_create_irq_sender(FACTORY_PROT, vpage_create_raw3(0, 0, obj));
assert(msg_tag_get_val(tag) >= 0);
uirq_bind(obj, TIM2_IRQn, 0);
uirq_bind(obj, TIM2_IRQn, u_irq_prio_create(0, 0));
tag = mm_align_alloc(MM_PROT, (void *)0x40000000, 0x50000000 - 0x40000000);
assert(msg_tag_get_val(tag) >= 0);

View File

@@ -14,20 +14,6 @@
void ns_test(void)
{
#if 0
int ret;
obj_handler_t tmp_ipc_hd;
tmp_ipc_hd = handler_alloc();
assert(tmp_ipc_hd != HANDLER_INVALID);
msg_tag_t tag = factory_create_ipc(FACTORY_PROT, vpage_create_raw3(0, 0, tmp_ipc_hd));
assert(msg_tag_get_val(tag) >= 0);
ret = cli_ns_register("shell", tmp_ipc_hd);
assert(ret >= 0);
ret = cli_ns_query("shell", &tmp_ipc_hd);
assert(ret >= 0);
ulog_write_str(u_get_global_env()->log_hd, "ns test success.\n");
#endif
obj_handler_t tmp_ipc_hd;
tmp_ipc_hd = handler_alloc();

View File

@@ -95,7 +95,7 @@ msg_tag_t dispatch_test(msg_tag_t tag, ipc_msg_t *msg)
tag = test_svr_t_query_dispatch(&test, tag, msg);
}
#endif
RPC_GENERATION_OP2(test_svr_t, 0, query,
RPC_GENERATION_OP2(test_svr_t, 0, 0, query,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_OUT, RPC_TYPE_BUF, var0,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, var1)
{
@@ -104,10 +104,10 @@ RPC_GENERATION_OP2(test_svr_t, 0, query,
return 2;
}
RPC_GENERATION_DISPATCH2(test_svr_t, 0, query,
RPC_GENERATION_DISPATCH2(test_svr_t, 0, 0, query,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_OUT, RPC_TYPE_BUF, var0,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, var1)
RPC_GENERATION_CALL2(test_svr_t, 0, query,
RPC_GENERATION_CALL2(test_svr_t, 0, 0, query,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_OUT, RPC_TYPE_BUF, var0,
rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, var1)

View File

@@ -21,7 +21,7 @@ set(CMAKE_SIZE "${CROSS_COMPILE}size" CACHE PATH "" FORCE)
set(MKRTOS_ARCH $ENV{ARCH})
# -mfloat-abi=soft -u _printf_float
set(CMAKE_C_FLAGS "-mcpu=${MKRTOS_ARCH} -mthumb -Os -g3 -lc -lrdimon -msoft-float -u _printf_float -D=MKRTOS \
set(CMAKE_C_FLAGS "-mcpu=${MKRTOS_ARCH} -mthumb -O0 -g3 -lc -lrdimon -msoft-float -u _printf_float -D=MKRTOS \
-std=gnu11 -ffunction-sections -fdata-sections -fno-builtin -mfix-cortex-m3-ldrd \
-nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \
-fno-stack-protector -Wl,--gc-sections \