diff --git a/Kconfig b/Kconfig index 522800bd2e11be2a7ba428734b7e985dac8c886a..a47e793f482674f1f3c2c284751fc91bdfba9fed 100644 --- a/Kconfig +++ b/Kconfig @@ -42,11 +42,11 @@ choice config COMPILER_HIMIX_32 bool "arm-linux-ohoseabi" - depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 + depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_QEMU_ARM_VIRT_CA7 config COMPILER_CLANG_LLVM bool "clang-llvm" - depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 + depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_QEMU_ARM_VIRT_CA7 endchoice endmenu @@ -274,7 +274,7 @@ config VM_OVERLAP_CHECK config NULL_ADDRESS_PROTECT bool "Enable NULL Address protect" default n - depends on (PLATFORM_HI3518EV200 || PLATFORM_HI3516CV300 || PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300) && DEBUG_VERSION + depends on (PLATFORM_HI3518EV200 || PLATFORM_HI3516CV300 || PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_QEMU_ARM_VIRT_CA7) && DEBUG_VERSION help Answer Y to set mem address 0~1M prohibit to access, read or write will trigger exception. diff --git a/Makefile b/Makefile index 0a7cd5af7e02d92df0f43757ae1946a71ff84105..b7f3d0453396309fe79cf61ed12bf98adb3b23e3 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,9 @@ endif ifeq ($(LOSCFG_PLATFORM_HI3516DV300), y) FSTYPE = vfat endif +ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y) +FSTYPE = vfat +endif ROOTFS_DIR = $(OUT)/rootfs ROOTFS_ZIP = $(OUT)/rootfs.zip VERSION = @@ -97,13 +100,20 @@ endif ##### make dynload ##### -include $(LITEOS_MK_PATH)/dynload.mk +ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y) +VENDOR_BOARD_INCLUDE := $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board +else ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y) +VENDOR_BOARD_INCLUDE := $(LITEOSTOPDIR)/../../device/qemu/arm/$(LITEOS_PLATFORM)/config/board +else +$(error "No VENDOR_BOARD_INCLUDE defined") +endif #-----need move when make version-----# ##### make lib ##### $(__LIBS): $(OUT) $(CXX_INCLUDE) $(OUT): $(LITEOS_MENUCONFIG_H) $(HIDE)mkdir -p $(OUT)/lib - $(HIDE)$(CC) -I$(LITEOS_PLATFORM_BASE)/include -I$(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board \ + $(HIDE)$(CC) -I$(LITEOS_PLATFORM_BASE)/include -I$(VENDOR_BOARD_INCLUDE) \ -E $(LITEOS_PLATFORM_BASE)/board.ld.S \ -o $(LITEOS_PLATFORM_BASE)/board.ld -P @@ -126,6 +136,7 @@ menuconfig:$(MENUCONFIG_PATH)/mconf genconfig:$(MENUCONFIG_PATH)/conf $(HIDE)mkdir -p include/config include/generated + $< --olddefconfig $(KCONFIG_FILE_PATH) $< --silentoldconfig $(KCONFIG_FILE_PATH) -mv -f $(LITEOS_MENUCONFIG_H) $(LITEOS_PLATFORM_MENUCONFIG_H) ##### menuconfig end ####### diff --git a/arch/arm/arm/Makefile b/arch/arm/arm/Makefile index 24d47056b11cad0e784abdec6555fa99029695ad..648fe5c79c194e050c200515f7a20288d97f173a 100644 --- a/arch/arm/arm/Makefile +++ b/arch/arm/arm/Makefile @@ -35,6 +35,7 @@ LOCAL_SRCS := $(wildcard src/*.c) $(wildcard src/*.S) LOCAL_INCLUDE := \ -I $(LITEOSTOPDIR)/kernel/base/include \ -I $(LITEOSTOPDIR)/kernel/extended/include \ + -I $(LITEOSTOPDIR)/kernel/extended/dynload/include \ -I $(LITEOSTOPDIR)/arch/arm/arm/include \ ifeq ($(LITEOS_ARM_ARCH), -march=armv7-a) diff --git a/arch/arm/arm/src/los_hw_exc.S b/arch/arm/arm/src/los_hw_exc.S index 25d8639c3b8768fde0031cb1b8baf6c9af5d2c51..1dc3cf52c28b7385ff33d7c943be7b9db4a444c0 100644 --- a/arch/arm/arm/src/los_hw_exc.S +++ b/arch/arm/arm/src/los_hw_exc.S @@ -57,7 +57,11 @@ .global _osExceptPrefetchAbortHdl .global _osExceptSwiHdl .global _osExceptUndefInstrHdl +#if defined(LOSCFG_CC_STACKPROTECTOR_ALL) || \ + defined(LOSCFG_CC_STACKPROTECTOR_STRONG) || \ + defined(LOSCFG_CC_STACKPROTECTOR) .global __stack_chk_guard_setup +#endif .fpu vfpv4 @@ -147,15 +151,22 @@ .endm #endif +#if defined(LOSCFG_CC_STACKPROTECTOR_ALL) || \ + defined(LOSCFG_CC_STACKPROTECTOR_STRONG) || \ + defined(LOSCFG_CC_STACKPROTECTOR) @ Description: Stack-Protector Init __stack_chk_guard_setup: PUSH {FP, LR} +#if defined(LOSCFG_PLATFORM_HI3516DV300) || defined(LOSCFG_PLATFORM_HI3518EV300) + /* Randomize __stack_chk_quard using platform-specific function. */ BL OsRandomStackGuard LDR R1, =__stack_chk_guard MOV R3, R0 ORR R2, R3, #0X80000000 STR R2, [R1] +#endif POP {FP, PC} +#endif @ Description: Undefined instruction exception handler _osExceptUndefInstrHdl: diff --git a/bsd/compat/linuxkpi/Makefile b/bsd/compat/linuxkpi/Makefile index 5244c46976b5a48ebec3cd1be89205deb7d1aa3c..be7ffc704fd2c25077b78ce1dbc702d9f82fcb22 100644 --- a/bsd/compat/linuxkpi/Makefile +++ b/bsd/compat/linuxkpi/Makefile @@ -33,6 +33,10 @@ MODULE_NAME := $(notdir $(shell pwd)) LOCAL_SRCS := $(wildcard src/*.c) +ifneq ($(LOSCFG_HRTIMER_ENABLE), y) +LOCAL_SRCS := $(filter-out src/linux_hrtimer.c, $(LOCAL_SRCS)) +endif + LOCAL_INCLUDE := \ -I $(LITEOSTOPDIR)/kernel/base/include \ -I $(LITEOSTOPDIR)/bsd/compat/linuxkpi/include diff --git a/fs/include/disk.h b/fs/include/disk.h index 569c0e586b59daee0049ce08775faab9e6a93eae..072cc4327af3e906fee55b819a9cd182ad5c6975 100644 --- a/fs/include/disk.h +++ b/fs/include/disk.h @@ -47,6 +47,8 @@ #endif +#include "pthread.h" + #ifdef __cplusplus #if __cplusplus extern "C" { diff --git a/fs/vfs/disk/disk.c b/fs/vfs/disk/disk.c index 99bd612ca90e0be299a4d633b74ed69e508db392..590e8327f96d03291c78a910e750b9383db3cd9e 100644 --- a/fs/vfs/disk/disk.c +++ b/fs/vfs/disk/disk.c @@ -34,7 +34,6 @@ #include "stdlib.h" #include "unistd.h" #include "sys/mount.h" -#include "pthread.h" #include "linux/spinlock.h" #include "inode/inode.h" diff --git a/kernel/base/include/los_vm_iomap.h b/kernel/base/include/los_vm_iomap.h index f73aa89a9f5959269057843b3dfe12c15a24ba6e..1b49251079818bf631829a604d1f99ae75a5f9ce 100644 --- a/kernel/base/include/los_vm_iomap.h +++ b/kernel/base/include/los_vm_iomap.h @@ -46,8 +46,8 @@ enum DmaMemType { DMA_NOCACHE }; -#define IS_PERIPH_ADDR(addr) ((addr >= PERIPH_PMM_BASE) && (addr <= PERIPH_PMM_BASE + PERIPH_PMM_SIZE)) -#define IS_MEMORY_ADDR(addr) ((addr >= DDR_MEM_ADDR) && (addr <= DDR_MEM_ADDR + DDR_MEM_SIZE)) +#define IS_PERIPH_ADDR(addr) (((addr) >= U32_C(PERIPH_PMM_BASE)) && ((addr) <= U32_C(PERIPH_PMM_BASE) + U32_C(PERIPH_PMM_SIZE))) +#define IS_MEMORY_ADDR(addr) (((addr) >= U32_C(DDR_MEM_ADDR)) && ((addr) <= U32_C(DDR_MEM_ADDR) + U32_C(DDR_MEM_SIZE))) /* thread safety */ VOID *LOS_DmaMemAlloc(DMA_ADDR_T *dmaAddr, size_t size, size_t align, enum DmaMemType type); diff --git a/kernel/base/include/los_vm_zone.h b/kernel/base/include/los_vm_zone.h index 0292effd8a4a31023dede17f848cc92e7c3b0d70..0baba0a2d02cbd5b7411e3950e22d8897f374a31 100644 --- a/kernel/base/include/los_vm_zone.h +++ b/kernel/base/include/los_vm_zone.h @@ -40,11 +40,11 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -#define DEFINE_(X) X##U -#define DEFINE(X) DEFINE_(X) +#define _U32_C(X) X##U +#define U32_C(X) _U32_C(X) -#define KERNEL_VMM_BASE DEFINE(KERNEL_VADDR_BASE) -#define KERNEL_VMM_SIZE DEFINE(KERNEL_VADDR_SIZE) +#define KERNEL_VMM_BASE U32_C(KERNEL_VADDR_BASE) +#define KERNEL_VMM_SIZE U32_C(KERNEL_VADDR_SIZE) #define KERNEL_ASPACE_BASE KERNEL_VMM_BASE #define KERNEL_ASPACE_SIZE KERNEL_VMM_SIZE @@ -57,11 +57,11 @@ extern "C" { #define VMALLOC_SIZE 0x08000000 #define PERIPH_DEVICE_BASE (VMALLOC_START + VMALLOC_SIZE) -#define PERIPH_DEVICE_SIZE PERIPH_PMM_SIZE +#define PERIPH_DEVICE_SIZE U32_C(PERIPH_PMM_SIZE) #define PERIPH_CACHED_BASE (PERIPH_DEVICE_BASE + PERIPH_DEVICE_SIZE) -#define PERIPH_CACHED_SIZE PERIPH_PMM_SIZE +#define PERIPH_CACHED_SIZE U32_C(PERIPH_PMM_SIZE) #define PERIPH_UNCACHED_BASE (PERIPH_CACHED_BASE + PERIPH_CACHED_SIZE) -#define PERIPH_UNCACHED_SIZE PERIPH_PMM_SIZE +#define PERIPH_UNCACHED_SIZE U32_C(PERIPH_PMM_SIZE) #define IO_DEVICE_ADDR(paddr) (paddr - PERIPH_PMM_BASE + PERIPH_DEVICE_BASE) #define IO_CACHED_ADDR(paddr) (paddr - PERIPH_PMM_BASE + PERIPH_CACHED_BASE) diff --git a/kernel/base/misc/kill_shellcmd.c b/kernel/base/misc/kill_shellcmd.c index 96b3d7e044c0947539034f10ce7fe6117f565c0a..c1a0231aff916f60af624fcaf857cabb634efb25 100644 --- a/kernel/base/misc/kill_shellcmd.c +++ b/kernel/base/misc/kill_shellcmd.c @@ -35,7 +35,14 @@ #include "los_printf.h" #include "los_task_pri.h" #include "los_process_pri.h" + +#ifdef LOSCFG_BASE_CORE_HILOG #include "log.h" +#else +#define HILOG_INFO(type, fmt, ...) PRINT_INFO(fmt, __VA_ARGS__) +#define HILOG_ERROR(type, fmt, ...) PRINT_ERR(fmt, __VA_ARGS__) +#endif + #ifdef LOSCFG_SHELL #include "shcmd.h" #include "shell.h" diff --git a/kernel/common/los_config.c b/kernel/common/los_config.c index 368dd63140037b135ea15c8cedcfbd9446f78414..a9b78390700d1942893ed2aff46b59146b284cf8 100644 --- a/kernel/common/los_config.c +++ b/kernel/common/los_config.c @@ -132,6 +132,11 @@ extern "C" { extern UINT32 OsSystemInit(VOID); extern VOID SystemInit(VOID); +VOID __attribute__((weak)) SystemInit(VOID) +{ + PRINT_WARN("Function not implemented. Using weak reference stub\n"); +} + LITE_OS_SEC_TEXT_INIT VOID osRegister(VOID) { g_sysClock = OS_SYS_CLOCK; @@ -205,7 +210,17 @@ LITE_OS_SEC_TEXT_INIT STATIC VOID OsDriverHiEventInit(VOID) extern void configure (void); LITE_OS_SEC_TEXT_INIT STATIC INT32 OsBsdInit(VOID) { + /* + * WORKAROUND: Inside configure(), nexus_init() function calls + * HiSi-specific, library procedure - machine_resource_init(). + * The latter one is defined in libhi35xx_bsp.a which is only + * available for Hi3516 and Hi3518. + * Temporarily ifdef configure until this routine is implemented + * by other platforms. + */ +#if defined(LOSCFG_PLATFORM_HI3516DV300) || defined(LOSCFG_PLATFORM_HI3518EV300) configure(); +#endif mi_startup(SI_SUB_ARCH_INIT); return LOS_OK; } diff --git a/kernel/common/los_rootfs.c b/kernel/common/los_rootfs.c index 8add614e8896251b061a1fea16f1d2dfbb6ca562..8210ad64d4315d8eab36d202c981012ecaa3b312 100644 --- a/kernel/common/los_rootfs.c +++ b/kernel/common/los_rootfs.c @@ -232,6 +232,17 @@ STATIC INT32 GetArgs(CHAR **args) } #endif +#ifdef LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7 + /* + * TODO: Implement method of fetching bootargs for + * Qemu ARM virtual platform. If used without + * bootloader it will pass DTB by default. + */ + (void)ret; + PRINT_ERR("Fetching bootargs unimplemented.\n"); + goto ERROUT; +#endif + for (i = 0; i < COMMAND_LINE_SIZE; i += len + 1) { len = strlen(cmdLine + i); tmp = strstr(cmdLine + i, bootargName); diff --git a/kernel/user/src/los_user_init.c b/kernel/user/src/los_user_init.c index e1bb9cfd8e4aa67e60858832282f93c356970114..d8434323dcd4b92ea186594042e19ca13eb6b6a7 100644 --- a/kernel/user/src/los_user_init.c +++ b/kernel/user/src/los_user_init.c @@ -30,13 +30,13 @@ */ #include "los_user_init.h" + +#ifdef LOSCFG_KERNEL_DYNLOAD #include "los_syscall.h" #define SYS_CALL_VALUE 0x900001 -#ifdef LOSCFG_KERNEL_DYNLOAD LITE_USER_SEC_RODATA STATIC CHAR *g_initPath = "/bin/init"; -#endif LITE_USER_SEC_TEXT STATIC UINT32 sys_call3(UINT32 nbr, UINT32 parm1, UINT32 parm2, UINT32 parm3) { @@ -55,6 +55,7 @@ LITE_USER_SEC_TEXT STATIC UINT32 sys_call3(UINT32 nbr, UINT32 parm1, UINT32 parm return reg0; } +#endif LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) { diff --git a/platform/Kconfig b/platform/Kconfig index 2b34a8dcd12cb170a67dceb873b04602bfe1fd20..db1af3f932794b2acbdcc8e9fd9dd69cd0d972b7 100644 --- a/platform/Kconfig +++ b/platform/Kconfig @@ -2,6 +2,7 @@ config PLATFORM string default "hi3516dv300" if PLATFORM_HI3516DV300 default "hi3518ev300" if PLATFORM_HI3518EV300 + default "virt" if PLATFORM_QEMU_ARM_VIRT_CA7 choice prompt "Board" @@ -10,6 +11,8 @@ choice IPC has several chips: hi3516dv300 hi3518ev300 + Qemu ARM Virt variants (based on different CPU types): + qemu_arm_virt_ca7 config PLATFORM_HI3516DV300 bool "hi3516dv300" @@ -19,6 +22,12 @@ config PLATFORM_HI3518EV300 bool "hi3518ev300" select ARCH_CORTEX_A7 +config PLATFORM_QEMU_ARM_VIRT_CA7 + bool "qemu_arm_virt_ca7" + select ARCH_CORTEX_A7 + help + QEMU ARM Virtual Platform using Cortex-A7 CPU. + endchoice config TEE_ENABLE @@ -47,3 +56,10 @@ config PLATFORM_BSP_GIC_V3 General Interrupt Controller version 3. endchoice + +config HRTIMER_ENABLE + bool "HR TIMER enable" + default y + help + Enable High-resolution timer support + diff --git a/platform/Makefile b/platform/Makefile index e7ced6bb81f54e57e9984813a9309c66922e31b7..34ab7750bad97f8315148d8694bdcc4bafbf5df2 100644 --- a/platform/Makefile +++ b/platform/Makefile @@ -33,19 +33,28 @@ MODULE_NAME := bsp LOCAL_SRCS = $(wildcard $(HWI_SRC)/*.c) \ $(wildcard $(TIMER_SRC)/*.c) \ - $(wildcard $(HRTIMER_SRC)/*.c) \ $(wildcard $(UART_SRC)/*.c) \ $(wildcard ./main.c) +ifeq ($(LOSCFG_HRTIMER_ENABLE), y) +LOCAL_SRCS += $(wildcard $(HRTIMER_SRC)/*.c) +endif + LOCAL_INCLUDE += -I $(LITEOSTOPDIR)/compat/posix/src \ -I $(LITEOSTOPDIR)/bsd/dev/random -ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y) +MAIN_PLATFORMS := $(LOSCFG_PLATFORM_HI3518EV300) \ + $(LOSCFG_PLATFORM_HI3516DV300) \ + $(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7) +ifeq ($(findstring y, $(MAIN_PLATFORMS)), y) LOCAL_SRCS += $(wildcard ../kernel/common/*.c) LOCAL_SRCS := $(filter-out ../kernel/common/los_rootfs.c, $(LOCAL_SRCS)) ifneq ($(LOSCFG_FS_VFS), y) LOCAL_SRCS := $(filter-out ../kernel/common/console.c ../kernel/common/virtual_serial.c, $(LOCAL_SRCS)) endif +ifneq ($(LOSCFG_BASE_CORE_HILOG), y) +LOCAL_SRCS := $(filter-out ../kernel/common/los_hilog.c, $(LOCAL_SRCS)) +endif else LOCAL_SRCS += $(wildcard ../kernel/common/los_config.c) LOCAL_SRCS += $(wildcard ../kernel/common/los_printf.c) diff --git a/platform/bsp.mk b/platform/bsp.mk index 7714dbfa9486c17e8381b87b74a4c1b568a2cb80..9deee827301fb549693b17e91cfd7e7ebdac4fbe 100644 --- a/platform/bsp.mk +++ b/platform/bsp.mk @@ -56,11 +56,19 @@ else ifeq ($(LOSCFG_PLATFORM_HI3518EV300), y) USB_TYPE := usb3.0_hi3518ev300 LITEOS_CMACRO_TEST += -DTEST3518EV300 +########################## Qemu ARM Virt Options############################## +else ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y) + HWI_TYPE := arm/interrupt/gic + TIMER_TYPE := arm/timer/arm_generic + UART_TYPE := amba_pl011 + endif +ifeq ($(LOSCFG_HRTIMER_ENABLE), y) +HRTIMER_SRC := hw/$(HRTIMER_TYPE) +endif HWI_SRC := hw/$(HWI_TYPE) TIMER_SRC := hw/$(TIMER_TYPE) -HRTIMER_SRC := hw/$(HRTIMER_TYPE) NET_SRC := net/$(NET_TYPE) UART_SRC := uart/$(UART_TYPE) USB_SRC := usb/$(USB_TYPE) @@ -69,22 +77,26 @@ LITEOS_BASELIB += -lbsp LITEOS_PLATFORM := $(subst $\",,$(LOSCFG_PLATFORM)) -PLATFORM_BSP_HISI_BASE := $(LITEOSTOPDIR)/platform +PLATFORM_BSP_BASE := $(LITEOSTOPDIR)/platform -PLATFORM_INCLUDE := -I $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board/include \ - -I $(PLATFORM_BSP_HISI_BASE)/../kernel/common \ - -I $(PLATFORM_BSP_HISI_BASE)/../../../drivers/liteos/platform/pm \ - -I $(PLATFORM_BSP_HISI_BASE)/hw/include \ - -I $(PLATFORM_BSP_HISI_BASE)/include \ - -I $(PLATFORM_BSP_HISI_BASE)/$(UART_SRC) +PLATFORM_INCLUDE := -I $(PLATFORM_BSP_BASE)/../kernel/common \ + -I $(PLATFORM_BSP_BASE)/../../../drivers/liteos/platform/pm \ + -I $(PLATFORM_BSP_BASE)/hw/include \ + -I $(PLATFORM_BSP_BASE)/include \ + -I $(PLATFORM_BSP_BASE)/$(UART_SRC) ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y) + PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board/include PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board/include/hisoc +else ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y) + PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../device/qemu/arm/$(LITEOS_PLATFORM)/config/board/include + # TODO: remove hisoc dependency in the code to avoid using hisoc here + PLATFORM_INCLUDE += -I $(LITEOSTOPDIR)/../../device/qemu/arm/$(LITEOS_PLATFORM)/config/board/include/hisoc endif # #-include $(LITEOSTOPDIR)/platform/bsp/board/$(LITEOS_PLATFORM)/board.mk # -LIB_SUBDIRS += $(PLATFORM_BSP_HISI_BASE) +LIB_SUBDIRS += $(PLATFORM_BSP_BASE) LITEOS_PLATFORM_INCLUDE += $(PLATFORM_INCLUDE) LITEOS_CXXINCLUDE += $(PLATFORM_INCLUDE) diff --git a/shell/full/src/base/show.c b/shell/full/src/base/show.c index 4b9cce00b0ed32e83710bc67d3f4c511eba86bb8..e7eeae7e1585b9d76d14e2732a2ceae57d75f346 100644 --- a/shell/full/src/base/show.c +++ b/shell/full/src/base/show.c @@ -100,7 +100,16 @@ STATIC UINT32 OsShellSourceInit(INT32 consoleId) ret = LOS_NOK; goto ERR_OUT4; } - if (consoleId == CONSOLE_TELNET) { + if (consoleId == CONSOLE_TELNET +#if !defined(LOSCFG_PLATFORM_ROOTFS) + /* + * In case of ROOTFS disabled but + * serial console enabled, it is required + * to create Shell task in kernel for it. + */ + || consoleId == CONSOLE_SERIAL +#endif + ) { ret = OsShellCreateTask(shellCB); if (ret != LOS_OK) { goto ERR_OUT4; diff --git a/syscall/Makefile b/syscall/Makefile index ef0e26a72ddb6433efb51e018e85e449e782fa8c..bb32fe6e86074083395b484b993d86765ab2ca41 100644 --- a/syscall/Makefile +++ b/syscall/Makefile @@ -33,7 +33,12 @@ MODULE_NAME := $(notdir $(shell pwd)) LOCAL_SRCS := $(wildcard *.c) +ifneq ($(LOSCFG_NET_LWIP_SACK), y) +LOCAL_SRCS := $(filter-out net_syscall.c, $(LOCAL_SRCS)) +endif + LOCAL_INCLUDE := -I $(LITEOSTOPDIR)/kernel/base/include \ + -I $(LITEOSTOPDIR)/kernel/extended/dynload/include \ -I $(LITEOSTOPDIR)/fs/include \ -I $(LITEOSTOPDIR)/compat/posix/include \ -I $(LITEOSTOPDIR)/bsd/compat/linuxkpi/include \ diff --git a/syscall/los_syscall.c b/syscall/los_syscall.c index 136c2ef0975ecb7a79a772e0b8ce8c8d5ac09497..04bd37848e1011ddb2599869b99b9cd477ed4fd3 100644 --- a/syscall/los_syscall.c +++ b/syscall/los_syscall.c @@ -30,6 +30,12 @@ */ #define _GNU_SOURCE +#include "menuconfig.h" +#ifdef LOSCFG_FS_VFS +#include "fs/fs.h" +#include "fs/file.h" +#endif +#include "los_signal.h" #include "los_syscall.h" #include "los_task_pri.h" #include "los_process_pri.h" @@ -40,10 +46,6 @@ #include "mqueue.h" #include "los_futex_pri.h" #include "sys/times.h" -#ifdef LOSCFG_FS_VFS -#include "fs/fs.h" -#include "fs/file.h" -#endif #include "dirent.h" #include "fcntl.h" #include "unistd.h" diff --git a/syscall/net_syscall.c b/syscall/net_syscall.c index f1ac24899e83dbb79d38f09453f2d81fab6495f7..da948df5381472164610237c8d8524546fdf0f5a 100644 --- a/syscall/net_syscall.c +++ b/syscall/net_syscall.c @@ -29,7 +29,6 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "los_syscall.h" #include "los_process_pri.h" #include "lwip/sockets.h" #include diff --git a/syscall/time_syscall.c b/syscall/time_syscall.c index 3a3502de3a17bfbe62b9635540568e6e543a7f59..ab1c42782a9677590129705576408358064bfbce 100644 --- a/syscall/time_syscall.c +++ b/syscall/time_syscall.c @@ -36,6 +36,7 @@ #include "time.h" #include "user_copy.h" #include "sys/times.h" +#include "los_signal.h" #include "los_memory.h" #include "los_strncpy_from_user.h" diff --git a/tools/build/config/debug/hi3516dv300_clang.config b/tools/build/config/debug/hi3516dv300_clang.config index a34f516f6f887f5105eeb0dbc753597a8172d00e..111ba398c1d86a10fc477f6c058efa8cb88321fc 100644 --- a/tools/build/config/debug/hi3516dv300_clang.config +++ b/tools/build/config/debug/hi3516dv300_clang.config @@ -15,8 +15,10 @@ LOSCFG_COMPILER_CLANG_LLVM=y LOSCFG_PLATFORM="hi3516dv300" LOSCFG_PLATFORM_HI3516DV300=y # LOSCFG_PLATFORM_HI3518EV300 is not set +# LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7 is not set # LOSCFG_TEE_ENABLE is not set LOSCFG_PLATFORM_BSP_GIC_V2=y +LOSCFG_HRTIMER_ENABLE=y LOSCFG_ARCH_ARM=y LOSCFG_ARCH_ARM_AARCH32=y LOSCFG_ARCH_ARM_V7A=y diff --git a/tools/build/config/debug/hi3518ev300_clang.config b/tools/build/config/debug/hi3518ev300_clang.config index 8a4d6ebed6bec1659bb9f1cdf3bac3bca1f4b7d9..339674a91d8eccdfe8a7102917b14f4ce83a3aa7 100644 --- a/tools/build/config/debug/hi3518ev300_clang.config +++ b/tools/build/config/debug/hi3518ev300_clang.config @@ -15,7 +15,9 @@ LOSCFG_COMPILER_CLANG_LLVM=y LOSCFG_PLATFORM="hi3518ev300" # LOSCFG_PLATFORM_HI3516DV300 is not set LOSCFG_PLATFORM_HI3518EV300=y +# LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7 is not set LOSCFG_PLATFORM_BSP_GIC_V2=y +LOSCFG_HRTIMER_ENABLE=y LOSCFG_ARCH_ARM=y LOSCFG_ARCH_ARM_AARCH32=y LOSCFG_ARCH_ARM_V7A=y diff --git a/tools/build/config/debug/qemu_arm_virt_ca7_clang.config b/tools/build/config/debug/qemu_arm_virt_ca7_clang.config new file mode 100644 index 0000000000000000000000000000000000000000..b56d817ada4d849efd9a1988d3e19b9a7b2797ea --- /dev/null +++ b/tools/build/config/debug/qemu_arm_virt_ca7_clang.config @@ -0,0 +1,147 @@ +# +# Automatically generated file; DO NOT EDIT. +# Huawei LiteOS Configuration +# + +# +# Compiler +# +# LOSCFG_COMPILER_HIMIX_32 is not set +LOSCFG_COMPILER_CLANG_LLVM=y + +# +# Platform +# +LOSCFG_PLATFORM="virt" +# LOSCFG_PLATFORM_HI3516DV300 is not set +# LOSCFG_PLATFORM_HI3518EV300 is not set +LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7=y +LOSCFG_PLATFORM_BSP_GIC_V2=y +# LOSCFG_HRTIMER_ENABLE is not set +LOSCFG_ARCH_ARM=y +LOSCFG_ARCH_ARM_AARCH32=y +LOSCFG_ARCH_ARM_V7A=y +LOSCFG_ARCH_ARM_VER="armv7-a" +LOSCFG_ARCH_FPU_VFP_V4=y +LOSCFG_ARCH_FPU_VFP_D32=y +LOSCFG_ARCH_FPU_VFP_NEON=y +LOSCFG_ARCH_FPU="neon-vfpv4" +LOSCFG_ARCH_CORTEX_A7=y +LOSCFG_ARCH_CPU="cortex-a7" + +# +# Extra Configurations +# +# LOSCFG_ARCH_FPU_DISABLE is not set +LOSCFG_IRQ_USE_STANDALONE_STACK=y + +# +# Kernel +# +# LOSCFG_KERNEL_SMP is not set +LOSCFG_KERNEL_EXTKERNEL=y +# LOSCFG_KERNEL_CPPSUPPORT is not set +LOSCFG_KERNEL_CPUP=y +LOSCFG_CPUP_INCLUDE_IRQ=y +# LOSCFG_KERNEL_DYNLOAD is not set +# LOSCFG_KERNEL_VDSO is not set +# LOSCFG_KERNEL_TICKLESS is not set +# LOSCFG_KERNEL_TRACE is not set +LOSCFG_KERNEL_LITEIPC=y +LOSCFG_KERNEL_PIPE=y +# LOSCFG_BASE_CORE_HILOG is not set + +# +# Lib +# +LOSCFG_LIB_LIBC=y +LOSCFG_LIB_ZLIB=y + +# +# Compat +# +LOSCFG_COMPAT_POSIX=y +LOSCFG_COMPAT_BSD=y + +# +# FileSystem +# +LOSCFG_FS_VFS=y +# LOSCFG_FS_VFS_BLOCK_DEVICE is not set +LOSCFG_FILE_MODE=y +# LOSCFG_FS_FAT is not set +LOSCFG_FS_RAMFS=y +LOSCFG_FS_PROC=y +# LOSCFG_FS_JFFS is not set + +# +# Net +# +# LOSCFG_NET_LWIP_SACK is not set + +# +# Debug +# +# LOSCFG_COMPILE_DEBUG is not set +# LOSCFG_PLATFORM_ADAPT is not set +# LOSCFG_ENABLE_OOM_LOOP_TASK is not set +# LOSCFG_ENABLE_MAGICKEY is not set +# LOSCFG_THUMB is not set +LOSCFG_DEBUG_VERSION=y +# LOSCFG_DEBUG_KERNEL is not set +LOSCFG_SHELL=y + +# +# Functionality of Shell +# +# LOSCFG_SHELL_LK is not set +# LOSCFG_SHELL_EXCINFO is not set +# LOSCFG_EXC_INTERACTION is not set +# LOSCFG_USER_INIT_DEBUG is not set +# LOSCFG_SHELL_CMD_DEBUG is not set +# LOSCFG_MEM_DEBUG is not set +# LOSCFG_NULL_ADDRESS_PROTECT is not set +LOSCFG_DRIVERS_HDF_PLATFORM_UART=y +# LOSCFG_PLATFORM_UART_WITHOUT_VFS is not set +# LOSCFG_PLATFORM_NO_UART is not set + +# +# Driver +# +LOSCFG_DRIVERS=y +# LOSCFG_DRIVERS_USB is not set +LOSCFG_DRIVERS_HDF=y +LOSCFG_DRIVERS_HDF_PLATFORM=y +# LOSCFG_DRIVERS_HDF_PLATFORM_I2C is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_SPI is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_GPIO is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_WATCHDOG is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_SDIO is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_RTC is not set +# LOSCFG_DRIVERS_HDF_PLATFORM_HISI_SDK is not set +# LOSCFG_DRIVERS_HDF_WIFI is not set +# LOSCFG_DRIVERS_HDF_INPUT is not set +# LOSCFG_DRIVERS_HDF_LCD is not set +# LOSCFG_DRIVERS_HDF_USB is not set +LOSCFG_DRIVERS_MEM=y +# LOSCFG_DRIVERS_MMC is not set +# LOSCFG_DRIVERS_MTD is not set +# LOSCFG_DRIVERS_RANDOM is not set +# LOSCFG_DRIVERS_VIDEO is not set +# LOSCFG_DRIVERS_HIEVENT is not set + +# +# Security +# +LOSCFG_SECURITY=y +LOSCFG_SECURITY_CAPABILITY=y +LOSCFG_SECURITY_VID=y +# LOSCFG_SECURITY_BOOT is not set + +# +# Stack Smashing Protector (SSP) Compiler Feature +# +# LOSCFG_CC_NO_STACKPROTECTOR is not set +# LOSCFG_CC_STACKPROTECTOR is not set +# LOSCFG_CC_STACKPROTECTOR_STRONG is not set +LOSCFG_CC_STACKPROTECTOR_ALL=y diff --git a/tools/build/config/hi3516dv300_clang_release.config b/tools/build/config/hi3516dv300_clang_release.config index 5fb2798a987ba147a098c56e52ef717bdaded421..4476fd707de90b56369c44afb4445673b0a938a9 100644 --- a/tools/build/config/hi3516dv300_clang_release.config +++ b/tools/build/config/hi3516dv300_clang_release.config @@ -15,8 +15,10 @@ LOSCFG_COMPILER_CLANG_LLVM=y LOSCFG_PLATFORM="hi3516dv300" LOSCFG_PLATFORM_HI3516DV300=y # LOSCFG_PLATFORM_HI3518EV300 is not set +# LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7 is not set # LOSCFG_TEE_ENABLE is not set LOSCFG_PLATFORM_BSP_GIC_V2=y +LOSCFG_HRTIMER_ENABLE=y LOSCFG_ARCH_ARM=y LOSCFG_ARCH_ARM_AARCH32=y LOSCFG_ARCH_ARM_V7A=y diff --git a/tools/build/config/hi3518ev300_clang_release.config b/tools/build/config/hi3518ev300_clang_release.config index 982d0f53bdc2d8bd4536096710fd6be7269c7453..0d2da7ee1782723b3d0ba5372a5cc30f6a5f17d9 100644 --- a/tools/build/config/hi3518ev300_clang_release.config +++ b/tools/build/config/hi3518ev300_clang_release.config @@ -15,7 +15,9 @@ LOSCFG_COMPILER_CLANG_LLVM=y LOSCFG_PLATFORM="hi3518ev300" # LOSCFG_PLATFORM_HI3516DV300 is not set LOSCFG_PLATFORM_HI3518EV300=y +# LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7 is not set LOSCFG_PLATFORM_BSP_GIC_V2=y +LOSCFG_HRTIMER_ENABLE=y LOSCFG_ARCH_ARM=y LOSCFG_ARCH_ARM_AARCH32=y LOSCFG_ARCH_ARM_V7A=y diff --git a/tools/build/mk/los_config.mk b/tools/build/mk/los_config.mk index ff273f2cf1b37d8506709b1c814eac726e58dee2..5839d3e5403f3a5d6cfb186634b1400b6a1f4ab5 100644 --- a/tools/build/mk/los_config.mk +++ b/tools/build/mk/los_config.mk @@ -163,8 +163,10 @@ LITEOS_BASELIB += -lbase LIB_SUBDIRS += kernel/base LITEOS_KERNEL_INCLUDE := -I $(LITEOSTOPDIR)/kernel/include +ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y) LITEOS_BASELIB += -lhi35xx_bsp LIB_SUBDIRS += $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/$(LITEOS_PLATFORM)/config/board/ +endif ifeq ($(LOSCFG_KERNEL_CPUP), y) LITEOS_BASELIB += -lcpup @@ -358,7 +360,11 @@ endif #################################### Net Option End#################################### LITEOS_DRIVERS_BASE_PATH := $(LITEOSTOPDIR)/../../drivers/liteos +ifeq ($(findstring y, $(LOSCFG_PLATFORM_HI3518EV300)$(LOSCFG_PLATFORM_HI3516DV300)), y) LITEOS_VENDOR_DRIVERS_BASE_PATH := $(LITEOSTOPDIR)/../../vendor/hisi/hi35xx/platform +else ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y) +LITEOS_VENDOR_DRIVERS_BASE_PATH := $(LITEOSTOPDIR)/../../device/qemu/arm/platform +endif ################################## Driver Option Begin ################################# ifeq ($(LOSCFG_DRIVERS_HDF), y) include $(LITEOSTOPDIR)/../../drivers/hdf/lite/hdf_lite.mk @@ -457,7 +463,10 @@ ifeq ($(LOSCFG_COMPILE_DEBUG), y) LITEOS_COPTS_OPTION = -g -gdwarf-2 else ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) - LITEOS_COPTS_OPTMIZE = -Oz -flto + # WORKAROUND: Disable LTO to avoid undefined __stack_chk_guard + # problem. "externally_visible" attribute could be + # a fix for that but it is not known to our LLVM. + LITEOS_COPTS_OPTMIZE = -Oz #-flto else LITEOS_COPTS_OPTMIZE = -O2 endif diff --git a/tools/build/mk/module.mk b/tools/build/mk/module.mk index 7c9c015958d8f3a5dca8109b4929cf8254c754c9..e891656869293e1fe61dd247ce1ce31009c49b03 100644 --- a/tools/build/mk/module.mk +++ b/tools/build/mk/module.mk @@ -81,7 +81,7 @@ all : $(LIB) $(LOCAL_COBJS): $(OBJOUT)/%.o: %.c $(HIDE)$(OBJ_MKDIR) - $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) -c $< -o $@ + $(HIDE)$(CC) $(LITEOS_CFLAGS) $(LOCAL_INCLUDE) $(LOCAL_FLAGS) $(LOCAL_CFLAGS) -c $< -o $@ $(LOCAL_CPPOBJS): $(OBJOUT)/%.o: %.cpp $(HIDE)$(OBJ_MKDIR)