From b7ae180c4e1fc93977eadf76b41bd056d5870f4a Mon Sep 17 00:00:00 2001 From: ATShining <1358745329@qq.com> Date: Sun, 22 Sep 2024 16:06:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9Aarch=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 5 +- armv7_8.cmake | 6 +- mkrtos_bootstrap/bsp/SWM34S/CMakeLists.txt | 2 +- .../CMakeLists.txt | 2 +- mkrtos_configs/STM32F103ZET6_defconfig | 10 +-- mkrtos_configs/STM32F407VET6_defconfig | 6 +- mkrtos_configs/SWM34_defconfig | 4 +- mkrtos_knl/arch/cortex-m3/stm32f1/arch.h | 2 +- mkrtos_knl/arch/cortex-m3/stm32f1/mpu.c | 10 +-- mkrtos_knl/arch/cortex-m33/mm_space.c | 73 ++---------------- mkrtos_knl/arch/cortex-m4/mm_space.c | 72 ++--------------- mkrtos_knl/arch/cortex-m4/stm32f4/mpu.c | 21 +++-- mkrtos_knl/arch/cortex-m4/thread_armv7m.c | 14 +++- mkrtos_knl/inc/knl/mpu.h | 4 + mkrtos_knl/inc/knl/vma.h | 10 +-- mkrtos_knl/knl/mm/mpu/vma.c | 34 +++++++- mkrtos_script/build_f1.sh | 8 +- mkrtos_script/build_f2.sh | 9 ++- mkrtos_script/build_f4.sh | 17 +++- mkrtos_script/build_qemu_aarch64.sh | 8 +- mkrtos_script/build_swm34s.sh | 16 +++- mkrtos_script/build_test.sh | 12 ++- .../kconfigfunctions.cpython-38.pyc | Bin 19172 -> 19183 bytes .../__pycache__/kconfiglib.cpython-38.pyc | Bin 159413 -> 159424 bytes .../lib/libc_backend/src/misc_backend.c | 5 +- mkrtos_user/server/CMakeLists.txt | 4 +- mkrtos_user/server/init/src/init.cfg | 2 +- mkrtos_user/server/init/src/pm.c | 6 +- 28 files changed, 162 insertions(+), 200 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 25544b5fc..a73ffcb05 100755 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -50,12 +50,13 @@ // "miDebuggerPath": "/home/zhangzheng/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/Applications/ArmGNUToolchain/11.3.rel1/aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/home/zhangzheng/gcc-arm/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb", - "miDebuggerPath": "/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gdb", + // "miDebuggerPath": "/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gdb", + "miDebuggerPath": "/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb", // "miDebuggerPath": "/home/zhangzheng/gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/home/mkrtos-smart/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb", - "miDebuggerServerAddress": "127.0.0.1:33333", + "miDebuggerServerAddress": "127.0.0.1:3333", "MIMode": "gdb", "setupCommands": [ { diff --git a/armv7_8.cmake b/armv7_8.cmake index 14ff2d53c..ef6c17584 100644 --- a/armv7_8.cmake +++ b/armv7_8.cmake @@ -3,19 +3,19 @@ message("========use armv7_8.cmake") set(CMAKE_C_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -mno-thumb-interwork -D=MKRTOS \ -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin -u=_printf_float \ -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \ --fno-stack-protector -Wl,--gc-sections \ +-fno-stack-protector -Wl,--gc-sections -D__ARM_ARCH_7M__ \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -mno-thumb-interwork -D=MKRTOS -std=c++11 \ -fmessage-length=0 -Xlinker --print-map -Wall -W -fno-stack-protector -g \ - -u=_printf_float \ + -u=_printf_float -D__ARM_ARCH_7M__ \ -ffunction-sections -fdata-sections -fno-builtin -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) set(CMAKE_ASM_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -mno-thumb-interwork -D=MKRTOS \ -u=_printf_float -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \ --nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker -fno-stack-protector \ +-nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker -fno-stack-protector -D__ARM_ARCH_7M__ \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) \ No newline at end of file diff --git a/mkrtos_bootstrap/bsp/SWM34S/CMakeLists.txt b/mkrtos_bootstrap/bsp/SWM34S/CMakeLists.txt index 3625f2ad1..22758cc5e 100755 --- a/mkrtos_bootstrap/bsp/SWM34S/CMakeLists.txt +++ b/mkrtos_bootstrap/bsp/SWM34S/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.13) -file(GLOB_RECURSE deps **/*.S *.S **/*.C *.c) +file(GLOB_RECURSE deps **/*.S *.S **/*.s *.s **/*.C *.c) add_library(boot_bsp STATIC ${deps}) target_include_directories( diff --git a/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/CMakeLists.txt b/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/CMakeLists.txt index 779cd1063..1acac879d 100644 --- a/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/CMakeLists.txt +++ b/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/CMakeLists.txt @@ -4,7 +4,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER=1 ") 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__ \ + -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 \ " ) set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS}) diff --git a/mkrtos_configs/STM32F103ZET6_defconfig b/mkrtos_configs/STM32F103ZET6_defconfig index 02260eaf6..200ad2c5e 100644 --- a/mkrtos_configs/STM32F103ZET6_defconfig +++ b/mkrtos_configs/STM32F103ZET6_defconfig @@ -4,20 +4,20 @@ # CONFIG_KNL_INFO=y CONFIG_KNL_TEXT_ADDR=0x8000000 -CONFIG_KNL_TEXT_SIZE=0x100000 +CONFIG_KNL_TEXT_SIZE=0x800000 CONFIG_KNL_DATA_ADDR=0x20000000 -CONFIG_KNL_DATA_SIZE=0x10000 +CONFIG_KNL_DATA_SIZE=0x800000 CONFIG_KNL_OFFSET=0x2000 CONFIG_INIT_TASK_OFFSET=0x10000 -CONFIG_BOOTFS_OFFSET=0x22000 +CONFIG_BOOTFS_OFFSET=0x30000 CONFIG_MK_MPU_CFG=y CONFIG_FT_ADDR_NR=16 CONFIG_SYS_SCHE_HZ=1000 CONFIG_USER_ISR_START_NO=16 CONFIG_IRQ_REG_TAB_SIZE=80 CONFIG_REGION_NUM=8 -CONFIG_OBJ_MAP_TAB_SIZE=4 -CONFIG_OBJ_MAP_ENTRY_SIZE=8 +CONFIG_OBJ_MAP_TAB_SIZE=32 +CONFIG_OBJ_MAP_ENTRY_SIZE=32 CONFIG_PRINTK_CACHE_SIZE=128 # end of Knl config diff --git a/mkrtos_configs/STM32F407VET6_defconfig b/mkrtos_configs/STM32F407VET6_defconfig index 333b57a62..83d466f3d 100644 --- a/mkrtos_configs/STM32F407VET6_defconfig +++ b/mkrtos_configs/STM32F407VET6_defconfig @@ -9,15 +9,15 @@ CONFIG_KNL_DATA_ADDR=0x20000000 CONFIG_KNL_DATA_SIZE=0x800000 CONFIG_KNL_OFFSET=0x2000 CONFIG_INIT_TASK_OFFSET=0x10000 -CONFIG_BOOTFS_OFFSET=0x22000 +CONFIG_BOOTFS_OFFSET=0x30000 CONFIG_MK_MPU_CFG=y CONFIG_FT_ADDR_NR=16 CONFIG_SYS_SCHE_HZ=1000 CONFIG_USER_ISR_START_NO=16 CONFIG_IRQ_REG_TAB_SIZE=80 CONFIG_REGION_NUM=8 -CONFIG_OBJ_MAP_TAB_SIZE=4 -CONFIG_OBJ_MAP_ENTRY_SIZE=8 +CONFIG_OBJ_MAP_TAB_SIZE=32 +CONFIG_OBJ_MAP_ENTRY_SIZE=32 CONFIG_PRINTK_CACHE_SIZE=128 # end of Knl config diff --git a/mkrtos_configs/SWM34_defconfig b/mkrtos_configs/SWM34_defconfig index 289a620ee..2d5d48b34 100644 --- a/mkrtos_configs/SWM34_defconfig +++ b/mkrtos_configs/SWM34_defconfig @@ -16,8 +16,8 @@ CONFIG_SYS_SCHE_HZ=1000 CONFIG_USER_ISR_START_NO=16 CONFIG_IRQ_REG_TAB_SIZE=100 CONFIG_REGION_NUM=8 -CONFIG_OBJ_MAP_TAB_SIZE=4 -CONFIG_OBJ_MAP_ENTRY_SIZE=8 +CONFIG_OBJ_MAP_TAB_SIZE=16 +CONFIG_OBJ_MAP_ENTRY_SIZE=16 CONFIG_PRINTK_CACHE_SIZE=128 # end of Knl config diff --git a/mkrtos_knl/arch/cortex-m3/stm32f1/arch.h b/mkrtos_knl/arch/cortex-m3/stm32f1/arch.h index e0e898b44..5a4f4e10a 100755 --- a/mkrtos_knl/arch/cortex-m3/stm32f1/arch.h +++ b/mkrtos_knl/arch/cortex-m3/stm32f1/arch.h @@ -14,7 +14,7 @@ #include "arch.h" #define PAGE_SIZE 512 -#define LOG_INTR_NO 38 // USART2_IRQn +#define LOG_INTR_NO 37 // USART1_IRQn /// @brief 线程信息 typedef struct diff --git a/mkrtos_knl/arch/cortex-m3/stm32f1/mpu.c b/mkrtos_knl/arch/cortex-m3/stm32f1/mpu.c index a4bb48417..5f5185d57 100755 --- a/mkrtos_knl/arch/cortex-m3/stm32f1/mpu.c +++ b/mkrtos_knl/arch/cortex-m3/stm32f1/mpu.c @@ -25,11 +25,11 @@ void mpu_enable(void) { ARM_MPU_Enable(4); } -void mpu_calc_regs(region_info_t *region, umword_t addr, umword_t ffs_val, uint8_t attrs, uint8_t regions_bits) +void mpu_calc_regs(region_info_t *region, umword_t addr, umword_t size, uint8_t attrs, uint8_t regions_bits) { region->rbar = ARM_MPU_RBAR(region->region_inx, addr); region->rasr = ARM_MPU_RASR(0, attrs, 0UL, 0UL, - 1UL, 1UL, regions_bits, ffs(ffs_val) - 1); + 1UL, 1UL, regions_bits, ffs(size) - 1); } void mpu_region_set(int inx, umword_t rbar, umword_t rasr) { @@ -46,10 +46,10 @@ void mpu_switch_to_task(struct task *tk) mpu_disable(); for (int i = 0; i < CONFIG_REGION_NUM; i++) { - if (tk->mm_space.pt_regions[i].region_inx >= 0) + region_info_t *ri = &tk->mm_space.mem_vma.pt_regions[i]; + if (ri->region_inx >= 0) { - ARM_MPU_SetRegionEx(tk->mm_space.pt_regions[i].region_inx, tk->mm_space.pt_regions[i].rbar, - tk->mm_space.pt_regions[i].rasr); + ARM_MPU_SetRegionEx(ri->region_inx, ri->rbar, ri->rasr); } else { diff --git a/mkrtos_knl/arch/cortex-m33/mm_space.c b/mkrtos_knl/arch/cortex-m33/mm_space.c index 1945b897a..157cdb4a6 100644 --- a/mkrtos_knl/arch/cortex-m33/mm_space.c +++ b/mkrtos_knl/arch/cortex-m33/mm_space.c @@ -13,73 +13,12 @@ #include "mm_space.h" #include "mpu.h" #include "assert.h" -#if CONFIG_MK_MPU_CFG -void mm_space_init(mm_space_t *mm_space, int is_knl) + +int mm_space_init(mm_space_t *mm_space, int is_knl) { - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - mm_space->pt_regions[i].region_inx = -1; - } -} -region_info_t *mm_space_alloc_pt_region(mm_space_t *m_space) -{ - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - /*TODO:原子操作*/ - if (m_space->pt_regions[i].region_inx < 0) - { - m_space->pt_regions[i].region_inx = (int16_t)i; - return &m_space->pt_regions[i]; - } - } - return NULL; -} -void mm_space_free_pt_region(mm_space_t *m_space, region_info_t *ri) -{ - ri->region_inx = -1; + int ret = 0; + + ret = task_vma_init(&mm_space->mem_vma); + return ret; } -bool_t mm_space_add(mm_space_t *m_space, - umword_t addr, - umword_t size, - uint8_t attrs) -{ - region_info_t *ri = mm_space_alloc_pt_region(m_space); - - if (!ri) - { - return FALSE; - } -#if CONFIG_MPU_VERSION == 1 - if (!is_power_of_2(size) || (addr & (!(size - 1))) != 0) - { - //!< 申请的大小必须是2的整数倍,而且地址也必须是2的整数倍 - mm_space_free_pt_region(m_space, ri); - return FALSE; - } -#elif CONFIG_MPU_VERSION == 2 - if ((size & (MPU_ALIGN_SIZE - 1)) == 0 && (addr & (MPU_ALIGN_SIZE - 1)) == 0) - { - mm_space_free_pt_region(m_space, ri); - return FALSE; - } -#endif - mpu_calc_regs(ri, addr, size, attrs, 0); - ri->start_addr = addr; - ri->size = size; - return TRUE; -} -void mm_space_del(mm_space_t *m_space, umword_t addr) -{ - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - if (m_space->pt_regions[i].region_inx >= 0 && - m_space->pt_regions[i].start_addr == addr) - { - m_space->pt_regions[i].region_inx = -1; - m_space->pt_regions[i].start_addr = 0; - break; - } - } -} -#endif diff --git a/mkrtos_knl/arch/cortex-m4/mm_space.c b/mkrtos_knl/arch/cortex-m4/mm_space.c index 103904739..157cdb4a6 100644 --- a/mkrtos_knl/arch/cortex-m4/mm_space.c +++ b/mkrtos_knl/arch/cortex-m4/mm_space.c @@ -13,74 +13,12 @@ #include "mm_space.h" #include "mpu.h" #include "assert.h" -#if CONFIG_MK_MPU_CFG + int mm_space_init(mm_space_t *mm_space, int is_knl) { - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - mm_space->pt_regions[i].region_inx = -1; - } - return 0; -} -region_info_t *mm_space_alloc_pt_region(mm_space_t *m_space) -{ - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - /*TODO:原子操作*/ - if (m_space->pt_regions[i].region_inx < 0) - { - m_space->pt_regions[i].region_inx = (int16_t)i; - return &m_space->pt_regions[i]; - } - } - return NULL; -} -void mm_space_free_pt_region(mm_space_t *m_space, region_info_t *ri) -{ - ri->region_inx = -1; + int ret = 0; + + ret = task_vma_init(&mm_space->mem_vma); + return ret; } -bool_t mm_space_add(mm_space_t *m_space, - umword_t addr, - umword_t size, - uint8_t attrs) -{ - region_info_t *ri = mm_space_alloc_pt_region(m_space); - - if (!ri) - { - return FALSE; - } -#if CONFIG_MPU_VERSION == 1 - if (!is_power_of_2(size) || (addr & (!(size - 1))) != 0) - { - //!< 申请的大小必须是2的整数倍,而且地址也必须是2的整数倍 - mm_space_free_pt_region(m_space, ri); - return FALSE; - } -#elif CONFIG_MPU_VERSION == 2 - if ((size & (MPU_ALIGN_SIZE - 1)) == 0 && (addr & (MPU_ALIGN_SIZE - 1)) == 0) - { - mm_space_free_pt_region(m_space, ri); - return FALSE; - } -#endif - mpu_calc_regs(ri, addr, size, attrs, 0); - ri->start_addr = addr; - ri->size = size; - return TRUE; -} -void mm_space_del(mm_space_t *m_space, umword_t addr) -{ - for (int i = 0; i < CONFIG_REGION_NUM; i++) - { - if (m_space->pt_regions[i].region_inx >= 0 && - m_space->pt_regions[i].start_addr == addr) - { - m_space->pt_regions[i].region_inx = -1; - m_space->pt_regions[i].start_addr = 0; - break; - } - } -} -#endif diff --git a/mkrtos_knl/arch/cortex-m4/stm32f4/mpu.c b/mkrtos_knl/arch/cortex-m4/stm32f4/mpu.c index 8600c9216..5f5185d57 100755 --- a/mkrtos_knl/arch/cortex-m4/stm32f4/mpu.c +++ b/mkrtos_knl/arch/cortex-m4/stm32f4/mpu.c @@ -4,14 +4,13 @@ * Created on: ATShining * Author: Administrator */ - #include "types.h" -#include "assert.h" #include "mpu.h" #include #include #include "thread.h" #include "task.h" +#if CONFIG_MK_MPU_CFG static volatile umword_t *MPUCR = (umword_t *)0xE000ED94; void mpu_init(void) @@ -26,11 +25,11 @@ void mpu_enable(void) { ARM_MPU_Enable(4); } -void mpu_calc_regs(region_info_t *region, umword_t addr, umword_t ffs_val, uint8_t attrs, uint8_t regions_bits) +void mpu_calc_regs(region_info_t *region, umword_t addr, umword_t size, uint8_t attrs, uint8_t regions_bits) { region->rbar = ARM_MPU_RBAR(region->region_inx, addr); region->rasr = ARM_MPU_RASR(0, attrs, 0UL, 0UL, - 1UL, 1UL, regions_bits, ffs(ffs_val) - 1); + 1UL, 1UL, regions_bits, ffs(size) - 1); } void mpu_region_set(int inx, umword_t rbar, umword_t rasr) { @@ -47,10 +46,10 @@ void mpu_switch_to_task(struct task *tk) mpu_disable(); for (int i = 0; i < CONFIG_REGION_NUM; i++) { - if (tk->mm_space.pt_regions[i].region_inx >= 0) + region_info_t *ri = &tk->mm_space.mem_vma.pt_regions[i]; + if (ri->region_inx >= 0) { - ARM_MPU_SetRegionEx(tk->mm_space.pt_regions[i].region_inx, tk->mm_space.pt_regions[i].rbar, - tk->mm_space.pt_regions[i].rasr); + ARM_MPU_SetRegionEx(ri->region_inx, ri->rbar, ri->rasr); } else { @@ -65,3 +64,11 @@ void mpu_switch_to(void) mpu_switch_to_task(tk); } +#else +void mpu_switch_to(void) +{ +} +void mpu_switch_to_task(struct task *tk) +{ +} +#endif diff --git a/mkrtos_knl/arch/cortex-m4/thread_armv7m.c b/mkrtos_knl/arch/cortex-m4/thread_armv7m.c index d2ecbde11..acc08b3ed 100644 --- a/mkrtos_knl/arch/cortex-m4/thread_armv7m.c +++ b/mkrtos_knl/arch/cortex-m4/thread_armv7m.c @@ -17,9 +17,20 @@ #include "mm_wrap.h" #include "arch.h" #include "string.h" +typedef struct entry_frame_tmp +{ + umword_t r[8]; +} entry_frame_tmp_t; + +static void syscall_entry_raw(entry_frame_tmp_t entry); + syscall_entry_func syscall_handler_get(void) { - return syscall_entry; + return (void *)syscall_entry_raw; +} +static void syscall_entry_raw(entry_frame_tmp_t entry) +{ + syscall_entry((entry_frame_t *)&entry); } void thread_knl_pf_set(thread_t *cur_th, void *pc) { @@ -39,7 +50,6 @@ void thread_user_pf_set(thread_t *cur_th, void *pc, void *user_sp, void *ram, um // assert((((umword_t)user_sp) & 0x7UL) == 0); umword_t usp = ((umword_t)(user_sp) & ~0x7UL); - pf_t *cur_pf = (pf_t *)(usp)-1; // thread_get_pf(cur_th); cur_pf->pf_s.xpsr = 0x01000000L; diff --git a/mkrtos_knl/inc/knl/mpu.h b/mkrtos_knl/inc/knl/mpu.h index f727306c9..817159c7a 100644 --- a/mkrtos_knl/inc/knl/mpu.h +++ b/mkrtos_knl/inc/knl/mpu.h @@ -58,6 +58,10 @@ static inline void mpu_region_clr(int inx) } void mpu_switch_to(void); void mpu_switch_to_task(struct task *tk); +static inline umword_t vpage_attrs_to_page_attrs(enum vpage_prot_attrs attrs) +{ + return 0xff; +} #else static inline void mpu_switch_to_task(struct task *tk) { diff --git a/mkrtos_knl/inc/knl/vma.h b/mkrtos_knl/inc/knl/vma.h index 6f1202dcb..656bc4277 100644 --- a/mkrtos_knl/inc/knl/vma.h +++ b/mkrtos_knl/inc/knl/vma.h @@ -123,20 +123,20 @@ typedef struct task_vma #else typedef struct region_info { - umword_t start_addr; //!< 内存申请的开始地址 - umword_t size; //!< 实际申请的内存大小 + umword_t start_addr; //!< 内存申请的开始地址 + umword_t size; //!< 实际申请的内存大小 +#if IS_ENABLED(CONFIG_MK_MPU_CFG) umword_t block_start_addr; //!< 块申请的开始地址 umword_t block_size; //!< 保护的块大小 umword_t rbar; //!< mpu保护寄存器信息 umword_t rasr; //!< mpu保护寄存器信息 - int16_t region_inx; //!< 区域索引 uint8_t region; //!< 区域禁止信息 +#endif + int16_t region_inx; //!< 区域索引 } region_info_t; typedef struct task_vma { -#if IS_ENABLED(CONFIG_MK_MPU_CFG) region_info_t pt_regions[CONFIG_REGION_NUM]; //!< mpu内存保护块 -#endif } task_vma_t; #endif diff --git a/mkrtos_knl/knl/mm/mpu/vma.c b/mkrtos_knl/knl/mm/mpu/vma.c index 6cb86d4b9..3a33ce474 100644 --- a/mkrtos_knl/knl/mm/mpu/vma.c +++ b/mkrtos_knl/knl/mm/mpu/vma.c @@ -11,6 +11,7 @@ #include #include #include + static region_info_t *vma_alloc_pt_region(task_vma_t *vma) { assert(vma != NULL); @@ -46,7 +47,6 @@ static void vma_free_pt_region(task_vma_t *vma, region_info_t *ri) memset(ri, 0, sizeof(*ri)); ri->region_inx = -1; } - /** * @brief 初始化vma * @@ -55,11 +55,13 @@ static void vma_free_pt_region(task_vma_t *vma, region_info_t *ri) */ int task_vma_init(task_vma_t *vma) { +#if IS_ENABLED(CONFIG_MK_MPU_CFG) assert(vma != NULL); for (int i = 0; i < CONFIG_REGION_NUM; i++) { vma->pt_regions[i].region_inx = -1; } +#endif return 0; } @@ -86,6 +88,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, mm_space); assert(task_vma != NULL); +#if IS_ENABLED(CONFIG_MK_MPU_CFG) #if CONFIG_MPU_VERSION == 1 if (!is_power_of_2(size)) { @@ -98,6 +101,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, // 不是MPU_ALIGN_SIZE字节对齐的 return -EINVAL; } +#endif #endif vma_addr = vma_addr_get_addr(vaddr); if (vma_addr != 0) @@ -105,7 +109,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, // 必须让内核自己分配地址 return -EINVAL; } - +#if IS_ENABLED(CONFIG_MK_MPU_CFG) #if CONFIG_MPU_VERSION == 1 if (paddr == 0) { @@ -128,7 +132,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, goto err_end; } #elif CONFIG_MPU_VERSION == 2 - vma_addr = (addr_t)mm_limit_alloc_align(pt_task, size, MPU_ALIGN_SIZE); + vma_addr = (addr_t)mm_limit_alloc_align(pt_task->lim, size, MPU_ALIGN_SIZE); if (vma_addr == 0) { return -ENOMEM; @@ -139,6 +143,19 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, ret = -EINVAL; goto err_end; } +#endif +#else + vma_addr = (addr_t)mm_limit_alloc_align(pt_task->lim, size, sizeof(void *) * 2); + if (vma_addr == 0) + { + return -ENOMEM; + } + if (vma_addr & (sizeof(void *) * 2 - 1)) + { + // 不是对齐的 + ret = -EINVAL; + goto err_end; + } #endif // 找到一个合适的区域 region_info_t *ri = NULL; @@ -174,11 +191,15 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, } goto end; err_end: +#if IS_ENABLED(CONFIG_MK_MPU_CFG) #if CONFIG_MPU_VERSION == 1 mm_limit_free_align(pt_task->lim, (void *)vma_addr, size); #elif CONFIG_MPU_VERSION == 2 mm_limit_free_align(pt_task->lim, (void *)vma_addr, MPU_ALIGN_SIZE); #endif +#else + mm_limit_free_align(pt_task->lim, (void *)vma_addr, sizeof(void *) * 2); +#endif end: return ret; } @@ -219,13 +240,18 @@ static int task_vma_free_inner(task_vma_t *task_vma, vaddr_t vaddr, size_t size, vma_free_pt_region(task_vma, ri); if (is_free_mem) { +#if IS_ENABLED(CONFIG_MK_MPU_CFG) #if CONFIG_MPU_VERSION == 1 mm_limit_free_align(pt_task->lim, (void *)vma_addr, size); #elif CONFIG_MPU_VERSION == 2 mm_limit_free_align(pt_task->lim, (void *)vma_addr, MPU_ALIGN_SIZE); +#endif +#else + mm_limit_free_align(pt_task->lim, (void *)vma_addr, sizeof(void *) * 2); #endif } - if (pt_task==thread_get_current_task()){ + if (pt_task == thread_get_current_task()) + { mpu_switch_to_task(pt_task); } return 0; diff --git a/mkrtos_script/build_f1.sh b/mkrtos_script/build_f1.sh index 362a11c48..82e849320 100755 --- a/mkrtos_script/build_f1.sh +++ b/mkrtos_script/build_f1.sh @@ -4,10 +4,10 @@ # export TOOLCHAIN_LIB=/home/zhangzheng/mkrtos-tools/gcc/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m # export TOOLCHAIN=/home/zhangzheng/gcc-arm/gcc-arm-none-eabi-10.3-2021.10/bin/ # export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp -export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ -export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp -# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ -# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/ +# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp +export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/ export BOARD=STM32F103ZET6 export CROSS_COMPILE_NAME=arm-none-eabi- diff --git a/mkrtos_script/build_f2.sh b/mkrtos_script/build_f2.sh index eee3ecc5a..3e0d155b0 100755 --- a/mkrtos_script/build_f2.sh +++ b/mkrtos_script/build_f2.sh @@ -2,8 +2,13 @@ # export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ # export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp -export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ -export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/ + +# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ +# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m/ + +export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp + export BOARD=STM32F205 export CROSS_COMPILE_NAME=arm-none-eabi- diff --git a/mkrtos_script/build_f4.sh b/mkrtos_script/build_f4.sh index b47cf752d..71bce923f 100755 --- a/mkrtos_script/build_f4.sh +++ b/mkrtos_script/build_f4.sh @@ -2,13 +2,22 @@ # export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ # export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu -export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ -export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard -# export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ -# export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu +# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard + +export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard + + export BOARD=STM32F407VET6 export CROSS_COMPILE_NAME=arm-none-eabi- +if [ -z "$1" ]; then + export MKRTOS_TEST_MODE="normal" +else + export MKRTOS_TEST_MODE=$1 +fi + set -e cmake -G Ninja -B build/$KNL . cd build/$KNL && ninja diff --git a/mkrtos_script/build_qemu_aarch64.sh b/mkrtos_script/build_qemu_aarch64.sh index 3080ab545..f66ca3ab5 100755 --- a/mkrtos_script/build_qemu_aarch64.sh +++ b/mkrtos_script/build_qemu_aarch64.sh @@ -2,8 +2,12 @@ # export TOOLCHAIN=/Applications/ArmGNUToolchain/11.3.rel1/aarch64-none-elf/bin/ # export TOOLCHAIN_LIB=/Applications/ArmGNUToolchain/11.3.rel1/aarch64-none-elf/lib/gcc/aarch64-none-elf/11.3.1 -export TOOLCHAIN=/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/ -export TOOLCHAIN_LIB=/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/lib/gcc/aarch64-none-elf/10.3.1 +# export TOOLCHAIN=/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/ +# export TOOLCHAIN_LIB=/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/lib/gcc/aarch64-none-elf/10.3.1 + +export TOOLCHAIN=/home/zhangzheng/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/lib/gcc/aarch64-none-elf/10.3.1 + export BOARD=aarch64_qemu export CROSS_COMPILE_NAME=aarch64-none-elf- if [ -z "$1" ]; then diff --git a/mkrtos_script/build_swm34s.sh b/mkrtos_script/build_swm34s.sh index 91f14febf..77bd756a7 100755 --- a/mkrtos_script/build_swm34s.sh +++ b/mkrtos_script/build_swm34s.sh @@ -2,10 +2,22 @@ # export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ # export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv8-m.main/fpu/fpv5-d16/ -export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ -export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v8-m.main+fp/hard +# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v8-m.main+fp/hard + +export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v8-m.main+fp/hard + + export BOARD=SWM34 export CROSS_COMPILE_NAME=arm-none-eabi- + +if [ -z "$1" ]; then + export MKRTOS_TEST_MODE="normal" +else + export MKRTOS_TEST_MODE=$1 +fi + set -e cmake -G Ninja -B build/$KNL . cd build/$KNL && ninja diff --git a/mkrtos_script/build_test.sh b/mkrtos_script/build_test.sh index 776b20275..22bc0672b 100755 --- a/mkrtos_script/build_test.sh +++ b/mkrtos_script/build_test.sh @@ -36,14 +36,18 @@ run_and_check() { # 清理 ./mkrtos_script/clean.sh ./mkrtos_script/build_qemu_aarch64.sh test -# 运行测试 -run_and_check "./mkrtos_script/run_aarch64_qemu.sh" "$TIMEOUT" -./mkrtos_script/clean.sh +run_and_check "./mkrtos_script/run_aarch64_qemu.sh" "$TIMEOUT"# 运行测试 +./mkrtos_script/clean.sh ./mkrtos_script/build_f2.sh test run_and_check "./mkrtos_script/run_m3.sh" "$TIMEOUT" -# ./mkrtos_script/clean.sh +./mkrtos_script/clean.sh +./mkrtos_script/build_f4.sh test +run_and_check "./mkrtos_script/run_m4.sh" "$TIMEOUT" + +./mkrtos_script/clean.sh +./mkrtos_script/build_swm34s.sh test # run_and_check "./mkrtos_script/build_swm34s.sh test" "$TIMEOUT" echo "All tests completed." \ No newline at end of file diff --git a/mkrtos_tool/kconfig/__pycache__/kconfigfunctions.cpython-38.pyc b/mkrtos_tool/kconfig/__pycache__/kconfigfunctions.cpython-38.pyc index 03368ce9fd894be168d4bfaee8d1ae75bab882bc..0a08ee6c50b4055c2e4733375e455655a11f06d2 100644 GIT binary patch delta 117 zcmaDdmGS*lMxIb!UM>b8P~G@GZ6nVQWW0`)7(fy?yP=g&4khsOb8nD{X&btBIYW;RRxjQrfx$)YT0BE4@hX1@f<+A#r%Ta3Q9 v7;|5WAo%XL7}Hb8P~G@GZ6nW*K0!PEjQreG{i=+_y!5J!)V%a&uKw*@{fw*c F0|3E(61D&U delta 39 ucmX?bmvie~PM%O+UM>b8nD{X&btBJ@J~m_hjQrfxX3_rbqWz4k?*jl44i0Gm diff --git a/mkrtos_user/lib/libc_backend/src/misc_backend.c b/mkrtos_user/lib/libc_backend/src/misc_backend.c index 197200a06..940474275 100644 --- a/mkrtos_user/lib/libc_backend/src/misc_backend.c +++ b/mkrtos_user/lib/libc_backend/src/misc_backend.c @@ -42,8 +42,11 @@ long be_set_thread_area(void *p) ipc_msg_t *i_msg; thread_msg_buf_get(-1, &msg, &len); - i_msg = (ipc_msg_t *)msg; + if (!i_msg) + { + return -1; + } i_msg->user[0] = (umword_t)p; return 0; } diff --git a/mkrtos_user/server/CMakeLists.txt b/mkrtos_user/server/CMakeLists.txt index 554d6c767..4f083efbc 100644 --- a/mkrtos_user/server/CMakeLists.txt +++ b/mkrtos_user/server/CMakeLists.txt @@ -28,12 +28,12 @@ elseif(${CONFIG_ARCH} STREQUAL "aarch64" ) ${CMAKE_SOURCE_DIR}/build/libc/output/lib/crtn.o ) - add_subdirectory(uvmm) + # add_subdirectory(uvmm) # add_subdirectory(test) endif() add_subdirectory(init) add_subdirectory(shell) -# add_subdirectory(tinycc-arm-thumb) +add_subdirectory(tinycc-arm-thumb) add_subdirectory(fs) # add_subdirectory(drv) # add_subdirectory(net) diff --git a/mkrtos_user/server/init/src/init.cfg b/mkrtos_user/server/init/src/init.cfg index bfac581c8..dde735ecb 100644 --- a/mkrtos_user/server/init/src/init.cfg +++ b/mkrtos_user/server/init/src/init.cfg @@ -1,10 +1,10 @@ #一次读取一行,每行代表启动的应用程序,暂时不支持参数 -cpiofs -m /bin # fatfs # dm9000_drv # net # lcd_drv # fatfs.elf # hello.elf +cpiofs -m /bin sh \ No newline at end of file diff --git a/mkrtos_user/server/init/src/pm.c b/mkrtos_user/server/init/src/pm.c index ad4ab67fc..100fc75d6 100644 --- a/mkrtos_user/server/init/src/pm.c +++ b/mkrtos_user/server/init/src/pm.c @@ -210,10 +210,10 @@ int pm_rpc_run_app(const char *path, int flags) int ret; printf("pm run %s.\n", path); char *args[] = { - "xx",/*TODO:*修正参数传递*/ - "-t", + (char *)path, + NULL, /*TODO:支持传递参数*/ }; - ret = app_load(path, u_get_global_env(), &pid, args, 2, NULL, 0); + ret = app_load(path, u_get_global_env(), &pid, args, 1, NULL, 0); if (ret > 0) { if (!(flags & PM_APP_BG_RUN))