Compare commits

...

12 Commits

Author SHA1 Message Date
mintsuki
f5cfd6710d Binary release v2.33 2021-07-11 00:21:40 +00:00
mintsuki
a4be378fad Binary release v2.32 2021-07-10 12:31:57 +00:00
mintsuki
f024767359 Binary release v2.31 2021-07-10 00:57:01 +00:00
mintsuki
7deacc5dc4 Binary release v2.30 2021-07-08 16:22:31 +00:00
mintsuki
df3429aeb4 Binary release v2.29 2021-07-07 08:22:01 +00:00
mintsuki
f3df8c34ca Binary release v2.28 2021-07-07 04:18:19 +00:00
mintsuki
4a250dd367 Binary release v2.27 2021-07-03 00:08:24 +00:00
mintsuki
239a9cad62 Binary release v2.26 2021-06-30 21:35:07 +00:00
mintsuki
97be83460a Binary release v2.25 2021-06-30 17:07:45 +00:00
mintsuki
2862a26145 Binary release v2.24 2021-06-24 23:36:35 +00:00
mintsuki
57f875ff80 Binary release v2.23 2021-06-22 12:07:02 +00:00
mintsuki
00bbd375d9 Binary release v2.22 2021-06-15 01:28:01 +00:00
11 changed files with 99 additions and 24 deletions

Binary file not shown.

View File

