У меня проблемы с пониманием некоторого фрагмента кода в драйвере MTD
#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
...
static struct mtd_partition my_parts[] =
{
{
.name = "boot",
.size = 0,
.offset = 0,
.mask_flags = MTD_WRITEABLE
},
{
.name = "linux",
.size = 0,
.offset = 0
},
{
.name = "rootfs",
.size = 0,
.offset = 0,
.mask_flags = MTD_WRITEABLE
},
{
.name = "nvram",
.size = 0,
.offset = 0
},
{
.name = 0,
.size = 0,
.offset = 0
}
}
...
i = (sizeof(bcm947xx_parts)/sizeof(struct mtd_partition)) - 2;
bcm947xx_parts[i].size = ROUNDUP(NVRAM_SPACE, mtd->erasesize);
bcm947xx_parts[i].offset = size - bcm947xx_parts[i].size;
Итак, вот мои вопросы: 1) зачем нужно округлять размер раздела? 2) не могли бы вы помочь понять, как работает округление? 3) флэш-драйвер в загрузчике на той же платформе не выполняет округление для этого конкретного раздела, поэтому макет флэш-памяти имеет разные смещения на стороне ядра и в загрузчике. В чем причина этого?
Заранее благодарим за ценные комментарии!