Explorar el Código

!344 配合mlibc,内核修改部分
Merge pull request !344 from lin123/rt-smart

bernard hace 4 años
padre
commit
e65e52eb76

+ 6 - 0
components/libc/Kconfig

@@ -19,6 +19,12 @@ if RT_USING_LIBC && RT_USING_LWP
 
     endchoice
 endif
+            
+if RT_USING_MUSL
+    config RT_USING_MLIB
+    bool "Use libc: mlib"
+    default n 
+endif
 
 config RT_USING_PTHREADS
     bool "Enable pthreads APIs"

+ 14 - 13
components/libc/compilers/musl/SConscript

@@ -6,20 +6,21 @@ src = Glob('*.c')
 cwd = GetCurrentDir()
 group = []
 
-if rtconfig.PLATFORM == 'gcc' and GetDepend('RT_USING_MUSL'):
-    CPPDEFINES = ['__STDC_ISO_10646__=201206L', '_STDC_PREDEF_H']
-    LIBS       = ['c', 'gcc']
+if rtconfig.PLATFORM == 'gcc' and GetDepend('RT_USING_MUSL') and not GetDepend('RT_USING_MLIB'):
+        CPPDEFINES = ['__STDC_ISO_10646__=201206L', '_STDC_PREDEF_H']
+        LIBS       = ['c', 'gcc']
 
-    if os.path.exists(os.path.join(cwd, 'libc', 'lib', 'libc.a')):
-        CFLAGS     = ' -nostdinc'
-        CPPPATH    = [cwd, cwd + '/libc/include']
-        LIBPATH    = [cwd + '/libc/lib']
+        if os.path.exists(os.path.join(cwd, 'libc', 'lib', 'libc.a')):
+            CFLAGS     = ' -nostdinc'
+            CPPPATH    = [cwd, cwd + '/libc/include']
+            LIBPATH    = [cwd + '/libc/lib']
 
-        group = DefineGroup('musl', src, depend = ['RT_USING_LIBC', 'RT_USING_MUSL'], CFLAGS = CFLAGS, 
-            CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS, LIBPATH = LIBPATH)
-    else:
-        LINKFLAGS = ' --specs=kernel.specs'
-        group = DefineGroup('musl', src, depend = ['RT_USING_LIBC', 'RT_USING_MUSL'], LINKFLAGS = LINKFLAGS, 
-            CPPDEFINES = CPPDEFINES, LIBS = LIBS)
+            group = DefineGroup('musl', src, depend = ['RT_USING_LIBC', 'RT_USING_MUSL'], CFLAGS = CFLAGS, 
+                CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS, LIBPATH = LIBPATH)
+        else:
+            CPPPATH    = [cwd]
+            LINKFLAGS = ' --specs=kernel.specs'
+            group = DefineGroup('musl', src, depend = ['RT_USING_LIBC', 'RT_USING_MUSL'], CPPPATH = CPPPATH, LINKFLAGS = LINKFLAGS, 
+                CPPDEFINES = CPPDEFINES, LIBS = LIBS)
 
 Return('group')

+ 3 - 4
components/libc/compilers/newlib/SConscript

@@ -5,7 +5,6 @@ src = Glob('*.c')
 cwd = GetCurrentDir()
 group = []
 
-CPPPATH = [cwd]
 CPPDEFINES = []
 
 # link with libc and libm:
@@ -21,9 +20,9 @@ if rtconfig.PLATFORM == 'gcc' and GetDepend('RT_USING_LIBC'):
         LIBS = []
     elif not GetDepend('RT_USING_NEWLIB'):
         # RT_USING_NEWLIB is defined already
+        CPPPATH = [cwd]
         CPPDEFINES = ['RT_USING_NEWLIB']
-
-    group = DefineGroup('newlib', src, depend = ['RT_USING_LIBC'], 
-        CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS)
+        group = DefineGroup('newlib', src, depend = ['RT_USING_LIBC'], 
+            CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS)
 
 Return('group')

+ 1 - 3
components/libc/time/clock_time.c

@@ -10,8 +10,6 @@
  */
 
 #include <rtthread.h>
-#include <pthread.h>
-
 #include "clock_time.h"
 
 static struct timeval _timevalue;
@@ -48,7 +46,7 @@ int clock_time_to_tick(const struct timespec *time)
     RT_ASSERT(time != RT_NULL);
 
     tick = RT_WAITING_FOREVER;
-    if (time != NULL)
+    if (time != RT_NULL)
     {
         /* get current tp */
         clock_gettime(CLOCK_REALTIME, &tp);

+ 1 - 1
components/lwp/arch/arm/common/reloc.c

@@ -1,7 +1,7 @@
 #include <rtthread.h>
 #include <stdint.h>
 #include <string.h>
-#include <elf.h>
+#include <lwp_elf.h>
 #ifdef RT_USING_USERSPACE
 #include <mmu.h>
 #include <page.h>

+ 2 - 2
components/lwp/arch/arm/cortex-a/lwp_arch.c

@@ -32,8 +32,8 @@ int arch_user_space_init(struct rt_lwp *lwp)
     }
 
     lwp->end_heap = USER_HEAP_VADDR;
-    memcpy(mmu_table + (KERNEL_VADDR_START >> ARCH_SECTION_SHIFT), MMUTable + (KERNEL_VADDR_START >> ARCH_SECTION_SHIFT), ARCH_PAGE_SIZE);
-    memset(mmu_table, 0, 3 * ARCH_PAGE_SIZE);
+    rt_memcpy(mmu_table + (KERNEL_VADDR_START >> ARCH_SECTION_SHIFT), MMUTable + (KERNEL_VADDR_START >> ARCH_SECTION_SHIFT), ARCH_PAGE_SIZE);
+    rt_memset(mmu_table, 0, 3 * ARCH_PAGE_SIZE);
     rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, mmu_table, 4 * ARCH_PAGE_SIZE);
     rt_hw_mmu_map_init(&lwp->mmu_info, (void*)USER_VADDR_START, USER_VADDR_TOP - USER_VADDR_START, mmu_table, PV_OFFSET);
 

+ 2 - 0
components/lwp/lwp.h

@@ -36,6 +36,8 @@
 #include "lwp_arch.h"
 #endif
 
+#include <locale.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif

+ 2 - 0
components/utilities/ulog/ulog_def.h

@@ -135,7 +135,9 @@ extern "C" {
 #undef ELOG_LVL_INFO
 #undef ELOG_LVL_DEBUG
 #undef ELOG_LVL_VERBOSE
+#if !defined(RT_USING_MLIB)
 #define assert                         ASSERT
+#endif
 #define log_e                          LOG_E
 #define log_w                          LOG_W
 #define log_i                          LOG_I

+ 2 - 5
src/kservice.c

@@ -121,16 +121,13 @@ int *_rt_errno(void)
 RTM_EXPORT(_rt_errno);
 
 #ifdef RT_USING_MUSL
-int *__errno_location(void)
-{
-    return _rt_errno();
-}
-
+#if !defined(RT_USING_MLIB)
 int *___errno_location(void)
 {
     return _rt_errno();
 }
 #endif
+#endif
 
 /**
  * This function will set the content of memory to specified value