Hi booters, i just hacked a few lines to get the fibmap of an iso image - I created an iso of my /usr/sbin and mounted it on /mnt/loop flo@paradigm:/mnt/loop$ sudo ~/ff rdate File: rdate Size: 5264 Blocks: 3 Blocksize: 2048 0 1240 1 1241 2 1242 flo@paradigm:/mnt/loop$ cd flo@paradigm:$ dd if=test.iso of=t count=3 bs=2048 skip=1240 3+0 records in 3+0 records out flo@paradigm:~$ cmp t /mnt/loop/rdate cmp: EOF on /mnt/loop/rdate Which shows that it is possible to find the correct blocks on an iso9660 filesystem. Now one has to make an iso of the "boot-floppies" directory and generate the fibmap of the kernel + ramdisk bootimage (tftpboot ?) and build a "boot-sector" from it for the decstation case and a "volume header" for the sgi case. It should be possible to generate a volume-header+iso image for the sgis and get the tftpboot.img from it with dvhtool which should be some kind of verification. I have attached the ff.c code for people to play with. Flo -- Florian Lohoff flo@rfc822.org +49-5201-669912 Nine nineth on september the 9th Welcome to the new billenium
#include <stdio.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <linux/fs.h> #include <linux/hdreg.h> #include <assert.h> #include <string.h> #include <errno.h> int main(int argc, char **argv) { int fd, i, block, blocksize, bcount; struct stat st; assert(argv[1] != NULL); assert(fd=open(argv[1], O_RDONLY)); assert(ioctl(fd, FIGETBSZ, &blocksize) == 0); assert(!fstat(fd, &st)); bcount = (st.st_size + blocksize - 1) / blocksize; printf("File: %s Size: %d Blocks: %d Blocksize: %d\n", argv[1], st.st_size, bcount, blocksize); for(i=0;i < bcount;i++) { block=i; if (ioctl(fd, FIBMAP, &block)) { printf("FIBMAP ioctl failed - errno: %s\n", strerror(errno)); } printf("%3d %10d\n", i, block); } close(fd); }
Attachment:
pgpruLnotosNk.pgp
Description: PGP signature