@@ -20,7 +20,7 @@ install: all
install -d "$(DESTDIR)$(PREFIX)/share/limine" install -d "$(DESTDIR)$(PREFIX)/share/limine"
install -m 644 limine.sys "$(DESTDIR)$(PREFIX)/share/limine/" install -m 644 limine.sys "$(DESTDIR)$(PREFIX)/share/limine/"
install -m 644 limine-cd.bin "$(DESTDIR)$(PREFIX)/share/limine/" install -m 644 limine-cd.bin "$(DESTDIR)$(PREFIX)/share/limine/"
install -m 644 limine-eltorito-efi.bin "$(DESTDIR)$(PREFIX)/share/limine/" install -m 644 limine-eltorito-efi.bin "$(DESTDIR)$(PREFIX)/share/limine/" || true
install -m 644 limine-pxe.bin "$(DESTDIR)$(PREFIX)/share/limine/" install -m 644 limine-pxe.bin "$(DESTDIR)$(PREFIX)/share/limine/"
install -m 644 BOOTX64.EFI "$(DESTDIR)$(PREFIX)/share/limine/" install -m 644 BOOTX64.EFI "$(DESTDIR)$(PREFIX)/share/limine/"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -265,6 +265,7 @@ extern uint8_t _binary_limine_hdd_bin_start[], _binary_limine_hdd_bin_end[];
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
int ok = 1; int ok = 1;
int force_mbr = 0;
uint8_t *bootloader_img = _binary_limine_hdd_bin_start; uint8_t *bootloader_img = _binary_limine_hdd_bin_start;
size_t bootloader_file_size = size_t bootloader_file_size =
(size_t)_binary_limine_hdd_bin_end - (size_t)_binary_limine_hdd_bin_start; (size_t)_binary_limine_hdd_bin_end - (size_t)_binary_limine_hdd_bin_start;
@@ -280,6 +281,12 @@ int main(int argc, char *argv[]) {
goto cleanup; goto cleanup;
} }
if (argc >= 3) {
if (strcmp(argv[2], "--force-mbr") == 0) {
force_mbr = 1;
}
}
device = open(argv[1], O_RDWR); device = open(argv[1], O_RDWR);
if (device == -1) { if (device == -1) {
perror("ERROR"); perror("ERROR");
@@ -297,10 +304,15 @@ int main(int argc, char *argv[]) {
for (size_t i = 0; i < sizeof(lb_guesses) / sizeof(uint64_t); i++) { for (size_t i = 0; i < sizeof(lb_guesses) / sizeof(uint64_t); i++) {
device_read(&gpt_header, lb_guesses[i], sizeof(struct gpt_table_header)); device_read(&gpt_header, lb_guesses[i], sizeof(struct gpt_table_header));
if (!strncmp(gpt_header.signature, "EFI PART", 8)) { if (!strncmp(gpt_header.signature, "EFI PART", 8)) {
gpt = 1;
lb_size = lb_guesses[i]; lb_size = lb_guesses[i];
fprintf(stderr, "Installing to GPT. Logical block size of %" PRIu64 " bytes.\n", if (!force_mbr) {
lb_guesses[i]); gpt = 1;
fprintf(stderr, "Installing to GPT. Logical block size of %" PRIu64 " bytes.\n",
lb_guesses[i]);
} else {
memset(&gpt_header, 0, sizeof(struct gpt_table_header));
device_write(&gpt_header, lb_guesses[i], sizeof(struct gpt_table_header));
}
break; break;
} }
} }
@@ -326,45 +338,108 @@ int main(int argc, char *argv[]) {
uint16_t hint = 0; uint16_t hint = 0;
device_read(&hint, 218, sizeof(uint16_t)); device_read(&hint, 218, sizeof(uint16_t));
if (hint != 0) if (hint != 0) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = 0;
device_write(&hint, 218, sizeof(uint16_t));
}
}
device_read(&hint, 444, sizeof(uint16_t)); device_read(&hint, 444, sizeof(uint16_t));
if (hint != 0 && hint != 0x5a5a) if (hint != 0 && hint != 0x5a5a) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = 0;
device_write(&hint, 444, sizeof(uint16_t));
}
}
device_read(&hint, 510, sizeof(uint16_t)); device_read(&hint, 510, sizeof(uint16_t));
if (hint != 0xaa55) if (hint != 0xaa55) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = 0xaa55;
device_write(&hint, 510, sizeof(uint16_t));
}
}
device_read(&hint, 446, sizeof(uint8_t)); device_read(&hint, 446, sizeof(uint8_t));
if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = (uint8_t)hint & 0x80 ? 0x80 : 0x00;
device_write(&hint, 446, sizeof(uint8_t));
}
}
device_read(&hint, 462, sizeof(uint8_t)); device_read(&hint, 462, sizeof(uint8_t));
if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = (uint8_t)hint & 0x80 ? 0x80 : 0x00;
device_write(&hint, 462, sizeof(uint8_t));
}
}
device_read(&hint, 478, sizeof(uint8_t)); device_read(&hint, 478, sizeof(uint8_t));
if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = (uint8_t)hint & 0x80 ? 0x80 : 0x00;
device_write(&hint, 478, sizeof(uint8_t));
}
}
device_read(&hint, 494, sizeof(uint8_t)); device_read(&hint, 494, sizeof(uint8_t));
if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = (uint8_t)hint & 0x80 ? 0x80 : 0x00;
device_write(&hint, 494, sizeof(uint8_t));
}
}
char hintc[64]; char hintc[64];
device_read(hintc, 4, 8); device_read(hintc, 4, 8);
if (memcmp(hintc, "_ECH_FS_", 8) == 0) if (memcmp(hintc, "_ECH_FS_", 8) == 0) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
memset(hintc, 0, 8);
device_write(hintc, 4, 8);
}
}
device_read(hintc, 54, 3); device_read(hintc, 54, 3);
if (memcmp(hintc, "FAT", 3) == 0) if (memcmp(hintc, "FAT", 3) == 0) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
memset(hintc, 0, 5);
device_write(hintc, 54, 5);
}
}
device_read(&hint, 1080, sizeof(uint16_t)); device_read(&hint, 1080, sizeof(uint16_t));
if (hint == 0xef53) if (hint == 0xef53) {
mbr = 0; if (!force_mbr) {
mbr = 0;
} else {
hint = 0;
device_write(&hint, 1080, sizeof(uint16_t));
}
}
} }
if (gpt == 0 && mbr == 0) { if (gpt == 0 && mbr == 0) {
fprintf(stderr, "ERROR: Could not determine if the device has a valid partition table.\n"); fprintf(stderr, "ERROR: Could not determine if the device has a valid partition table.\n");
fprintf(stderr, " Please ensure the device has a valid MBR or GPT.\n"); fprintf(stderr, " Please ensure the device has a valid MBR or GPT.\n");
fprintf(stderr, " Alternatively, pass `--force-mbr` at the end of the command to\n");
fprintf(stderr, " override these checks. ONLY DO THIS AT YOUR OWN RISK, DATA LOSS\n");
fprintf(stderr, " MAY OCCUR!\n");
goto cleanup; goto cleanup;
} }

Binary file not shown.

Binary file not shown.