Fix missing dev nodes in init_boot.img ramdisk
Previously ("Add null and console dev nodes to the Android initramfs")
introduced into init_boot.img the /dev/console and /dev/null nodes.
Sadly, it missed changing the release tools which are also generating
images in their own way.
Bug: 254835242
Change-Id: I4d2893ac24c09cf0d117422cbe2bde66083e7118
diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py
index b45b0a3..e154a0f 100644
--- a/tools/releasetools/add_img_to_target_files.py
+++ b/tools/releasetools/add_img_to_target_files.py
@@ -1001,7 +1001,8 @@
if has_init_boot:
banner("init_boot")
init_boot_image = common.GetBootableImage(
- "IMAGES/init_boot.img", "init_boot.img", OPTIONS.input_tmp, "INIT_BOOT")
+ "IMAGES/init_boot.img", "init_boot.img", OPTIONS.input_tmp, "INIT_BOOT",
+ dev_nodes=True)
if init_boot_image:
partitions['init_boot'] = os.path.join(
OPTIONS.input_tmp, "IMAGES", "init_boot.img")
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 2ae3964..8d16ca0 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -1547,14 +1547,20 @@
def _MakeRamdisk(sourcedir, fs_config_file=None,
+ dev_node_file=None,
ramdisk_format=RamdiskFormat.GZ):
ramdisk_img = tempfile.NamedTemporaryFile()
- if fs_config_file is not None and os.access(fs_config_file, os.F_OK):
- cmd = ["mkbootfs", "-f", fs_config_file,
- os.path.join(sourcedir, "RAMDISK")]
- else:
- cmd = ["mkbootfs", os.path.join(sourcedir, "RAMDISK")]
+ cmd = ["mkbootfs"]
+
+ if fs_config_file and os.access(fs_config_file, os.F_OK):
+ cmd.extend(["-f", fs_config_file])
+
+ if dev_node_file and os.access(dev_node_file, os.F_OK):
+ cmd.extend(["-n", dev_node_file])
+
+ cmd.append(os.path.join(sourcedir, "RAMDISK"))
+
p1 = Run(cmd, stdout=subprocess.PIPE)
if ramdisk_format == RamdiskFormat.LZ4:
p2 = Run(["lz4", "-l", "-12", "--favor-decSpeed"], stdin=p1.stdout,
@@ -1572,7 +1578,8 @@
return ramdisk_img
-def _BuildBootableImage(image_name, sourcedir, fs_config_file, info_dict=None,
+def _BuildBootableImage(image_name, sourcedir, fs_config_file,
+ dev_node_file=None, info_dict=None,
has_ramdisk=False, two_step_image=False):
"""Build a bootable image from the specified sourcedir.
@@ -1614,7 +1621,7 @@
if has_ramdisk:
ramdisk_format = GetRamdiskFormat(info_dict)
- ramdisk_img = _MakeRamdisk(sourcedir, fs_config_file,
+ ramdisk_img = _MakeRamdisk(sourcedir, fs_config_file, dev_node_file,
ramdisk_format=ramdisk_format)
# use MKBOOTIMG from environ, or "mkbootimg" if empty or not set
@@ -1822,7 +1829,8 @@
def GetBootableImage(name, prebuilt_name, unpack_dir, tree_subdir,
- info_dict=None, two_step_image=False):
+ info_dict=None, two_step_image=False,
+ dev_nodes=False):
"""Return a File object with the desired bootable image.
Look for it in 'unpack_dir'/BOOTABLE_IMAGES under the name 'prebuilt_name',
@@ -1858,6 +1866,8 @@
fs_config = "META/" + tree_subdir.lower() + "_filesystem_config.txt"
data = _BuildBootableImage(prebuilt_name, os.path.join(unpack_dir, tree_subdir),
os.path.join(unpack_dir, fs_config),
+ os.path.join(unpack_dir, 'META/ramdisk_node_list')
+ if dev_nodes else None,
info_dict, has_ramdisk, two_step_image)
if data:
return File(name, data)