mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 13:48:06 +00:00
tools/firmware-utils/ptgen option to use MB rounding
SVN-Revision: 33218
This commit is contained in:
parent
60e6fcd31b
commit
6c9d20d6e7
@ -15,7 +15,7 @@ ROOTFSSIZE="$5"
|
|||||||
head=4
|
head=4
|
||||||
sect=63
|
sect=63
|
||||||
|
|
||||||
set `ptgen -o $OUTPUT -h $head -s $sect -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M`
|
set `ptgen -o $OUTPUT -h $head -s $sect -l 4096 -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M`
|
||||||
|
|
||||||
BOOTOFFSET="$(($1 / 512))"
|
BOOTOFFSET="$(($1 / 512))"
|
||||||
BOOTSIZE="$(($2 / 512))"
|
BOOTSIZE="$(($2 / 512))"
|
||||||
|
@ -56,6 +56,7 @@ int verbose = 0;
|
|||||||
int active = 1;
|
int active = 1;
|
||||||
int heads = -1;
|
int heads = -1;
|
||||||
int sectors = -1;
|
int sectors = -1;
|
||||||
|
int kb_align = 0;
|
||||||
struct partinfo parts[4];
|
struct partinfo parts[4];
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
|
|
||||||
@ -117,6 +118,11 @@ static inline unsigned long round_to_cyl(long sect) {
|
|||||||
return sect + cyl_size - (sect % cyl_size);
|
return sect + cyl_size - (sect % cyl_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* round the sector number up to the kb_align boundary */
|
||||||
|
static inline unsigned long round_to_kb(long sect) {
|
||||||
|
return ((sect - 1) / kb_align + 1) * kb_align;
|
||||||
|
}
|
||||||
|
|
||||||
/* check the partition sizes and write the partition table */
|
/* check the partition sizes and write the partition table */
|
||||||
static int gen_ptable(int nr)
|
static int gen_ptable(int nr)
|
||||||
{
|
{
|
||||||
@ -132,8 +138,13 @@ static int gen_ptable(int nr)
|
|||||||
}
|
}
|
||||||
pte[i].active = ((i + 1) == active) ? 0x80 : 0;
|
pte[i].active = ((i + 1) == active) ? 0x80 : 0;
|
||||||
pte[i].type = parts[i].type;
|
pte[i].type = parts[i].type;
|
||||||
pte[i].start = cpu_to_le16(start = sect + sectors);
|
start = sect + sectors;
|
||||||
sect = round_to_cyl(start + parts[i].size * 2);
|
if (kb_align != 0)
|
||||||
|
start = round_to_kb(start);
|
||||||
|
pte[i].start = cpu_to_le16(start);
|
||||||
|
sect = start + parts[i].size * 2;
|
||||||
|
if (kb_align == 0)
|
||||||
|
sect = round_to_cyl(sect);
|
||||||
pte[i].length = cpu_to_le16(len = sect - start);
|
pte[i].length = cpu_to_le16(len = sect - start);
|
||||||
to_chs(start, pte[i].chs_start);
|
to_chs(start, pte[i].chs_start);
|
||||||
to_chs(start + len - 1, pte[i].chs_end);
|
to_chs(start + len - 1, pte[i].chs_end);
|
||||||
@ -167,7 +178,7 @@ fail:
|
|||||||
|
|
||||||
static void usage(char *prog)
|
static void usage(char *prog)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s [-v] -h <heads> -s <sectors> -o <outputfile> [-a 0..4] [[-t <type>] -p <size>...] \n", prog);
|
fprintf(stderr, "Usage: %s [-v] -h <heads> -s <sectors> -o <outputfile> [-a 0..4] [-l <align kB>] [[-t <type>] -p <size>...] \n", prog);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +188,7 @@ int main (int argc, char **argv)
|
|||||||
int ch;
|
int ch;
|
||||||
int part = 0;
|
int part = 0;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "h:s:p:a:t:o:v")) != -1) {
|
while ((ch = getopt(argc, argv, "h:s:p:a:t:o:vl:")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'o':
|
case 'o':
|
||||||
filename = optarg;
|
filename = optarg;
|
||||||
@ -207,6 +218,9 @@ int main (int argc, char **argv)
|
|||||||
if ((active < 0) || (active > 4))
|
if ((active < 0) || (active > 4))
|
||||||
active = 0;
|
active = 0;
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
kb_align = (int) strtoul(optarg, NULL, 0) * 2;
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
default:
|
default:
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
Loading…
Reference in New Issue
Block a user