commit: d13320dbfa9d4c10325e80783e040ae6a9559dfa
parent cef781a9f6f60aebd42bab7d3456f1361f39d690
Author: fosslinux <fosslinux@aussies.space>
Date: Fri, 15 Dec 2023 10:40:04 +0000
Merge pull request #344 from fosslinux/simplify-kexec-prepare
Simplify - kexec preparations
Diffstat:
2 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/sysa/kexec-fiwix-1.0/src/kexec-fiwix.c b/sysa/kexec-fiwix-1.0/src/kexec-fiwix.c
@@ -81,11 +81,11 @@ int main() {
char *bare_metal = getenv("BARE_METAL");
if (bare_metal != NULL && strcmp(bare_metal, "True") == 0)
{
- sprintf(cmdline, "fiwix root=/dev/ram0 ramdisksize=%d initrd=fiwix.ext2 kexec_proto=linux kexec_size=67000 kexec_cmdline=\"init=/init\"", INITRD_MB * 1024);
+ sprintf(cmdline, "fiwix root=/dev/ram0 ramdisksize=%d initrd=fiwix.ext2 kexec_proto=linux kexec_size=280000 kexec_cmdline=\"init=/init\"", INITRD_MB * 1024);
}
else
{
- sprintf(cmdline, "fiwix console=/dev/ttyS0 root=/dev/ram0 ramdisksize=%d initrd=fiwix.ext2 kexec_proto=linux kexec_size=67000 kexec_cmdline=\"init=/init console=ttyS0\"", INITRD_MB * 1024);
+ sprintf(cmdline, "fiwix console=/dev/ttyS0 root=/dev/ram0 ramdisksize=%d initrd=fiwix.ext2 kexec_proto=linux kexec_size=280000 kexec_cmdline=\"init=/init console=ttyS0\"", INITRD_MB * 1024);
}
char * boot_loader_name = "kexec-fiwix";
diff --git a/sysa/kexec-linux-1.0.0/files/kexec-linux.c b/sysa/kexec-linux-1.0.0/files/kexec-linux.c
@@ -10,7 +10,6 @@
int append_file(FILE *dst_file, char *src_file_name);
-
int main(int argc, char **argv) {
char *ramdrive_file_name, *kernel_file_name, *initramfs_file_name;
FILE *ramdrive_file;
@@ -29,32 +28,31 @@ int main(int argc, char **argv) {
ramdrive_file = fopen(ramdrive_file_name, "wb");
- /* Write length of kernel */
- if (stat(kernel_file_name, &stats) == 0) {
- size = (uint32_t) stats.st_size;
- fwrite(&size, sizeof(size), 1, ramdrive_file);
- } else {
- fprintf(stderr, "Cannot stat kernel file '%s'\n", kernel_file_name);
- exit(1);
- }
-
- /* Write length of initramfs */
- if (stat(initramfs_file_name, &stats) == 0) {
- size = (uint32_t) stats.st_size;
- fwrite(&size, sizeof(size), 1, ramdrive_file);
- } else {
- fprintf(stderr, "Cannot stat initramfs file '%s'\n", initramfs_file_name);
- exit(1);
- }
+ /* Move past where lengths go */
+ int length_offset = 2 * sizeof(uint32_t);
+ fseek(ramdrive_file, length_offset, SEEK_SET);
+ uint32_t last_pos = ftell(ramdrive_file);
if (append_file(ramdrive_file, kernel_file_name)) {
fprintf(stderr, "Cannot append kernel '%s'\n", kernel_file_name);
exit(1);
}
+
+ uint32_t kernel_size = ftell(ramdrive_file) - last_pos;
+ last_pos = ftell(ramdrive_file);
+
if (append_file(ramdrive_file, initramfs_file_name)) {
fprintf(stderr, "Cannot append initramfs '%s'\n", initramfs_file_name);
exit(1);
}
+
+ uint32_t initramfs_size = ftell(ramdrive_file) - last_pos;
+
+ /* Now write the lengths */
+ fseek(ramdrive_file, 0, SEEK_SET);
+ fwrite(&kernel_size, sizeof(kernel_size), 1, ramdrive_file);
+ fwrite(&initramfs_size, sizeof(initramfs_size), 1, ramdrive_file);
+
fclose(ramdrive_file);
/* Flush ram drive writes to device */
@@ -68,10 +66,17 @@ int append_file(FILE *dst_file, char *src_file_name) {
FILE *src_file;
char buff[BUFSIZ];
size_t n;
+
+ if (*src_file_name == '!') {
+ src_file_name++;
+ src_file = popen(src_file_name, "r");
+ } else {
+ src_file = fopen(src_file_name, "rb");
+ }
- if (src_file = fopen(src_file_name, "rb")) {
+ if (src_file) {
while ((n = fread(buff, 1, BUFSIZ, src_file)) != 0) {
- fwrite(buff, 1, n, dst_file );
+ fwrite(buff, 1, n, dst_file);
}
fclose(src_file);
return 0;