Added the start of a userland boot loader test (i.e. userland platform
bindings for the stage2 boot loader). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4617 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "Handle.h"
|
||||||
|
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
#include <boot/platform.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
Handle::Handle(int handle, bool takeOwnership)
|
||||||
|
:
|
||||||
|
fHandle(handle),
|
||||||
|
fOwnHandle(takeOwnership)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Handle::Handle(void)
|
||||||
|
:
|
||||||
|
fHandle(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Handle::~Handle()
|
||||||
|
{
|
||||||
|
if (fOwnHandle)
|
||||||
|
close(fHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Handle::SetHandle(int handle, bool takeOwnership)
|
||||||
|
{
|
||||||
|
if (fHandle && fOwnHandle)
|
||||||
|
close(fHandle);
|
||||||
|
|
||||||
|
fHandle = handle;
|
||||||
|
fOwnHandle = takeOwnership;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
Handle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
|
||||||
|
{
|
||||||
|
return pread(fHandle, buffer, bufferSize, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
Handle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize)
|
||||||
|
{
|
||||||
|
return pwrite(fHandle, buffer, bufferSize, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
off_t
|
||||||
|
Handle::Size() const
|
||||||
|
{
|
||||||
|
// ToDo: fix this!
|
||||||
|
return 1024LL * 1024 * 1024 * 1024;
|
||||||
|
// 1024 GB
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
#ifndef HANDLE_H
|
||||||
|
#define HANDLE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <boot/vfs.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
class Handle : public Node {
|
||||||
|
public:
|
||||||
|
Handle(int handle, bool takeOwnership = true);
|
||||||
|
Handle();
|
||||||
|
virtual ~Handle();
|
||||||
|
|
||||||
|
void SetHandle(int handle, bool takeOwnership = true);
|
||||||
|
|
||||||
|
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
|
||||||
|
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
|
||||||
|
|
||||||
|
virtual off_t Size() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int fHandle;
|
||||||
|
bool fOwnHandle;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* HANDLE_H */
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
SubDir OBOS_TOP src tests kernel boot loader ;
|
||||||
|
|
||||||
|
UsePrivateHeaders [ FDirName kernel ] ;
|
||||||
|
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
|
||||||
|
UsePrivateHeaders [ FDirName storage ] ;
|
||||||
|
SubDirHdrs $(OBOS_TOP) headers private kernel arch $(OBOS_ARCH) ;
|
||||||
|
|
||||||
|
ObjectDefines
|
||||||
|
heap.cpp
|
||||||
|
main.cpp
|
||||||
|
vfs.cpp
|
||||||
|
partitions.cpp
|
||||||
|
stdio.cpp
|
||||||
|
RootFileSystem.cpp
|
||||||
|
:
|
||||||
|
malloc=boot_malloc free=boot_free
|
||||||
|
read_pos=boot_read_pos close=boot_close
|
||||||
|
;
|
||||||
|
|
||||||
|
# This lets the correct stdio.h header be available
|
||||||
|
# on the build platform.
|
||||||
|
# This will be fixed with the move to GNU's stdio header
|
||||||
|
if $(OS) = "LINUX" {
|
||||||
|
# SubDirC++Flags -include /usr/include/stdio.h ;
|
||||||
|
} else {
|
||||||
|
SubDirC++Flags -include /boot/develop/headers/posix/stdio.h ;
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleTest BootLoaderTest :
|
||||||
|
platform_start.cpp
|
||||||
|
#platform_console.cpp
|
||||||
|
platform_debug.cpp
|
||||||
|
platform_devices.cpp
|
||||||
|
platform_heap.cpp
|
||||||
|
Handle.cpp
|
||||||
|
|
||||||
|
main.cpp
|
||||||
|
vfs.cpp
|
||||||
|
partitions.cpp
|
||||||
|
heap.cpp
|
||||||
|
RootFileSystem.cpp
|
||||||
|
|
||||||
|
list.c
|
||||||
|
:
|
||||||
|
: -fno-builtin
|
||||||
|
;
|
||||||
|
|
||||||
|
# Tell Jam where to find the utility sources
|
||||||
|
SEARCH on [ FGristFiles list.c ]
|
||||||
|
= [ FDirName $(OBOS_TOP) src kernel core util ] ;
|
||||||
|
|
||||||
|
SEARCH on [ FGristFiles
|
||||||
|
main.cpp vfs.cpp partitions.cpp
|
||||||
|
heap.cpp RootFileSystem.cpp
|
||||||
|
] = [ FDirName $(OBOS_TOP) src kernel boot loader ] ;
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <boot/platform.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
panic(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
puts("*** PANIC ***");
|
||||||
|
va_start(args, format);
|
||||||
|
vprintf(format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
dprintf(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
vprintf(format, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <boot/platform.h>
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
platform_get_boot_devices(struct stage2_args *args, struct list *list)
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <boot/platform.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define HEAP_SIZE 32768
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
platform_release_heap(void *base)
|
||||||
|
{
|
||||||
|
free(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" status_t
|
||||||
|
platform_init_heap(struct stage2_args *args, void **_base, void **_top)
|
||||||
|
{
|
||||||
|
*_base = malloc(HEAP_SIZE);
|
||||||
|
*_top = (void *)((uint8 *)*_base + HEAP_SIZE);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
#ifndef PLATFORM_STAGE2_ARGS_H
|
||||||
|
#define PLATFORM_STAGE2_ARGS_H
|
||||||
|
|
||||||
|
struct platform_stage2_args {
|
||||||
|
/* they are just empty! */
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* PLATFORM_STAGE2_ARGS_H */
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <boot/platform.h>
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" int boot(struct stage2_args *args);
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
boot(NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user