From 2a83353e5f0ff1888feb528689bd4c9e2edeb566 Mon Sep 17 00:00:00 2001 From: bernard Date: Thu, 30 Nov 2017 23:55:22 +0800 Subject: [PATCH 1/2] [DFS] fix the filesystem_operation_table issue. --- components/dfs/src/dfs_fs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/dfs/src/dfs_fs.c b/components/dfs/src/dfs_fs.c index ee3862ce3c..0e103fba44 100644 --- a/components/dfs/src/dfs_fs.c +++ b/components/dfs/src/dfs_fs.c @@ -22,6 +22,7 @@ * 2005-02-22 Bernard The first version. * 2010-06-30 Bernard Optimize for RT-Thread RTOS * 2011-03-12 Bernard fix the filesystem lookup issue. + * 2017-11-30 Bernard fix the filesystem_operation_table issue. */ #include @@ -252,7 +253,7 @@ int dfs_mount(const char *device_name, for (ops = &filesystem_operation_table[0]; ops < &filesystem_operation_table[DFS_FILESYSTEM_TYPES_MAX]; ops++) - if ((ops != NULL) && (strcmp((*ops)->name, filesystemtype) == 0)) + if ((*ops != NULL) && (strcmp((*ops)->name, filesystemtype) == 0)) break; dfs_unlock(); From ae7237dc53540897a9ea40e145122276bd0b9ddc Mon Sep 17 00:00:00 2001 From: bernard Date: Thu, 30 Nov 2017 23:56:52 +0800 Subject: [PATCH 2/2] [BSP] Fix the WIN32 compiling issue. rename _errno to __rt_errno for conflict in WIN32. --- bsp/simulator/applications/application.c | 10 ++++++---- bsp/simulator/applications/mnt.c | 4 +++- bsp/simulator/applications/platform.c | 9 +++++++-- bsp/simulator/applications/startup.c | 24 +++++++++++++++--------- bsp/simulator/rtconfig.h | 2 +- bsp/simulator/rtconfig.py | 6 ++---- include/libc/libc_errno.h | 2 +- include/libc/libc_fcntl.h | 7 ++++++- include/libc/libc_fdset.h | 2 +- include/libc/libc_ioctl.h | 6 ++++++ include/rtlibc.h | 2 +- src/kservice.c | 14 +++++++------- 12 files changed, 56 insertions(+), 32 deletions(-) diff --git a/bsp/simulator/applications/application.c b/bsp/simulator/applications/application.c index a16d731295..c899baaa3d 100755 --- a/bsp/simulator/applications/application.c +++ b/bsp/simulator/applications/application.c @@ -26,13 +26,15 @@ #include #include +extern int platform_init(void); +extern int mnt_init(void); + void rt_init_thread_entry(void *parameter) { -#ifdef RT_USING_COMPONENTS_INIT - rt_components_init(); -#endif - rt_kprintf("Hello RT-Thread!\n"); + + platform_init(); + mnt_init(); } int rt_application_init() diff --git a/bsp/simulator/applications/mnt.c b/bsp/simulator/applications/mnt.c index 3a0628e985..e8fc562840 100644 --- a/bsp/simulator/applications/mnt.c +++ b/bsp/simulator/applications/mnt.c @@ -15,6 +15,8 @@ int mnt_init(void) { + dfs_init(); + #ifdef RT_USING_DFS_WINSHAREDIR dfs_win32_init(); rt_win_sharedir_init("wshare"); @@ -47,7 +49,7 @@ int mnt_init(void) } #endif + return 0; } -INIT_ENV_EXPORT(mnt_init); #endif diff --git a/bsp/simulator/applications/platform.c b/bsp/simulator/applications/platform.c index f79bd6143f..00d4a1b6a0 100644 --- a/bsp/simulator/applications/platform.c +++ b/bsp/simulator/applications/platform.c @@ -1,8 +1,12 @@ #include #include "board.h" -void platform_init(void) +#include + +int platform_init(void) { + finsh_system_init(); + #ifdef RT_USING_LWIP #ifdef RT_USING_TAPNETIF tap_netif_hw_init(); @@ -24,5 +28,6 @@ void platform_init(void) #endif #endif /* RT_USING_DFS */ + + return 0; } -INIT_DEVICE_EXPORT(platform_init); diff --git a/bsp/simulator/applications/startup.c b/bsp/simulator/applications/startup.c index 9745def978..cc2144d64f 100644 --- a/bsp/simulator/applications/startup.c +++ b/bsp/simulator/applications/startup.c @@ -1,11 +1,21 @@ /* * File : startup.c * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Develop Team + * COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Change Logs: * Date Author Notes @@ -24,12 +34,8 @@ /*@{*/ extern int rt_application_init(void); -#ifdef RT_USING_FINSH -extern int finsh_system_init(void); -extern void finsh_set_device(const char *device); -#endif - extern rt_uint8_t *heap; + /** * This function will startup RT-Thread RTOS. */ diff --git a/bsp/simulator/rtconfig.h b/bsp/simulator/rtconfig.h index 2b048a19e0..4a045637bd 100755 --- a/bsp/simulator/rtconfig.h +++ b/bsp/simulator/rtconfig.h @@ -99,7 +99,7 @@ // // #define RT_USING_PTHREADS // -#define RT_USING_COMPONENTS_INIT +// #define RT_USING_COMPONENTS_INIT // // #define RT_USING_MODULE // diff --git a/bsp/simulator/rtconfig.py b/bsp/simulator/rtconfig.py index 4aefff78ab..c62b24ea93 100755 --- a/bsp/simulator/rtconfig.py +++ b/bsp/simulator/rtconfig.py @@ -67,7 +67,7 @@ if PLATFORM == 'gcc': POST_ACTION = '' elif PLATFORM == 'mingw': - # toolchains + # toolchains PREFIX = '' CC = PREFIX + 'gcc' CXX = PREFIX + 'g++' @@ -79,11 +79,9 @@ elif PLATFORM == 'mingw': OBJDUMP = PREFIX + 'objdump' OBJCPY = PREFIX + 'objcopy' -# DEVICE = ' -ffunction-sections -fdata-sections' DEVICE = '' CFLAGS = DEVICE + ' -D_Win32 -DNO_OLDNAMES -fno-pic -fno-builtin -fno-exceptions -fno-omit-frame-pointer' - AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' LFLAGS = DEVICE + ' -static-libgcc -Wl,--gc-sections,-Map=rtthread-win32.map -T mingw.ld ' CPATH = '' @@ -117,7 +115,7 @@ elif PLATFORM == 'cl': CFLAGS += ' /MT' LFLAGS += '' - CFLAGS += ' /Zi /Od /W 3 /WL ' + CFLAGS += ' /Zi /Od /W 3 /WL /D_Win32' LFLAGS += ' /SUBSYSTEM:CONSOLE /MACHINE:X86 /INCREMENTAL:NO' CPATH = '' diff --git a/include/libc/libc_errno.h b/include/libc/libc_errno.h index 7b6f302091..b4f4410595 100644 --- a/include/libc/libc_errno.h +++ b/include/libc/libc_errno.h @@ -27,7 +27,7 @@ #include -#ifdef RT_USING_NEWLIB +#if defined(RT_USING_NEWLIB) || defined(_WIN32) /* use errno.h file in newlib */ #include #else diff --git a/include/libc/libc_fcntl.h b/include/libc/libc_fcntl.h index 68b714b855..fd61b44273 100644 --- a/include/libc/libc_fcntl.h +++ b/include/libc/libc_fcntl.h @@ -4,13 +4,18 @@ #ifndef LIBC_FCNTL_H__ #define LIBC_FCNTL_H__ -#ifdef RT_USING_NEWLIB +#if defined(RT_USING_NEWLIB) || defined(_WIN32) #include #ifndef O_NONBLOCK #define O_NONBLOCK 04000 #endif +#if defined(_WIN32) +#define O_DIRECTORY 0200000 +#define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR) +#endif + #else #define O_RDONLY 00 #define O_WRONLY 01 diff --git a/include/libc/libc_fdset.h b/include/libc/libc_fdset.h index 613b0e9539..386c040206 100644 --- a/include/libc/libc_fdset.h +++ b/include/libc/libc_fdset.h @@ -27,7 +27,7 @@ #include -#ifdef RT_USING_NEWLIB +#if defined(RT_USING_NEWLIB) || defined(_WIN32) #include #else diff --git a/include/libc/libc_ioctl.h b/include/libc/libc_ioctl.h index 49191a8548..b61866a524 100644 --- a/include/libc/libc_ioctl.h +++ b/include/libc/libc_ioctl.h @@ -30,6 +30,7 @@ #define _IOC_WRITE 1U #define _IOC_READ 2U +#ifndef _WIN32 #define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0) #define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c)) #define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),sizeof(c)) @@ -39,6 +40,7 @@ #define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ #define FIONWRITE _IOR('f', 121, int) /* get # bytes outstanding * in send queue. */ +#endif #define TCGETS 0x5401 #define TCSETS 0x5402 @@ -98,7 +100,11 @@ #define FIONCLEX 0x5450 #define FIOCLEX 0x5451 + +#ifndef _WIN32 #define FIOASYNC 0x5452 +#endif + #define TIOCSERCONFIG 0x5453 #define TIOCSERGWILD 0x5454 #define TIOCSERSWILD 0x5455 diff --git a/include/rtlibc.h b/include/rtlibc.h index da126e67e6..db5236edb1 100644 --- a/include/rtlibc.h +++ b/include/rtlibc.h @@ -40,7 +40,7 @@ typedef signed long off_t; typedef int mode_t; #endif -#if defined(__MINGW32__) +#if defined(__MINGW32__) || defined(_WIN32) typedef signed long off_t; typedef int mode_t; #endif diff --git a/src/kservice.c b/src/kservice.c index 7b51f60ca3..f81a8e00f0 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -46,7 +46,7 @@ /**@{*/ /* global errno in RT-Thread */ -static volatile int _errno; +static volatile int __rt_errno; #if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) static rt_device_t _console_device = RT_NULL; @@ -64,12 +64,12 @@ rt_err_t rt_get_errno(void) if (rt_interrupt_get_nest() != 0) { /* it's in interrupt context */ - return _errno; + return __rt_errno; } tid = rt_thread_self(); if (tid == RT_NULL) - return _errno; + return __rt_errno; return tid->error; } @@ -87,7 +87,7 @@ void rt_set_errno(rt_err_t error) if (rt_interrupt_get_nest() != 0) { /* it's in interrupt context */ - _errno = error; + __rt_errno = error; return; } @@ -95,7 +95,7 @@ void rt_set_errno(rt_err_t error) tid = rt_thread_self(); if (tid == RT_NULL) { - _errno = error; + __rt_errno = error; return; } @@ -114,13 +114,13 @@ int *_rt_errno(void) rt_thread_t tid; if (rt_interrupt_get_nest() != 0) - return (int *)&_errno; + return (int *)&__rt_errno; tid = rt_thread_self(); if (tid != RT_NULL) return (int *) & (tid->error); - return (int *)&_errno; + return (int *)&__rt_errno; } RTM_EXPORT(_rt_errno);