Add support for non-partitioned devices for system

BUG: 69071989
BUG: 71707530
Test: Local build and boot
Change-Id: I0cb7d61634be6a694ceb51cb06901c466eae1c35
diff --git a/init/init_first_stage.cpp b/init/init_first_stage.cpp
index bcc8d1b..2cc952a 100644
--- a/init/init_first_stage.cpp
+++ b/init/init_first_stage.cpp
@@ -17,6 +17,7 @@
 #include "init_first_stage.h"
 
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
 #include <memory>
@@ -47,6 +48,7 @@
     bool InitDevices();
 
   protected:
+    coldboot_action_t HandleBlockDevice(const char* name, const uevent*);
     void InitRequiredDevices();
     void InitVerityDevice(const std::string& verity_device);
     bool MountPartitions();
@@ -177,6 +179,23 @@
     device_close();
 }
 
+coldboot_action_t FirstStageMount::HandleBlockDevice(const char* name, const uevent* uevent) {
+    // Matches partition name to create device nodes.
+    // Both required_devices_partition_names_ and uevent->partition_name have A/B
+    // suffix when A/B is used.
+    auto iter = required_devices_partition_names_.find(name);
+    if (iter != required_devices_partition_names_.end()) {
+        LOG(VERBOSE) << __PRETTY_FUNCTION__ << ": found partition: " << *iter;
+        required_devices_partition_names_.erase(iter);
+        if (required_devices_partition_names_.empty()) {
+            return COLDBOOT_STOP;
+        } else {
+            return COLDBOOT_CREATE;
+        }
+    }
+    return COLDBOOT_CONTINUE;
+}
+
 coldboot_action_t FirstStageMount::ColdbootCallback(uevent* uevent) {
     // We need platform devices to create symlinks.
     if (!strncmp(uevent->subsystem, "platform", 8)) {
@@ -189,18 +208,11 @@
     }
 
     if (uevent->partition_name) {
-        // Matches partition name to create device nodes.
-        // Both required_devices_partition_names_ and uevent->partition_name have A/B
-        // suffix when A/B is used.
-        auto iter = required_devices_partition_names_.find(uevent->partition_name);
-        if (iter != required_devices_partition_names_.end()) {
-            LOG(VERBOSE) << __FUNCTION__ << "(): found partition: " << *iter;
-            required_devices_partition_names_.erase(iter);
-            if (required_devices_partition_names_.empty()) {
-                return COLDBOOT_STOP;  // Found all partitions, stop coldboot.
-            } else {
-                return COLDBOOT_CREATE;  // Creates this device and continue to find others.
-            }
+        return HandleBlockDevice(uevent->partition_name, uevent);
+    } else {
+        const char* basename = strrchr(uevent->path, '/');
+        if (basename) {
+            return HandleBlockDevice(basename + 1, uevent);
         }
     }
     // Not found a partition or find an unneeded partition, continue to find others.