support application.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
add_subdirectory(server)
|
||||
add_subdirectory(lib)
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${GLOBAL_C_FLAG} -w \
|
||||
-fPIC -n -pie -fpie -fPIC -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-Wl,--gc-sections -Wall -g -D__dietlibc__ -D__arm__ -D__WORDSIZE=32\
|
||||
" )
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/arm/softfpu)
|
||||
@@ -16,16 +17,22 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/include)
|
||||
add_subdirectory(src)
|
||||
|
||||
add_library(diet
|
||||
$<TARGET_OBJECTS:dietlibc_src>
|
||||
$<TARGET_OBJECTS:dietlibc_arm>
|
||||
$<TARGET_OBJECTS:dietlibc_lib>
|
||||
$<TARGET_OBJECTS:dietlibc_libcompat>
|
||||
$<TARGET_OBJECTS:dietlibc_libm>
|
||||
$<TARGET_OBJECTS:dietlibc_libshell>
|
||||
$<TARGET_OBJECTS:dietlibc_libstdio>
|
||||
$<TARGET_OBJECTS:dietlibc_libugly>
|
||||
$<TARGET_OBJECTS:dietlibc_profiling>
|
||||
# $<TARGET_OBJECTS:dietlibc_softfpu>
|
||||
$<TARGET_OBJECTS:dietlibc_builtins>
|
||||
)
|
||||
|
||||
$<TARGET_OBJECTS:dietlibc_arm>
|
||||
$<TARGET_OBJECTS:dietlibc_lib>
|
||||
$<TARGET_OBJECTS:dietlibc_libcompat>
|
||||
$<TARGET_OBJECTS:dietlibc_libm>
|
||||
$<TARGET_OBJECTS:dietlibc_libshell>
|
||||
$<TARGET_OBJECTS:dietlibc_libstdio>
|
||||
$<TARGET_OBJECTS:dietlibc_libugly>
|
||||
$<TARGET_OBJECTS:dietlibc_profiling>
|
||||
# $<TARGET_OBJECTS:dietlibc_softfpu>
|
||||
$<TARGET_OBJECTS:dietlibc_builtins>
|
||||
)
|
||||
target_link_libraries(diet
|
||||
PUBLIC
|
||||
dietlibc_src
|
||||
)
|
||||
add_dependencies(diet dietlibc_src)
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.13)
|
||||
file(GLOB deps *.c *.S)
|
||||
add_subdirectory(dietlibc-0.34)
|
||||
|
||||
add_library(dietlibc_src OBJECT ${deps})
|
||||
add_library(dietlibc_src STATIC ${deps})
|
||||
target_include_directories(
|
||||
dietlibc_src
|
||||
PUBLIC
|
||||
|
||||
@@ -10,5 +10,5 @@ void __main(int *args, int start_addr)
|
||||
__app_start_addr__ = start_addr;
|
||||
ret = main(args[0], (char **)&args[1]);
|
||||
|
||||
exit(ret);
|
||||
// exit(ret);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
#include "arm-features.h"
|
||||
.syntax unified
|
||||
.cpu cortex-m3
|
||||
.thumb
|
||||
|
||||
FUNC_START __testandset
|
||||
mov r2, r0
|
||||
|
||||
0
mkrtos_user/lib/dietlibc/src/dummy.c
Normal file
0
mkrtos_user/lib/dietlibc/src/dummy.c
Normal file
@@ -8,7 +8,7 @@ extern int __rel_end__;
|
||||
/*
|
||||
* @brief gbase ram<61>Ŀ<EFBFBD>ʼ<EFBFBD><CABC>ַ,tbase text<78>Ŀ<EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
*/
|
||||
void reloc(unsigned int *gbase, unsigned int tbase)
|
||||
void _reloc(unsigned int *gbase, unsigned int tbase)
|
||||
{
|
||||
int i;
|
||||
unsigned int s;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
.syntax unified
|
||||
.section .first, #execinstr
|
||||
|
||||
|
||||
.globl reloc
|
||||
.align 2
|
||||
.globl _start_
|
||||
.type _start_, %function
|
||||
@@ -81,13 +82,13 @@ LoopInitStack:
|
||||
mov r0, r12
|
||||
push {r0, r4}
|
||||
|
||||
ldr r0, = __stack_end__
|
||||
mov sp, r0
|
||||
//ldr r0, = __stack_end__
|
||||
//mov sp, r0
|
||||
|
||||
mov r0, r9
|
||||
adr r1, _start_
|
||||
bic r1, r1, #1
|
||||
bl reloc
|
||||
bl _reloc
|
||||
|
||||
pop {r0, r12}
|
||||
adr r1, _start_
|
||||
|
||||
31
mkrtos_user/lib/sys/CMakeLists.txt
Normal file
31
mkrtos_user/lib/sys/CMakeLists.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
" )
|
||||
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
|
||||
|
||||
|
||||
add_subdirectory(src)
|
||||
file(GLOB deps *.c *.S)
|
||||
add_library(
|
||||
sys
|
||||
STATIC
|
||||
${deps}
|
||||
)
|
||||
target_link_directories(
|
||||
sys
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/include
|
||||
)
|
||||
target_link_libraries(
|
||||
sys
|
||||
PUBLIC
|
||||
diet
|
||||
)
|
||||
add_dependencies(sys diet)
|
||||
|
||||
|
||||
3
mkrtos_user/lib/sys/inc/u_prot.h
Normal file
3
mkrtos_user/lib/sys/inc/u_prot.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
2
mkrtos_user/lib/sys/src/u_factory.c
Normal file
2
mkrtos_user/lib/sys/src/u_factory.c
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
#include <stdint.h>
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
|
||||
set(CMAKE_C_FLAGS "${GLOBAL_C_FLAG} -fPIC -n -pie -fpie -fpic \
|
||||
-msingle-pic-base -mno-pic-data-is-text-relative --specs=nosys.specs \
|
||||
-fmessage-length=0 -Wall -Xlinker --cref \
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
|
||||
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
|
||||
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
|
||||
")
|
||||
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
|
||||
|
||||
|
||||
add_subdirectory(init)
|
||||
|
||||
@@ -9,6 +9,7 @@ target_link_libraries(init.elf
|
||||
PUBLIC
|
||||
diet
|
||||
)
|
||||
add_dependencies(init.elf diet)
|
||||
set_target_properties(init.elf PROPERTIES LINK_FLAGS
|
||||
"-T ${CMAKE_CURRENT_SOURCE_DIR}/link.lds")
|
||||
|
||||
|
||||
17
mkrtos_user/server/init/src/heap_stack.c
Normal file
17
mkrtos_user/server/init/src/heap_stack.c
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
#define HEAP_SIZE 1024 * 2
|
||||
#define STACK_SIZE 1024 * 1
|
||||
|
||||
#if defined(__CC_ARM)
|
||||
#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init))
|
||||
#define STACK_ATTR SECTION("STACK") __attribute__((zero_init))
|
||||
#elif defined(__GNUC__)
|
||||
#define HEAP_ATTR
|
||||
#define STACK_ATTR
|
||||
#elif defined(__IAR_SYSTEMS_ICC__)
|
||||
#define HEAP_ATTR
|
||||
#define STACK_ATTR
|
||||
#endif
|
||||
|
||||
__attribute__((used)) HEAP_ATTR static char heap[HEAP_SIZE];
|
||||
__attribute__((used)) STACK_ATTR static char stack[STACK_SIZE];
|
||||
@@ -1,5 +1,25 @@
|
||||
|
||||
int syscall(int nr, ...);
|
||||
#define uint32_t unsigned int
|
||||
typedef union msg_tag
|
||||
{
|
||||
uint32_t raw;
|
||||
union
|
||||
{
|
||||
uint32_t type : 4;
|
||||
uint32_t type2 : 6;
|
||||
uint32_t prot : (sizeof(uint32_t) * 8) - 12;
|
||||
};
|
||||
} msg_tag_t;
|
||||
|
||||
#define msg_tag_init(r) \
|
||||
((msg_tag_t){.raw = (r)})
|
||||
|
||||
#define msg_tag_init3(t, t2, p) \
|
||||
msg_tag_init(((uint32_t)(t)&0xf) | (((uint32_t)(t2)&0x3f) << 4) | (((uint32_t)(p)) << 10))
|
||||
|
||||
int main(int argc, char *args[])
|
||||
{
|
||||
syscall(4, msg_tag_init3(0, 1, 4).raw, 'a', 2, 3, 4, 5);
|
||||
return 0;
|
||||
}
|
||||
|
||||
19
mkrtos_user/server/init/src/syscall.S
Normal file
19
mkrtos_user/server/init/src/syscall.S
Normal file
@@ -0,0 +1,19 @@
|
||||
.syntax unified
|
||||
.text
|
||||
|
||||
/*
|
||||
int syscall(int nr, ...)
|
||||
*/
|
||||
.global syscall
|
||||
.type syscall, %function
|
||||
syscall:
|
||||
push {r4-r7}
|
||||
mov r7, r0
|
||||
mov r0, r1
|
||||
mov r1, r2
|
||||
mov r2, r3
|
||||
add r6, sp,#16
|
||||
ldmia r6,{r3-r5}
|
||||
svc 128
|
||||
pop {r4-r7}
|
||||
bx lr
|
||||
Reference in New Issue
Block a user