summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/bump.c4
-rw-r--r--kernel/dtb.c10
-rw-r--r--kernel/elf.c12
-rw-r--r--kernel/kernel.c14
-rw-r--r--kernel/mem.c12
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;