使用 GitHub Actions 编译树莓派内核

仓库地址:https://github.com/GreyCode9/make-raspberrypi-kernel

创建 Token

点击 GitHub 右上角头像 → Settings → Developer settings → Personal access tokens → Generate new token

生成 Token

Token 权限设置

创建后保存这个秘钥(秘钥只显示一次)

创建仓库

创建仓库 make-raspberrypi-kernel

然后点击仓库的 Settings → Secrets → New repository secret,填入刚才生成的秘钥:

添加 Secret

创建 Actions

点击 Actions,创建一个 Actions,填入如下内容:

name: Make RaspberryPi Kernel

on:
  push:
    tags:
      - 'v*' # 当推送的 Tag 为 v 开头时触发构建

env:
  USE_SSH_CONFIG: true # 是否使用 SSH 连接进行配置

jobs:
  build:
    runs-on: ubuntu-18.04

    steps:
      - uses: actions/checkout@v2
      - name: pull RaspberryPi Kernel linux
        run: |
          cd ../
          git clone https://github.com/raspberrypi/linux.git
      - name: pull RaspberryPi Kernel Tool
        run: |
          cd ../
          git clone https://github.com/raspberrypi/tools.git
      - name: Move .config
        if: env.USE_SSH_CONFIG == 'false'
        run: |
          cp .config ../linux
      - name: Setup Debug Session # 用 SSH 连接 Actions
        if: env.USE_SSH_CONFIG == 'true'
        uses: csexton/debugger-action@master
      - name: Make
        run: |
          cd ../
          export WORKPATH=$(pwd)
          export PATH=$PATH:$WORKPATH/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
          export PATH=$PATH:$WORKPATH/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin
          cd linux/
          make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j8
      - name: Create Release
        id: create_release
        uses: actions/create-release@master
        env:
          GITHUB_TOKEN: ${{ secrets.TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: false
          prerelease: false
      - name: build TAR PACKAGE
        run: |
          tar -czvf raspberrypi-kernel.tar.gz ../linux/arch/arm/boot
      - name: Upload Release Asset
        id: upload-release-asset
        uses: actions/upload-release-asset@master
        env:
          GITHUB_TOKEN: ${{ secrets.TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./raspberrypi-kernel.tar.gz
          asset_name: raspberrypi-kernel.tar.gz
          asset_content_type: application/gzip

两种使用方式:

  • 在本地配置好 .config 文件上传到仓库,把 USE_SSH_CONFIG 改成 false
  • 直接在 Actions 中进行配置 .config 文件,把 USE_SSH_CONFIG 改成 true(会通过 SSH 连接到 Actions 环境)

触发构建

完成后,把代码 pull 到本地,根据需求配置 .config 文件,然后推送 tag:

git tag -a v1.0 -m 'build kernel'
git push origin v1.0

推送完成后,就可以看到 Actions 正在构建了:

Actions 构建中

构建完成后,可以在 Release 下载构建好的内核文件:

Release 页面

下载内核文件