aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils/src/imagetag.c
diff options
context:
space:
mode:
authorJonas Gorski <jogo@openwrt.org>2015-02-27 17:38:14 +0000
committerJonas Gorski <jogo@openwrt.org>2015-02-27 17:38:14 +0000
commit646c36ca8216bab23b5262f9c4d1c2873b7d1785 (patch)
tree91e32f9689842e9329028ee3b5b6e99347394419 /tools/firmware-utils/src/imagetag.c
parentc204c43a6564cf909842f1b10405bfdb8370a96f (diff)
downloadmaster-187ad058-646c36ca8216bab23b5262f9c4d1c2873b7d1785.tar.gz
master-187ad058-646c36ca8216bab23b5262f9c4d1c2873b7d1785.tar.bz2
master-187ad058-646c36ca8216bab23b5262f9c4d1c2873b7d1785.zip
brcm63xx: do not align squashfs rootfs start
We do not need to align the start of read only rootfs's to erase blocks. This allows us to write the squashfs rootfs directly behind the kernel, potentially freeing up one erase block. We still need to align for jffs2, so add a flag for imagetag to optionally align the rootfs start. Signed-off-by: Jonas Gorski <jogo@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44556 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'tools/firmware-utils/src/imagetag.c')
-rw-r--r--tools/firmware-utils/src/imagetag.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/tools/firmware-utils/src/imagetag.c b/tools/firmware-utils/src/imagetag.c
index c15ffd72d6..f04f98d560 100644
--- a/tools/firmware-utils/src/imagetag.c
+++ b/tools/firmware-utils/src/imagetag.c
@@ -83,7 +83,8 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin, \
struct kernelhdr khdr;
FILE *kernelfile = NULL, *rootfsfile = NULL, *binfile = NULL, *cfefile = NULL;
size_t cfeoff, cfelen, kerneloff, kernellen, rootfsoff, rootfslen, \
- read, imagelen, rootfsoffpadlen = 0, kernelfslen, kerneloffpadlen = 0, oldrootfslen;
+ read, imagelen, rootfsoffpadlen = 0, kernelfslen, kerneloffpadlen = 0, oldrootfslen, \
+ rootfsend;
uint8_t readbuf[1024];
uint32_t imagecrc = IMAGETAG_CRC_START;
uint32_t kernelcrc = IMAGETAG_CRC_START;
@@ -157,11 +158,17 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin, \
kernellen += sizeof(khdr);
}
- /* Build the rootfs address and length (start and end do need to be aligned on flash erase block boundaries */
+ /* Build the rootfs address and length */
rootfsoff = kerneloff + kernellen;
- rootfsoff = (rootfsoff % block_size) > 0 ? (((rootfsoff / block_size) + 1) * block_size) : rootfsoff;
- rootfslen = getlen(rootfsfile);
- rootfslen = ( (rootfslen % block_size) > 0 ? (((rootfslen / block_size) + 1) * block_size) : rootfslen );
+ /* align the start if requested */
+ if (args->align_rootfs_flag)
+ rootfsoff = (rootfsoff % block_size) > 0 ? (((rootfsoff / block_size) + 1) * block_size) : rootfsoff;
+
+ /* align the end */
+ rootfsend = rootfsoff + getlen(rootfsfile);
+ if ((rootfsend % block_size) > 0)
+ rootfsend = (((rootfsend / block_size) + 1) * block_size);
+ rootfslen = rootfsend - rootfsoff;
imagelen = rootfsoff + rootfslen - kerneloff + sizeof(deadcode);
rootfsoffpadlen = rootfsoff - (kerneloff + kernellen);
@@ -390,7 +397,7 @@ int main(int argc, char **argv)
kernel = rootfs = bin = NULL;
- if (cmdline_parser(argc, argv, &parsed_args)) {
+ if (imagetag_cmdline(argc, argv, &parsed_args)) {
exit(1);
}