aboutsummaryrefslogtreecommitdiff
path: root/common/initrd.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2021-12-26 17:50:11 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2021-12-26 17:50:11 +0200
commitd98ec57128628b81fcd32269a92742a037b7f713 (patch)
tree0e3f8d78d8347ef0a6e69d41b9d9be20c822b642 /common/initrd.c
parenta64f3588ff5da7f148659ccb0eff844ccfb57088 (diff)
downloadkmi-d98ec57128628b81fcd32269a92742a037b7f713.tar.gz
kmi-d98ec57128628b81fcd32269a92742a037b7f713.zip
First useful jump to userspace!
Diffstat (limited to 'common/initrd.c')
-rw-r--r--common/initrd.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/common/initrd.c b/common/initrd.c
index 61aaaff..18db836 100644
--- a/common/initrd.c
+++ b/common/initrd.c
@@ -86,6 +86,14 @@ size_t get_init_size(void *fdt)
return convnum(cp->c_filesize, 8, 16);
}
+vm_t get_init_base(void *fdt)
+{
+ char *c = (char *)get_initrdbase(fdt);
+ struct cpio_header *cp = find_file(c, init_n, init_nlen);
+ size_t name_len = convnum(cp->c_namesize, 8, 16);
+ return ((vm_t)cp) + align_up(sizeof(struct cpio_header) + name_len, 4);
+}
+
void move_init(void *fdt, void *target)
{
char *c = (char *)get_initrdbase(fdt);