forked from xuos/xiuos
1、add 'menuconfig' function for XiZi_AIoT with imx6q-sabrelite board;2、add compilation function for AIoT system with imx6q-sabrelite board;3、add newlib base files;4、add startup files and irq function for imx6q-sabrelite
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
source "$KERNEL_DIR/services/drivers/Kconfig"
|
||||
source "$KERNEL_DIR/services/fs/Kconfig"
|
||||
source "$KERNEL_DIR/services/lib/Kconfig"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
SRC_DIR := boards drivers lib
|
||||
|
||||
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
SRC_DIR := $(BOARD)
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# XiZi_AIoT Project Configuration
|
||||
#
|
||||
CONFIG_BOARD_IMX6Q_SABRELITE_EVB=y
|
||||
CONFIG_ARCH_ARM=y
|
||||
|
||||
#
|
||||
# imx6q sabrelite feature
|
||||
#
|
||||
|
||||
#
|
||||
# Lib
|
||||
#
|
||||
CONFIG_LIB=y
|
||||
CONFIG_LIB_POSIX=y
|
||||
CONFIG_LIB_NEWLIB=y
|
||||
# CONFIG_LIB_MUSLLIB is not set
|
||||
@@ -0,0 +1,26 @@
|
||||
mainmenu "XiZi_AIoT Project Configuration"
|
||||
|
||||
config BSP_DIR
|
||||
string
|
||||
option env="BSP_ROOT"
|
||||
default "."
|
||||
|
||||
config KERNEL_DIR
|
||||
string
|
||||
option env="KERNEL_ROOT"
|
||||
default "../.."
|
||||
|
||||
config BOARD_IMX6Q_SABRELITE_EVB
|
||||
bool
|
||||
select ARCH_ARM
|
||||
default y
|
||||
|
||||
source "$KERNEL_DIR/hardkernel/arch/Kconfig"
|
||||
|
||||
menu "imx6q sabrelite feature"
|
||||
source "$BSP_DIR/third_party_driver/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
|
||||
source "$KERNEL_DIR/Kconfig"
|
||||
@@ -0,0 +1,8 @@
|
||||
SRC_FILES := board.c
|
||||
|
||||
SRC_DIR := third_party_driver
|
||||
|
||||
|
||||
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,4 @@
|
||||
void start_kernel()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef __BOARD_H__
|
||||
#define __BOARD_H__
|
||||
|
||||
#define PLATFORM_MAX_IRQ_NR 160 // imx6q max support 160 irq
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,23 @@
|
||||
export CROSS_COMPILE ?=/usr/bin/arm-none-eabi-
|
||||
export DEVICE = -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -ftree-vectorize -ffast-math -mfloat-abi=softfp
|
||||
export CFLAGS := $(DEVICE) -Wall -O0 -g -gdwarf-2
|
||||
export AFLAGS := -c $(DEVICE) -x assembler-with-cpp -D__ASSEMBLY__ -gdwarf-2
|
||||
export LFLAGS := $(DEVICE) -Wl,--gc-sections,-Map=XiZi-imx6q-sabrelite.map,-cref,-u,ExceptionVectors -T $(BSP_ROOT)/link.lds
|
||||
export CXXFLAGS :=
|
||||
|
||||
ifeq ($(CONFIG_LIB_MUSLLIB), y)
|
||||
export LFLAGS += -nostdlib -nostdinc -fno-builtin -nodefaultlibs
|
||||
export LIBCC := -lgcc
|
||||
export LINK_MUSLLIB := $(KERNEL_ROOT)/lib/musllib/libmusl.a
|
||||
endif
|
||||
|
||||
# ifeq ($(CONFIG_RESOURCES_LWIP), y)
|
||||
# export LINK_LWIP := $(KERNEL_ROOT)/resources/ethernet/LwIP/liblwip.a
|
||||
# endif
|
||||
|
||||
export DEFINES := -DHAVE_CCONFIG_H -DSTM32F407xx -DUSE_HAL_DRIVER -DHAVE_SIGINFO
|
||||
|
||||
export USING_NEWLIB =1
|
||||
export USING_VFS = 1
|
||||
export ARCH = arm
|
||||
export ARCH_ARMV = armv7-a
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* o Redistributions of source code must retain the above copyright notice, this list
|
||||
* of conditions and the following disclaimer.
|
||||
*
|
||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*!
|
||||
* @file asm_defines.h
|
||||
* @brief defines for startup assembly code
|
||||
*
|
||||
* @ingroup diag_util
|
||||
*/
|
||||
|
||||
#ifndef _ASM_DEFINES_H_
|
||||
#define _ASM_DEFINES_H_
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Definitions
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//! @name CPSR fields
|
||||
//@{
|
||||
#define CPSR_N (1 << 31) //!< Negative
|
||||
#define CPSR_Z (1 << 30) //!< Zero
|
||||
#define CPSR_C (1 << 29) //!< Carry
|
||||
#define CPSR_V (1 << 28) //!< Overflow
|
||||
#define CPSR_Q (1 << 27) //!< Saturation
|
||||
#define CPSR_E (1 << 9) //!< Endianness
|
||||
#define CPSR_A (1 << 8) //!< Async abort mask
|
||||
#define CPSR_I (1 << 7) //!< IRQ mask
|
||||
#define CPSR_F (1 << 6) //!< FIQ mask
|
||||
#define CPSR_T (1 << 5) //!< Thumb mode
|
||||
#define CPSR_MODE (0x1f) //!< Current processor mode
|
||||
//@}
|
||||
|
||||
//! @name Mode bits in CPSR
|
||||
//@{
|
||||
#define MODE_USR 0x10 //!< User mode
|
||||
#define MODE_FIQ 0x11 //!< FIQ mode
|
||||
#define MODE_IRQ 0x12 //!< IRQ mode
|
||||
#define MODE_SVC 0x13 //!< Supervisor mode
|
||||
#define MODE_ABT 0x17 //!< Abort exception mode
|
||||
#define MODE_UND 0x1B //!< Undefined instruction exception mode
|
||||
#define MODE_SYS 0x1F //!< System mode
|
||||
//@}
|
||||
|
||||
//! @name Interrupt enable bits in CPSR
|
||||
//@{
|
||||
#define I_BIT 0x80 //!< When I bit is set, IRQ is disabled
|
||||
#define F_BIT 0x40 //!< When F bit is set, FIQ is disabled
|
||||
//@}
|
||||
|
||||
//! @name Stack sizes
|
||||
//@{
|
||||
|
||||
//! @brief Size of stacks for exceptions.
|
||||
#define EXCEPTION_STACK_SIZE 2048
|
||||
|
||||
//! @brief Supervisor mode stack size.
|
||||
//!
|
||||
//! This stack is much larger because most application code runs in
|
||||
//! Supervisor mode.
|
||||
#define SVC_STACK_SIZE 8192
|
||||
|
||||
//@}
|
||||
|
||||
#endif /*_ASM_DEFINES_H_ */
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// EOF
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* o Redistributions of source code must retain the above copyright notice, this list
|
||||
* of conditions and the following disclaimer.
|
||||
*
|
||||
* o Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef __SDK_TYPES_H__
|
||||
#define __SDK_TYPES_H__
|
||||
|
||||
//! @addtogroup sdk_common
|
||||
//! @{
|
||||
|
||||
/*!
|
||||
* @file sdk_types.h
|
||||
* @brief Basic types used throughout the SDK.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Definitions
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//! @name Alternate Boolean constants
|
||||
//@{
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
//@}
|
||||
|
||||
//! @brief
|
||||
#define NONE_CHAR (0xFF)
|
||||
|
||||
//! @brief A parameter was out of range or otherwise invalid.
|
||||
#define INVALID_PARAMETER (-1)
|
||||
|
||||
//! @name Min/max macros
|
||||
//@{
|
||||
#if !defined(MIN)
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#if !defined(MAX)
|
||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
#endif
|
||||
//@}
|
||||
|
||||
//! @brief Computes the number of elements in an array.
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
//! @brief Debug print utility.
|
||||
//!
|
||||
//! This print function will only output text when the @a DEBUG macro is defined.
|
||||
static inline void debug_printf(const char * format, ...)
|
||||
{
|
||||
#if defined(DEBUG)
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
vprintf(format, args);
|
||||
va_end(args);
|
||||
#endif
|
||||
}
|
||||
|
||||
//! @name Test results
|
||||
typedef enum _test_return
|
||||
{
|
||||
TEST_NOT_STARTED = -3, // present in the menu, but not run
|
||||
TEST_NOT_IMPLEMENTED = -2, // present in the menu, but not functional
|
||||
TEST_FAILED = -1,
|
||||
TEST_PASSED = 0,
|
||||
TEST_BYPASSED = 2, // user elected to exit the test before it was run
|
||||
TEST_NOT_PRESENT = 3, // not present in the menu.
|
||||
TEST_CONTINUE = 4 // proceed with the test. opposite of TEST_BYPASSED
|
||||
} test_return_t;
|
||||
|
||||
//! @name Return codes
|
||||
//@{
|
||||
#define SUCCESS (0)
|
||||
#define FAIL (1)
|
||||
#define ERROR_GENERIC (-1)
|
||||
#define ERROR_OUT_OF_MEMORY (-2)
|
||||
//@}
|
||||
|
||||
//! @brief Possible types of displays.
|
||||
enum display_type {
|
||||
DISP_DEV_NULL = 0,
|
||||
DISP_DEV_TFTLCD,
|
||||
DISP_DEV_LVDS,
|
||||
DISP_DEV_VGA,
|
||||
DISP_DEV_HDMI,
|
||||
DISP_DEV_TV,
|
||||
DISP_DEV_MIPI,
|
||||
};
|
||||
|
||||
//! @}
|
||||
|
||||
#endif // __SDK_TYPES_H__
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// EOF
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -0,0 +1,96 @@
|
||||
|
||||
|
||||
STACK_SIZE = 4096;
|
||||
|
||||
OUTPUT_ARCH(arm)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x80100000;
|
||||
|
||||
__text_start = .;
|
||||
.text :
|
||||
{
|
||||
*(.vectors)
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
|
||||
/* section information for finsh shell */
|
||||
. = ALIGN(4);
|
||||
__isrtbl_idx_start = .;
|
||||
KEEP(*(.isrtbl.idx))
|
||||
__isrtbl_start = .;
|
||||
KEEP(*(.isrtbl))
|
||||
__isrtbl_end = .;
|
||||
. = ALIGN(4);
|
||||
}
|
||||
__text_end = .;
|
||||
|
||||
__rodata_start = .;
|
||||
.rodata : { *(.rodata) *(.rodata.*) }
|
||||
__rodata_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
.ctors :
|
||||
{
|
||||
PROVIDE(__ctors_start__ = .);
|
||||
KEEP(*(SORT(.ctors.*)))
|
||||
KEEP(*(.ctors))
|
||||
PROVIDE(__ctors_end__ = .);
|
||||
}
|
||||
|
||||
.dtors :
|
||||
{
|
||||
PROVIDE(__dtors_start__ = .);
|
||||
KEEP(*(SORT(.dtors.*)))
|
||||
KEEP(*(.dtors))
|
||||
PROVIDE(__dtors_end__ = .);
|
||||
}
|
||||
|
||||
. = ALIGN(16 * 1024);
|
||||
.l1_page_table :
|
||||
{
|
||||
__l1_page_table_start = .;
|
||||
. += 16K;
|
||||
}
|
||||
|
||||
. = ALIGN(8);
|
||||
__data_start = .;
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
}
|
||||
__data_end = .;
|
||||
|
||||
. = ALIGN(8);
|
||||
__bss_start = .;
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
}
|
||||
. = ALIGN(4);
|
||||
__bss_end = .;
|
||||
|
||||
.stacks :
|
||||
{
|
||||
__stacks_start = .;
|
||||
. += STACK_SIZE;
|
||||
__stacks_end = .;
|
||||
stack_top = .;
|
||||
}
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
_end = .;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
SRC_DIR :=
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef XS_CONFIG_H__
|
||||
#define XS_CONFIG_H__
|
||||
|
||||
/* Automatically generated file; DO NOT EDIT. */
|
||||
/* XiZi_AIoT Project Configuration */
|
||||
|
||||
#define BOARD_IMX6Q_SABRELITE_EVB
|
||||
#define ARCH_ARM
|
||||
|
||||
/* imx6q sabrelite feature */
|
||||
|
||||
/* Lib */
|
||||
|
||||
#define LIB
|
||||
#define LIB_POSIX
|
||||
#define LIB_NEWLIB
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
SRC_DIR :=
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,23 @@
|
||||
menu "Lib"
|
||||
|
||||
menuconfig LIB
|
||||
bool "Enable libc APIs from toolchain"
|
||||
default y
|
||||
|
||||
if LIB
|
||||
config LIB_POSIX
|
||||
bool "Enable POSIX layer for poll/select, stdin etc"
|
||||
default y
|
||||
choice
|
||||
prompt "select libc"
|
||||
default LIB_NEWLIB
|
||||
|
||||
config LIB_NEWLIB
|
||||
bool "use newlib as libc realization."
|
||||
|
||||
config LIB_MUSLLIB
|
||||
bool "use musllib as libc realization."
|
||||
endchoice
|
||||
endif
|
||||
|
||||
endmenu
|
||||
@@ -0,0 +1,14 @@
|
||||
SRC_DIR :=
|
||||
MUSL_DIR :=
|
||||
|
||||
ifeq ($(CONFIG_LIB_NEWLIB),y)
|
||||
SRC_DIR += newlib
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_LIB_MUSLLIB), y)
|
||||
# SRC_DIR += musllib
|
||||
# MUSL_DIR += musllib
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
menu LIB_NEWLIB
|
||||
bool "Enable Newlib "
|
||||
default y
|
||||
endmenu
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
SRC_FILES := fs_syscalls.c time_syscalls.c mem_syscalls.c task_syscalls.c
|
||||
|
||||
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file fs_syscalls.c
|
||||
* @brief support newlib file system
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2020-09-23
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: fs_syscalls.c
|
||||
Description: support newlib file system
|
||||
Others: take RT-Thread v4.0.2/components/libc/compilers/newlib/syscalls.c for references
|
||||
https://github.com/RT-Thread/rt-thread/tree/v4.0.2
|
||||
History:
|
||||
1. Date: 2020-09-23
|
||||
Author: AIIT XUOS Lab
|
||||
Modification: Use file system functions
|
||||
*************************************************/
|
||||
|
||||
#include <reent.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
/* wwg debug here */
|
||||
// #include <xizi.h>
|
||||
|
||||
int _fstat_r(struct _reent *ptr, int fd, struct stat *pstat)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _link_r(struct _reent *ptr, const char *old, const char *new)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int _wait_r(struct _reent *ptr, int *status)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef FS_VFS
|
||||
|
||||
#include <iot-vfs_posix.h>
|
||||
|
||||
int _close_r(struct _reent *ptr, int fd)
|
||||
{
|
||||
return close(fd);
|
||||
}
|
||||
|
||||
int _isatty_r(struct _reent *ptr, int fd)
|
||||
{
|
||||
if (fd >=0 && fd < 3)
|
||||
return 1;
|
||||
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
_off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
|
||||
{
|
||||
return lseek(fd, pos, whence);
|
||||
}
|
||||
|
||||
int _open_r(struct _reent *ptr, const char *file, int flags, int mode)
|
||||
{
|
||||
return open(file, flags, mode);
|
||||
}
|
||||
|
||||
_ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
|
||||
{
|
||||
return read(fd, buf, nbytes);
|
||||
}
|
||||
|
||||
int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
|
||||
{
|
||||
return stat(file, pstat);
|
||||
}
|
||||
|
||||
int _unlink_r(struct _reent *ptr, const char *file)
|
||||
{
|
||||
return unlink(file);
|
||||
}
|
||||
|
||||
_ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
|
||||
{
|
||||
return write(fd, buf, nbytes);
|
||||
}
|
||||
|
||||
#else /* FS_VFS */
|
||||
|
||||
int _close_r(struct _reent *ptr, int fd)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _isatty_r(struct _reent *ptr, int fd)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
_off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _open_r(struct _reent *ptr, const char *file, int flags, int mode)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
_ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int _unlink_r(struct _reent *ptr, const char *file)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
_ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
|
||||
{
|
||||
ptr->_errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif /* FS_VFS */
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file libc.h
|
||||
* @brief using newlib need include
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2020-09-23
|
||||
*/
|
||||
|
||||
#ifndef _LIBC_H__
|
||||
#define _LIBC_H__
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file mem_syscalls.c
|
||||
* @brief support newlib memory
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2020-09-23
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: mem_syscalls.c
|
||||
Description: support newlib memory
|
||||
Others: take RT-Thread v4.0.2/components/libc/compilers/newlib/syscalls.c for references
|
||||
https://github.com/RT-Thread/rt-thread/tree/v4.0.2
|
||||
History:
|
||||
1. Date: 2020-09-23
|
||||
Author: AIIT XUOS Lab
|
||||
Modification: Use malloc, realloc, calloc and free functions
|
||||
*************************************************/
|
||||
/* wwg debug here */
|
||||
// #include <xizi.h>
|
||||
#include <errno.h>
|
||||
|
||||
void *_malloc_r (struct _reent *ptr, size_t size)
|
||||
{
|
||||
/* wwg debug here */
|
||||
// void* result = (void*)x_malloc(size);
|
||||
void* result = NULL;
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
ptr->_errno = ENOMEM;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void *_realloc_r (struct _reent *ptr, void *old, size_t newlen)
|
||||
{
|
||||
/* wwg debug here */
|
||||
// void* result = (void*)x_realloc(old, newlen);
|
||||
void* result = NULL;
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
ptr->_errno = ENOMEM;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void *_calloc_r (struct _reent *ptr, size_t size, size_t len)
|
||||
{
|
||||
/* wwg debug here */
|
||||
// void* result = (void*)x_calloc(size, len);
|
||||
void* result = NULL;
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
ptr->_errno = ENOMEM;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void _free_r (struct _reent *ptr, void *address)
|
||||
{
|
||||
/* wwg debug here */
|
||||
// x_free (address);
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2017/10/15 bernard the first version
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file stdio.c
|
||||
* @brief support newlib stdio
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2020-09-23
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: stdio.c
|
||||
Description: support newlib stdio
|
||||
Others: take RT-Thread v4.0.2/components/libc/compilers/newlib/stdio.c for references
|
||||
https://github.com/RT-Thread/rt-thread/tree/v4.0.2
|
||||
History:
|
||||
1. Date: 2020-09-23
|
||||
Author: AIIT XUOS Lab
|
||||
Modification: Use set and get console functions
|
||||
*************************************************/
|
||||
|
||||
#include <xizi.h>
|
||||
#include <device.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define STDIO_DEVICE_NAME_MAX 32
|
||||
|
||||
static FILE* std_console = NULL;
|
||||
|
||||
/**
|
||||
* This function will set system console device.
|
||||
*
|
||||
* @param device_name the name of device
|
||||
* @param mode the mode
|
||||
*
|
||||
* @return file number on success; or -1 on failure
|
||||
*/
|
||||
int LibcStdioSetConsole(const char* device_name, int mode)
|
||||
{
|
||||
FILE *fp;
|
||||
char name[STDIO_DEVICE_NAME_MAX] = {0};
|
||||
char *file_mode;
|
||||
|
||||
snprintf(name, strlen(device_name) + 6, "/dev/%s", device_name);
|
||||
name[STDIO_DEVICE_NAME_MAX - 1] = '\0';
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case O_RDWR:
|
||||
file_mode = "r+";
|
||||
break;
|
||||
|
||||
case O_WRONLY:
|
||||
file_mode = "wb";
|
||||
break;
|
||||
|
||||
default:
|
||||
file_mode = "rb";
|
||||
break;
|
||||
}
|
||||
|
||||
/* try to open file */
|
||||
fp = fopen(name, file_mode);
|
||||
if (fp)
|
||||
{
|
||||
/* set the fp buffer */
|
||||
setvbuf(fp, NULL, _IONBF, 0);
|
||||
|
||||
if (std_console)
|
||||
/* try to close console device */
|
||||
fclose(std_console);
|
||||
std_console = fp;
|
||||
|
||||
if (mode == O_RDWR)
|
||||
{
|
||||
/* set _stdin as std_console */
|
||||
_GLOBAL_REENT->_stdin = std_console;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* set NULL */
|
||||
_GLOBAL_REENT->_stdin = NULL;
|
||||
}
|
||||
|
||||
if (mode == O_RDONLY)
|
||||
{
|
||||
/* set the _stdout as NULL */
|
||||
_GLOBAL_REENT->_stdout = NULL;
|
||||
/* set the _stderr as NULL */
|
||||
_GLOBAL_REENT->_stderr = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* set the _stdout as std_console */
|
||||
_GLOBAL_REENT->_stdout = std_console;
|
||||
/* set the _stderr as std_console */
|
||||
_GLOBAL_REENT->_stderr = std_console;
|
||||
}
|
||||
/* set the __sdidinit as 1 */
|
||||
_GLOBAL_REENT->__sdidinit = 1;
|
||||
}
|
||||
|
||||
if (std_console)
|
||||
/* return the file number */
|
||||
return fileno(std_console);
|
||||
/* failure and return -1 */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will get system console device.
|
||||
*
|
||||
* @return file number on success; or -1 on failure
|
||||
*/
|
||||
int LibcStdioGetConsole(void) {
|
||||
if (std_console)
|
||||
/* return the file number */
|
||||
return fileno(std_console);
|
||||
else
|
||||
/* failure and return -1 */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will initialize the c library system.
|
||||
*
|
||||
* @return 0
|
||||
*/
|
||||
int LibcSystemInit(void)
|
||||
{
|
||||
#if defined(KERNEL_CONSOLE)
|
||||
HardwareDevType console;
|
||||
/* try to get console device */
|
||||
console = ObtainConsole();
|
||||
if (console)
|
||||
{
|
||||
#if defined(LIB_POSIX)
|
||||
/* set console device mode */
|
||||
LibcStdioSetConsole(console->dev_name, O_RDWR);
|
||||
#else
|
||||
/* set console device mode */
|
||||
LibcStdioSetConsole(console->dev_name, O_WRONLY);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file task_syscalls.c
|
||||
* @brief support newlib abort
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2020-09-23
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: task_syscalls.c
|
||||
Description: support newlib abort
|
||||
Others: take RT-Thread v4.0.2/components/libc/compilers/newlib/syscalls.c for references
|
||||
https://github.com/RT-Thread/rt-thread/tree/v4.0.2
|
||||
History:
|
||||
1. Date: 2020-09-23
|
||||
Author: AIIT XUOS Lab
|
||||
Modification: Use abort function
|
||||
*************************************************/
|
||||
/* wwg debug here */
|
||||
// #include <xizi.h>
|
||||
|
||||
void abort(void)
|
||||
{
|
||||
// KTaskDescriptorType current = GetKTaskDescriptor();
|
||||
// if (current)
|
||||
// {
|
||||
// KPrintf("Task:%-8.*s will be aborted!\n", NAME_NUM_MAX, current->task_base_info.name);
|
||||
// /* pend current task */
|
||||
// SuspendKTask(current->id.id);
|
||||
// /* schedule */
|
||||
// DO_KTASK_ASSIGN;
|
||||
// }
|
||||
|
||||
while (1);
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
#include <sys/time.h>
|
||||
// #include <xizi.h>
|
||||
// #include <bus_rtc.h>
|
||||
|
||||
// time_t time(time_t *t)
|
||||
// {
|
||||
// NULL_PARAM_CHECK(t);
|
||||
// time_t current = 0;
|
||||
|
||||
// #ifdef RESOURCES_RTC
|
||||
// struct RtcSetParam rtc_set_param;
|
||||
// rtc_set_param.rtc_set_cmd = OPER_RTC_GET_TIME;
|
||||
// rtc_set_param.time = ¤t;
|
||||
|
||||
// RtcDrvSetFunction(RTC_DRV_NAME, &rtc_set_param);
|
||||
// #endif
|
||||
|
||||
// *t = current;
|
||||
|
||||
// return current;
|
||||
// }
|
||||
|
||||
time_t time(time_t *t)
|
||||
{
|
||||
time_t current = 0;
|
||||
|
||||
*t = current;
|
||||
|
||||
return current;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# Tring to create rtcnofig.h from .config
|
||||
HEADER_STR=XS_CONFIG_H__
|
||||
|
||||
|
||||
function is_pkg_special_config()
|
||||
{
|
||||
echo -ne $1 | egrep '^PKG_|_PATH$|_VER$' >/dev/null 2>/dev/null
|
||||
}
|
||||
|
||||
function is_config()
|
||||
{
|
||||
echo -ne $1 | egrep '^XS_' >/dev/null 2>/dev/null
|
||||
}
|
||||
|
||||
function make_config_h()
|
||||
{
|
||||
local CONFIG_NAME=${1}
|
||||
|
||||
# destination file using file descriptor 8
|
||||
exec 8>${2}
|
||||
|
||||
echo -ne "#ifndef ${HEADER_STR}\n" >&8
|
||||
echo -ne "#define ${HEADER_STR}\n\n" >&8
|
||||
|
||||
EMPTY_LINE='true'
|
||||
|
||||
while read LN
|
||||
do
|
||||
LINE=`echo $LN | sed 's/[ \t\r\n]*$//g'`
|
||||
|
||||
if [ -z "$LINE" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ '#' = ${LINE:0:1} ]; then
|
||||
if [ ${#LINE} -eq 1 ]; then
|
||||
if $EMPTY_LINE; then
|
||||
continue
|
||||
fi
|
||||
echo >&8
|
||||
EMPTY_LINE='true'
|
||||
continue
|
||||
fi
|
||||
|
||||
if echo -ne "$LINE" | egrep '^# CONFIG_' >/dev/null 2>/dev/null; then
|
||||
LINE=`printf ' %s' ${LINE:9}`
|
||||
else
|
||||
LINE=${LINE:1}
|
||||
echo -ne "/* ${LINE} */\n" >&8
|
||||
fi
|
||||
|
||||
EMPTY_LINE='false'
|
||||
else
|
||||
EMPTY_LINE='false'
|
||||
|
||||
OLD_IFS="$IFS"
|
||||
IFS='='
|
||||
SETTINGS=($LINE)
|
||||
IFS="$OLD_IFS"
|
||||
|
||||
if [ ${#SETTINGS[@]} -ge 2 ]; then
|
||||
if echo -ne "$SETTINGS[0]" | egrep '^CONFIG_' >/dev/null 2>/dev/null; then
|
||||
SETTINGS[0]="${SETTINGS[0]:7}"
|
||||
fi
|
||||
|
||||
if is_pkg_special_config "${SETTINGS[0]}"; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# echo "DBG---: ${SETTINGS[@]}, ${SETTINGS[*]}"
|
||||
if [ "${SETTINGS[1]}" = 'y' ]; then
|
||||
echo -ne "#define ${SETTINGS[0]}\n" >&8
|
||||
else
|
||||
echo -ne "#define ${SETTINGS[0]} ${LINE#*=}\n" >&8
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
done < $CONFIG_NAME
|
||||
|
||||
if [ -f xsconfig_project.h ]; then
|
||||
echo -ne "#include \"xsconfig_project.h\"\n" >&8
|
||||
fi
|
||||
|
||||
echo -ne "\n#endif\n" >&8
|
||||
exec 8<&-
|
||||
}
|
||||
|
||||
make_config_h $1 $BSP_ROOT/xsconfig.h
|
||||
|
||||
Reference in New Issue
Block a user