summaryrefslogtreecommitdiffstats
path: root/yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch')
-rw-r--r--yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch427
1 files changed, 0 insertions, 427 deletions
diff --git a/yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch b/yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
deleted file mode 100644
index 2400c98d6..000000000
--- a/yocto-poky/meta/recipes-devtools/syslinux/syslinux/0008-libinstaller-syslinuxext-implement-syslinux_patch_bo.patch
+++ /dev/null
@@ -1,427 +0,0 @@
-From 78d76b87a4b855e6b661ae457283a63f385c04c9 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Fri, 2 Jan 2015 12:26:46 +0800
-Subject: [PATCH 8/9] libinstaller/syslinuxext: implement
- syslinux_patch_bootsect()
-
-Move the related from extlinux/main.c to libinstaller/syslinuxext.c, the
-syslinux_patch_bootsect() are used by both extlinux/main.c and
-linux/syslinux.c.
-
-Upstream-Status: Submitted
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-Tested-by: Du Dolpher <dolpher.du@intel.com>
----
- extlinux/Makefile | 3 +-
- extlinux/main.c | 167 +-------------------------------------------
- libinstaller/syslinuxext.c | 170 +++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 175 insertions(+), 165 deletions(-)
-
-diff --git a/extlinux/Makefile b/extlinux/Makefile
-index 02d1db5..90dd92f 100644
---- a/extlinux/Makefile
-+++ b/extlinux/Makefile
-@@ -31,7 +31,8 @@ SRCS = main.c \
- ../libinstaller/advio.c \
- ../libinstaller/bootsect_bin.c \
- ../libinstaller/ldlinuxc32_bin.c \
-- ../libinstaller/ldlinux_bin.c
-+ ../libinstaller/ldlinux_bin.c \
-+ ../libinstaller/syslinuxext.c
- OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS)))
-
- .SUFFIXES: .c .o .i .s .S
-diff --git a/extlinux/main.c b/extlinux/main.c
-index 09740bd..6fe026e 100644
---- a/extlinux/main.c
-+++ b/extlinux/main.c
-@@ -60,6 +60,7 @@
- #include "setadv.h"
- #include "syslxopt.h" /* unified options */
- #include "mountinfo.h"
-+#include "syslinuxext.h"
-
- #ifdef DEBUG
- # define dprintf printf
-@@ -67,10 +68,6 @@
- # define dprintf(...) ((void)0)
- #endif
-
--#ifndef EXT2_SUPER_OFFSET
--#define EXT2_SUPER_OFFSET 1024
--#endif
--
- /* Since we have unused 2048 bytes in the primary AG of an XFS partition,
- * we will use the first 0~512 bytes starting from 2048 for the Syslinux
- * boot sector.
-@@ -92,136 +89,6 @@ static char subvol[BTRFS_SUBVOL_MAX];
- - 2*ADV_SIZE)
-
- /*
-- * Get the size of a block device
-- */
--static uint64_t get_size(int devfd)
--{
-- uint64_t bytes;
-- uint32_t sects;
-- struct stat st;
--
--#ifdef BLKGETSIZE64
-- if (!ioctl(devfd, BLKGETSIZE64, &bytes))
-- return bytes;
--#endif
-- if (!ioctl(devfd, BLKGETSIZE, &sects))
-- return (uint64_t) sects << 9;
-- else if (!fstat(devfd, &st) && st.st_size)
-- return st.st_size;
-- else
-- return 0;
--}
--
--/*
-- * Get device geometry and partition offset
-- */
--struct geometry_table {
-- uint64_t bytes;
-- struct hd_geometry g;
--};
--
--static int sysfs_get_offset(int devfd, unsigned long *start)
--{
-- struct stat st;
-- char sysfs_name[128];
-- FILE *f;
-- int rv;
--
-- if (fstat(devfd, &st))
-- return -1;
--
-- if ((size_t)snprintf(sysfs_name, sizeof sysfs_name,
-- "/sys/dev/block/%u:%u/start",
-- major(st.st_rdev), minor(st.st_rdev))
-- >= sizeof sysfs_name)
-- return -1;
--
-- f = fopen(sysfs_name, "r");
-- if (!f)
-- return -1;
--
-- rv = fscanf(f, "%lu", start);
-- fclose(f);
--
-- return (rv == 1) ? 0 : -1;
--}
--
--/* Standard floppy disk geometries, plus LS-120. Zipdisk geometry
-- (x/64/32) is the final fallback. I don't know what LS-240 has
-- as its geometry, since I don't have one and don't know anyone that does,
-- and Google wasn't helpful... */
--static const struct geometry_table standard_geometries[] = {
-- {360 * 1024, {2, 9, 40, 0}},
-- {720 * 1024, {2, 9, 80, 0}},
-- {1200 * 1024, {2, 15, 80, 0}},
-- {1440 * 1024, {2, 18, 80, 0}},
-- {1680 * 1024, {2, 21, 80, 0}},
-- {1722 * 1024, {2, 21, 80, 0}},
-- {2880 * 1024, {2, 36, 80, 0}},
-- {3840 * 1024, {2, 48, 80, 0}},
-- {123264 * 1024, {8, 32, 963, 0}}, /* LS120 */
-- {0, {0, 0, 0, 0}}
--};
--
--int get_geometry(int devfd, uint64_t totalbytes, struct hd_geometry *geo)
--{
-- struct floppy_struct fd_str;
-- struct loop_info li;
-- struct loop_info64 li64;
-- const struct geometry_table *gp;
-- int rv = 0;
--
-- memset(geo, 0, sizeof *geo);
--
-- if (!ioctl(devfd, HDIO_GETGEO, geo)) {
-- goto ok;
-- } else if (!ioctl(devfd, FDGETPRM, &fd_str)) {
-- geo->heads = fd_str.head;
-- geo->sectors = fd_str.sect;
-- geo->cylinders = fd_str.track;
-- geo->start = 0;
-- goto ok;
-- }
--
-- /* Didn't work. Let's see if this is one of the standard geometries */
-- for (gp = standard_geometries; gp->bytes; gp++) {
-- if (gp->bytes == totalbytes) {
-- memcpy(geo, &gp->g, sizeof *geo);
-- goto ok;
-- }
-- }
--
-- /* Didn't work either... assign a geometry of 64 heads, 32 sectors; this is
-- what zipdisks use, so this would help if someone has a USB key that
-- they're booting in USB-ZIP mode. */
--
-- geo->heads = opt.heads ? : 64;
-- geo->sectors = opt.sectors ? : 32;
-- geo->cylinders = totalbytes / (geo->heads * geo->sectors << SECTOR_SHIFT);
-- geo->start = 0;
--
-- if (!opt.sectors && !opt.heads) {
-- fprintf(stderr,
-- "Warning: unable to obtain device geometry (defaulting to %d heads, %d sectors)\n"
-- " (on hard disks, this is usually harmless.)\n",
-- geo->heads, geo->sectors);
-- rv = 1; /* Suboptimal result */
-- }
--
--ok:
-- /* If this is a loopback device, try to set the start */
-- if (!ioctl(devfd, LOOP_GET_STATUS64, &li64))
-- geo->start = li64.lo_offset >> SECTOR_SHIFT;
-- else if (!ioctl(devfd, LOOP_GET_STATUS, &li))
-- geo->start = (unsigned int)li.lo_offset >> SECTOR_SHIFT;
-- else if (!sysfs_get_offset(devfd, &geo->start)) {
-- /* OK */
-- }
--
-- return rv;
--}
--
--/*
- * Query the device geometry and put it into the boot sector.
- * Map the file and put the map in the boot sector and file.
- * Stick the "current directory" inode number into the file.
-@@ -231,11 +98,8 @@ ok:
- static int patch_file_and_bootblock(int fd, const char *dir, int devfd)
- {
- struct stat dirst, xdst;
-- struct hd_geometry geo;
- sector_t *sectp;
-- uint64_t totalbytes, totalsectors;
- int nsect;
-- struct fat_boot_sector *sbs;
- char *dirpath, *subpath, *xdirpath;
- int rv;
-
-@@ -279,33 +143,8 @@ static int patch_file_and_bootblock(int fd, const char *dir, int devfd)
- /* Now subpath should contain the path relative to the fs base */
- dprintf("subpath = %s\n", subpath);
-
-- totalbytes = get_size(devfd);
-- get_geometry(devfd, totalbytes, &geo);
--
-- if (opt.heads)
-- geo.heads = opt.heads;
-- if (opt.sectors)
-- geo.sectors = opt.sectors;
--
-- /* Patch this into a fake FAT superblock. This isn't because
-- FAT is a good format in any way, it's because it lets the
-- early bootstrap share code with the FAT version. */
-- dprintf("heads = %u, sect = %u\n", geo.heads, geo.sectors);
--
-- sbs = (struct fat_boot_sector *)syslinux_bootsect;
--
-- totalsectors = totalbytes >> SECTOR_SHIFT;
-- if (totalsectors >= 65536) {
-- set_16(&sbs->bsSectors, 0);
-- } else {
-- set_16(&sbs->bsSectors, totalsectors);
-- }
-- set_32(&sbs->bsHugeSectors, totalsectors);
--
-- set_16(&sbs->bsBytesPerSec, SECTOR_SIZE);
-- set_16(&sbs->bsSecPerTrack, geo.sectors);
-- set_16(&sbs->bsHeads, geo.heads);
-- set_32(&sbs->bsHiddenSecs, geo.start);
-+ /* Patch syslinux_bootsect */
-+ syslinux_patch_bootsect(devfd);
-
- /* Construct the boot file map */
-
-diff --git a/libinstaller/syslinuxext.c b/libinstaller/syslinuxext.c
-index bb54cef..5a4423b 100644
---- a/libinstaller/syslinuxext.c
-+++ b/libinstaller/syslinuxext.c
-@@ -1,7 +1,177 @@
- #define _GNU_SOURCE
-
-+#include <sys/stat.h>
-+#include <sys/types.h>
-+#include <getopt.h>
-+#include <ext2fs/ext2fs.h>
-+
-+#include "linuxioctl.h"
-+#include "syslinux.h"
-+#include "syslxint.h"
-+#include "syslxopt.h"
-+
-+/*
-+ * Get the size of a block device
-+ */
-+static uint64_t get_size(int dev_fd)
-+{
-+ uint64_t bytes;
-+ uint32_t sects;
-+ struct stat st;
-+
-+#ifdef BLKGETSIZE64
-+ if (!ioctl(dev_fd, BLKGETSIZE64, &bytes))
-+ return bytes;
-+#endif
-+ if (!ioctl(dev_fd, BLKGETSIZE, &sects))
-+ return (uint64_t) sects << 9;
-+ else if (!fstat(dev_fd, &st) && st.st_size)
-+ return st.st_size;
-+ else
-+ return 0;
-+}
-+
-+/*
-+ * Get device geometry and partition offset
-+ */
-+static struct geometry_table {
-+ uint64_t bytes;
-+ struct hd_geometry g;
-+};
-+
-+static int sysfs_get_offset(int dev_fd, unsigned long *start)
-+{
-+ struct stat st;
-+ char sysfs_name[128];
-+ FILE *f;
-+ int rv;
-+
-+ if (fstat(dev_fd, &st))
-+ return -1;
-+
-+ if ((size_t)snprintf(sysfs_name, sizeof sysfs_name,
-+ "/sys/dev/block/%u:%u/start",
-+ major(st.st_rdev), minor(st.st_rdev))
-+ >= sizeof sysfs_name)
-+ return -1;
-+
-+ f = fopen(sysfs_name, "r");
-+ if (!f)
-+ return -1;
-+
-+ rv = fscanf(f, "%lu", start);
-+ fclose(f);
-+
-+ return (rv == 1) ? 0 : -1;
-+}
-+
-+/* Standard floppy disk geometries, plus LS-120. Zipdisk geometry
-+ (x/64/32) is the final fallback. I don't know what LS-240 has
-+ as its geometry, since I don't have one and don't know anyone that does,
-+ and Google wasn't helpful... */
-+static const struct geometry_table standard_geometries[] = {
-+ {360 * 1024, {2, 9, 40, 0}},
-+ {720 * 1024, {2, 9, 80, 0}},
-+ {1200 * 1024, {2, 15, 80, 0}},
-+ {1440 * 1024, {2, 18, 80, 0}},
-+ {1680 * 1024, {2, 21, 80, 0}},
-+ {1722 * 1024, {2, 21, 80, 0}},
-+ {2880 * 1024, {2, 36, 80, 0}},
-+ {3840 * 1024, {2, 48, 80, 0}},
-+ {123264 * 1024, {8, 32, 963, 0}}, /* LS120 */
-+ {0, {0, 0, 0, 0}}
-+};
-+
-+static int get_geometry(int dev_fd, uint64_t totalbytes, struct hd_geometry *geo)
-+{
-+ struct floppy_struct fd_str;
-+ struct loop_info li;
-+ struct loop_info64 li64;
-+ const struct geometry_table *gp;
-+ int rv = 0;
-+
-+ memset(geo, 0, sizeof *geo);
-+
-+ if (!ioctl(dev_fd, HDIO_GETGEO, geo)) {
-+ goto ok;
-+ } else if (!ioctl(dev_fd, FDGETPRM, &fd_str)) {
-+ geo->heads = fd_str.head;
-+ geo->sectors = fd_str.sect;
-+ geo->cylinders = fd_str.track;
-+ geo->start = 0;
-+ goto ok;
-+ }
-+
-+ /* Didn't work. Let's see if this is one of the standard geometries */
-+ for (gp = standard_geometries; gp->bytes; gp++) {
-+ if (gp->bytes == totalbytes) {
-+ memcpy(geo, &gp->g, sizeof *geo);
-+ goto ok;
-+ }
-+ }
-+
-+ /* Didn't work either... assign a geometry of 64 heads, 32 sectors; this is
-+ what zipdisks use, so this would help if someone has a USB key that
-+ they're booting in USB-ZIP mode. */
-+
-+ geo->heads = opt.heads ? : 64;
-+ geo->sectors = opt.sectors ? : 32;
-+ geo->cylinders = totalbytes / (geo->heads * geo->sectors << SECTOR_SHIFT);
-+ geo->start = 0;
-+
-+ if (!opt.sectors && !opt.heads) {
-+ fprintf(stderr,
-+ "Warning: unable to obtain device geometry (defaulting to %d heads, %d sectors)\n"
-+ " (on hard disks, this is usually harmless.)\n",
-+ geo->heads, geo->sectors);
-+ rv = 1; /* Suboptimal result */
-+ }
-+
-+ok:
-+ /* If this is a loopback device, try to set the start */
-+ if (!ioctl(dev_fd, LOOP_GET_STATUS64, &li64))
-+ geo->start = li64.lo_offset >> SECTOR_SHIFT;
-+ else if (!ioctl(dev_fd, LOOP_GET_STATUS, &li))
-+ geo->start = (unsigned int)li.lo_offset >> SECTOR_SHIFT;
-+ else if (!sysfs_get_offset(dev_fd, &geo->start)) {
-+ /* OK */
-+ }
-+
-+ return rv;
-+}
-+
-+
- /* Patch syslinux_bootsect */
- void syslinux_patch_bootsect(int dev_fd)
- {
-+ uint64_t totalbytes, totalsectors;
-+ struct hd_geometry geo;
-+ struct fat_boot_sector *sbs;
-+
-+ totalbytes = get_size(dev_fd);
-+ get_geometry(dev_fd, totalbytes, &geo);
-+
-+ if (opt.heads)
-+ geo.heads = opt.heads;
-+ if (opt.sectors)
-+ geo.sectors = opt.sectors;
-+
-+ /* Patch this into a fake FAT superblock. This isn't because
-+ FAT is a good format in any way, it's because it lets the
-+ early bootstrap share code with the FAT version. */
-+ sbs = (struct fat_boot_sector *)syslinux_bootsect;
-+
-+ totalsectors = totalbytes >> SECTOR_SHIFT;
-+ if (totalsectors >= 65536) {
-+ set_16(&sbs->bsSectors, 0);
-+ } else {
-+ set_16(&sbs->bsSectors, totalsectors);
-+ }
-+ set_32(&sbs->bsHugeSectors, totalsectors);
-+
-+ set_16(&sbs->bsBytesPerSec, SECTOR_SIZE);
-+ set_16(&sbs->bsSecPerTrack, geo.sectors);
-+ set_16(&sbs->bsHeads, geo.heads);
-+ set_32(&sbs->bsHiddenSecs, geo.start);
- }
-
---
-1.9.1
-
OpenPOWER on IntegriCloud