Move initialization functions from sched/ to sched/init

This commit is contained in:
Gregory Nutt 2014-08-08 15:30:59 -06:00
parent a79ecce878
commit 9afca906eb
6 changed files with 182 additions and 23 deletions

View File

@ -41,8 +41,8 @@ DEPPATH = --dep-path .
ASRCS = ASRCS =
AOBJS = $(ASRCS:.S=$(OBJEXT)) AOBJS = $(ASRCS:.S=$(OBJEXT))
MISC_SRCS = os_start.c os_bringup.c errno_getptr.c sched_garbage.c MISC_SRCS = errno_getptr.c sched_garbage.c sched_getfiles.c
MISC_SRCS += sched_getfiles.c sched_getsockets.c sched_getstreams.c MISC_SRCS += sched_getsockets.c sched_getstreams.c
ifeq ($(CONFIG_NUTTX_KERNEL),y) ifeq ($(CONFIG_NUTTX_KERNEL),y)
MISC_SRCS += errno_get.c errno_set.c MISC_SRCS += errno_get.c errno_set.c
@ -110,6 +110,7 @@ ifneq ($(CONFIG_DISABLE_SIGNALS),y)
TIME_SRCS += nanosleep.c TIME_SRCS += nanosleep.c
endif endif
include init/Make.defs
include irq/Make.defs include irq/Make.defs
include paging/Make.defs include paging/Make.defs
include group/Make.defs include group/Make.defs
@ -123,7 +124,7 @@ include timer/Make.defs
include environ/Make.defs include environ/Make.defs
CSRCS = $(MISC_SRCS) $(TSK_SRCS) $(SCHED_SRCS) $(TIME_SRCS) CSRCS = $(MISC_SRCS) $(TSK_SRCS) $(SCHED_SRCS) $(TIME_SRCS)
CSRCS += $(IRQ_SRCS) $(PG_SRCS) $(GRP_SRCS) $(WDOG_SRCS) $(SEM_SRCS) $(SIGNAL_SRCS) $(PTHREAD_SRCS) $(MQUEUE_SRCS) $(CLOCK_SRCS) $(TIMER_SRCS) $(ENV_SRCS) CSRCS += $(INIT_SRCS) $(IRQ_SRCS) $(PG_SRCS) $(GRP_SRCS) $(WDOG_SRCS) $(SEM_SRCS) $(SIGNAL_SRCS) $(PTHREAD_SRCS) $(MQUEUE_SRCS) $(CLOCK_SRCS) $(TIMER_SRCS) $(ENV_SRCS)
COBJS = $(CSRCS:.c=$(OBJEXT)) COBJS = $(CSRCS:.c=$(OBJEXT))

41
sched/init/Make.defs Normal file
View File

@ -0,0 +1,41 @@
############################################################################
# sched/init/Make.defs
#
# Copyright (C) 2014 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. 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.
# 3. Neither the name NuttX 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 OWNER 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.
#
############################################################################
INIT_SRCS = os_start.c os_bringup.c
# Include init build support
DEPPATH += --dep-path init
VPATH += :init

115
sched/init/init.h Normal file
View File

@ -0,0 +1,115 @@
/****************************************************************************
* sched/init/init.h
*
* Copyright (C) 2007-2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. 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.
* 3. Neither the name NuttX 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 OWNER 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 __SCHED_INIT_INIT_H
#define __SCHED_INIT_INIT_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdbool.h>
#include <queue.h>
#include <sched.h>
#include <nuttx/kmalloc.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Type Definitions
****************************************************************************/
/****************************************************************************
* Global Variables
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: os_start
*
* Description:
* This function is called to initialize the operating system and to spawn
* the user initialization thread of execution. This is the initial entry
* point into NuttX
*
* Input Parameters:
* None
*
* Returned value:
* Does not return.
*
****************************************************************************/
void os_start(void);
/****************************************************************************
* Name: os_bringup
*
* Description:
* Start all initial system tasks. This does the "system bring-up" after
* the conclusion of basic OS initialization. These initial system tasks
* may include:
*
* - pg_worker: The page-fault worker thread (only if CONFIG_PAGING is
* defined.
* - work_thread: The work thread. This general thread can be used to
* perform most any kind of queued work. Its primary
* function is to serve as the "bottom half" of device
* drivers.
*
* And the main application entry point:
* symbols:
*
* - USER_ENTRYPOINT: This is the default user application entry point.
*
* Input Parameters:
* None
*
* Returned Value:
* None
*
****************************************************************************/
int os_bringup(void);
#endif /* __SCHED_INIT_INIT_H */

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* sched/os_bringup.c * sched/init/os_bringup.c
* *
* Copyright (C) 2011-2012 Gregory Nutt. All rights reserved. * Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
@ -57,6 +57,7 @@
#ifdef CONFIG_PAGING #ifdef CONFIG_PAGING
# include "paging/paging.h" # include "paging/paging.h"
#endif #endif
# include "init/init.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -126,6 +127,12 @@
* *
* - USER_ENTRYPOINT: This is the default user application entry point. * - USER_ENTRYPOINT: This is the default user application entry point.
* *
* Input Parameters:
* None
*
* Returned Value:
* None
*
****************************************************************************/ ****************************************************************************/
int os_bringup(void) int os_bringup(void)

