parent
afbd6e4d63
commit
772113207e
2 changed files with 50 additions and 66 deletions
2
.github/workflows/cron.yml
vendored
2
.github/workflows/cron.yml
vendored
|
@ -52,4 +52,4 @@ jobs:
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
uses: stefanzweifel/git-auto-commit-action@v4
|
||||||
with:
|
with:
|
||||||
commit_message: kernel ${{steps.fetch.outputs.version}}
|
commit_message: kernel ${{steps.fetch.outputs.version}}
|
||||||
tagging_message: v1.0.1-${{steps.fetch.outputs.version}}
|
tagging_message: v1.0.2-${{steps.fetch.outputs.version}}
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/fs"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/magefile/mage/sh"
|
"github.com/magefile/mage/sh"
|
||||||
)
|
)
|
||||||
|
@ -50,7 +48,7 @@ func run() error {
|
||||||
"run",
|
"run",
|
||||||
"--rm", // cleanup afterwards
|
"--rm", // cleanup afterwards
|
||||||
"-v", kernelFolder+":/root/armhf",
|
"-v", kernelFolder+":/root/armhf",
|
||||||
"ghcr.io/gokrazy-community/crossbuild-armhf:impish-20220316",
|
"ghcr.io/gokrazy-community/crossbuild-armhf:jammy-20220815",
|
||||||
)
|
)
|
||||||
// change the owner of the files inside docker to the current user
|
// change the owner of the files inside docker to the current user
|
||||||
chown := func(folder string) error {
|
chown := func(folder string) error {
|
||||||
|
@ -65,24 +63,48 @@ func run() error {
|
||||||
if err := dockerRun("make", "bcmrpi_defconfig"); err != nil {
|
if err := dockerRun("make", "bcmrpi_defconfig"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := chown(".config"); err != nil {
|
// disable all modules (TODO: replace with mod2noconfig once we have 5.17 or newer)
|
||||||
|
if err := dockerRun("sed", "s/=m$/=n/i", "-i", ".config"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust config to add CONFIG_SQUASHFS and CONFIG_IPV6
|
// https://stackoverflow.com/a/56515886
|
||||||
configPath := filepath.Join(kernelFolder, ".config")
|
// it doesn't check the validity of the .config file
|
||||||
err = adjustTextFile(configPath, func(line string) bool {
|
// so we run make olddefconfig afterwards
|
||||||
return strings.HasPrefix(line, "CONFIG_SQUASHFS=") || strings.HasPrefix(line, "CONFIG_IPV6=")
|
args := []string{"./scripts/config",
|
||||||
}, []string{
|
// Basics
|
||||||
"CONFIG_SQUASHFS=y",
|
"--set-val", "SQUASHFS", "y",
|
||||||
"CONFIG_IPV6=y",
|
"--set-val", "IPV6", "y",
|
||||||
})
|
"--set-val", "MODULES", "y",
|
||||||
if err != nil {
|
|
||||||
|
// Disable module compression (wifi needs this)
|
||||||
|
"--set-val", "MODULE_COMPRESS_NONE", "y",
|
||||||
|
"--set-val", "MODULE_COMPRESS_GZIP", "n",
|
||||||
|
"--set-val", "MODULE_COMPRESS_XZ", "n",
|
||||||
|
"--set-val", "MODULE_COMPRESS_ZSTD", "n",
|
||||||
|
|
||||||
|
// WiFi
|
||||||
|
"--set-val", "RFKILL", "y",
|
||||||
|
"--set-val", "CFG80211", "y",
|
||||||
|
"--set-val", "BRCMFMAC", "m",
|
||||||
|
|
||||||
|
// Bluetooth
|
||||||
|
"--set-val", "NLMON", "y",
|
||||||
|
"--set-val", "BT", "m",
|
||||||
|
"--set-val", "BT_BCM", "m",
|
||||||
|
"--set-val", "BT_HCIUART", "m",
|
||||||
|
"--set-val", "BT_HCIUART_BCM", "y",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := dockerRun(args...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := dockerRun("make", "olddefconfig"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// compile kernel and dtbs
|
// compile kernel and dtbs
|
||||||
if err := dockerRun("make", "zImage", "dtbs", "-j"+strconv.Itoa(runtime.NumCPU())); err != nil {
|
if err := dockerRun("make", "zImage", "dtbs", "modules", "-j"+strconv.Itoa(runtime.NumCPU())); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := chown("arch/arm/boot"); err != nil {
|
if err := chown("arch/arm/boot"); err != nil {
|
||||||
|
@ -101,6 +123,18 @@ func run() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compile and move modules to dist
|
||||||
|
if err := dockerRun("make", "INSTALL_MOD_PATH=modules_out", "modules_install", "-j"+strconv.Itoa(runtime.NumCPU())); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := chown("modules_out"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = os.Rename(filepath.Join(kernelFolder, "modules_out/lib"), path.Join(dstFolder, "lib"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// copy dtb files
|
// copy dtb files
|
||||||
files, err := filepath.Glob(filepath.Join(bootFolder, "dts", "bcm*-rpi-*.dtb"))
|
files, err := filepath.Glob(filepath.Join(bootFolder, "dts", "bcm*-rpi-*.dtb"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -124,53 +158,3 @@ func run() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func adjustTextFile(path string, skipLine func(string) bool, appendLines []string) error {
|
|
||||||
b, stat, err := readFile(path) // read the whole file in memory, since we are going to overwrite it
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
dst, err := os.OpenFile(path, os.O_TRUNC|os.O_WRONLY, stat.Mode())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer dst.Close()
|
|
||||||
w := bufio.NewWriter(dst)
|
|
||||||
|
|
||||||
for _, line := range strings.Split(string(b), "\n") {
|
|
||||||
if skipLine(line) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
_, err = w.WriteString(line + "\n")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, line := range appendLines {
|
|
||||||
_, err = w.WriteString(line + "\n")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = w.Flush()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return dst.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
func readFile(path string) ([]byte, fs.FileInfo, error) {
|
|
||||||
f, err := os.Open(path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
b, err := io.ReadAll(f)
|
|
||||||
if err != nil {
|
|
||||||
return b, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
stats, err := f.Stat()
|
|
||||||
return b, stats, err
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue