修复一些编译警告

This commit is contained in:
zhangzheng
2023-11-18 22:58:10 +08:00
parent a83b791b82
commit 97b4651f31
31 changed files with 411 additions and 219 deletions

View File

@@ -1,5 +1,11 @@
CONFIG_RTT_DIR="./"
#
# Libc backend
#
CONFIG_MKRTOS_LIBC_FD_MAP_NR=128
# end of Libc backend
#
# DFS: device virtual file system
#

View File

@@ -1,3 +1,25 @@
CONFIG_RTT_DIR="./"
#
# DFS: device virtual file system
#
CONFIG_RT_USING_DFS=y
CONFIG_DFS_USING_POSIX=y
CONFIG_DFS_USING_WORKDIR=y
# CONFIG_RT_USING_DFS_MNTTABLE is not set
CONFIG_DFS_FD_MAX=16
CONFIG_RT_USING_DFS_V1=y
# CONFIG_RT_USING_DFS_V2 is not set
CONFIG_DFS_FILESYSTEMS_MAX=4
CONFIG_DFS_FILESYSTEM_TYPES_MAX=4
# CONFIG_RT_USING_DFS_ELMFAT is not set
CONFIG_RT_USING_DFS_DEVFS=y
# CONFIG_RT_USING_DFS_ROMFS is not set
# CONFIG_RT_USING_DFS_CROMFS is not set
# CONFIG_RT_USING_DFS_RAMFS is not set
# CONFIG_RT_USING_DFS_TMPFS is not set
# CONFIG_RT_USING_DFS_MQUEUE is not set
# end of DFS: device virtual file system
#
# Device Drivers

View File

@@ -241,7 +241,9 @@
"uart_config.h": "c",
"drv_crypto.h": "c",
"drv_log.h": "c",
"drv_usart.h": "c"
"drv_usart.h": "c",
"__locale": "c",
"__string": "c"
},
"cortex-debug.showRTOS": false,
"cortex-debug.variableUseNaturalFormat": false,

View File

@@ -1,3 +1,3 @@
source "mkrtos_user/lib/Kconfig"
source "mkrtos_user/server/drv/rtthread_drv/Kconfig"

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.13)
# -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-fPIC -fPIE -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )

4
mkrtos_user/lib/Kconfig Normal file
View File

@@ -0,0 +1,4 @@
source "mkrtos_user/lib/libc_backend/Kconfig"

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )

View File

@@ -14,6 +14,7 @@ target_include_directories(
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/libc_backend/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/arm/
${CMAKE_SOURCE_DIR}/mkrtos_user/lib/mlibc/arch/generic
@@ -28,6 +29,7 @@ target_link_libraries(
PUBLIC
muslc
sys
sys_svr
)
set_target_properties(libc_be PROPERTIES LINK_FLAGS "-pie ")

View File

@@ -0,0 +1,8 @@
menu "Libc backend"
config MKRTOS_LIBC_FD_MAP_NR
int "fd map layer size"
default 32
help
Set the number of mapping layers, the larger the number of FD available to the user.
endmenu

View File

@@ -0,0 +1,7 @@
#pragma once
#include <u_type.h>
typedef struct fd_map_entry fd_map_entry_t;
int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd);
int fd_map_update(int fd, fd_map_entry_t *new_entry);
int fd_map_free(int fd, fd_map_entry_t *ret_entry);

View File