View File

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* sched/os_start.c * sched/init/os_start.c
* *
* Copyright (C) 2007-2014 Gregory Nutt. All rights reserved. * Copyright (C) 2007-2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
@ -67,6 +67,7 @@
#ifdef HAVE_TASK_GROUP #ifdef HAVE_TASK_GROUP
#include "group/group.h" #include "group/group.h"
#endif #endif
#include "init/init.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -168,7 +169,7 @@ volatile pid_t g_lastpid;
* the number of tasks to CONFIG_MAX_TASKS. * the number of tasks to CONFIG_MAX_TASKS.
*/ */
pidhash_t g_pidhash[CONFIG_MAX_TASKS]; struct pidhash_s g_pidhash[CONFIG_MAX_TASKS];
/* This is a table of task lists. This table is indexed by /* This is a table of task lists. This table is indexed by
* the task state enumeration type (tstate_t) and provides * the task state enumeration type (tstate_t) and provides
@ -177,7 +178,7 @@ pidhash_t g_pidhash[CONFIG_MAX_TASKS];
* is an ordered list or not. * is an ordered list or not.
*/ */
const tasklist_t g_tasklisttable[NUM_TASK_STATES] = const struct tasklist_s g_tasklisttable[NUM_TASK_STATES] =
{ {
{ NULL, false }, /* TSTATE_TASK_INVALID */ { NULL, false }, /* TSTATE_TASK_INVALID */
{ &g_pendingtasks, true }, /* TSTATE_TASK_PENDING */ { &g_pendingtasks, true }, /* TSTATE_TASK_PENDING */
@ -228,7 +229,14 @@ static FAR const char g_idlename[] = "Idle Task";
* *
* Description: * Description:
* This function is called to initialize the operating system and to spawn * This function is called to initialize the operating system and to spawn
* the user initization thread of execution * the user initialization thread of execution. This is the initial entry
* point into NuttX
*
* Input Parameters:
* None
*
* Returned value:
* Does not return.
* *
****************************************************************************/ ****************************************************************************/

View File

@ -69,14 +69,6 @@
#define MAX_TASKS_MASK (CONFIG_MAX_TASKS-1) #define MAX_TASKS_MASK (CONFIG_MAX_TASKS-1)
#define PIDHASH(pid) ((pid) & MAX_TASKS_MASK) #define PIDHASH(pid) ((pid) & MAX_TASKS_MASK)
/* A more efficient ways to access the errno */
#define SET_ERRNO(e) \
{ struct tcb_s *rtcb = struct tcb_s*)g_readytorun.head; rtcb->pterrno = (e); }
#define _SET_TCB_ERRNO(t,e) \
{ (t)->pterrno = (e); }
/**************************************************************************** /****************************************************************************
* Public Type Definitions * Public Type Definitions
****************************************************************************/ ****************************************************************************/
@ -101,8 +93,6 @@ struct pidhash_s
#endif #endif
}; };
typedef struct pidhash_s pidhash_t;
/* This structure defines an element of the g_tasklisttable[]. /* This structure defines an element of the g_tasklisttable[].
* This table is used to map a task_state enumeration to the * This table is used to map a task_state enumeration to the
* corresponding task list. * corresponding task list.
@ -114,8 +104,6 @@ struct tasklist_s
bool prioritized; /* true if the list is prioritized */ bool prioritized; /* true if the list is prioritized */
}; };
typedef struct tasklist_s tasklist_t;
/**************************************************************************** /****************************************************************************
* Global Variables * Global Variables
****************************************************************************/ ****************************************************************************/
@ -209,7 +197,7 @@ extern volatile pid_t g_lastpid;
* of tasks to CONFIG_MAX_TASKS. * of tasks to CONFIG_MAX_TASKS.
*/ */
extern pidhash_t g_pidhash[CONFIG_MAX_TASKS]; extern struct pidhash_s g_pidhash[CONFIG_MAX_TASKS];
/* This is a table of task lists. This table is indexed by the task state /* This is a table of task lists. This table is indexed by the task state
* enumeration type (tstate_t) and provides a pointer to the associated * enumeration type (tstate_t) and provides a pointer to the associated
@ -217,7 +205,7 @@ extern pidhash_t g_pidhash[CONFIG_MAX_TASKS];
* if the list is an ordered list or not. * if the list is an ordered list or not.
*/ */
extern const tasklist_t g_tasklisttable[NUM_TASK_STATES]; extern const struct tasklist_s g_tasklisttable[NUM_TASK_STATES];
#ifdef CONFIG_SCHED_CPULOAD #ifdef CONFIG_SCHED_CPULOAD
/* This is the total number of clock tick counts. Essentially the /* This is the total number of clock tick counts. Essentially the
@ -231,7 +219,6 @@ extern volatile uint32_t g_cpuload_total;
* Public Function Prototypes * Public Function Prototypes
****************************************************************************/ ****************************************************************************/
int os_bringup(void);
#ifdef CONFIG_SCHED_CHILD_STATUS #ifdef CONFIG_SCHED_CHILD_STATUS
void weak_function task_initialize(void); void weak_function task_initialize(void);
#endif #endif