From c07eafd0875bce77b1fbf7ee46510073db55852d Mon Sep 17 00:00:00 2001 From: Dzmitry Sankouski Date: Sun, 9 Jan 2022 14:45:10 +0300 Subject: [PATCH] main: copy u-boot files to working directory (MR 16) U-boot files may be used to generate boot images during boot-deploy stage, for example u-boot's FIT images, android boot images. If there's no u-boot directory for device, skip copying. deviceinfo: add UbootBoardname Alpine u-boot package places board files in separate directories, /usr/share/u-boot/$boardname. This param specifies device u-boot subdirectory. --- main.go | 48 +++++++++++++++++++++++++++++++++++ pkgs/deviceinfo/deviceinfo.go | 1 + 2 files changed, 49 insertions(+) diff --git a/main.go b/main.go index 2ca353b..f759872 100644 --- a/main.go +++ b/main.go @@ -71,6 +71,14 @@ func main() { log.Fatal("generateInitfsExtra: ", err) } + if err := copyUbootFiles(workDir, devinfo); errors.Is(err, os.ErrNotExist) { + log.Println("u-boot files copying skipped: ", err) + } else { + if err != nil { + log.Fatal("copyUbootFiles: ", err) + } + } + // Final processing of initramfs / kernel is done by boot-deploy if err := bootDeploy(workDir, *outDir); err != nil { log.Fatal("bootDeploy: ", err) @@ -566,6 +574,46 @@ func getKernelVersion() (string, error) { return strings.TrimSpace(string(contents)), nil } +func Copy(srcFile, dstFile string) error { + out, err := os.Create(dstFile) + if err != nil { + return err + } + + defer out.Close() + + in, err := os.Open(srcFile) + if err != nil { + return err + } + defer in.Close() + + _, err = io.Copy(out, in) + if err != nil { + return err + } + + return nil +} + +func copyUbootFiles(path string, devinfo deviceinfo.DeviceInfo) error { + srcDir := filepath.Join("/usr/share/u-boot", devinfo.UbootBoardname) + entries, err := ioutil.ReadDir(srcDir) + if err != nil { + return err + } + for _, entry := range entries { + sourcePath := filepath.Join(srcDir, entry.Name()) + destPath := filepath.Join(path, entry.Name()) + + if err := Copy(sourcePath, destPath); err != nil { + return err + } + } + + return nil +} + func generateInitfs(name string, path string, kernVer string, devinfo deviceinfo.DeviceInfo) error { initfsArchive, err := archive.New() if err != nil { diff --git a/pkgs/deviceinfo/deviceinfo.go b/pkgs/deviceinfo/deviceinfo.go index 3889659..44766b0 100644 --- a/pkgs/deviceinfo/deviceinfo.go +++ b/pkgs/deviceinfo/deviceinfo.go @@ -16,6 +16,7 @@ import ( type DeviceInfo struct { AppendDtb string Arch string + UbootBoardname string BootimgAppendSEAndroidEnforce string BootimgBlobpack string BootimgDtbSecond string