Lots of fixes
This commit is contained in:
parent
6ad28f50b6
commit
16e1386c86
4
Makefile
4
Makefile
@ -181,7 +181,7 @@ EFI_XORRISO=-eltorito-alt-boot -e fat.img -no-emul-boot -isohybrid-gpt-basdat
|
|||||||
EFI_BOOT=cdrom/fat.img
|
EFI_BOOT=cdrom/fat.img
|
||||||
EFI_UPDATE=python util/update-extents.py
|
EFI_UPDATE=python util/update-extents.py
|
||||||
|
|
||||||
image.iso: ${EFI_BOOT} cdrom/boot.sys fatbase/netinit ${MODULES}
|
image.iso: ${EFI_BOOT} cdrom/boot.sys fatbase/netinit ${MODULES} util/update-extents.py
|
||||||
xorriso -as mkisofs -R -J -c bootcat \
|
xorriso -as mkisofs -R -J -c bootcat \
|
||||||
-b boot.sys -no-emul-boot -boot-load-size 24 \
|
-b boot.sys -no-emul-boot -boot-load-size 24 \
|
||||||
${EFI_XORRISO} \
|
${EFI_XORRISO} \
|
||||||
@ -190,7 +190,7 @@ image.iso: ${EFI_BOOT} cdrom/boot.sys fatbase/netinit ${MODULES}
|
|||||||
|
|
||||||
# Boot loader
|
# Boot loader
|
||||||
|
|
||||||
cdrom/fat.img: fatbase/ramdisk.img ${MODULES} fatbase/kernel fatbase/netinit fatbase/efi/boot/bootia32.efi
|
cdrom/fat.img: fatbase/ramdisk.img ${MODULES} fatbase/kernel fatbase/netinit fatbase/efi/boot/bootia32.efi util/mkdisk.sh
|
||||||
util/mkdisk.sh $@ fatbase
|
util/mkdisk.sh $@ fatbase
|
||||||
|
|
||||||
EFI_CFLAGS=-fno-stack-protector -fpic -DEFI_FUNCTION_WRAPPER -m32 -DEFI_PLATFORM -ffreestanding -fshort-wchar -I /usr/include/efi -I /usr/include/efi/ia32 -mno-red-zone
|
EFI_CFLAGS=-fno-stack-protector -fpic -DEFI_FUNCTION_WRAPPER -m32 -DEFI_PLATFORM -ffreestanding -fshort-wchar -I /usr/include/efi -I /usr/include/efi/ia32 -mno-red-zone
|
||||||
|
@ -478,27 +478,32 @@ void show_menu(void) {
|
|||||||
static EFI_GUID efi_simple_file_system_protocol_guid =
|
static EFI_GUID efi_simple_file_system_protocol_guid =
|
||||||
{0x0964e5b22,0x6459,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b};
|
{0x0964e5b22,0x6459,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b};
|
||||||
|
|
||||||
|
static EFI_GUID efi_loaded_image_protocol_guid =
|
||||||
|
{0x5B1B31A1,0x9562,0x11d2, {0x8E,0x3F,0x00,0xA0,0xC9,0x69,0x72,0x3B}};
|
||||||
|
|
||||||
static void boot(void) {
|
static void boot(void) {
|
||||||
UINTN count;
|
UINTN count;
|
||||||
EFI_HANDLE * handles;
|
EFI_HANDLE * handles;
|
||||||
|
EFI_LOADED_IMAGE * loaded_image;
|
||||||
EFI_FILE_IO_INTERFACE *efi_simple_filesystem;
|
EFI_FILE_IO_INTERFACE *efi_simple_filesystem;
|
||||||
EFI_FILE *root;
|
EFI_FILE *root;
|
||||||
|
EFI_STATUS status;
|
||||||
|
|
||||||
clear_();
|
clear_();
|
||||||
|
|
||||||
EFI_STATUS status = uefi_call_wrapper(ST->BootServices->LocateHandleBuffer,
|
status = uefi_call_wrapper(ST->BootServices->HandleProtocol,
|
||||||
5, ByProtocol, &efi_simple_file_system_protocol_guid,
|
3, ImageHandleIn, &efi_loaded_image_protocol_guid,
|
||||||
NULL, &count, &handles);
|
(void **)&loaded_image);
|
||||||
|
|
||||||
if (EFI_ERROR(status)) {
|
if (EFI_ERROR(status)) {
|
||||||
print_("There was an error.\n");
|
print_("There was an error (init)\n");
|
||||||
while (1) {};
|
while (1) {};
|
||||||
}
|
}
|
||||||
|
|
||||||
print_("Found "); print_hex_(count); print_(" handles.\n");
|
print_("Found loaded image...\n");
|
||||||
|
|
||||||
status = uefi_call_wrapper(ST->BootServices->HandleProtocol,
|
status = uefi_call_wrapper(ST->BootServices->HandleProtocol,
|
||||||
3, handles[0], &efi_simple_file_system_protocol_guid,
|
3, loaded_image->DeviceHandle, &efi_simple_file_system_protocol_guid,
|
||||||
(void **)&efi_simple_filesystem);
|
(void **)&efi_simple_filesystem);
|
||||||
|
|
||||||
if (EFI_ERROR(status)) {
|
if (EFI_ERROR(status)) {
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
|
||||||
* This file is part of ToaruOS and is released under the terms
|
|
||||||
* of the NCSA / University of Illinois License - see LICENSE.md
|
|
||||||
* Copyright (C) 2014-2018 K. Lange
|
|
||||||
*/
|
|
||||||
#include <kernel/module.h>
|
|
||||||
#include <kernel/printf.h>
|
|
||||||
#include <kernel/mod/shell.h>
|
|
||||||
|
|
||||||
DEFINE_SHELL_FUNCTION(crash, "Dereference NULL.") {
|
|
||||||
fprintf(tty, "*0x0 = %x\n", *((int *)0x00));
|
|
||||||
*((int *)0x0) = 0x42;
|
|
||||||
fprintf(tty, "*0x0 = %x\n", *((int *)0x00));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_SHELL_FUNCTION(assert_false, "assert(0)") {
|
|
||||||
assert(0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int crash_init(void) {
|
|
||||||
BIND_SHELL_FUNCTION(crash);
|
|
||||||
BIND_SHELL_FUNCTION(assert_false);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int crash_fini(void) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULE_DEF(crash, crash_init, crash_fini);
|
|
||||||
MODULE_DEPENDS(debugshell);
|
|
@ -1,53 +0,0 @@
|
|||||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
|
||||||
* This file is part of ToaruOS and is released under the terms
|
|
||||||
* of the NCSA / University of Illinois License - see LICENSE.md
|
|
||||||
* Copyright (C) 2014-2018 K. Lange
|
|
||||||
*/
|
|
||||||
#include <kernel/system.h>
|
|
||||||
#include <kernel/module.h>
|
|
||||||
#include <kernel/fs.h>
|
|
||||||
#include <kernel/printf.h>
|
|
||||||
#include <kernel/mod/shell.h>
|
|
||||||
|
|
||||||
DEFINE_SHELL_FUNCTION(testwrite, "Test write") {
|
|
||||||
|
|
||||||
fs_node_t * f = NULL;
|
|
||||||
char * file = "/dev/hdb";
|
|
||||||
|
|
||||||
if (argc > 1) {
|
|
||||||
file = argv[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
f = kopen(file, 0);
|
|
||||||
|
|
||||||
if (!f) {
|
|
||||||
fprintf(tty, "No device: %s\n", file);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char * s = malloc(1024);
|
|
||||||
|
|
||||||
sprintf(s, "Hello World!");
|
|
||||||
|
|
||||||
write_fs(f, 0, strlen(s), (uint8_t *)s);
|
|
||||||
write_fs(f, 2, strlen(s), (uint8_t *)s);
|
|
||||||
write_fs(f, 523, strlen(s), (uint8_t *)s);
|
|
||||||
|
|
||||||
write_fs(f, 1024*12, 1024, (uint8_t *)s);
|
|
||||||
|
|
||||||
free(s);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int init(void) {
|
|
||||||
BIND_SHELL_FUNCTION(testwrite);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fini(void) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULE_DEF(testwrite, init, fini);
|
|
||||||
MODULE_DEPENDS(debugshell);
|
|
@ -1,58 +0,0 @@
|
|||||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
|
||||||
* This file is part of ToaruOS and is released under the terms
|
|
||||||
* of the NCSA / University of Illinois License - see LICENSE.md
|
|
||||||
* Copyright (C) 2014-2018 K. Lange
|
|
||||||
*/
|
|
||||||
#include <kernel/system.h>
|
|
||||||
#include <kernel/module.h>
|
|
||||||
#include <kernel/logging.h>
|
|
||||||
#include <kernel/printf.h>
|
|
||||||
#include <kernel/mod/shell.h>
|
|
||||||
|
|
||||||
#include <toaru/hashmap.h>
|
|
||||||
|
|
||||||
extern char * special_thing;
|
|
||||||
|
|
||||||
char test_module_string[] = "I am a char[] in the module.";
|
|
||||||
char * test_module_string_ptr = "I am a char * in the module.";
|
|
||||||
|
|
||||||
int a_function(void) {
|
|
||||||
debug_print(WARNING, ("I am an exported function in the module."));
|
|
||||||
return 42;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_SHELL_FUNCTION(test_mod, "A function installed by a module!") {
|
|
||||||
fprintf(tty, "Hello world!\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hello(void) {
|
|
||||||
debug_print(NOTICE, special_thing);
|
|
||||||
a_function();
|
|
||||||
debug_print(NOTICE, test_module_string);
|
|
||||||
debug_print(NOTICE, test_module_string_ptr);
|
|
||||||
|
|
||||||
hashmap_t * map = hashmap_create(10);
|
|
||||||
|
|
||||||
debug_print(NOTICE, "Inserting into hashmap...");
|
|
||||||
|
|
||||||
hashmap_set(map, "hello", (void *)"cake");
|
|
||||||
debug_print(NOTICE, "getting value: %s", hashmap_get(map, "hello"));
|
|
||||||
|
|
||||||
hashmap_free(map);
|
|
||||||
free(map);
|
|
||||||
|
|
||||||
debug_shell_install(&shell_test_mod_desc);
|
|
||||||
BIND_SHELL_FUNCTION(test_mod);
|
|
||||||
|
|
||||||
return 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int goodbye(void) {
|
|
||||||
debug_print(NOTICE, "Goodbye!");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULE_DEF(test, hello, goodbye);
|
|
||||||
MODULE_DEPENDS(debugshell);
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
|
||||||
* This file is part of ToaruOS and is released under the terms
|
|
||||||
* of the NCSA / University of Illinois License - see LICENSE.md
|
|
||||||
* Copyright (C) 2014-2018 K. Lange
|
|
||||||
*/
|
|
||||||
#include <kernel/system.h>
|
|
||||||
#include <kernel/module.h>
|
|
||||||
#include <kernel/logging.h>
|
|
||||||
|
|
||||||
extern int a_function(void);
|
|
||||||
|
|
||||||
static int hello(void) {
|
|
||||||
debug_print(NOTICE, "Calling a_function from other module.");
|
|
||||||
a_function();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int goodbye(void) {
|
|
||||||
debug_print(NOTICE, "Goodbye!");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULE_DEF(testb, hello, goodbye);
|
|
||||||
MODULE_DEPENDS(test);
|
|
||||||
|
|
@ -28,3 +28,5 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
rm cdrom/efi/boot/bootia32.efi # Otherwise virtualbox may erroneously try to load from this
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user