Loading android/variable.go +2 −0 Original line number Diff line number Diff line Loading @@ -629,6 +629,8 @@ type PartitionVariables struct { InitBootSecurityPatch string `json:",omitempty"` BoardIncludeDtbInBootimg bool `json:",omitempty"` InternalKernelCmdline []string `json:",omitempty"` InternalBootconfig []string `json:",omitempty"` InternalBootconfigFile string `json:",omitempty"` // Avb (android verified boot) stuff BoardAvbEnable bool `json:",omitempty"` Loading filesystem/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ bootstrap_go_package { "avb_add_hash_footer.go", "avb_gen_vbmeta_image.go", "bootimg.go", "bootconfig.go", "filesystem.go", "fsverity_metadata.go", "logical_partition.go", Loading filesystem/bootconfig.go 0 → 100644 +80 −0 Original line number Diff line number Diff line // Copyright 2024 Google Inc. All rights reserved. // // 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. package filesystem import ( "android/soong/android" "strings" "github.com/google/blueprint/proptools" ) func init() { android.RegisterModuleType("bootconfig", BootconfigModuleFactory) pctx.Import("android/soong/android") } type bootconfigProperty struct { // List of bootconfig parameters that will be written as a line separated list in the output // file. Boot_config []string // Path to the file that contains the list of bootconfig parameters. This will be appended // to the output file, after the entries in boot_config. Boot_config_file *string `android:"path"` } type BootconfigModule struct { android.ModuleBase properties bootconfigProperty } // bootconfig module generates the `vendor-bootconfig.img` file, which lists the bootconfig // parameters and can be passed as a `--vendor_bootconfig` value in mkbootimg invocation. func BootconfigModuleFactory() android.Module { module := &BootconfigModule{} module.AddProperties(&module.properties) android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) return module } func (m *BootconfigModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { bootConfig := m.properties.Boot_config bootConfigFileStr := proptools.String(m.properties.Boot_config_file) if len(bootConfig) == 0 && len(bootConfigFileStr) == 0 { return } var bootConfigFile android.Path if len(bootConfigFileStr) > 0 { bootConfigFile = android.PathForModuleSrc(ctx, bootConfigFileStr) } outputPath := android.PathForModuleOut(ctx, ctx.ModuleName(), "vendor-bootconfig.img") bootConfigOutput := android.PathForModuleOut(ctx, ctx.ModuleName(), "bootconfig.txt") android.WriteFileRule(ctx, bootConfigOutput, strings.Join(bootConfig, "\n")) bcFiles := android.Paths{bootConfigOutput} if bootConfigFile != nil { bcFiles = append(bcFiles, bootConfigFile) } ctx.Build(pctx, android.BuildParams{ Rule: android.Cat, Description: "concatenate bootconfig parameters", Inputs: bcFiles, Output: outputPath, }) ctx.SetOutputFiles(android.Paths{outputPath}, "") } fsgen/boot_imgs.go +32 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,11 @@ func createVendorBootImage(ctx android.LoadHookContext, dtbImg dtbImg) bool { cmdline := partitionVariables.InternalKernelCmdline var vendorBootConfigImg *string if name, ok := createVendorBootConfigImg(ctx); ok { vendorBootConfigImg = proptools.StringPtr(":" + name) } ctx.CreateModule( filesystem.BootimgFactory, &filesystem.BootimgProperties{ Loading @@ -117,6 +122,7 @@ func createVendorBootImage(ctx android.LoadHookContext, dtbImg dtbImg) bool { Avb_algorithm: avbInfo.avbAlgorithm, Dtb_prebuilt: dtbPrebuilt, Cmdline: cmdline, Bootconfig: vendorBootConfigImg, }, &struct { Name *string Loading Loading @@ -283,3 +289,29 @@ func createDtbImgFilegroup(ctx android.LoadHookContext) dtbImg { } return dtbImg{include: false} } func createVendorBootConfigImg(ctx android.LoadHookContext) (string, bool) { partitionVars := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse bootconfig := partitionVars.InternalBootconfig bootconfigFile := partitionVars.InternalBootconfigFile if len(bootconfig) == 0 && len(bootconfigFile) == 0 { return "", false } vendorBootconfigImgModuleName := generatedModuleName(ctx.Config(), "vendor_bootconfig_image") ctx.CreateModule( filesystem.BootconfigModuleFactory, &struct { Name *string Boot_config []string Boot_config_file *string }{ Name: proptools.StringPtr(vendorBootconfigImgModuleName), Boot_config: bootconfig, Boot_config_file: proptools.StringPtr(bootconfigFile), }, ) return vendorBootconfigImgModuleName, true } Loading
android/variable.go +2 −0 Original line number Diff line number Diff line Loading @@ -629,6 +629,8 @@ type PartitionVariables struct { InitBootSecurityPatch string `json:",omitempty"` BoardIncludeDtbInBootimg bool `json:",omitempty"` InternalKernelCmdline []string `json:",omitempty"` InternalBootconfig []string `json:",omitempty"` InternalBootconfigFile string `json:",omitempty"` // Avb (android verified boot) stuff BoardAvbEnable bool `json:",omitempty"` Loading
filesystem/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ bootstrap_go_package { "avb_add_hash_footer.go", "avb_gen_vbmeta_image.go", "bootimg.go", "bootconfig.go", "filesystem.go", "fsverity_metadata.go", "logical_partition.go", Loading
filesystem/bootconfig.go 0 → 100644 +80 −0 Original line number Diff line number Diff line // Copyright 2024 Google Inc. All rights reserved. // // 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. package filesystem import ( "android/soong/android" "strings" "github.com/google/blueprint/proptools" ) func init() { android.RegisterModuleType("bootconfig", BootconfigModuleFactory) pctx.Import("android/soong/android") } type bootconfigProperty struct { // List of bootconfig parameters that will be written as a line separated list in the output // file. Boot_config []string // Path to the file that contains the list of bootconfig parameters. This will be appended // to the output file, after the entries in boot_config. Boot_config_file *string `android:"path"` } type BootconfigModule struct { android.ModuleBase properties bootconfigProperty } // bootconfig module generates the `vendor-bootconfig.img` file, which lists the bootconfig // parameters and can be passed as a `--vendor_bootconfig` value in mkbootimg invocation. func BootconfigModuleFactory() android.Module { module := &BootconfigModule{} module.AddProperties(&module.properties) android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) return module } func (m *BootconfigModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { bootConfig := m.properties.Boot_config bootConfigFileStr := proptools.String(m.properties.Boot_config_file) if len(bootConfig) == 0 && len(bootConfigFileStr) == 0 { return } var bootConfigFile android.Path if len(bootConfigFileStr) > 0 { bootConfigFile = android.PathForModuleSrc(ctx, bootConfigFileStr) } outputPath := android.PathForModuleOut(ctx, ctx.ModuleName(), "vendor-bootconfig.img") bootConfigOutput := android.PathForModuleOut(ctx, ctx.ModuleName(), "bootconfig.txt") android.WriteFileRule(ctx, bootConfigOutput, strings.Join(bootConfig, "\n")) bcFiles := android.Paths{bootConfigOutput} if bootConfigFile != nil { bcFiles = append(bcFiles, bootConfigFile) } ctx.Build(pctx, android.BuildParams{ Rule: android.Cat, Description: "concatenate bootconfig parameters", Inputs: bcFiles, Output: outputPath, }) ctx.SetOutputFiles(android.Paths{outputPath}, "") }
fsgen/boot_imgs.go +32 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,11 @@ func createVendorBootImage(ctx android.LoadHookContext, dtbImg dtbImg) bool { cmdline := partitionVariables.InternalKernelCmdline var vendorBootConfigImg *string if name, ok := createVendorBootConfigImg(ctx); ok { vendorBootConfigImg = proptools.StringPtr(":" + name) } ctx.CreateModule( filesystem.BootimgFactory, &filesystem.BootimgProperties{ Loading @@ -117,6 +122,7 @@ func createVendorBootImage(ctx android.LoadHookContext, dtbImg dtbImg) bool { Avb_algorithm: avbInfo.avbAlgorithm, Dtb_prebuilt: dtbPrebuilt, Cmdline: cmdline, Bootconfig: vendorBootConfigImg, }, &struct { Name *string Loading Loading @@ -283,3 +289,29 @@ func createDtbImgFilegroup(ctx android.LoadHookContext) dtbImg { } return dtbImg{include: false} } func createVendorBootConfigImg(ctx android.LoadHookContext) (string, bool) { partitionVars := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse bootconfig := partitionVars.InternalBootconfig bootconfigFile := partitionVars.InternalBootconfigFile if len(bootconfig) == 0 && len(bootconfigFile) == 0 { return "", false } vendorBootconfigImgModuleName := generatedModuleName(ctx.Config(), "vendor_bootconfig_image") ctx.CreateModule( filesystem.BootconfigModuleFactory, &struct { Name *string Boot_config []string Boot_config_file *string }{ Name: proptools.StringPtr(vendorBootconfigImgModuleName), Boot_config: bootconfig, Boot_config_file: proptools.StringPtr(bootconfigFile), }, ) return vendorBootconfigImgModuleName, true }