@@ -33,6 +33,35 @@ start(int argc, char *argv[1])
if (!getenv("PREINIT"))
return -1;
+ /*
+ * Check cmdline for a hint about overlay device
+ */
+ if(!data) {
+ FILE *fp;
+ char buffer[100] = {0};
+
+ fp = fopen("/proc/cmdline", "r");
+ while(!feof(fp)) {
+ if(fscanf(fp, "overlay=%s", buffer))
+ break;
+
+ fseek(fp, 1, SEEK_CUR);
+ }
+ fclose(fp);
+
+ // overlay= argument was found
+ if(buffer[0]) {
+ // strip /dev/ prefix if any
+ int offset = 0;
+ if(strstr(buffer, "/dev/"))
+ offset = 5;
+
+ // try to find the volume
+ ULOG_NOTE("Looking for overlay device given on commandline\n");
+ data = volume_find(buffer + offset);
+ }
+ }
+
if (!data) {
root = volume_find("rootfs");
volume_init(root);