summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJP Abgrall <jpa@google.com>2014-06-16 11:08:45 -0700
committerJP Abgrall <jpa@google.com>2014-06-24 21:26:18 -0700
commit136c149632302337df2d225bb85ee3db3d7e1971 (patch)
tree36a8a28b1be3d40136d99f9e9f67eb646c631e2d
parent65f37f1e2bdcfa6cd565357aede3a93f1c077b29 (diff)
downloadextras-136c149632302337df2d225bb85ee3db3d7e1971.tar.gz
f2fs utils: Add mkf2fsuserimg.sh and make_f2fs
This is used to generate empty userdata.img files. Normally, "fastboot format userdata" should be used. Caveats: - It only builds an empty sparse image. - windows/mac unsupported Change-Id: I5fbd9724fdd3f4513e7c91f123fc5fffcb475012 Signed-off-by: JP Abgrall <jpa@google.com>
-rw-r--r--f2fs_utils/Android.mk22
-rw-r--r--f2fs_utils/make_f2fs_main.c88
-rwxr-xr-xf2fs_utils/mkf2fsuserimg.sh34
3 files changed, 143 insertions, 1 deletions
diff --git a/f2fs_utils/Android.mk b/f2fs_utils/Android.mk
index f3a186c1..8fb607c1 100644
--- a/f2fs_utils/Android.mk
+++ b/f2fs_utils/Android.mk
@@ -34,7 +34,6 @@ LOCAL_STATIC_LIBRARIES := \
LOCAL_C_INCLUDES := external/f2fs-tools/include external/f2fs-tools/mkfs
include $(BUILD_HOST_STATIC_LIBRARY)
-
#
# -- All host/targets excluding windows
#
@@ -42,6 +41,17 @@ include $(BUILD_HOST_STATIC_LIBRARY)
ifneq ($(HOST_OS),windows)
include $(CLEAR_VARS)
+LOCAL_SRC_FILES := make_f2fs_main.c
+LOCAL_MODULE := make_f2fs
+LOCAL_STATIC_LIBRARIES += \
+ libf2fs_utils_host \
+ libf2fs_dlutils_host
+# libf2fs_dlutils_host will dlopen("libf2fs_fmt_host_dyn")
+LOCAL_LDLIBS := -ldl
+LOCAL_SHARED_LIBRARIES := libf2fs_fmt_host_dyn
+include $(BUILD_HOST_EXECUTABLE)
+
+include $(CLEAR_VARS)
LOCAL_MODULE := libf2fs_dlutils
LOCAL_SRC_FILES := f2fs_dlutils.c
LOCAL_C_INCLUDES := external/f2fs-tools/include external/f2fs-tools/mkfs
@@ -63,5 +73,15 @@ LOCAL_STATIC_LIBRARIES := \
libsparse_static
include $(BUILD_STATIC_LIBRARY)
+include $(CLEAR_VARS)
+LOCAL_MODULE := mkf2fsuserimg.sh
+LOCAL_SRC_FILES := mkf2fsuserimg.sh
+LOCAL_MODULE_CLASS := EXECUTABLES
+# We don't need any additional suffix.
+LOCAL_MODULE_SUFFIX :=
+LOCAL_BUILT_MODULE_STEM := $(notdir $(LOCAL_SRC_FILES))
+LOCAL_IS_HOST_MODULE := true
+include $(BUILD_PREBUILT)
+
endif
diff --git a/f2fs_utils/make_f2fs_main.c b/f2fs_utils/make_f2fs_main.c
new file mode 100644
index 00000000..84042660
--- /dev/null
+++ b/f2fs_utils/make_f2fs_main.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <fcntl.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#if defined(__linux__)
+#include <linux/fs.h>
+#elif defined(__APPLE__) && defined(__MACH__)
+#include <sys/disk.h>
+#endif
+
+#ifndef USE_MINGW /* O_BINARY is windows-specific flag */
+#define O_BINARY 0
+#endif
+
+static void usage(char *path)
+{
+ fprintf(stderr, "%s -l <len>\n", basename(path));
+ fprintf(stderr, " <filename>\n");
+}
+
+int main(int argc, char **argv)
+{
+ int opt;
+ const char *filename = NULL;
+ int fd;
+ int exitcode;
+ long long len;
+ while ((opt = getopt(argc, argv, "l:")) != -1) {
+ switch (opt) {
+ case 'l':
+ len = atoll(optarg);
+ break;
+ default: /* '?' */
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+
+ if (optind >= argc) {
+ fprintf(stderr, "Expected filename after options\n");
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ filename = argv[optind++];
+
+ if (optind < argc) {
+ fprintf(stderr, "Unexpected argument: %s\n", argv[optind]);
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ if (strcmp(filename, "-")) {
+ fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644);
+ if (fd < 0) {
+ perror("open");
+ return EXIT_FAILURE;
+ }
+ } else {
+ fd = STDOUT_FILENO;
+ }
+
+ exitcode = make_f2fs_sparse_fd(fd, len, NULL, NULL);
+
+ close(fd);
+ if (exitcode && strcmp(filename, "-"))
+ unlink(filename);
+ return exitcode;
+}
diff --git a/f2fs_utils/mkf2fsuserimg.sh b/f2fs_utils/mkf2fsuserimg.sh
new file mode 100755
index 00000000..93ec743b
--- /dev/null
+++ b/f2fs_utils/mkf2fsuserimg.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+#
+# To call this script, make sure make_f2fs is somewhere in PATH
+
+function usage() {
+cat<<EOT
+Usage:
+${0##*/} OUTPUT_FILE SIZE
+EOT
+}
+
+echo "in mkf2fsuserimg.sh PATH=$PATH"
+
+if [ $# -lt 2 ]; then
+ usage
+ exit 1
+fi
+
+OUTPUT_FILE=$1
+SIZE=$2
+shift; shift
+
+
+if [ -z $SIZE ]; then
+ echo "Need size of filesystem"
+ exit 2
+fi
+
+MAKE_F2FS_CMD="make_f2fs -l $SIZE $OUTPUT_FILE"
+echo $MAKE_F2FS_CMD
+$MAKE_F2FS_CMD
+if [ $? -ne 0 ]; then
+ exit 4
+fi