FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Kubuntu User

 
 
LinkBack Thread Tools
 
Old 11-30-2010, 01:42 PM
David Cantrell
 
Default Generate correct initrd.addrsize file for System z (#647827)

On 11/29/2010 11:46 PM, Martin Gracik wrote:

Well, I can't say I know precisely what s390 needs, but I don't see
anything wrong with the patch.

I just have one question, the generic.ins file can be overriden or
changed to have some other values? Or why isn't the 0x00010408 address
as a constant in geninitrdsz.c if we only grep and pass it?


They are mostly constant. Based on previous releases, we have to change
these values in generic.ins from time to time. Ideally we won't have to
modify geninitrdsz.c anymore, but we might have to change generic.ins
one or more times. generic.ins has to exist in order to boot the
system, so since we need the value somewhere, I just kept it where it's
always been located.


This isn't a very elegant system and I would prefer that we generate
generic.ins entirely at image building time. This patch needs to go in
for 5.6 though and master can hopefully get a better solution since I
will have more time.


Thanks,



On Mon, 2010-11-29 at 16:59 -1000, David Cantrell wrote:

The previous fix just updated the generic.ins files, but that was not
enough. We also needed to modify geninitrdsz.c to compute the size of
the initrd.img file and add that to the initrd.addrsize file. Get the
load address from the generic.ins file.
---
bootdisk/s390/generic.ins | 2 +-
bootdisk/s390x/generic.ins | 2 +-
scripts/mk-images.s390 | 6 +++---
utils/geninitrdsz.c | 42 +++++++++++++++++++++++++++++++-----------
4 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/bootdisk/s390/generic.ins b/bootdisk/s390/generic.ins
index 2f513db..b991dfd 100644
--- a/bootdisk/s390/generic.ins
+++ b/bootdisk/s390/generic.ins
@@ -2,4 +2,4 @@
images/kernel.img 0x00000000
images/initrd.img 0x02000000
images/generic.prm 0x00010480
-images/initrd.size 0x00010408
+images/initrd.addrsize 0x00010408
diff --git a/bootdisk/s390x/generic.ins b/bootdisk/s390x/generic.ins
index 2f513db..b991dfd 100644
--- a/bootdisk/s390x/generic.ins
+++ b/bootdisk/s390x/generic.ins
@@ -2,4 +2,4 @@
images/kernel.img 0x00000000
images/initrd.img 0x02000000
images/generic.prm 0x00010480
-images/initrd.size 0x00010408
+images/initrd.addrsize 0x00010408
diff --git a/scripts/mk-images.s390 b/scripts/mk-images.s390
index 9dff2de..afb616e 100644
--- a/scripts/mk-images.s390
+++ b/scripts/mk-images.s390
@@ -8,8 +8,8 @@ makeBootImages() {
--initrdsize 20000
--loaderbin loader
--modules "$INITRDMODS $S390MODS"
- sz=$(ls -l $TOPDESTPATH/images/initrd.img | awk '{print $5}')
- $GENINITRDSZ $sz $TOPDESTPATH/images/initrd.size
+ addr=$(grep "/initrd.img" $BOOTDISKDIR/generic.ins | cut -d ' ' -f 2)
+ $GENINITRDSZ $addr $TOPDESTPATH/images/initrd.img $TOPDESTPATH/images/initrd.addrsize
cp -vf $KERNELROOT/boot/${KERNELNAME}-${version} $TOPDESTPATH/images/kernel.img

cp -v $BOOTDISKDIR/generic.prm $TOPDESTPATH/images/generic.prm
@@ -26,7 +26,7 @@ makeBootImages() {
[images-$KERNELARCH]
kernel = images/kernel.img
initrd = images/initrd.img
-initrd.size = images/initrd.size
+initrd.addrsize = images/initrd.addrsize
generic.prm = images/generic.prm
generic.ins = generic.ins
cdboot.img = images/cdboot.img
diff --git a/utils/geninitrdsz.c b/utils/geninitrdsz.c
index 01d1cf1..ed7caab 100644
--- a/utils/geninitrdsz.c
+++ b/utils/geninitrdsz.c
@@ -1,7 +1,7 @@
/*
- * Generate initrd.size file for zSeries platforms.
+ * Generate initrd.addrsize file for zSeries platforms.
* Takes an integer argument and writes out the binary representation of
- * that value to the initrd.size file.
+ * that value to the initrd.addrsize file.
* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=197773
*/

@@ -17,27 +17,47 @@
#include<string.h>

int main(int argc,char **argv) {
+ char *prog = basename(argv[0]);
+ struct stat initrd_sbuf;
unsigned int zero = 0;
- int fd;
- unsigned int size;
+ unsigned int addr, size;
+ int fd, rc;
+ char *tmp;
mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;

- if (argc != 3) {
- printf("Usage: %s [integer size] [output file]
", basename(argv[0]));
- printf("Example: %s 12288475 initrd.size
", basename(argv[0]));
+ if (argc != 4) {
+ printf("Usage: %s [address] [initrd file] [output file]
", prog);
+ printf("Example: %s 0x2000000 initrd.img initrd.addrsize
", prog);
return 0;
}

- size = htonl(atoi(argv[1]));
- fd = open(argv[2], O_CREAT | O_RDWR, mode);
+ rc = stat(argv[2],&initrd_sbuf);
+ if (rc) {
+ perror("Error getting initrd stats ");
+ return rc;
+ }
+
+ addr = htonl(strtoul(argv[1],&tmp, 0));
+ size = htonl(initrd_sbuf.st_size);
+ fd = open(argv[3], O_CREAT | O_RDWR, mode);
+
+ if (write(fd,&zero, sizeof(int)) == -1) {
+ perror("writing first zero");
+ return errno;
+ }
+
+ if (write(fd,&addr, sizeof(int)) == -1) {
+ perror("writing addr");
+ return errno;
+ }

if (write(fd,&zero, sizeof(int)) == -1) {
- perror("writing initrd.size (zero)");
+ perror("writing second zero");
return errno;
}

if (write(fd,&size, sizeof(int)) == -1) {
- perror("writing initrd.size (size)");
+ perror("writing size");
return errno;
}






--
David Cantrell <dcantrell@redhat.com>
Red Hat / Honolulu, HI

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 11:09 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org