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.
This commit is contained in:
Dzmitry Sankouski
2022-01-09 14:45:10 +03:00
committed by Clayton Craft
parent 206e75c597
commit c07eafd087
2 changed files with 49 additions and 0 deletions

48
main.go
View File

@@ -71,6 +71,14 @@ func main() {
log.Fatal("generateInitfsExtra: ", err) 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 // Final processing of initramfs / kernel is done by boot-deploy
if err := bootDeploy(workDir, *outDir); err != nil { if err := bootDeploy(workDir, *outDir); err != nil {
log.Fatal("bootDeploy: ", err) log.Fatal("bootDeploy: ", err)
@@ -566,6 +574,46 @@ func getKernelVersion() (string, error) {
return strings.TrimSpace(string(contents)), nil 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 { func generateInitfs(name string, path string, kernVer string, devinfo deviceinfo.DeviceInfo) error {
initfsArchive, err := archive.New() initfsArchive, err := archive.New()
if err != nil { if err != nil {

View File

@@ -16,6 +16,7 @@ import (
type DeviceInfo struct { type DeviceInfo struct {
AppendDtb string AppendDtb string
Arch string Arch string
UbootBoardname string
BootimgAppendSEAndroidEnforce string BootimgAppendSEAndroidEnforce string
BootimgBlobpack string BootimgBlobpack string
BootimgDtbSecond string BootimgDtbSecond string