Files
2015-08-04 11:53:11 +03:00

183 lines
5.3 KiB
Diff

--- syslinux-5.00-orig/utils/isohybrid.pl 2012-12-06 21:51:22.000000000 +0200
+++ syslinux-5.00/utils/isohybrid.pl 2013-02-07 18:55:28.423760149 +0200
@@ -44,6 +44,7 @@
'id' => [0, 0xffffffff],
'hd0' => [0, 2],
'partok' => [0, 1],
+ 'fat' => [0, 1],
);
# Boolean options just set other options
@@ -53,6 +54,7 @@
'ctrlhd0' => ['hd0', 2],
'nopartok' => ['partok', 0],
'partok' => ['partok', 1],
+ 'fatfirst' => ['fat', 1],
);
sub usage() {
@@ -66,7 +68,8 @@
" -id Specify MBR ID (default random)\n",
" -forcehd0 Always assume we are loaded as disk ID 0\n",
" -ctrlhd0 Assume disk ID 0 if the Ctrl key is pressed\n",
- " -partok Allow booting from within a partition\n";
+ " -partok Allow booting from within a partition\n",
+ " -fatfirst Create a small fat partition first\n";
exit 1;
}
@@ -221,9 +224,9 @@
# Print partition table
$offset = $opt{'offset'};
-$psize = $c*$h*$s - $offset;
+$psize = $c*$h*$s - $offset - 1;
$bhead = int($offset/$s) % $h;
-$bsect = ($offset % $s) + 1;
+$bsect = ($offset % $s) + 1 + 1;
$bcyl = int($offset/($h*$s));
$bsect += ($bcyl & 0x300) >> 2;
$bcyl &= 0xff;
@@ -233,10 +236,29 @@
$fstype = $opt{'type'}; # Partition type
$pentry = $opt{'entry'}; # Partition slot
+$offset += $psize;
+$psize1 = $cylsize/512;
+$bhead1 = int(($offset+1)/$s) % $h;
+$bsect1 = (($offset+1) % $s) + 1;
+$bcyl1 = int(($offset+1)/($h*$s));
+$bsect1 += ($bcyl1 & 0x300) >> 2;
+$bcyl1 &= 0xff;
+$ehead1 = $h-1;
+$esect1 = $s;
+$ecyl1 = $bcyl1;
+print "ehead1=$ehead1 esect1=$esect1 ecyl1=$ecyl1\n";
+
+if ( $opt{'fat'} == 1 ) {
+ $pentry = 2;
+}
+
for ( $i = 1 ; $i <= 4 ; $i++ ) {
- if ( $i == $pentry ) {
+ if ( $opt{'fat'} == 1 && $i == 1 ) {
+ $mbr .= pack("CCCCCCCCVV", 0x00, $bhead1, $bsect1, $bcyl1, 0xc,
+ $ehead1, $esect1, $ecyl1, $offset+1, $psize1);
+ } elsif ( $i == $pentry ) {
$mbr .= pack("CCCCCCCCVV", 0x80, $bhead, $bsect, $bcyl, $fstype,
- $ehead, $esect, $ecyl, $offset, $psize);
+ $ehead, $esect, $ecyl, $offset + 1, $psize);
} else {
$mbr .= "\0" x 16;
}
@@ -251,6 +273,18 @@
print FILE "\0" x $padding;
}
+# Create fat image and put it into the file
+if($opt{'fat'}) {
+ open(FATFILE, "> $file.fat") or die "$0: cannot open $file.fat: $!\n";
+ print FATFILE "\0" x ($psize1*512);
+ close(FATFILE);
+ system("/usr/sbin/mkfs.vfat -n RESIZE_ME $file.fat") and die "$0: cannot format fat\n";
+ open(FATFILE, "< $file.fat");
+ print FILE <FATFILE>;
+ close(FATFILE);
+ unlink("$file.fat");
+}
+
# Done...
close(FILE);
--- syslinux-5.00-orig/utils/isohybrid.in 2012-12-06 21:51:22.000000000 +0200
+++ syslinux-5.00/utils/isohybrid.in 2013-02-07 18:55:28.423760149 +0200
@@ -44,6 +44,7 @@
'id' => [0, 0xffffffff],
'hd0' => [0, 2],
'partok' => [0, 1],
+ 'fat' => [0, 1],
);
# Boolean options just set other options
@@ -53,6 +54,7 @@
'ctrlhd0' => ['hd0', 2],
'nopartok' => ['partok', 0],
'partok' => ['partok', 1],
+ 'fatfirst' => ['fat', 1],
);
sub usage() {
@@ -66,7 +68,8 @@
" -id Specify MBR ID (default random)\n",
" -forcehd0 Always assume we are loaded as disk ID 0\n",
" -ctrlhd0 Assume disk ID 0 if the Ctrl key is pressed\n",
- " -partok Allow booting from within a partition\n";
+ " -partok Allow booting from within a partition\n",
+ " -fatfirst Create a small fat partition first\n";
exit 1;
}
@@ -221,9 +224,9 @@
# Print partition table
$offset = $opt{'offset'};
-$psize = $c*$h*$s - $offset;
+$psize = $c*$h*$s - $offset - 1;
$bhead = int($offset/$s) % $h;
-$bsect = ($offset % $s) + 1;
+$bsect = ($offset % $s) + 1 + 1;
$bcyl = int($offset/($h*$s));
$bsect += ($bcyl & 0x300) >> 2;
$bcyl &= 0xff;
@@ -233,10 +236,29 @@
$fstype = $opt{'type'}; # Partition type
$pentry = $opt{'entry'}; # Partition slot
+$offset += $psize;
+$psize1 = $cylsize/512;
+$bhead1 = int(($offset+1)/$s) % $h;
+$bsect1 = (($offset+1) % $s) + 1;
+$bcyl1 = int(($offset+1)/($h*$s));
+$bsect1 += ($bcyl1 & 0x300) >> 2;
+$bcyl1 &= 0xff;
+$ehead1 = $h-1;
+$esect1 = $s;
+$ecyl1 = $bcyl1;
+print "ehead1=$ehead1 esect1=$esect1 ecyl1=$ecyl1\n";
+
+if ( $opt{'fat'} == 1 ) {
+ $pentry = 2;
+}
+
for ( $i = 1 ; $i <= 4 ; $i++ ) {
- if ( $i == $pentry ) {
+ if ( $opt{'fat'} == 1 && $i == 1 ) {
+ $mbr .= pack("CCCCCCCCVV", 0x00, $bhead1, $bsect1, $bcyl1, 0xc,
+ $ehead1, $esect1, $ecyl1, $offset+1, $psize1);
+ } elsif ( $i == $pentry ) {
$mbr .= pack("CCCCCCCCVV", 0x80, $bhead, $bsect, $bcyl, $fstype,
- $ehead, $esect, $ecyl, $offset, $psize);
+ $ehead, $esect, $ecyl, $offset + 1, $psize);
} else {
$mbr .= "\0" x 16;
}
@@ -251,6 +273,18 @@
print FILE "\0" x $padding;
}
+# Create fat image and put it into the file
+if($opt{'fat'}) {
+ open(FATFILE, "> $file.fat") or die "$0: cannot open $file.fat: $!\n";
+ print FATFILE "\0" x ($psize1*512);
+ close(FATFILE);
+ system("/usr/sbin/mkfs.vfat -n RESIZE_ME $file.fat") and die "$0: cannot format fat\n";
+ open(FATFILE, "< $file.fat");
+ print FILE <FATFILE>;
+ close(FATFILE);
+ unlink("$file.fat");
+}
+
# Done...
close(FILE);