@@ -0,0 +1,126 @@
#include <u_types.h>
#include <assert.h>
#include <malloc.h>
#include <errno.h>
#include <pthread.h>
typedef struct fd_map_entry
{
uint16_t svr_fd;
uint16_t priv_fd;
uint8_t flags;
} fd_map_entry_t;
#define FD_MAP_ROW_CN 16
#define FD_MAP_ROW_NR 16
#define FD_MAP_TOTAL (FD_MAP_ROW_CN * FD_MAP_ROW_NR)
typedef struct fd_map_row
{
fd_map_entry_t entry[FD_MAP_ROW_CN];
} fd_map_row_t;
typedef struct fd_map
{
fd_map_row_t *row[FD_MAP_ROW_NR];
pthread_spinlock_t lock;
uint16_t free_fd;
} fd_map_t;
static fd_map_t fd_map;
int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd)
{
int alloc_fd = 0;
again_alloc:
pthread_spin_lock(&fd_map.lock);
if (fd_map.free_fd >= FD_MAP_TOTAL)
{
// 没有可用的fd了尝试循环查找
for (int i = 0; i < FD_MAP_ROW_NR; i++)
{
for (int j = 0; j < FD_MAP_ROW_CN; j++)
{
if (fd_map.row[i]->entry[j].flags == 0)
{
alloc_fd = i * FD_MAP_ROW_CN + j;
goto next;
}
}
}
pthread_spin_unlock(&fd_map.lock);
// 没有可用的了
return -EAGAIN;
}
else
{
alloc_fd = fd_map.free_fd;
}
next:;
int row_inx = alloc_fd / FD_MAP_ROW_CN;
int inx = alloc_fd % FD_MAP_ROW_CN;
assert(row_inx < FD_MAP_ROW_NR);
if (fd_map.row[row_inx] == NULL)
{
fd_map.row[row_inx] = malloc(sizeof(fd_map_row_t));
if (fd_map.row[row_inx] == NULL)
{
pthread_spin_unlock(&fd_map.lock);
return -EAGAIN;
}
}
assert(fd_map.row[row_inx]->entry[inx].flags == 0);
fd_map.row[row_inx]->entry[inx].flags = 1;
fd_map.row[row_inx]->entry[inx].svr_fd = svr_fd;
fd_map.row[row_inx]->entry[inx].priv_fd = priv_fd;
pthread_spin_unlock(&fd_map.lock);
return alloc_fd;
}
int fd_map_update(int fd, fd_map_entry_t *new_entry)
{
if (fd >= FD_MAP_TOTAL)
{
return -1;
}
int row_inx = fd / FD_MAP_ROW_CN;
int inx = fd % FD_MAP_ROW_CN;
pthread_spin_lock(&fd_map.lock);
int flags = fd_map.row[row_inx]->entry[inx].flags;
fd_map.row[row_inx]->entry[inx] = *new_entry;
fd_map.row[row_inx]->entry[inx].flags = flags;
pthread_spin_unlock(&fd_map.lock);
}
int fd_map_free(int fd, fd_map_entry_t *ret_entry)
{
if (fd >= FD_MAP_TOTAL)
{
return -1;
}
int row_inx = fd / FD_MAP_ROW_CN;
int inx = fd % FD_MAP_ROW_CN;
pthread_spin_lock(&fd_map.lock);
if (fd_map.row[row_inx]->entry[inx].flags == 1)
{
if (ret_entry)
{
*ret_entry = fd_map.row[row_inx]->entry[inx];
}
fd_map.row[row_inx]->entry[inx].flags = 0;
pthread_spin_unlock(&fd_map.lock);
}
else
{
pthread_spin_unlock(&fd_map.lock);
return -1;
}
return 0;
}

View File

