URI:
       trock64.sh - arm-sdk - os build toolkit for various embedded devices
  HTML git clone https://git.parazyd.org/arm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       trock64.sh (6065B)
       ---
            1 #!/usr/bin/env zsh
            2 # Copyright (c) 2017 Johny Mattsson <johny.mattsson+github@gmail.com>
            3 #
            4 # This source code is free software: you can redistribute it and/or modify
            5 # it under the terms of the GNU General Public License as published by
            6 # the Free Software Foundation, either version 3 of the License, or
            7 # (at your option) any later version.
            8 #
            9 # This software is distributed in the hope that it will be useful,
           10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
           11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
           12 # GNU General Public License for more details.
           13 #
           14 # You should have received a copy of the GNU General Public License
           15 # along with this source code. If not, see <http://www.gnu.org/licenses/>.
           16 
           17 ## kernel build script for Rock64 boards
           18 
           19 vars+=(device_name arch size inittab parted_type gpt_boot gpt_root bootfs)
           20 vars+=(gitkernel gitbranch)
           21 
           22 device_name="rock64"
           23 arch="arm64"
           24 size=1891
           25 inittab=("T1:12345:respawn:/sbin/agetty -L ttyS2 1500000 vt100")
           26 
           27 # There's a lot of reserved areas at the start, see:
           28 #   http://opensource.rock-chips.com/wiki_Partitions
           29 parted_type="gpt"
           30 gpt_boot=(32768 229376)
           31 gpt_root=(262144)
           32 bootfs="vfat"
           33 
           34 gitkernel=mainline
           35 gitbranch="linux-4.14-rc2"
           36 
           37 # Mainline u-boot does not yet have full Rock64 support, so have to fetch this
           38 rock64uboot=https://github.com/ayufan-rock64/linux-u-boot.git
           39 rock64ubootbr=mainline-master
           40 rock64ubootdir="$R/tmp/u-boot/${device_name}-u-boot"
           41 # Likewise, no u-boot SPL support for the 3288 yet, so need binary loader
           42 rkbin=https://github.com/rockchip-linux/rkbin
           43 rkbindir="$R/tmp/rkbin"
           44 
           45 expr "${qemu_bin}" : ".*aarch.*" >/dev/null || {
           46   error "qemu_bin needs to be arm64 variety (a.k.a. aarch, aarch64)"
           47   return 1
           48 }
           49 
           50 expr "${compiler}" : ".*aarch64.*" >/dev/null || {
           51   error "compiler needs to be arm64 variety (a.k.a. aarch64)"
           52   return 1
           53 }
           54 
           55 get_rock64_uboot_sources() {
           56         fn get_rock64_uboot_sources
           57         req=(rock64uboot rock64ubootdir rock64ubootbr)
           58         ckreq || return 1
           59 
           60         clone-git "${rock64uboot}" "${rock64ubootdir}" "${rock64ubootbr}"
           61 }
           62 
           63 get_rkbin() {
           64         fn get_rkbin
           65         req=(rkbin rkbindir)
           66         ckreq || return 1
           67 
           68         clone-git "${rkbin}" "${rkbindir}"
           69 }
           70 
           71 build_uboot_rock64() {
           72         fn build_uboot_rock64
           73         req=(rock64ubootdir rock64ubootbuild compiler MAKEOPTS)
           74         ckreq || return 1
           75 
           76         notice "building u-boot for Rock64"
           77         pushd "${rock64ubootdir}"
           78                 make O="${rock64ubootbuild}" distclean
           79                 make $MAKEOPTS \
           80                         ARCH=arm CROSS_COMPILE=$compiler \
           81                         O="${rock64ubootbuild}" rock64-rk3328_defconfig || zerr
           82                 make $MAKEOPTS \
           83                         ARCH=arm CROSS_COMPILE=$compiler \
           84                         O="${rock64ubootbuild}" all || zerr
           85         popd
           86 }
           87 
           88 build_loader_rock64() {
           89         fn build_loader_rock64
           90         req=(rkbindir rock64ubootbuild)
           91         ckreq || return 1
           92 
           93         notice "assembling loader images"
           94         pushd "${rock64ubootbuild}"
           95                 act "creating idbloader.img"
           96                 dd if="${rkbindir}/rk33/rk3328_ddr_786MHz_v1.06.bin" of=ddr.bin bs=4 skip=1 status=none || zerr
           97                 tools/mkimage -n rk3328 -T rksd -d ddr.bin idbloader.img || zerr
           98                 rm -f ddr.bin
           99                 cat "${rkbindir}/rk33/rk3328_miniloader_v2.43.bin" >> idbloader.img
          100 
          101                 act "repacking u-boot for idbloader into uboot.img"
          102                 "${rkbindir}/tools/loaderimage" --pack --uboot u-boot-dtb.bin uboot.img 0x200000 || zerr
          103 
          104                 act "generating trust.img"
          105                 cat > trust.ini <<EOF
          106 [VERSION]
          107 MAJOR=1
          108 MINOR=2
          109 [BL30_OPTION]
          110 SEC=0
          111 [BL31_OPTION]
          112 SEC=1
          113 PATH=${rkbindir}/rk33/rk3328_bl31_v1.34.bin
          114 ADDR=0x10000
          115 [BL32_OPTION]
          116 SEC=0
          117 [BL33_OPTION]
          118 SEC=0
          119 [OUTPUT]
          120 PATH=trust.img
          121 EOF
          122                 "${rkbindir}/tools/trust_merger" trust.ini
          123         popd
          124 }
          125 
          126 prebuild() {
          127         fn prebuild
          128     req=(device_name strapdir)
          129     ckreq || return 1
          130 
          131     notice "executing $device_name prebuild"
          132 
          133         copy-root-overlay
          134 
          135         cat << EOF | sudo tee -a "${strapdir}/etc/motd"
          136 
          137 To expand the root partition, run:
          138   parted /dev/mmcblk0 resizepart 2 100%
          139   resize2fs /dev/mmcblk0p2
          140 
          141 EOF
          142 
          143         mkdir -p "$R/tmp/kernels/${device_name}"
          144 }
          145 
          146 postbuild() {
          147     fn postbuild
          148         req=(strapdir loopdevice)
          149         ckreq || return 1
          150 
          151     notice "executing $device_name postbuild"
          152 
          153         rock64ubootbuild="${workdir}/${device_name}-build-u-boot"
          154 
          155         get_rock64_uboot_sources || zerr
          156         get_rkbin || zerr
          157 
          158         build_uboot_rock64 || zerr
          159         build_loader_rock64 || zerr
          160 
          161         notice "dd'ing loaders to the image"
          162         pushd "${rock64ubootbuild}"
          163                 sudo dd if=idbloader.img bs=512 seek=64 of="${loopdevice}" status=none conv=notrunc || zerr
          164                 sudo dd if=uboot.img bs=512 seek=16384 of="${loopdevice}" status=none conv=notrunc || zerr
          165                 sudo dd if=trust.img bs=512 seek=24576 of="${loopdevice}" status=none conv=notrunc || zerr
          166     popd
          167 
          168         notice "touching up partition names and flags"
          169         sudo parted -s "${loopdevice}" name 1 "boot" || zerr
          170         sudo parted -s "${loopdevice}" name 2 "root" || zerr
          171         sudo parted -s "${loopdevice}" set 1 legacy_boot on || zerr
          172         sudo parted -s "${loopdevice}" set 2 msftdata off || zerr
          173 
          174         notice "setting up extlinux.conf"
          175         sudo mkdir -p "${strapdir}/boot/extlinux"
          176         cat << EOF | sudo tee "${strapdir}/boot/extlinux/extlinux.conf" >/dev/null
          177 label main
          178         kernel /Image
          179         fdt /dtbs/rk3328-rock64.dtb
          180         append earlycon=uart8250,mmio32,0xff130000 coherent_pool=1M ethaddr=\${ethaddr} eth1addr=\${eth1addr} serial=\${serial#} rw root=/dev/mmcblk0p2 rootwait
          181 EOF
          182 
          183     postbuild-clean
          184 }
          185 
          186 build_kernel_arm64() {
          187     fn build_kernel_arm64
          188     req=(R arch device_name gitkernel gitbranch MAKEOPTS)
          189     req+=(strapdir ubootmainline)
          190     req+=(loopdevice)
          191     ckreq || return 1
          192 
          193     notice "building $arch kernel"
          194 
          195     prebuild || zerr
          196 
          197     get-kernel-sources
          198     pushd "$R/tmp/kernels/${device_name}/${device_name}-linux"
          199         copy-kernel-config
          200 
          201         make \
          202                         $MAKEOPTS \
          203             ARCH=arm64 \
          204                         CROSS_COMPILE=$compiler \
          205                                 Image dtbs modules || zerr
          206         sudo -E PATH="$PATH" \
          207             make \
          208                                 $MAKEOPTS \
          209                                 ARCH=arm64 \
          210                                 CROSS_COMPILE=$compiler \
          211                                 INSTALL_MOD_PATH="$strapdir" \
          212                                         modules_install || zerr
          213 
          214         sudo cp -v arch/arm64/boot/Image "${strapdir}/boot/" || zerr
          215                 sudo mkdir -p "${strapdir}/boot/dtbs"
          216                 dtb="rk3328-rock64.dtb"
          217                 sudo cp -v arch/arm64/boot/dts/rockchip/${dtb} "${strapdir}/boot/dtbs/" || zerr
          218     popd
          219 
          220     postbuild || zerr
          221 }