From 09c897e737044e302576cc9b0be198c6a8aa6792 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Sat, 18 Feb 2023 22:18:24 -0800 Subject: [PATCH] cmd/mkinitfs: use a BootDeploy type for running boot-deploy --- cmd/mkinitfs/main.go | 113 ++----------------------------------------- 1 file changed, 5 insertions(+), 108 deletions(-) diff --git a/cmd/mkinitfs/main.go b/cmd/mkinitfs/main.go index da6ac93..7fe9a85 100644 --- a/cmd/mkinitfs/main.go +++ b/cmd/mkinitfs/main.go @@ -4,18 +4,16 @@ package main import ( - "errors" "flag" "fmt" - "io" "log" "os" - "os/exec" "path/filepath" "strings" "time" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/archive" + "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/bootdeploy" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookdirs" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookfiles" @@ -104,119 +102,18 @@ func main() { log.Fatalf("failed to generate %q: %s\n", "initramfs-extra", 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 { + if err := bootDeploy(workDir, *outDir, devinfo.UbootBoardname); err != nil { log.Fatal("bootDeploy: ", err) } } -func bootDeploy(workDir string, outDir string) error { - // boot-deploy expects the kernel to be in the same dir as initramfs. - // Assume that the kernel is in the output dir... +func bootDeploy(workDir, outDir, ubootBoardname string) error { log.Print("== Using boot-deploy to finalize/install files ==") - kernels, _ := filepath.Glob(filepath.Join(outDir, "vmlinuz*")) - if len(kernels) == 0 { - return errors.New("Unable to find any kernels at " + filepath.Join(outDir, "vmlinuz*")) - } - // Pick a kernel that does not have suffixes added by boot-deploy - var kernFile string - for _, f := range kernels { - if strings.HasSuffix(f, "-dtb") || strings.HasSuffix(f, "-mtk") { - continue - } - kernFile = f - break - } - - kernFd, err := os.Open(kernFile) - if err != nil { - return err - } - defer kernFd.Close() - - kernFileCopy, err := os.Create(filepath.Join(workDir, "vmlinuz")) - if err != nil { - return err - } - - if _, err = io.Copy(kernFileCopy, kernFd); err != nil { - return err - } - kernFileCopy.Close() - - // boot-deploy -i initramfs -k vmlinuz-postmarketos-rockchip -d /tmp/cpio -o /tmp/foo initramfs-extra - cmd := exec.Command("boot-deploy", - "-i", "initramfs", - "-k", "vmlinuz", - "-d", workDir, - "-o", outDir, - "initramfs-extra") - if !misc.Exists(cmd.Path) { - return errors.New("boot-deploy command not found") - } - - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - log.Print("'boot-deploy' command failed") - return err - } - - return 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 { - if devinfo.UbootBoardname == "" { - return nil - } - - srcDir := filepath.Join("/usr/share/u-boot", devinfo.UbootBoardname) - entries, err := os.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 + bd := bootdeploy.New(workDir, outDir, ubootBoardname) + return bd.Run() } func generateArchive(name string, path string, features []filelist.FileLister) error {