|
| 1 | +name: VisionFive 2 kernel build |
| 2 | +on: [workflow_dispatch, push] |
| 3 | +concurrency: |
| 4 | + group: ${{ github.workflow }}-${{ github.ref }} |
| 5 | + cancel-in-progress: true |
| 6 | +permissions: {} |
| 7 | +jobs: |
| 8 | + build: |
| 9 | + # https://github.com/actions/virtual-environments |
| 10 | + runs-on: ubuntu-22.04 |
| 11 | + defaults: |
| 12 | + run: |
| 13 | + shell: sh |
| 14 | + env: |
| 15 | + # https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-5.15.y |
| 16 | + CROSS_COMPILE: 'riscv64-linux-gnu-' |
| 17 | + ARCH: 'riscv' |
| 18 | + steps: |
| 19 | + - name: Setup tmpfs |
| 20 | + run: sudo mount -t tmpfs -o "noatime,lazytime,uid=$(id -u),size=3G" tmpfs "$GITHUB_WORKSPACE" |
| 21 | + - uses: actions/checkout@v3 |
| 22 | + - name: Build init |
| 23 | + run: | |
| 24 | + sudo apt-get -q update |
| 25 | + sudo DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -qq install make gcc libc6-dev flex bison gcc-riscv64-linux-gnu bc libssl-dev |
| 26 | + rm -Rf linux-image-visionfive2 |
| 27 | + mkdir -p linux-image-visionfive2/DEBIAN linux-image-visionfive2/boot/extlinux |
| 28 | + - name: Build Linux |
| 29 | + run: | |
| 30 | + > .scmversion # Avoid Git commit version suffix |
| 31 | + mv dietpi_visionfive2_defconfig arch/riscv/configs/ |
| 32 | + make dietpi_visionfive2_defconfig |
| 33 | + make -j$(nproc) |
| 34 | + make install INSTALL_PATH='linux-image-visionfive2/boot' |
| 35 | + make dtbs_install INSTALL_DTBS_PATH='linux-image-visionfive2/usr/lib/linux-image-visionfive2' |
| 36 | + find linux-image-visionfive2/usr/lib/linux-image-visionfive2 -mindepth 1 -regextype egrep \( ! -regex '.*/(starfive|vf2-overlay.*|jh7110-visionfive-v2.*\.dtb)' -o -regex '.*/jh7110-visionfive-v2-A1[01].dtb' \) -exec rm -Rf {} + |
| 37 | + make modules_install INSTALL_MOD_PATH='linux-image-visionfive2' |
| 38 | + rm linux-image-visionfive2/lib/modules/*/build linux-image-visionfive2/lib/modules/*/source |
| 39 | + chmod -R 0644 linux-image-visionfive2 |
| 40 | + find linux-image-visionfive2 -type d -exec chmod 0755 {} + |
| 41 | + - name: Build package |
| 42 | + run: | |
| 43 | + kernelversion=$(make kernelversion) |
| 44 | + curl -fO 'https://dietpi.com/downloads/binaries/linux-image-visionfive2.deb' |
| 45 | + version=$(dpkg-deb -f linux-image-visionfive2.deb Version) |
| 46 | + rm linux-image-visionfive2.deb |
| 47 | + suffix=${version#*-dietpi} |
| 48 | + if [ "$version" = "$kernelversion-dietpi$suffix" ] |
| 49 | + then |
| 50 | + version="$kernelversion-dietpi$((suffix+1))" |
| 51 | + else |
| 52 | + version="$kernelversion-dietpi1" |
| 53 | + fi |
| 54 | + cat << _EOF_ > linux-image-visionfive2/boot/extlinux/extlinux.conf |
| 55 | + label DietPi |
| 56 | + linux /boot/vmlinuz-$kernelversion |
| 57 | + fdt /usr/lib/linux-image-visionfive2/starfive/jh7110-visionfive-v2.dtb |
| 58 | + append root=/dev/mmcblk1p1 rootfstype=ext4 rootwait earlycon console=ttyS0,115200 console=tty0 consoleblank=0 net.ifnames=0 |
| 59 | + _EOF_ |
| 60 | + echo '/boot/extlinux/extlinux.conf' > linux-image-visionfive2/DEBIAN/conffiles |
| 61 | + cat << _EOF_ > linux-image-visionfive2/DEBIAN/postinst |
| 62 | + #!/bin/dash |
| 63 | + set -e |
| 64 | + export DEB_MAINT_PARAMS=\$* INITRD=Yes |
| 65 | + [ -d '/etc/kernel/postinst.d' ] && run-parts --arg='$kernelversion' --arg='/boot/vmlinuz-$kernelversion' /etc/kernel/postinst.d |
| 66 | + sed -Ei '/^[[:blank:]]*(linux|kernel)/c\linux /boot/vmlinuz-$kernelversion' /boot/extlinux/extlinux.conf |
| 67 | + exit 0 |
| 68 | + _EOF_ |
| 69 | + cp linux-image-visionfive2/DEBIAN/postinst linux-image-visionfive2/DEBIAN/preinst |
| 70 | + sed -i -e '/extlinux/d' -e 's/postinst/preinst/g' linux-image-visionfive2/DEBIAN/preinst |
| 71 | + cp linux-image-visionfive2/DEBIAN/postinst linux-image-visionfive2/DEBIAN/postrm |
| 72 | + sed -i -e '/extlinux/d' -e 's/postinst/postrm/g' linux-image-visionfive2/DEBIAN/postrm |
| 73 | + cp linux-image-visionfive2/DEBIAN/postinst linux-image-visionfive2/DEBIAN/prerm |
| 74 | + sed -i -e '/extlinux/d' -e 's/postinst/prerm/g' linux-image-visionfive2/DEBIAN/prerm |
| 75 | + chmod +x linux-image-visionfive2/DEBIAN/p* |
| 76 | + find linux-image-visionfive2 ! \( -path linux-image-visionfive2/DEBIAN -prune \) -type f -exec md5sum {} + | sed 's|linux-image-visionfive2/||' > linux-image-visionfive2/DEBIAN/md5sums |
| 77 | + cat << _EOF_ > linux-image-visionfive2/DEBIAN/control |
| 78 | + Package: linux-image-visionfive2 |
| 79 | + Version: $version |
| 80 | + Architecture: riscv64 |
| 81 | + Maintainer: MichaIng <[email protected]> |
| 82 | + Date: $(date -u '+%a, %d %b %Y %T %z') |
| 83 | + Standards-Version: 4.6.2.0 |
| 84 | + Installed-Size: $(du -sk 'linux-image-visionfive2' | mawk '{print $1}') |
| 85 | + Section: kernel |
| 86 | + Priority: optional |
| 87 | + Homepage: https://github.com/MichaIng/linux |
| 88 | + Vcs-Git: https://github.com/MichaIng/linux.git |
| 89 | + Vcs-Browser: https://github.com/MichaIng/linux |
| 90 | + Description: Linux kernel for RISC-V StarFive VisionFive 2 |
| 91 | + _EOF_ |
| 92 | + sed -i "/^Installed-Size:/c\Installed-Size: $(du -sk 'linux-image-visionfive2' | mawk '{print $1}')" linux-image-visionfive2/DEBIAN/control |
| 93 | + sudo chown -R 0:0 linux-image-visionfive2 |
| 94 | + dpkg-deb -b -Zxz -z9 -Sextreme linux-image-visionfive2 |
| 95 | + sudo rm -R linux-image-visionfive2 |
| 96 | + - name: Upload |
| 97 | + run: | |
| 98 | + [ -d ~/.ssh ] || mkdir ~/.ssh |
| 99 | + umask 377 |
| 100 | + echo '${{ secrets.KNOWN_HOSTS }}' > ~/.ssh/known_hosts |
| 101 | + echo '${{ secrets.SSH_KEY }}' > ~/.ssh/id_ed25519 |
| 102 | + curl -T 'linux-image-visionfive2.deb' --key ~/.ssh/id_ed25519 '${{ secrets.UPLOAD_URL }}all/' |
| 103 | + curl 'https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache' -H 'Authorization: Bearer ${{ secrets.CF_TOKEN }}' -H 'Content-Type: application/json' \ |
| 104 | + --data '{"files":["https://dietpi.com/downloads/binaries/testing/","https://dietpi.com/downloads/binaries/testing/linux-image-visionfive2.deb"]}' |
0 commit comments