diff options
| -rw-r--r-- | android/module.go | 2 | ||||
| -rw-r--r-- | filesystem/filesystem.go | 7 | ||||
| -rw-r--r-- | fsgen/filesystem_creator.go | 106 | ||||
| -rw-r--r-- | fsgen/fsgen_mutators.go | 3 |
4 files changed, 118 insertions, 0 deletions
diff --git a/android/module.go b/android/module.go index 3bf4f0c9e..2f6f613b0 100644 --- a/android/module.go +++ b/android/module.go @@ -1384,6 +1384,8 @@ func (m *ModuleBase) PartitionTag(config DeviceConfig) string { } } else if m.InstallInRamdisk() { partition = "ramdisk" + } else if m.InstallInVendorRamdisk() { + partition = "vendor_ramdisk" } return partition } diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index dadacae3d..019cc2579 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -594,6 +594,13 @@ func (f *filesystem) buildPropFile(ctx android.ModuleContext) (android.Path, and addStr("hash_seed", uuid) } + // TODO(b/381120092): This should only be added if none of the size-related properties are set, + // but currently soong built partitions don't have size properties. Make code: + // https://cs.android.com/android/platform/superproject/main/+/main:build/make/core/Makefile;l=2262;drc=39cd33701c9278db0e7e481a090605f428d5b12d + // Make uses system_disable_sparse but disable_sparse has the same effect, and we shouldn't need + // to qualify it because each partition gets its own property file built. + addStr("disable_sparse", "true") + fst := f.fsType(ctx) switch fst { case erofsType: diff --git a/fsgen/filesystem_creator.go b/fsgen/filesystem_creator.go index edf7d8672..556c4dcc9 100644 --- a/fsgen/filesystem_creator.go +++ b/fsgen/filesystem_creator.go @@ -222,9 +222,80 @@ func partitionSpecificFsProps(fsProps *filesystem.FilesystemProperties, partitio "framework/oat/*/*", // framework/oat/{arch} } fsProps.Fsverity.Libs = []string{":framework-res{.export-package.apk}"} + // Most of the symlinks and directories listed here originate from create_root_structure.mk, + // but the handwritten generic system image also recreates them: + // https://cs.android.com/android/platform/superproject/main/+/main:build/make/target/product/generic/Android.bp;l=33;drc=db08311f1b6ef6cb0a4fbcc6263b89849360ce04 // TODO(b/377734331): only generate the symlinks if the relevant partitions exist fsProps.Symlinks = []filesystem.SymlinkDefinition{ filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/system/bin/init"), + Name: proptools.StringPtr("init"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/system/etc"), + Name: proptools.StringPtr("etc"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/system/bin"), + Name: proptools.StringPtr("bin"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/data/user_de/0/com.android.shell/files/bugreports"), + Name: proptools.StringPtr("bugreports"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/sys/kernel/debug"), + Name: proptools.StringPtr("d"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/storage/self/primary"), + Name: proptools.StringPtr("sdcard"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/product/etc/security/adb_keys"), + Name: proptools.StringPtr("adb_keys"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/app"), + Name: proptools.StringPtr("odm/app"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/bin"), + Name: proptools.StringPtr("odm/bin"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/etc"), + Name: proptools.StringPtr("odm/etc"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/firmware"), + Name: proptools.StringPtr("odm/firmware"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/framework"), + Name: proptools.StringPtr("odm/framework"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/lib"), + Name: proptools.StringPtr("odm/lib"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/lib64"), + Name: proptools.StringPtr("odm/lib64"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/overlay"), + Name: proptools.StringPtr("odm/overlay"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/priv-app"), + Name: proptools.StringPtr("odm/priv-app"), + }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/vendor/odm/usr"), + Name: proptools.StringPtr("odm/usr"), + }, + filesystem.SymlinkDefinition{ Target: proptools.StringPtr("/product"), Name: proptools.StringPtr("system/product"), }, @@ -240,7 +311,42 @@ func partitionSpecificFsProps(fsProps *filesystem.FilesystemProperties, partitio Target: proptools.StringPtr("/system_dlkm/lib/modules"), Name: proptools.StringPtr("system/lib/modules"), }, + filesystem.SymlinkDefinition{ + Target: proptools.StringPtr("/data/cache"), + Name: proptools.StringPtr("cache"), + }, } + fsProps.Dirs = proptools.NewSimpleConfigurable([]string{ + // From generic_rootdirs in build/make/target/product/generic/Android.bp + "acct", + "apex", + "bootstrap-apex", + "config", + "data", + "data_mirror", + "debug_ramdisk", + "dev", + "linkerconfig", + "metadata", + "mnt", + "odm", + "odm_dlkm", + "oem", + "postinstall", + "proc", + "second_stage_resources", + "storage", + "sys", + "system", + "system_dlkm", + "tmp", + "vendor", + "vendor_dlkm", + + // from android_rootdirs in build/make/target/product/generic/Android.bp + "system_ext", + "product", + }) case "system_ext": fsProps.Fsverity.Inputs = []string{ "framework/*", diff --git a/fsgen/fsgen_mutators.go b/fsgen/fsgen_mutators.go index 9472a50ae..0cc643e42 100644 --- a/fsgen/fsgen_mutators.go +++ b/fsgen/fsgen_mutators.go @@ -95,15 +95,18 @@ func createFsGenState(ctx android.LoadHookContext, generatedPrebuiltEtcModuleNam fsDeps: map[string]*multilibDeps{ // These additional deps are added according to the cuttlefish system image bp. "system": { + // keep-sorted start "com.android.apex.cts.shim.v1_prebuilt": defaultDepCandidateProps(ctx.Config()), "dex_bootjars": defaultDepCandidateProps(ctx.Config()), "framework_compatibility_matrix.device.xml": defaultDepCandidateProps(ctx.Config()), + "init.environ.rc-soong": defaultDepCandidateProps(ctx.Config()), "libcompiler_rt": defaultDepCandidateProps(ctx.Config()), "libdmabufheap": defaultDepCandidateProps(ctx.Config()), "libgsi": defaultDepCandidateProps(ctx.Config()), "llndk.libraries.txt": defaultDepCandidateProps(ctx.Config()), "logpersist.start": defaultDepCandidateProps(ctx.Config()), "update_engine_sideload": defaultDepCandidateProps(ctx.Config()), + // keep-sorted end }, "vendor": { "fs_config_files_vendor": defaultDepCandidateProps(ctx.Config()), |