summaryrefslogtreecommitdiff
path: root/util/mkelfImage/main
diff options
context:
space:
mode:
authorRonald G. Minnich <rminnich@gmail.com>2014-10-06 15:30:37 +0000
committerPatrick Georgi <patrick@georgi-clan.de>2014-10-08 14:27:24 +0200
commit34fc4ab80b507739e2580d490dff67fcfdde11ea (patch)
treec3f28628ef1ec499a0a922f0e8c489620074c25d /util/mkelfImage/main
parent076c317d479b701af1b1561d0cd53ec1102016aa (diff)
mkelfimage: remove
It's not been needed for years, is definitely not needed now that cbfstool parses bzImages, and its presence keeps confusing people. Also, rewrite history. We never mentioned mkelfimage in the documentation. Never, ever, ever. Change-Id: Id96a57906ba6a423b06a8f4140d2efde6f280d55 Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-on: http://review.coreboot.org/7021 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Martin Roth <gaumless@gmail.com> Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'util/mkelfImage/main')
-rw-r--r--util/mkelfImage/main/Makefile18
-rw-r--r--util/mkelfImage/main/mkelfImage.c663
-rw-r--r--util/mkelfImage/main/mkelfImage.man166
3 files changed, 0 insertions, 847 deletions
diff --git a/util/mkelfImage/main/Makefile b/util/mkelfImage/main/Makefile
deleted file mode 100644
index 403b0a4245..0000000000
--- a/util/mkelfImage/main/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-MKELF_OBJS=$(OBJDIR)/main/mkelfImage.o \
- $(OBJDIR)/linux-i386/mkelf-linux-i386.o \
- $(OBJDIR)/linux-ia64/mkelf-linux-ia64.o
-
-$(OBJDIR)/sbin/mkelfImage: $(MKELF_OBJS) $(DEPS)
- $(MKDIR) -p $(@D)
- $(HOST_CC) $(HOST_CFLAGS) $(MKELF_OBJS) -o $@ $(LIBS)
-
-$(OBJDIR)/main/mkelfImage.o: main/mkelfImage.c include/mkelfImage.h $(DEPS)
- $(MKDIR) -p $(@D)
- $(HOST_CC) $(HOST_CFLAGS) -c $< -o $@
-
-$(OBJDIR)/man/man8/mkelfImage.8: main/mkelfImage.man
- $(MKDIR) -p $(@D)
- $(SED) \
- -e 's,^.TH MKELFIMAGE 8 "RELEASE_DATE" "VERSION"$$,.TH MKELFIMAGE 8 "$(RELEASE_DATE)" "$(VERSION)",' \
- $< > $@
- $(CP) $< $@
diff --git a/util/mkelfImage/main/mkelfImage.c b/util/mkelfImage/main/mkelfImage.c
deleted file mode 100644
index 0dcc8c2fc1..0000000000
--- a/util/mkelfImage/main/mkelfImage.c
+++ /dev/null
@@ -1,663 +0,0 @@
-#include <stdarg.h>
-#include <errno.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <getopt.h>
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#include "elf.h"
-#include "elf_boot.h"
-#include "mkelfImage.h"
-
-static struct file_type file_type[] = {
- { "linux-i386", linux_i386_probe, linux_i386_mkelf, linux_i386_usage },
- { "bzImage-i386", bzImage_i386_probe, linux_i386_mkelf, linux_i386_usage },
- { "vmlinux-i386", vmlinux_i386_probe, linux_i386_mkelf, linux_i386_usage },
- { "linux-ia64", linux_ia64_probe, linux_ia64_mkelf, linux_ia64_usage },
-};
-static const int file_types = sizeof(file_type)/sizeof(file_type[0]);
-
-void die(char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
- exit(1);
-}
-
-
-
-/**************************************************************************
-IPCHKSUM - Checksum IP Header
-**************************************************************************/
-uint16_t ipchksum(const void *data, unsigned long length)
-{
- unsigned long sum;
- unsigned long i;
- const uint8_t *ptr;
-
- /* In the most straight forward way possible,
- * compute an ip style checksum.
- */
- sum = 0;
- ptr = data;
- for(i = 0; i < length; i++) {
- unsigned long value;
- value = ptr[i];
- if (i & 1) {
- value <<= 8;
- }
- /* Add the new value */
- sum += value;
- /* Wrap around the carry */
- if (sum > 0xFFFF) {
- sum = (sum + (sum >> 16)) & 0xFFFF;
- }
- }
- return (~cpu_to_le16(sum)) & 0xFFFF;
-}
-
-uint16_t add_ipchksums(unsigned long offset, uint16_t sum, uint16_t new)
-{
- unsigned long checksum;
- sum = ~sum & 0xFFFF;
- new = ~new & 0xFFFF;
- if (offset & 1) {
- /* byte swap the sum if it came from an odd offset
- * since the computation is endian independant this
- * works.
- */
- new = bswap_16(new);
- }
- checksum = sum + new;
- if (checksum > 0xFFFF) {
- checksum -= 0xFFFF;
- }
- return (~checksum) & 0xFFFF;
-}
-
-void *xmalloc(size_t size, const char *name)
-{
- void *buf;
- buf = malloc(size);
- if (!buf) {
- die("Cannot malloc %ld bytes to hold %s: %s\n",
- size + 0UL, name, strerror(errno));
- }
- return buf;
-}
-
-void *xrealloc(void *ptr, size_t size, const char *name)
-{
- void *buf;
- buf = realloc(ptr, size);
- if (!buf) {
- die("Cannot realloc %ld bytes to hold %s: %s\n",
- size + 0UL, name, strerror(errno));
- }
- return buf;
-}
-
-
-char *slurp_file(const char *filename, off_t *r_size)
-{
- int fd;
- char *buf;
- off_t size, progress;
- ssize_t result;
- struct stat stats;
-
-
- if (!filename) {
- *r_size = 0;
- return 0;
- }
- fd = open(filename, O_RDONLY);
- if (fd < 0) {
- die("Cannot open `%s': %s\n",
- filename, strerror(errno));
- }
- result = fstat(fd, &stats);
- if (result < 0) {
- die("Cannot stat: %s: %s\n",
- filename, strerror(errno));
- }
- size = stats.st_size;
- *r_size = size;
- buf = xmalloc(size, filename);
- progress = 0;
- while(progress < size) {
- result = read(fd, buf + progress, size - progress);
- if (result < 0) {
- if ((errno == EINTR) || (errno == EAGAIN))
- continue;
- die("read on %s of %ld bytes failed: %s\n",
- filename, (size - progress)+ 0UL, strerror(errno));
- }
- progress += result;
- }
- result = close(fd);
- if (result < 0) {
- die("Close of %s failed: %s\n",
- filename, strerror(errno));
- }
- return buf;
-}
-
-#if HAVE_ZLIB_H
-char *slurp_decompress_file(const char *filename, off_t *r_size)
-{
- gzFile fp;
- int errnum;
- const char *msg;
- char *buf;
- off_t size, allocated;
- ssize_t result;
-
- if (!filename) {
- *r_size = 0;
- return 0;
- }
- fp = gzopen(filename, "rb");
- if (fp == 0) {
- msg = gzerror(fp, &errnum);
- if (errnum == Z_ERRNO) {
- msg = strerror(errno);
- }
- die("Cannot open `%s': %s\n", filename, msg);
- }
- size = 0;
- allocated = 65536;
- buf = xmalloc(allocated, filename);
- do {
- if (size == allocated) {
- allocated <<= 1;
- buf = xrealloc(buf, allocated, filename);
- }
- result = gzread(fp, buf + size, allocated - size);
- if (result < 0) {
- if ((errno == EINTR) || (errno == EAGAIN))
- continue;
-
- msg = gzerror(fp, &errnum);
- if (errnum == Z_ERRNO) {
- msg = strerror(errno);
- }
- die ("read on %s of %ld bytes failed: %s\n",
- filename, (allocated - size) + 0UL, msg);
- }
- size += result;
- } while(result > 0);
- result = gzclose(fp);
- if (result != Z_OK) {
- msg = gzerror(fp, &errnum);
- if (errnum == Z_ERRNO) {
- msg = strerror(errno);
- }
- die ("Close of %s failed: %s\n", filename, msg);
- }
- *r_size = size;
- return buf;
-}
-#else
-char *slurp_decompress_file(const char *filename, off_t *r_size)
-{
- return slurp_file(filename, r_size);
-}
-#endif
-
-struct memelfphdr *add_program_headers(struct memelfheader *ehdr, int count)
-{
- struct memelfphdr *phdr;
- int i;
- ehdr->e_phnum = count;
- ehdr->e_phdr = phdr = xmalloc(count *sizeof(*phdr), "Program headers");
- /* Set the default values */
- for(i = 0; i < count; i++) {
- phdr[i].p_type = PT_LOAD;
- phdr[i].p_flags = PF_R | PF_W | PF_X;
- phdr[i].p_vaddr = 0;
- phdr[i].p_paddr = 0;
- phdr[i].p_filesz = 0;
- phdr[i].p_memsz = 0;
- phdr[i].p_data = 0;
- }
- return phdr;
-}
-
-struct memelfnote *add_notes(struct memelfheader *ehdr, int count)
-{
- struct memelfnote *notes;
- ehdr->e_notenum = count;
- ehdr->e_notes = notes = xmalloc(count *sizeof(*notes), "Notes");
- memset(notes, 0, count *sizeof(*notes));
- return notes;
-}
-
-static int sizeof_notes(struct memelfnote *note, int notes)
-{
- int size;
- int i;
-
- size = 0;
- for(i = 0; i < notes; i++) {
- size += sizeof(Elf_Nhdr);
- size += roundup(strlen(note[i].n_name)+1, 4);
- size += roundup(note[i].n_descsz, 4);
- }
- return size;
-}
-
-static uint16_t cpu_to_elf16(struct memelfheader *ehdr, uint16_t val)
-{
- if (ehdr->ei_data == ELFDATA2LSB) {
- return cpu_to_le16(val);
- }
- else if (ehdr->ei_data == ELFDATA2MSB) {
- return cpu_to_be16(val);
- }
- die("Uknown elf layout in cpu_to_elf16");
- return 0;
-}
-
-static uint32_t cpu_to_elf32(struct memelfheader *ehdr, uint32_t val)
-{
- if (ehdr->ei_data == ELFDATA2LSB) {
- return cpu_to_le32(val);
- }
- else if (ehdr->ei_data == ELFDATA2MSB) {
- return cpu_to_be32(val);
- }
- die("Uknown elf layout in cpu_to_elf32");
- return 0;
-}
-
-static uint64_t cpu_to_elf64(struct memelfheader *ehdr, uint64_t val)
-{
- if (ehdr->ei_data == ELFDATA2LSB) {
- return cpu_to_le64(val);
- }
- else if (ehdr->ei_data == ELFDATA2MSB) {
- return cpu_to_be64(val);
- }
- die("Uknown elf layout in cpu_to_elf64");
- return 0;
-}
-
-static void serialize_notes(char *buf, struct memelfheader *ehdr)
-{
- struct Elf_Nhdr hdr;
- struct memelfnote *note;
- int notes;
- size_t size, offset;
- int i;
-
- /* Clear the buffer */
- note = ehdr->e_notes;
- notes = ehdr->e_notenum;
- size = sizeof_notes(note, notes);
- memset(buf, 0, size);
-
- /* Write the Elf Notes */
- offset = 0;
- for(i = 0; i < notes; i++) {
- /* Compute the note header */
- size_t n_namesz;
- n_namesz = strlen(note[i].n_name) +1;
- hdr.n_namesz = cpu_to_elf32(ehdr, n_namesz);
- hdr.n_descsz = cpu_to_elf32(ehdr, note[i].n_descsz);
- hdr.n_type = cpu_to_elf32(ehdr, note[i].n_type);
-
- /* Copy the note into the buffer */
- memcpy(buf + offset, &hdr, sizeof(hdr));
- offset += sizeof(hdr);
- memcpy(buf + offset, note[i].n_name, n_namesz);
- offset += roundup(n_namesz, 4);
- memcpy(buf + offset, note[i].n_desc, note[i].n_descsz);
- offset += roundup(note[i].n_descsz, 4);
-
- }
-}
-static void serialize_ehdr(char *buf, struct memelfheader *ehdr)
-{
- if (ehdr->ei_class == ELFCLASS32) {
- Elf32_Ehdr *hdr = (Elf32_Ehdr *)buf;
- hdr->e_ident[EI_MAG0] = ELFMAG0;
- hdr->e_ident[EI_MAG1] = ELFMAG1;
- hdr->e_ident[EI_MAG2] = ELFMAG2;
- hdr->e_ident[EI_MAG3] = ELFMAG3;
- hdr->e_ident[EI_CLASS] = ehdr->ei_class;
- hdr->e_ident[EI_DATA] = ehdr->ei_data;
- hdr->e_ident[EI_VERSION] = EV_CURRENT;
- hdr->e_type = cpu_to_elf16(ehdr, ehdr->e_type);
- hdr->e_machine = cpu_to_elf16(ehdr, ehdr->e_machine);
- hdr->e_version = cpu_to_elf32(ehdr, EV_CURRENT);
- hdr->e_entry = cpu_to_elf32(ehdr, ehdr->e_entry);
- hdr->e_phoff = cpu_to_elf32(ehdr, sizeof(*hdr));
- hdr->e_shoff = cpu_to_elf32(ehdr, 0);
- hdr->e_flags = cpu_to_elf32(ehdr, ehdr->e_flags);
- hdr->e_ehsize = cpu_to_elf16(ehdr, sizeof(*hdr));
- hdr->e_phentsize = cpu_to_elf16(ehdr, sizeof(Elf32_Phdr));
- hdr->e_phnum = cpu_to_elf16(ehdr, ehdr->e_phnum);
- hdr->e_shentsize = cpu_to_elf16(ehdr, 0);
- hdr->e_shnum = cpu_to_elf16(ehdr, 0);
- hdr->e_shstrndx = cpu_to_elf16(ehdr, 0);
- }
- else if (ehdr->ei_class == ELFCLASS64) {
- Elf64_Ehdr *hdr = (Elf64_Ehdr *)buf;
- hdr->e_ident[EI_MAG0] = ELFMAG0;
- hdr->e_ident[EI_MAG1] = ELFMAG1;
- hdr->e_ident[EI_MAG2] = ELFMAG2;
- hdr->e_ident[EI_MAG3] = ELFMAG3;
- hdr->e_ident[EI_CLASS] = ehdr->ei_class;
- hdr->e_ident[EI_DATA] = ehdr->ei_data;
- hdr->e_ident[EI_VERSION] = EV_CURRENT;
- hdr->e_type = cpu_to_elf16(ehdr, ehdr->e_type);
- hdr->e_machine = cpu_to_elf16(ehdr, ehdr->e_machine);
- hdr->e_version = cpu_to_elf32(ehdr, EV_CURRENT);
- hdr->e_entry = cpu_to_elf64(ehdr, ehdr->e_entry);
- hdr->e_phoff = cpu_to_elf64(ehdr, sizeof(*hdr));
- hdr->e_shoff = cpu_to_elf64(ehdr, 0);
- hdr->e_flags = cpu_to_elf32(ehdr, ehdr->e_flags);
- hdr->e_ehsize = cpu_to_elf16(ehdr, sizeof(*hdr));
- hdr->e_phentsize = cpu_to_elf16(ehdr, sizeof(Elf64_Phdr));
- hdr->e_phnum = cpu_to_elf16(ehdr, ehdr->e_phnum);
- hdr->e_shentsize = cpu_to_elf16(ehdr, 0);
- hdr->e_shnum = cpu_to_elf16(ehdr, 0);
- hdr->e_shstrndx = cpu_to_elf16(ehdr, 0);
- }
- else die("Uknown elf class: %x\n", ehdr->ei_class);
-}
-static void serialize_phdrs(char *buf, struct memelfheader *ehdr, size_t note_size)
-{
- int i;
- size_t offset, note_offset;
- if (ehdr->ei_class == ELFCLASS32) {
- Elf32_Phdr *phdr = (Elf32_Phdr *)buf;
- note_offset =
- sizeof(Elf32_Ehdr) + (sizeof(Elf32_Phdr)*ehdr->e_phnum);
- offset = note_offset + note_size;
- for(i = 0; i < ehdr->e_phnum; i++) {
- struct memelfphdr *hdr = ehdr->e_phdr + i;
- phdr[i].p_type = cpu_to_elf32(ehdr, hdr->p_type);
- phdr[i].p_offset = cpu_to_elf32(ehdr, offset);
- phdr[i].p_vaddr = cpu_to_elf32(ehdr, hdr->p_vaddr);
- phdr[i].p_paddr = cpu_to_elf32(ehdr, hdr->p_paddr);
- phdr[i].p_filesz = cpu_to_elf32(ehdr, hdr->p_filesz);
- phdr[i].p_memsz = cpu_to_elf32(ehdr, hdr->p_memsz);
- phdr[i].p_flags = cpu_to_elf32(ehdr, hdr->p_flags);
- phdr[i].p_align = cpu_to_elf32(ehdr, 0);
- if (phdr[i].p_type == PT_NOTE) {
- phdr[i].p_filesz = cpu_to_elf32(ehdr, note_size);
- phdr[i].p_memsz = cpu_to_elf32(ehdr, note_size);
- phdr[i].p_offset = cpu_to_elf32(ehdr, note_offset);
- } else {
- offset += hdr->p_filesz;
- }
- }
- }
- else if (ehdr->ei_class == ELFCLASS64) {
- Elf64_Phdr *phdr = (Elf64_Phdr *)buf;
- note_offset =
- sizeof(Elf64_Ehdr) + (sizeof(Elf64_Phdr)*ehdr->e_phnum);
- offset = note_offset + note_size;
- for(i = 0; i < ehdr->e_phnum; i++) {
- struct memelfphdr *hdr = ehdr->e_phdr + i;
- phdr[i].p_type = cpu_to_elf32(ehdr, hdr->p_type);
- phdr[i].p_flags = cpu_to_elf32(ehdr, hdr->p_flags);
- phdr[i].p_offset = cpu_to_elf64(ehdr, offset);
- phdr[i].p_vaddr = cpu_to_elf64(ehdr, hdr->p_vaddr);
- phdr[i].p_paddr = cpu_to_elf64(ehdr, hdr->p_paddr);
- phdr[i].p_filesz = cpu_to_elf64(ehdr, hdr->p_filesz);
- phdr[i].p_memsz = cpu_to_elf64(ehdr, hdr->p_memsz);
- phdr[i].p_align = cpu_to_elf64(ehdr, 0);
- if (phdr[i].p_type == PT_NOTE) {
- phdr[i].p_filesz = cpu_to_elf64(ehdr, note_size);
- phdr[i].p_memsz = cpu_to_elf64(ehdr, note_size);
- phdr[i].p_offset = cpu_to_elf64(ehdr, note_offset);
- } else {
- offset += hdr->p_filesz;
- }
- }
- }
- else {
- die("Unknwon elf class: %x\n", ehdr->ei_class);
- }
-}
-
-static void write_buf(int fd, char *buf, size_t size)
-{
- size_t progress = 0;
- ssize_t result;
- while(progress < size) {
- result = write(fd, buf + progress, size - progress);
- if (result < 0) {
- if ((errno == EAGAIN) || (errno == EINTR)) {
- continue;
- }
- die ("write of %ld bytes failed: %s\n",
- size - progress, strerror(errno));
- }
- progress += result;
- }
-}
-static void write_elf(struct memelfheader *ehdr, char *output)
-{
- size_t ehdr_size;
- size_t phdr_size;
- size_t note_size;
- size_t size;
- uint16_t checksum;
- size_t bytes;
- char *buf;
- int result, fd;
- int i;
- /* Prep for adding the checksum */
- for(i = 0; i < ehdr->e_notenum; i++) {
- if ((memcmp(ehdr->e_notes[i].n_name, "ELFBoot", 8) == 0) &&
- (ehdr->e_notes[i].n_type == EIN_PROGRAM_CHECKSUM)) {
- ehdr->e_notes[i].n_desc = &checksum;
- ehdr->e_notes[i].n_descsz = 2;
- }
- }
- /* Compute the sizes */
- ehdr_size = 0;
- phdr_size = 0;
- note_size = 0;
- if (ehdr->e_notenum) {
- note_size = sizeof_notes(ehdr->e_notes, ehdr->e_notenum);
- }
- if (ehdr->ei_class == ELFCLASS32) {
- ehdr_size = sizeof(Elf32_Ehdr);
- phdr_size = sizeof(Elf32_Phdr) * ehdr->e_phnum;
- }
- else if (ehdr->ei_class == ELFCLASS64) {
- ehdr_size = sizeof(Elf64_Ehdr);
- phdr_size = sizeof(Elf64_Phdr) * ehdr->e_phnum;
- }
- else {
- die("Unknown elf class: %x\n", ehdr->ei_class);
- }
-
- /* Allocate a buffer to temporarily hold the serialized forms */
- size = ehdr_size + phdr_size + note_size;
- buf = xmalloc(size, "Elf Headers");
- memset(buf, 0, size);
- serialize_ehdr(buf, ehdr);
- serialize_phdrs(buf + ehdr_size, ehdr, note_size);
-
- /* Compute the checksum... */
- checksum = ipchksum(buf, ehdr_size + phdr_size);
- bytes = ehdr_size + phdr_size;
- for(i = 0; i < ehdr->e_phnum; i++) {
- checksum = add_ipchksums(bytes, checksum,
- ipchksum(ehdr->e_phdr[i].p_data, ehdr->e_phdr[i].p_filesz));
- bytes += ehdr->e_phdr[i].p_memsz;
- }
-
- /* Compute the final form of the notes */
- serialize_notes(buf + ehdr_size + phdr_size, ehdr);
-
- /* Now write the elf image */
- fd = open(output, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IRGRP | S_IROTH);
- if (fd < 0) {
- die("Cannot open ``%s'':%s\n",
- output, strerror(errno));
- }
- write_buf(fd, buf, size);
- for(i = 0; i < ehdr->e_phnum; i++) {
- write_buf(fd, ehdr->e_phdr[i].p_data, ehdr->e_phdr[i].p_filesz);
- }
- result = close(fd);
- if (result < 0) {
- die("Close on %s failed: %s\n",
- output, strerror(errno));
- }
-}
-
-static void version(void)
-{
- printf("mkelfImage " VERSION " released " RELEASE_DATE "\n");
-}
-void usage(void)
-{
- int i;
- version();
- printf(
- "Usage: mkelfImage [OPTION]... <kernel> <elf_kernel>\n"
- "Build an ELF bootable kernel image from a normal kernel image\n"
- "\n"
- " -h, --help Print this help.\n"
- " -v, --version Print the version of kexec.\n"
- " --kernel=<filename> Set the kernel to <filename>\n"
- " --output=<filename> Output to <filename>\n"
- " -t, --type=TYPE Specify the new kernel is of <type>.\n"
- "\n"
- "Supported kernel types: \n"
- );
- for(i = 0; i < file_types; i++) {
- printf("%s\n", file_type[i].name);
- file_type[i].usage();
- }
- printf("\n");
-}
-
-void error(char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
- usage();
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- int opt;
- int fileind;
- char *type, *kernel, *output;
- off_t kernel_size;
- char *kernel_buf;
- int result;
- int i;
- struct memelfheader hdr;
-
- static const struct option options[] = {
- MKELF_OPTIONS
- { 0, 0, 0, 0 },
- };
- static const char short_options[] = MKELF_OPT_STR;
-
- memset(&hdr, 0, sizeof(hdr));
- kernel = 0;
- output = 0;
-
- /* Get the default type from the program name */
- type = strrchr(argv[0], '/');
- if (!type) type = argv[0];
- if (memcmp(type, "mkelf-", 6) == 0) {
- type = type + 6;
- } else {
- type = 0;
- }
- opterr = 0; /* Don't complain about unrecognized options here */
- while ((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) {
- switch(opt) {
- case OPT_HELP:
- usage();
- return 0;
- case OPT_VERSION:
- version();
- return 0;
- case OPT_KERNEL:
- kernel = optarg;
- break;
- case OPT_OUTPUT:
- output = optarg;
- break;
- case OPT_TYPE:
- type = optarg;
- break;
- default:
- break;
- }
- }
- fileind = optind;
-
- /* Reset getopt for the next pass */
- opterr = 1;
- optind = 1;
-
- if (argc - fileind > 0) {
- kernel = argv[fileind++];
- }
- if (argc - fileind > 0) {
- output = argv[fileind++];
- }
- if (!kernel) {
- error("No kernel specified!\n");
- }
- if (!output) {
- error("No output file specified!\n");
- }
- if (argc - fileind > 0) {
- error("%d extra options specified!\n", argc - fileind);
- }
-
- /* slurp in the input kernel */
- kernel_buf = slurp_decompress_file(kernel, &kernel_size);
-
- /* Find/verify the kernel type */
- for(i = 0; i < file_types; i++) {
- char *reason;
- if (type && (strcmp(type, file_type[i].name) != 0)) {
- continue;
- }
- reason = file_type[i].probe(kernel_buf, kernel_size);
- if (reason == 0) {
- break;
- }
- if (type) {
- die("Not %s: %s\n", type, reason);
- }
- }
- if (i == file_types) {
- die("Can not determine the file type of %s\n", kernel);
- }
- result = file_type[i].mkelf(argc, argv, &hdr, kernel_buf, kernel_size);
- if (result < 0) {
- die("Cannot create %s result: %d\n", output, result);
- }
- /* open the output file */
- write_elf(&hdr, output);
- return 0;
-}
diff --git a/util/mkelfImage/main/mkelfImage.man b/util/mkelfImage/main/mkelfImage.man
deleted file mode 100644
index faf3613d47..0000000000
--- a/util/mkelfImage/main/mkelfImage.man
+++ /dev/null
@@ -1,166 +0,0 @@
-.\" Automatically generated by Pod::Man v1.3, Pod::Parser v1.13
-.\" But now manually maintained
-.\"
-.\" Standard preamble:
-.\" ========================================================================
-.de Sh \" Subsection heading
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. | will give a
-.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
-.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
-.\" expand to `' in nroff, nothing in troff, for use with C<>.
-.tr \(*W-|\(bv\*(Tr
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` ""
-. ds C' ""
-'br\}
-.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
-'br\}
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
-.\" entries marked with X<> in POD. Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.if \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. nr % 0
-. rr F
-.\}
-.\"
-.\" For nroff, turn off justification. Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.hy 0
-.if n .na
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "MKELFIMAGE 8"
-.TH MKELFIMAGE 8 "RELEASE_DATE" "VERSION"
-.UC
-.SH "NAME"
-mkelfImage \- make an elf network bootable image for linux
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-\&\fBmkelfImage\fR [\-\-command\-line=\fIcommand line\fR] [\-\-kernel=\fIpath to vmlinux\fR] [\-\-ramdisk=\fIpath to ramdisk\fR] [\-\-output=\fIfile\fR] [\-\-ramdisk\-base=<start addr>]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-\&\fBmkelfImage\fR is a program that makes a elf boot image for linux kernel
-images. The image should work with any i386 multiboot compliant boot loader,
-an \s-1ELF\s0 bootloader that passes no options, a loader compliant with the linuxBIOS
-elf booting spec or with the linux kexec kernel patch. A key feature
-here is that nothing relies upon \s-1BIOS\s0 calls, but they are made when
-necessary. This is useful for systems running linuxbios.
-.SH "BUGS"
-.IX Header "BUGS"
-Not all kernel parameters can be passed with the multiboot image format.
-ip configuration is not automatically passed to a node.
-The ramdisk base is hard coded to 8MB by default.
-This man page need to be updated.
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-The kexec kernel patch.
-LinuxBIOS.
-Etherboot.
-The multiboot standard.
-.SH "COPYRIGHT"
-.IX Header "COPYRIGHT"
-mkelfImage is under the \s-1GNU\s0 Public License version 2
-.SH "AUTHOR"
-.IX Header "AUTHOR"
-Eric Biederman <ebiederman@lnxi.com>