kboot: add minmalist init functionality
It is desirable to run kboot as the first program in some LinuxBoot
environments. This is the traditional "pid 1" or "init" program. When
running as pid 1. rovide a minimal environment based on what sysvinit,
u-root, initramfs-tools and other like projects do. We mount /dev, /sys,
/proc, make symlinks from /dev/fd to /dev/proc, and create /tmp, /run,
and /var. We also setup stdin/out/err to the console, set the tty
characteristics of same and block the appropriate signals.
This is indended as an environment that never does a fork/exec. If
that's required, the process groups, session leaders and all things
POSIX terminal handlers will need to be added.
Unlike the general purpose linux projects in this area, no attempt is
made to support very old kernels.
When not pid 1, we skip all of the above.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D36368
2022-09-01 17:06:43 +00:00
|
|
|
/*-
|
|
|
|
* Copyright (c) 2022, Netflix, Inc.
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef KBOOT_H
|
|
|
|
#define KBOOT_H
|
|
|
|
|
2022-10-22 15:09:23 +00:00
|
|
|
#define DEVT_HOSTDISK 1234
|
|
|
|
|
2023-02-03 15:37:45 +00:00
|
|
|
struct memory_segments
|
|
|
|
{
|
|
|
|
uint64_t start;
|
|
|
|
uint64_t end;
|
|
|
|
uint64_t type; /* MD defined */
|
|
|
|
};
|
|
|
|
|
|
|
|
bool enumerate_memory_arch(void);
|
2023-02-03 15:39:24 +00:00
|
|
|
struct preloaded_file;
|
|
|
|
void bi_loadsmap(struct preloaded_file *kfp);
|
2023-02-03 15:37:45 +00:00
|
|
|
|
2022-12-09 04:56:06 +00:00
|
|
|
bool has_acpi(void);
|
|
|
|
vm_offset_t acpi_rsdp(void);
|
|
|
|
|
kboot: add minmalist init functionality
It is desirable to run kboot as the first program in some LinuxBoot
environments. This is the traditional "pid 1" or "init" program. When
running as pid 1. rovide a minimal environment based on what sysvinit,
u-root, initramfs-tools and other like projects do. We mount /dev, /sys,
/proc, make symlinks from /dev/fd to /dev/proc, and create /tmp, /run,
and /var. We also setup stdin/out/err to the console, set the tty
characteristics of same and block the appropriate signals.
This is indended as an environment that never does a fork/exec. If
that's required, the process groups, session leaders and all things
POSIX terminal handlers will need to be added.
Unlike the general purpose linux projects in this area, no attempt is
made to support very old kernels.
When not pid 1, we skip all of the above.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D36368
2022-09-01 17:06:43 +00:00
|
|
|
void do_init(void);
|
2022-10-27 17:36:51 +00:00
|
|
|
|
|
|
|
/* Per-platform fdt fixup */
|
|
|
|
void fdt_arch_fixups(void *fdtp);
|
|
|
|
|
2022-10-08 05:40:56 +00:00
|
|
|
uint64_t kboot_get_phys_load_segment(void);
|
|
|
|
uint8_t kboot_get_kernel_machine_bits(void);
|
kboot: add minmalist init functionality
It is desirable to run kboot as the first program in some LinuxBoot
environments. This is the traditional "pid 1" or "init" program. When
running as pid 1. rovide a minimal environment based on what sysvinit,
u-root, initramfs-tools and other like projects do. We mount /dev, /sys,
/proc, make symlinks from /dev/fd to /dev/proc, and create /tmp, /run,
and /var. We also setup stdin/out/err to the console, set the tty
characteristics of same and block the appropriate signals.
This is indended as an environment that never does a fork/exec. If
that's required, the process groups, session leaders and all things
POSIX terminal handlers will need to be added.
Unlike the general purpose linux projects in this area, no attempt is
made to support very old kernels.
When not pid 1, we skip all of the above.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D36368
2022-09-01 17:06:43 +00:00
|
|
|
|
2023-02-03 15:40:30 +00:00
|
|
|
/* main.c */
|
|
|
|
void kboot_kseg_get(int *nseg, void **ptr);
|
|
|
|
|
2023-01-13 21:20:30 +00:00
|
|
|
/* hostdisk.c */
|
|
|
|
extern const char *hostfs_root;
|
2023-02-03 15:37:31 +00:00
|
|
|
const char *hostdisk_gen_probe(void);
|
2023-01-13 21:20:30 +00:00
|
|
|
void hostdisk_zfs_probe(void);
|
|
|
|
bool hostdisk_zfs_find_default(void);
|
|
|
|
|
2023-02-03 15:37:53 +00:00
|
|
|
/* seg.c */
|
2023-02-03 15:38:14 +00:00
|
|
|
#define SYSTEM_RAM 1
|
2023-02-03 15:37:53 +00:00
|
|
|
void init_avail(void);
|
|
|
|
void need_avail(int n);
|
|
|
|
void add_avail(uint64_t start, uint64_t end, uint64_t type);
|
|
|
|
void remove_avail(uint64_t start, uint64_t end, uint64_t type);
|
|
|
|
uint64_t first_avail(uint64_t align, uint64_t min_size, uint64_t type);
|
|
|
|
void print_avail(void);
|
2023-02-03 15:38:14 +00:00
|
|
|
bool populate_avail_from_iomem(void);
|
2023-02-03 15:38:22 +00:00
|
|
|
uint64_t space_avail(uint64_t start);
|
2023-02-03 15:37:53 +00:00
|
|
|
|
2022-12-02 18:05:58 +00:00
|
|
|
/* util.c */
|
|
|
|
bool file2str(const char *fn, char *buffer, size_t buflen);
|
|
|
|
bool file2u64(const char *fn, uint64_t *val);
|
|
|
|
|
kboot: add minmalist init functionality
It is desirable to run kboot as the first program in some LinuxBoot
environments. This is the traditional "pid 1" or "init" program. When
running as pid 1. rovide a minimal environment based on what sysvinit,
u-root, initramfs-tools and other like projects do. We mount /dev, /sys,
/proc, make symlinks from /dev/fd to /dev/proc, and create /tmp, /run,
and /var. We also setup stdin/out/err to the console, set the tty
characteristics of same and block the appropriate signals.
This is indended as an environment that never does a fork/exec. If
that's required, the process groups, session leaders and all things
POSIX terminal handlers will need to be added.
Unlike the general purpose linux projects in this area, no attempt is
made to support very old kernels.
When not pid 1, we skip all of the above.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D36368
2022-09-01 17:06:43 +00:00
|
|
|
#endif /* KBOOT_H */
|