Files
rtems/cpukit/libcsupport/src/base_fs.c
Joel Sherrill d40da79b04 2008-09-17 Miao Yan <yanmiaobest@gmail.com>
* Makefile.am, preinstall.am, libcsupport/Makefile.am,
	libcsupport/include/rtems/libcsupport.h,
	libcsupport/include/rtems/libio.h, libcsupport/src/base_fs.c,
	libcsupport/src/libio_init.c, libcsupport/src/newlibc_exit.c,
	libcsupport/src/newlibc_init.c, libcsupport/src/sync.c,
	libfs/Makefile.am, libfs/src/imfs/deviceio.c,
	sapi/include/confdefs.h: Merge GSOC project code to add simple device
	only filesystem (devfs), optionally completely drop out filesystem,
	and to clean up disabling newlib reentrancy support. This dropped 17K
	from the minimum.exe for sparc/sis and arm/rtl22xx_t now has a 15K
	code space.
	* libcsupport/src/__usrenv.c, libcsupport/src/newlibc_reent.c,
	libfs/src/devfs/devclose.c, libfs/src/devfs/devfs.h,
	libfs/src/devfs/devfs_eval.c, libfs/src/devfs/devfs_init.c,
	libfs/src/devfs/devfs_mknod.c, libfs/src/devfs/devfs_node_type.c,
	libfs/src/devfs/devfs_show.c, libfs/src/devfs/devioctl.c,
	libfs/src/devfs/devopen.c, libfs/src/devfs/devread.c,
	libfs/src/devfs/devstat.c, libfs/src/devfs/devwrite.c,
	libfs/src/imfs/deviceerrno.c: New files.
	* libcsupport/src/newlibc.c: Removed.
2008-09-17 16:12:04 +00:00

126 lines
3.3 KiB
C

/*
* Base file system initialization
*
* COPYRIGHT (c) 1989-2008.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include <rtems/libio.h>
#include <rtems/libio_.h>
/*
* Default mode for created files.
*/
/*
* rtems_filesystem_initialize
*
* Initialize the foundation of the file system. This is specified
* by the structure rtems_filesystem_mount_table. The usual
* configuration is a single instantiation of the IMFS or miniIMFS with
* a single "/dev" directory in it.
*/
void rtems_filesystem_initialize( void )
{
#if !defined(RTEMS_UNIX)
int status;
rtems_filesystem_mount_table_entry_t *entry;
const rtems_filesystem_mount_table_t *mt;
rtems_filesystem_location_info_t loc;
/*
* Set the default umask to "022".
*/
rtems_filesystem_umask = 022;
init_fs_mount_table();
/*
* mount the first filesystem.
*/
if ( rtems_filesystem_mount_table_size == 0 )
rtems_fatal_error_occurred( 0xABCD0001 );
mt = &rtems_filesystem_mount_table[0];
status = mount(
&entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point );
if ( status == -1 )
rtems_fatal_error_occurred( 0xABCD0002 );
rtems_filesystem_link_counts = 0;
/* setup the 'current' and 'root' directories
*
* NOTE: cloning the pathlocs is not strictly
* necessary. Since we implicitely let
* all threads that don't call
* libio_set_private_env() share the same
* (initial) 'root' and 'current' locs,
* we (also implicitely) assume that the
* root filesystem doesn't care about
* reference counts.
* I just inserted the code snippet below
* to remind everybody of the fact by
* making it more explicit...
* Ideally, every thread would have to
* call either share_private_env() or
* set_private_env() - but then: that's
* gonna hit performance.
*
* Till Straumann, 10/25/2002
*/
rtems_filesystem_root = entry->mt_fs_root;
/* Clone the root pathloc */
rtems_filesystem_evaluate_path("/", 0, &loc, 0);
rtems_filesystem_root = loc;
/* One more clone for the current node */
rtems_filesystem_evaluate_path("/", 0, &loc, 0);
rtems_filesystem_current = loc;
/* Note: the global_env's refcnt doesn't matter
* as the global env is never released
*/
/*
* Traditionally RTEMS devices are under "/dev" so install this directory.
*
* If the mkdir() fails, we can't print anything so just fatal error.
*
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
* created that way by the IMFS.
*/
status = mkdir( "/dev", 0777);
if ( status != 0 )
rtems_fatal_error_occurred( 0xABCD0003 );
/*
* You can't mount another filesystem properly until the mount point
* it will be mounted onto is created. Moreover, if it is going to
* use a device, then it is REALLY unfair to attempt this
* before device drivers are initialized. So we return via a base
* filesystem image and nothing auto-mounted at this point.
*/
#endif
}