rpms/mkelfimage/F-9 mkelfImage-2.7-ramdisk_base.patch, NONE, 1.1 mkelfimage.spec, 1.3, 1.4
Warren Togami 砥上勇 (wtogami)
fedora-extras-commits at redhat.com
Wed May 21 23:50:53 UTC 2008
Author: wtogami
Update of /cvs/pkgs/rpms/mkelfimage/F-9
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv11809
Modified Files:
mkelfimage.spec
Added Files:
mkelfImage-2.7-ramdisk_base.patch
Log Message:
Add support for intelligent placement of the ramdisk.
mkelfImage-2.7-ramdisk_base.patch:
--- NEW FILE mkelfImage-2.7-ramdisk_base.patch ---
diff -up mkelfImage-2.7/linux-i386/convert_params.c.ramdisk_base mkelfImage-2.7/linux-i386/convert_params.c
--- mkelfImage-2.7/linux-i386/convert_params.c.ramdisk_base 2006-03-27 18:44:59.000000000 -0500
+++ mkelfImage-2.7/linux-i386/convert_params.c 2008-05-21 12:55:44.000000000 -0400
@@ -1301,6 +1301,44 @@ static void query_firmware_values(struct
}
+static void relocate_ramdisk(struct param_info *info)
+{
+ struct e820entry *e820_map;
+ struct e820entry *highest = 0;
+ unsigned long load_addr;
+ int i;
+
+ e820_map = info->real_mode->e820_map;
+#if 0
+ printf("initrd_start = 0x%lx\n", info->real_mode->initrd_start);
+ printf("real_mode->e820_map_nr: %d\n", info->real_mode->e820_map_nr);
+#endif
+ for (i = 0; i < info->real_mode->e820_map_nr; i++) {
+ if (e820_map[i].type != E820_RAM)
+ continue;
+#if 0
+ printf("addr: 0x%lx len: %x\n", e820_map[i].addr, e820_map[i].size);
+#endif
+ if (highest && e820_map[i].addr < highest->addr)
+ continue;
+ if (e820_map[i].size < info->real_mode->initrd_size)
+ continue;
+ if (e820_map[i].addr + info->real_mode->initrd_size >= 0x38000000)
+ continue;
+ highest = &e820_map[i];
+ }
+
+ if (highest == 0)
+ return;
+
+ load_addr = highest->addr + highest->size;
+ load_addr -= info->real_mode->initrd_size;
+ load_addr &= ~0xfffUL;
+
+ memcpy((void *)load_addr, (void *)info->real_mode->initrd_start, info->real_mode->initrd_size);
+ printf("relocating ramdisk to 0x%lx\n", load_addr);
+ info->real_mode->initrd_start = load_addr;
+}
/*
* Debug
* =============================================================================
@@ -1533,6 +1571,10 @@ void *convert_params(unsigned type, void
query_firmware_class(&info);
query_firmware_values(&info);
query_bootloader_values(&info);
+ if (info.real_mode->initrd_size) {
+ /* Make sure the initrd is in a relatively safe place. */
+ relocate_ramdisk(&info);
+ }
/* Do the hardware setup that linux might forget... */
hardware_setup(&info);
diff -up mkelfImage-2.7/linux-i386/mkelf-linux-i386.c.ramdisk_base mkelfImage-2.7/linux-i386/mkelf-linux-i386.c
--- mkelfImage-2.7/linux-i386/mkelf-linux-i386.c.ramdisk_base 2006-03-17 09:08:22.000000000 -0500
+++ mkelfImage-2.7/linux-i386/mkelf-linux-i386.c 2008-05-21 10:47:42.000000000 -0400
@@ -352,6 +352,9 @@ int linux_i386_mkelf(int argc, char **ar
*/
params->initrd_start = params->initrd_size = 0;
if (ramdisk_size) {
+ while (ramdisk_base <= kernel_size)
+ ramdisk_base <<= 1;
+
phdr[index].p_paddr = ramdisk_base;
phdr[index].p_vaddr = ramdisk_base;
phdr[index].p_filesz = ramdisk_size;
Index: mkelfimage.spec
===================================================================
RCS file: /cvs/pkgs/rpms/mkelfimage/F-9/mkelfimage.spec,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- mkelfimage.spec 14 Feb 2008 17:43:31 -0000 1.3
+++ mkelfimage.spec 21 May 2008 23:50:12 -0000 1.4
@@ -1,7 +1,7 @@
Summary: Utility to create ELF boot images from Linux kernel images
Name: mkelfimage
Version: 2.7
-Release: 3%{?dist}
+Release: 4%{?dist}
# No license declaration in the source files, but parts come from the Linux
# kernel.
License: GPLv2
@@ -9,6 +9,7 @@
URL: ftp://ftp.lnxi.com/pub/mkelfImage/
Source0: ftp://ftp.lnxi.com/pub/mkelfImage/mkelfImage-%{version}.tar.gz
Patch0: mkelfimage-makefileconf.patch
+Patch1: mkelfImage-2.7-ramdisk_base.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
@@ -22,6 +23,7 @@
%prep
%setup -q -n mkelfImage-%{version}
%patch0 -p1 -b .makefileconf
+%patch1 -p1 -b .ramdisk_base
%build
%configure
@@ -44,6 +46,9 @@
%{_mandir}/man8/mkelfImage.8.gz
%changelog
+* Wed May 21 2008 Peter Jones <pjones at redhat.com> - 2.7-4
+- Add support for intelligent placement of the ramdisk.
+
* Fri Feb 08 2008 Warren Togami <wtogami at redhat.com> - 2.7-3
- rebuild for gcc-4.3
More information about the fedora-extras-commits
mailing list