@@ -1,6 +1,7 @@
#include "fs_backend.h"
#include "syscall_backend.h"
#include "fs_cli.h"
#include <stdarg.h>
#include <errno.h>
#include <u_prot.h>

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700 ")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -D_XOPEN_SOURCE=700 ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -D_XOPEN_SOURCE=700 ")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -w -D_XOPEN_SOURCE=700 ")
file(GLOB_RECURSE deps
src/*.C

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER=1 -DSTM32F10X_XL \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -DUSE_STDPERIPH_DRIVER=1 -DSTM32F10X_XL \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )

View File

@@ -20,3 +20,5 @@ static inline uint16_t swap_u16(uint16_t data)
{
return ((data >> 8) & 0xff) | ((data & 0xff) << 8);
}
int mk_syscall(unsigned long nr, ...);

View File

@@ -1,6 +1,7 @@
#include "u_types.h"
#include "u_prot.h"
#include "u_factory.h"
#include "u_arch.h"
enum
{
@@ -10,7 +11,7 @@ msg_tag_t factory_create_irq_sender(obj_handler_t obj, vpage_t vpage)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
0,
IRQ_PROT,
vpage.raw,
@@ -25,7 +26,7 @@ msg_tag_t factory_create_thread(obj_handler_t obj, vpage_t vpage)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
0,
THREAD_PROT,
vpage.raw,
@@ -40,7 +41,7 @@ msg_tag_t factory_create_task(obj_handler_t obj, vpage_t vpage)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
0,
TASK_PROT,
vpage.raw,
@@ -55,7 +56,7 @@ msg_tag_t factory_create_ipc(obj_handler_t obj, vpage_t vpage)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj),
mk_syscall(syscall_prot_create(FACTORY_CREATE_KOBJ, FACTORY_PROT, obj).raw,
0,
IPC_PROT,
vpage.raw,

View File

@@ -2,6 +2,8 @@
#include "u_prot.h"
#include "u_ipc.h"
#include "u_util.h"
#include "u_arch.h"
enum ipc_op
{
IPC_CALL, //!< 客户端CALL操作
@@ -14,7 +16,7 @@ msg_tag_t ipc_bind(obj_handler_t obj, obj_handler_t tag_th, umword_t user_obj)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(IPC_BIND, IPC_PROT, obj),
mk_syscall(syscall_prot_create(IPC_BIND, IPC_PROT, obj).raw,
0,
tag_th,
user_obj,
@@ -34,7 +36,7 @@ msg_tag_t ipc_wait(obj_handler_t obj, umword_t *user_obj)
register volatile umword_t r0 asm("r0");
register volatile umword_t r1 asm("r1");
mk_syscall(syscall_prot_create(IPC_WAIT, IPC_PROT, obj),
mk_syscall(syscall_prot_create(IPC_WAIT, IPC_PROT, obj).raw,
0,
0,
0,
@@ -55,7 +57,7 @@ msg_tag_t ipc_reply(obj_handler_t obj, msg_tag_t in_tag)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(IPC_REPLY, IPC_PROT, obj),
mk_syscall(syscall_prot_create(IPC_REPLY, IPC_PROT, obj).raw,
in_tag.raw,
0,
0,
@@ -74,7 +76,7 @@ msg_tag_t ipc_call(obj_handler_t obj, msg_tag_t in_tag, ipc_timeout_t timeout)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(IPC_CALL, IPC_PROT, obj),
mk_syscall(syscall_prot_create(IPC_CALL, IPC_PROT, obj).raw,
in_tag.raw,
timeout.raw,
0,

View File

@@ -4,6 +4,7 @@
#include "u_prot.h"
#include "u_types.h"
#include "u_util.h"
#include "u_arch.h"
#include <string.h>
enum log_op
{
@@ -22,7 +23,7 @@ msg_tag_t uirq_bind(obj_handler_t obj_inx, umword_t irq_no, umword_t prio_sub_pr
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(BIND_IRQ, IRQ_PROT, obj_inx),
mk_syscall(syscall_prot_create(BIND_IRQ, IRQ_PROT, obj_inx).raw,
0,
irq_no,
0,
@@ -41,7 +42,7 @@ msg_tag_t uirq_wait(obj_handler_t obj_inx, int flags)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(WAIT_IRQ, IRQ_PROT, obj_inx),
mk_syscall(syscall_prot_create(WAIT_IRQ, IRQ_PROT, obj_inx).raw,
0,
flags,
0,
@@ -60,7 +61,7 @@ msg_tag_t uirq_ack(obj_handler_t obj_inx, umword_t irq_no)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(ACK_IRQ, IRQ_PROT, obj_inx),
mk_syscall(syscall_prot_create(ACK_IRQ, IRQ_PROT, obj_inx).raw,
0,
irq_no,
0,

View File

@@ -3,6 +3,7 @@
#include "u_log.h"
#include "u_prot.h"
#include "u_types.h"
#include "u_arch.h"
#include "u_util.h"
#include <string.h>
enum log_op
@@ -19,7 +20,7 @@ static msg_tag_t ulog_read_bytes_raw(obj_handler_t obj_inx, umword_t data[5], in
register volatile umword_t r3 asm("r3");
register volatile umword_t r4 asm("r4");
register volatile umword_t r5 asm("r5");
mk_syscall(syscall_prot_create(READ_DATA, LOG_PROT, obj_inx),
mk_syscall(syscall_prot_create(READ_DATA, LOG_PROT, obj_inx).raw,
msg_tag_init4(0, 0, 0, 0).raw,
len,
0,
@@ -71,7 +72,7 @@ void ulog_write_bytes(obj_handler_t obj_inx, const uint8_t *data, umword_t len)
if (i > 0)
{
umword_t *write_word_buf = (umword_t *)write_buf;
mk_syscall(syscall_prot_create(WRITE_DATA, LOG_PROT, obj_inx),
mk_syscall(syscall_prot_create(WRITE_DATA, LOG_PROT, obj_inx).raw,
msg_tag_init4(0, ROUND_UP(i, WORD_BYTES), 0, 0).raw,
write_word_buf[0],
write_word_buf[1],

View File

@@ -1,6 +1,7 @@
#include "u_mm.h"
#include "u_types.h"
#include "u_prot.h"
#include "u_arch.h"
enum mm_op
{
@@ -16,7 +17,7 @@ void *mm_alloc_page(obj_handler_t obj_inx, umword_t pnf_nr, uint8_t attrs)
register volatile umword_t r1 asm("r1");
register volatile umword_t r2 asm("r2");
register volatile umword_t r3 asm("r3");
mk_syscall(syscall_prot_create(MM_ALLOC, MM_PROT, obj_inx),
mk_syscall(syscall_prot_create(MM_ALLOC, MM_PROT, obj_inx).raw,
0,
pnf_nr,
attrs,
@@ -40,7 +41,7 @@ void *mm_alloc_page(obj_handler_t obj_inx, umword_t pnf_nr, uint8_t attrs)
}
void mm_free_page(obj_handler_t obj_inx, void *addr, umword_t pfn_nr)
{
mk_syscall(syscall_prot_create(MM_FREE, MM_PROT, obj_inx),
mk_syscall(syscall_prot_create(MM_FREE, MM_PROT, obj_inx).raw,
0,
addr,
pfn_nr,
@@ -52,7 +53,7 @@ msg_tag_t mm_align_alloc(obj_handler_t obj_inx, void *addr, umword_t size)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(MM_ALIGN_ALLOC, MM_PROT, obj_inx),
mk_syscall(syscall_prot_create(MM_ALIGN_ALLOC, MM_PROT, obj_inx).raw,
0,
addr,
size,

View File

@@ -19,7 +19,7 @@ msg_tag_t sys_read_info(obj_handler_t obj, sys_info_t *info)
register volatile umword_t r1 asm("r1");
register volatile umword_t r2 asm("r2");
mk_syscall(syscall_prot_create(SYS_INFO_GET, SYS_PROT, obj),
mk_syscall(syscall_prot_create(SYS_INFO_GET, SYS_PROT, obj).raw,
0,
0,
0,

View File

@@ -1,5 +1,6 @@
#include "u_types.h"
#include "u_prot.h"
#include "u_arch.h"
#include "u_task.h"
enum task_op_code
{
@@ -12,7 +13,7 @@ msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task),
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task).raw,
0,
obj_inx,
0,
@@ -32,7 +33,7 @@ msg_tag_t task_map(obj_handler_t dst_task, obj_handler_t src_obj, obj_handler_t
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task),
mk_syscall(syscall_prot_create(TASK_OBJ_MAP, TASK_PROT, dst_task).raw,
0,
src_obj,
dst_obj,
@@ -52,7 +53,7 @@ msg_tag_t task_unmap(obj_handler_t task_han, vpage_t vpage)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(TASK_OBJ_UNMAP, TASK_PROT, task_han),
mk_syscall(syscall_prot_create(TASK_OBJ_UNMAP, TASK_PROT, task_han).raw,
0,
vpage.raw,
0,
@@ -68,7 +69,7 @@ msg_tag_t task_alloc_ram_base(obj_handler_t task_han, umword_t size, addr_t *all
register volatile umword_t r0 asm("r0");
register volatile umword_t r1 asm("r1");
mk_syscall(syscall_prot_create(TASK_ALLOC_RAM_BASE, TASK_PROT, task_han),
mk_syscall(syscall_prot_create(TASK_ALLOC_RAM_BASE, TASK_PROT, task_han).raw,
0,
size,
0,

View File

@@ -15,7 +15,7 @@ msg_tag_t thread_msg_buf_set(obj_handler_t obj, void *msg)
register volatile umword_t r1 asm("r1");
register volatile umword_t r2 asm("r2");
mk_syscall(syscall_prot_create(MSG_BUG_SET, THREAD_PROT, obj),
mk_syscall(syscall_prot_create(MSG_BUG_SET, THREAD_PROT, obj).raw,
0,
msg,
0,
@@ -34,7 +34,7 @@ msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len)
register volatile umword_t r1 asm("r1");
register volatile umword_t r2 asm("r2");
mk_syscall(syscall_prot_create4(MSG_BUG_GET, THREAD_PROT, obj, TRUE),
mk_syscall(syscall_prot_create4(MSG_BUG_GET, THREAD_PROT, obj, TRUE).raw,
0,
0,
0,
@@ -60,7 +60,7 @@ msg_tag_t thread_exec_regs(obj_handler_t obj, umword_t pc, umword_t sp, umword_t
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(SET_EXEC_REGS, THREAD_PROT, obj),
mk_syscall(syscall_prot_create(SET_EXEC_REGS, THREAD_PROT, obj).raw,
0,
pc,
sp,
@@ -79,7 +79,7 @@ msg_tag_t thread_run(obj_handler_t obj, uint8_t prio)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(RUN_THREAD, THREAD_PROT, obj),
mk_syscall(syscall_prot_create(RUN_THREAD, THREAD_PROT, obj).raw,
0,
prio,
0,
@@ -94,7 +94,7 @@ msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj)
{
register volatile umword_t r0 asm("r0");
mk_syscall(syscall_prot_create(BIND_TASK, THREAD_PROT, obj),
mk_syscall(syscall_prot_create(BIND_TASK, THREAD_PROT, obj).raw,
0,
tk_obj,
0,

View File

@@ -5,6 +5,7 @@
#include "u_env.h"
#include "u_prot.h"
#include "u_hd_man.h"
#include <ns_cli.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
@@ -17,15 +18,15 @@ RPC_GENERATION_CALL1(drv_t, DRV_CLOSE, close,
RPC_GENERATION_CALL3(drv_t, DRV_READ, read,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
RPC_GENERATION_CALL3(drv_t, DRV_WRITE, write,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
RPC_GENERATION_CALL3(drv_t, DRV_IOCTL, ioctl,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
int dev_fs_open(const char *path, uint32_t oflags)
{
@@ -38,7 +39,7 @@ int dev_fs_open(const char *path, uint32_t oflags)
}
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
.data = &path[ret],
.data = (uint8_t *)(&path[ret]),
.len = strlen(&path[ret]) + 1,
};
rpc_uint32_t_t rpc_flags = {
@@ -102,7 +103,7 @@ int dev_fs_write(int desc, const void *buf, size_t size)
.data = fd,
};
rpc_ref_array_uint32_t_uint8_t_32_t rpc_data = {
.data = buf,
.data = (uint8_t *)buf,
.len = size,
};
rpc_size_t_t rpc_flags = {
@@ -123,8 +124,8 @@ int dev_fs_ioctl(int desc, int cmd, void *args)
rpc_int_t rpc_desc = {
.data = fd,
};
rpc_int_t rpc_cmd = {
.data = fd,
rpc_mword_t_t rpc_cmd = {
.data = cmd,
};
rpc_umword_t_t rpc_args = {
.data = (umword_t)args,

View File

@@ -32,7 +32,7 @@ RPC_GENERATION_DISPATCH1(drv_t, DRV_CLOSE, close,
RPC_GENERATION_OP3(drv_t, DRV_READ, read,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
{
return dev_read(desc->data, data->data, size->data);
}
@@ -40,13 +40,13 @@ RPC_GENERATION_OP3(drv_t, DRV_READ, read,
RPC_GENERATION_DISPATCH3(drv_t, DRV_READ, read,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
/*ssize_t mr_dev_write(int desc, const void *buf, size_t size);*/
RPC_GENERATION_OP3(drv_t, DRV_WRITE, write,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
{
return dev_write(desc->data, data->data, size->data);
}
@@ -54,21 +54,21 @@ RPC_GENERATION_OP3(drv_t, DRV_WRITE, write,
RPC_GENERATION_DISPATCH3(drv_t, DRV_WRITE, write,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
/*int mr_dev_ioctl(int desc, int cmd, void *args);*/
RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
{
return dev_ioctl(desc->data, data->data, size->data);
return dev_ioctl(desc->data, (int)(data->data), (void *)(size->data));
}
RPC_GENERATION_DISPATCH3(drv_t, DRV_IOCTL, ioctl,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc,
rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size)
/*dispatch*/
RPC_DISPATCH5(drv_t, typeof(DRV_OPEN), DRV_OPEN, open, DRV_CLOSE, close, DRV_READ, read, DRV_WRITE, write, DRV_IOCTL, ioctl)

View File

@@ -81,7 +81,7 @@ int ns_register(const char *path, obj_handler_t svr_hd)
assert(path);
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
.data = path,
.data = (uint8_t *)path,
.len = strlen(path) + 1,
};
rpc_obj_handler_t_t rpc_svr_hd = {
@@ -115,7 +115,7 @@ int ns_query(const char *path, obj_handler_t *svr_hd)
}
rpc_ref_array_uint32_t_uint8_t_32_t rpc_path = {
.data = path,
.data = (uint8_t *)path,
.len = strlen(path) + 1,
};
rpc_obj_handler_t_t rpc_svr_hd = {

View File

@@ -3,6 +3,7 @@
#include "ns_types.h"
#include "u_rpc.h"
#include "u_rpc_svr.h"
#include "u_arch.h"
#include "u_hd_man.h"
#include <stdio.h>

View File

@@ -179,9 +179,10 @@ static inline void rpc_memcpy(void *dst, void *src, size_t size)
RPC_CLI_TYPE_TRAN_TO_SVR_TYPE(rpc_##type##_t, rpc_##type##_t)
RPC_TYPE_DEF_ALL(int) //!< 定义所有的
RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(mword_t) //!< 定义所有的
RPC_TYPE_DEF_ALL(dirent_t) //!< 目录类型
RPC_TYPE_DEF_ALL(stat_t)
@@ -565,49 +566,49 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
} \
} while (0)
#define RPC_DISPATCH1(struct_type, op_type, func0_op, func0_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
#define RPC_DISPATCH1(struct_type, op_type, func0_op, func0_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
}
#define RPC_DISPATCH2(struct_type, op_type, func0_op, func0_name, func1_op, func1_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
#define RPC_DISPATCH2(struct_type, op_type, func0_op, func0_name, func1_op, func1_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
}
#define RPC_DISPATCH3(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
@@ -617,17 +618,17 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
} \
@@ -635,7 +636,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
}
#define RPC_DISPATCH4(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name, func3_op, func3_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
@@ -645,144 +646,144 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t)
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func3_op: \
{ \
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
}
#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
func2_op, func2_name, func3_op, func3_name, \
func4_op, func4_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func3_op: \
{ \
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func4_op: \
{ \
tag = struct_type##_##func4_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
func2_op, func2_name, func3_op, func3_name, \
func4_op, func4_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func3_op: \
{ \
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func4_op: \
{ \
tag = struct_type##_##func4_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
} \
return tag; \
}
#define RPC_DISPATCH12(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
func2_op, func2_name, func3_op, func3_name, \
func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \
func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \
func10_op, func10_name, func11_op, func11_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct_type *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func3_op: \
{ \
tag = struct_type##_##func3_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func4_op: \
{ \
tag = struct_type##_##func4_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func5_op: \
{ \
tag = struct_type##_##func5_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func6_op: \
{ \
tag = struct_type##_##func6_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func7_op: \
{ \
tag = struct_type##_##func7_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func8_op: \
{ \
tag = struct_type##_##func8_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func9_op: \
{ \
tag = struct_type##_##func9_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func10_op: \
{ \
tag = struct_type##_##func10_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
case func11_op: \
{ \
tag = struct_type##_##func11_name##_dispatch(obj, in_tag, ipc_msg); \
} \
break; \
default: \
break; \
} \
return tag; \
#define RPC_DISPATCH12(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \
func2_op, func2_name, func3_op, func3_name, \
func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \
func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \
func10_op, func10_name, func11_op, func11_name) \
msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \
{ \
msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \
size_t op_val; \
\
op_val = *((op_type *)(ipc_msg->msg_buf)); \
switch (op_val) \
{ \
case func0_op: \
{ \
tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func1_op: \
{ \
tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func2_op: \
{ \
tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func3_op: \
{ \
tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func4_op: \
{ \
tag = struct_type##_##func4_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func5_op: \
{ \
tag = struct_type##_##func5_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func6_op: \
{ \
tag = struct_type##_##func6_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func7_op: \
{ \
tag = struct_type##_##func7_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func8_op: \
{ \
tag = struct_type##_##func8_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func9_op: \
{ \
tag = struct_type##_##func9_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func10_op: \
{ \
tag = struct_type##_##func10_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
case func11_op: \
{ \
tag = struct_type##_##func11_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \
} \
break; \
default: \
break; \
} \
return tag; \
}
#include "u_rpc_1.h"
#include "u_rpc_2.h"

View File

@@ -3,7 +3,9 @@
#include "u_types.h"
#include "u_prot.h"
#include "u_ipc.h"
typedef msg_tag_t (*rpc_dispatch_func)(void *obj, msg_tag_t tag, ipc_msg_t *msg);
struct rpc_svr_obj;
typedef msg_tag_t (*rpc_dispatch_func)(struct rpc_svr_obj *obj, msg_tag_t tag, ipc_msg_t *msg);
typedef struct rpc_svr_obj
{