diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/bump.c | 4 | ||||
| -rw-r--r-- | kernel/dtb.c | 10 | ||||
| -rw-r--r-- | kernel/elf.c | 12 | ||||
| -rw-r--r-- | kernel/kernel.c | 14 | ||||
| -rw-r--r-- | kernel/mem.c | 12 |
5 files changed, 20 insertions, 32 deletions
diff --git a/kernel/bump.c b/kernel/bump.c index 369f92f..fd4f25d 100644 --- a/kernel/bump.c +++ b/kernel/bump.c @@ -19,8 +19,8 @@ struct mem_info *km_find_memory(struct dt_node *head) { size_t len = 0; uint32_t *reg = (uint32_t *)dt_get_prop(head, "reg", &len); if (reg && len >= 8) { - uint32_t base = be32_to_cpu(reg[0]); - uint32_t size = be32_to_cpu(reg[1]); + uint32_t base = btohi(reg[0]); + uint32_t size = btohi(reg[1]); struct mem_info *ret = kemalloc(sizeof(struct mem_info)); ret->start = (void*)base; ret->size = (size_t)size; diff --git a/kernel/dtb.c b/kernel/dtb.c index 99b1679..7647767 100644 --- a/kernel/dtb.c +++ b/kernel/dtb.c @@ -10,15 +10,15 @@ struct dt_node *dt_parse(void *fdt) { return NULL; } - uint32_t *p = (uint32_t *)(fdt + be32_to_cpu(hdr->off_dt_struct)); - char *strings = fdt + be32_to_cpu(hdr->off_dt_strings); + uint32_t *p = (uint32_t *)(fdt + btohi(hdr->off_dt_struct)); + char *strings = fdt + btohi(hdr->off_dt_strings); struct dt_node *root = NULL; struct dt_node *stack[DTB_MAX_NODES]; int sp = 0; while (1) { - uint32_t token = be32_to_cpu(*p++); + uint32_t token = btohi(*p++); switch (token) { case FDT_BEGIN_NODE: { char *name = (char *)p; @@ -35,8 +35,8 @@ struct dt_node *dt_parse(void *fdt) { break; } case FDT_PROP: { - uint32_t len = be32_to_cpu(*p++); - uint32_t nameoff = be32_to_cpu(*p++); + uint32_t len = btohi(*p++); + uint32_t nameoff = btohi(*p++); void *value = p; p += (len + 3) / 4; diff --git a/kernel/elf.c b/kernel/elf.c new file mode 100644 index 0000000..f1ceb2d --- /dev/null +++ b/kernel/elf.c @@ -0,0 +1,12 @@ +#include <elf.h> +#include <common.h> + +int elf_chk_header(struct elf_header *header) { + uint32_t magic_chk; + memcpy(&magic_chk, header->e_ident, sizeof(uint32_t)); + if (magic_chk != ltohi(ELF_MAGIC_LE)) { + return -1; + } + + return 0; +} diff --git a/kernel/kernel.c b/kernel/kernel.c index 3952f8f..da44428 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,18 +1,6 @@ #include <types.h> #include <dtb.h> #include <bump.h> -#define UART_BASE 0x10000000 // Example UART address - -static inline void putchar(char c) { - volatile char *uart = (volatile char *)UART_BASE; - *uart = c; -} - -static void print_string(const char *str) { - while (*str) { - putchar(*str++); - } -} void kernel_main(size_t hart, void *fdt) { (void)hart; @@ -21,11 +9,11 @@ void kernel_main(size_t hart, void *fdt) { struct mem_info *info = km_find_memory(head); if (!info) { - print_string("failed to get memory!\n"); while (1); } km_init(info); + while(1); } diff --git a/kernel/mem.c b/kernel/mem.c index 0556dfb..2a6bd35 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -106,18 +106,6 @@ void kfree(void *ptr) { } - -void* memcpy(void *to, const void *from, size_t size) { - char *dest = (char *)to; - const char *src = (const char *)from; - - while (size--) { - *dest++ = *src++; - } - - return dest; -} - void km_init(struct mem_info *info) { struct page *base = (struct page *)info->start; base->next = NULL; |
