尝试修复其他芯片的编译

This commit is contained in:
zhangzheng
2024-04-10 15:19:02 +00:00
parent 1cca0dc8de
commit 780d4db78d
22 changed files with 114 additions and 33 deletions

View File

@@ -69,7 +69,8 @@
"timer.h": "c",
"arm_local_reg.h": "c",
"thread_task_arch.h": "c",
"mm_space.h": "c"
"mm_space.h": "c",
"spinlock_arch.h": "c"
},
"cortex-debug.showRTOS": false,
"cortex-debug.variableUseNaturalFormat": false,

View File

@@ -34,6 +34,7 @@ if (${CONFIG_CPU_TYPE} STREQUAL "stm32f1")
${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport
)
add_subdirectory(bsp/STM32F1)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf32-littlearm -B arm rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
elseif(${CONFIG_CPU_TYPE} STREQUAL "stm32f2" )
file(GLOB bsp_src ${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/*.c)
@@ -46,6 +47,7 @@ elseif(${CONFIG_CPU_TYPE} STREQUAL "stm32f2" )
${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include
)
add_subdirectory(bsp/STM32F2)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf32-littlearm -B arm rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
elseif(${CONFIG_CPU_TYPE} STREQUAL "stm32f4" )
if(${CONFIG_BOARD_NAME} STREQUAL "STM32F407VET6" )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F40_41xxx ")
@@ -63,12 +65,14 @@ elseif(${CONFIG_CPU_TYPE} STREQUAL "stm32f4" )
${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include
)
add_subdirectory(bsp/STM32F4)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf32-littlearm -B arm rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
elseif(${CONFIG_CPU_TYPE} STREQUAL "Cortex-R52" )
include_directories(
${CMAKE_SOURCE_DIR}/mkrtos_bootstrap/bsp/Cortex-R52
)
add_subdirectory(bsp/Cortex-R52)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf32-littlearm -B arm rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
elseif(${CONFIG_CPU_TYPE} STREQUAL "swm34s" )
file(GLOB bsp_src
@@ -85,11 +89,13 @@ elseif(${CONFIG_CPU_TYPE} STREQUAL "swm34s" )
${CMAKE_SOURCE_DIR}/mkrtos_bsp/SWM34/SWM341_StdPeriph_Driver/SWM341_StdPeriph_Driver
)
add_subdirectory(bsp/SWM34S)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf32-littlearm -B arm rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
elseif(${CONFIG_CPU_TYPE} STREQUAL "aarch64_qemu" )
include_directories(
${CMAKE_SOURCE_DIR}/mkrtos_bootstrap/bsp/AARCH64_QEMU
)
add_subdirectory(bsp/AARCH64_QEMU)
set(PACK_CMD "${CMAKE_OBJCOPY} -I binary -O elf64-littleaarch64 -B aarch64 rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio")
endif()
add_custom_target(
@@ -102,10 +108,11 @@ add_custom_target(
COMMAND
cd ${CMAKE_SOURCE_DIR}/build/output
COMMAND
${CMAKE_OBJCOPY} -I binary -O elf64-littleaarch64 -B aarch64 rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio
eval ${PACK_CMD}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/build/output
BYPRODUCTS ${CMAKE_SOURCE_DIR}/build/output/rootfs.cpio.elf
)
)
# ${CMAKE_OBJCOPY} -I binary -O elf64-littleaarch64 -B aarch64 rootfs.cpio rootfs.cpio.elf --rename-section .data=.cpio
add_dependencies(
gen_sys_cpio
mkrtos_dump
@@ -128,6 +135,7 @@ target_link_libraries(
--whole-archive
boot_bsp
--no-whole-archive
${GCC_LIB_PATH}/libgcc.a
)
add_custom_target(

View File

@@ -65,5 +65,5 @@
#define SWD_ENABLE 0X01
#define JTAG_SWD_ENABLE 0X00
void jump2kernel(void);
void jump2kernel(addr_t cpio_start, addr_t cpio_end);
#endif

View File

@@ -2,7 +2,7 @@
#include <mk_sys.h>
//! 内核镜像的开始地址
#define KERNEL_IMG_START_ADDR (0X8000000 + 0x2000)
void jump2kernel(void)
void jump2kernel(addr_t cpio_start, addr_t cpio_end)
{
uint32_t jump_addr;
void (*_main)(void);

View File

@@ -112,3 +112,16 @@ CONFIG_RTT_DIR="./"
CONFIG_ARCH="cortex-m3"
CONFIG_KNL_EXRAM=n
CONFIG_BOARD_NAME="STM32F103ZET6"
CONFIG_BUDDY_SLAB=n
CONFIG_SMP=n
CONFIG_CPU=1
CONFIG_THREAD_BLOCK_SIZE=0x400
CONFIG_PAGE_SHIFT=9
CONFIG_MMU=n
CONFIG_KNL_TEST=n
CONFIG_ELF_LAUNCH=n
CONFIG_THREAD_MSG_BUG_LEN=128
CONFIG_THREAD_IPC_MSG_LEN=96
CONFIG_THREAD_MAP_BUF_LEN=16
CONFIG_MSG_BUF_VADDR=0xE0000000
CONFIG_BOOT_FS_VADDR=0xE0001000

View File

@@ -110,4 +110,17 @@ CONFIG_RT_USING_PIN=y
CONFIG_CPU_TYPE="stm32f2"
CONFIG_RTT_DIR="./"
CONFIG_ARCH="cortex-m3"
CONFIG_BOARD_NAME="STM32F205"
CONFIG_BOARD_NAME="STM32F205"
CONFIG_BUDDY_SLAB=n
CONFIG_SMP=n
CONFIG_CPU=1
CONFIG_THREAD_BLOCK_SIZE=0x400
CONFIG_PAGE_SHIFT=9
CONFIG_MMU=n
CONFIG_KNL_TEST=n
CONFIG_ELF_LAUNCH=n
CONFIG_THREAD_MSG_BUG_LEN=128
CONFIG_THREAD_IPC_MSG_LEN=96
CONFIG_THREAD_MAP_BUF_LEN=16
CONFIG_MSG_BUF_VADDR=0xE0000000
CONFIG_BOOT_FS_VADDR=0xE0001000

View File

@@ -13,13 +13,14 @@
#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)
#if IS_ENABLED(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)
{

View File

@@ -12,6 +12,9 @@
#include "types.h"
#include "arch.h"
#define PAGE_SIZE 512
#define LOG_INTR_NO 37 // USART1_IRQn
/// @brief 线程信息

View File

@@ -12,7 +12,7 @@
#include "types.h"
#include "thread.h"
#include "printk.h"
#include "thread_armv7m.h"
#include "thread_task_arch.h"
#include "app.h"
#include "mm_wrap.h"
#include "arch.h"
@@ -39,13 +39,12 @@ 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;
cur_pf->pf_s.lr = (umword_t)NULL; //!< 线程退出时调用的函数
cur_pf->pf_s.pc = (umword_t)pc | 0x1;
cur_pf->rg1[5] = (umword_t)ram;
cur_pf->regs[5] = (umword_t)ram;
cur_th->sp.knl_sp = ((char *)cur_th + THREAD_BLOCK_SIZE - 8);
cur_th->sp.user_sp = cur_pf;
@@ -53,3 +52,6 @@ void thread_user_pf_set(thread_t *cur_th, void *pc, void *user_sp, void *ram, um
// printk("exc_regs:%x %x %x\n", cur_pf->pf_s.pc, cur_th->sp.user_sp, ram);
}
void task_knl_init(task_t *knl_tk)
{
}

View File

@@ -1,3 +1,3 @@
#pragma once
#include "mm_page.h"
// #include "mm_page.h"
void mm_man_dump(void);

View File

@@ -1,7 +1,7 @@
#pragma once
#include "types.h"
#include <mm_page.h>
// #include <mm_page.h>
#include <assert.h>
#include <util.h>
#if IS_ENABLED(CONFIG_MMU)

View File

@@ -126,11 +126,17 @@ typedef struct thread
static inline void thread_set_msg_buf(thread_t *th, void *msg, void *umsg)
{
th->msg.msg = msg;
#if IS_ENABLED(CONFIG_MMU)
th->msg.umsg = umsg;
#endif
}
static inline void *thread_get_msg_buf(thread_t *th)
{
#if IS_ENABLED(CONFIG_MMU)
return th->msg.umsg;
#else
return th->msg.msg;
#endif
}
static inline void *thread_get_kmsg_buf(thread_t *th)
{

View File

@@ -3,13 +3,34 @@ cmake_minimum_required(VERSION 3.13)
file(GLOB deps *.c *.S)
if (NOT ${CONFIG_BUDDY_SLAB} STREQUAL "y")
# if (NOT ${CONFIG_BUDDY_SLAB} STREQUAL "y")
# list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/buddy.c)
# list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/slab.c)
# endif()
if (NOT DEFINED CONFIG_BUDDY_SLAB)
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/buddy.c)
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/slab.c)
else()
if (NOT CONFIG_BUDDY_SLAB STREQUAL "y")
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/buddy.c)
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/slab.c)
endif()
endif()
if (${CONFIG_MMU} STREQUAL "y")
file(GLOB mm_src mm/*.c mm/*.S)
list(APPEND deps ${mm_src})
if (NOT DEFINED CONFIG_ELF_LAUNCH)
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/elf64.c)
else()
if (NOT CONFIG_ELF_LAUNCH STREQUAL "y")
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/knl/elf64.c)
endif()
endif()
if (DEFINED CONFIG_MMU)
if (CONFIG_MMU STREQUAL "y")
file(GLOB mm_src mm/*.c mm/*.S)
list(APPEND deps ${mm_src})
endif()
endif()
add_library(knl STATIC ${deps})

View File

@@ -11,7 +11,7 @@
#include "types.h"
#include "kobject.h"
#include "init.h"
#include "mm_page.h"
// #include "mm_page.h"
#include "thread.h"
#include "task.h"
#include "globals.h"

View File

@@ -239,7 +239,7 @@ static share_mem_t *share_mem_create(ram_limit_t *lim, size_t max)
#if CONFIG_MK_MPU_CFG
#if CONFIG_MPU_VERSION == 1
if (max < PAGE_SIZE || !is_power_of_2(max))
if (max < (1UL << CONFIG_PAGE_SHIFT) || !is_power_of_2(max))
{
//!< 大小必须是2的整数倍
return NULL;

View File

@@ -12,8 +12,11 @@
#include "cpulock.h"
#include "spinlock.h"
#include <arch.h>
#include <util.h>
#if IS_ENABLED(CONFIG_SMP)
#include <atomics.h>
#include <spinlock_arch.h>
#endif
void spinlock_init(spinlock_t *lock)
{
lock->val &= ~3UL;
@@ -40,7 +43,7 @@ mword_t spinlock_lock(spinlock_t *lock)
cpulock_set(status);
return -1;
}
#if CONFIG_SMP
#if IS_ENABLED(CONFIG_SMP)
spinlock_lock_arch(lock);
_dmb(ish);
#endif
@@ -48,7 +51,7 @@ mword_t spinlock_lock(spinlock_t *lock)
}
void spinlock_set(spinlock_t *lock, mword_t status)
{
#if CONFIG_SMP
#if IS_ENABLED(CONFIG_SMP)
_dmb(ish);
spinlock_unlock_arch(lock);
#endif

View File

@@ -49,9 +49,9 @@ end:;
addr_t u_sp = arch_get_user_sp();
pf_s_t *pf_a = (pf_s_t *)u_sp;
pf_a->rg0[0] = entry->r[0];
pf_a->rg0[1] = entry->r[1];
pf_a->rg0[2] = entry->r[2];
pf_a->rg0[3] = entry->r[3];
pf_a->rg0[0] = entry->regs[0];
pf_a->rg0[1] = entry->regs[1];
pf_a->rg0[2] = entry->regs[2];
pf_a->rg0[3] = entry->regs[3];
#endif
}

View File

@@ -26,7 +26,7 @@
#include "map.h"
#include "access.h"
#include "ipc.h"
#include "asm/mm.h"
#include "arch.h"
enum thread_op
{
SET_EXEC_REGS,
@@ -785,8 +785,13 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_t
task_t *tag_tk = thread_get_bind_task(tag_th);
if (is_rw_access(tag_tk, (void *)(f->regs[1]), THREAD_MSG_BUG_LEN, FALSE))
{
#if IS_ENABLED(CONFIG_MMU)
thread_set_msg_buf(tag_th, (void *)mm_get_paddr(mm_space_get_pdir(&tag_tk->mm_space), f->regs[1], PAGE_SHIFT),
(void *)(f->regs[1]));
#else
thread_set_msg_buf(tag_th, (void *)(f->regs[1]),
(void *)(f->regs[1]));
#endif
tag = msg_tag_init4(0, 0, 0, 0);
}
else

View File

@@ -1,4 +1,4 @@
#include "mk_sys.h"
// #include "mk_sys.h"
#include "cpio.h"
#include <util.h>
#include <string.h>

View File

@@ -1,10 +1,13 @@
#!/bin/bash
export TOOLCHAIN=/home/zhangzheng/mkrtos-tools/gcc/gcc-arm-none-eabi-5_4-2016q3/bin/
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/mkrtos-tools/gcc/gcc-arm-none-eabi-5_4-2016q3/bin/
# 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 BOARD=STM32F103ZET6
export CROSS_COMPILE_NAME=arm-none-eabi-
set -e
cmake -G Ninja -B build .

View File

@@ -7,7 +7,7 @@
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 BOARD=STM32F205
export CROSS_COMPILE=arm-none-eabi-
export CROSS_COMPILE_NAME=arm-none-eabi-
set -e
cmake -G Ninja -B build/$KNL .

View File

@@ -2,9 +2,11 @@ cmake_minimum_required(VERSION 3.13)
file(GLOB_RECURSE deps *.c *.S)
if (${CONFIG_ELF_LAUNCH} STREQUAL "y")
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/src/u_app_loader.c)
list(APPEND deps ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/src/u_elf_loader.c)
if (DEFINED CONFIG_ELF_LAUNCH)
if (CONFIG_ELF_LAUNCH STREQUAL "y")
list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/src/u_app_loader.c)
list(APPEND deps ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_util/src/u_elf_loader.c)
endif()
endif()
add_library(