build/config/sources/families/jethub.conf

222 lines
11 KiB
Plaintext

#
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
#
# This file is a part of the Armbian Build Framework
# https://github.com/armbian/build/
#
source "${BASH_SOURCE%/*}/include/meson64_common.inc"
UBOOT_TARGET_MAP="u-boot-dtb.img;;u-boot.bin.sd.bin:u-boot.bin u-boot.bin:u-boot.nosd.bin u-boot-dtb.img"
CPUMIN=250000
GOVERNOR="ondemand"
CPUFREQUTILS_ENABLE=true
BOOTSCRIPT="boot-jethub.cmd:boot.cmd"
BOOTBRANCH="tag:v2022.07"
if [[ "$BOARD" == "jethubj80" ]]; then
CPUMAX=1200000
elif [[ "$BOARD" == "jethubj100" ]]; then
CPUMAX=1416000
OFFSET=126
fi
# JetHub builds userspace tooling with c++ (gpp) toolchain in buildjethomecmds() below.
# The C++ compiler is no longer included by default in the Armbian build system.
# Enable the extension that brings includes it. It could've been an inline extension (eg: the function right here),
# but having a core extension allows it to be pre-included in the Dockerfile generation and thus in the Docker images.
enable_extension "c-plus-plus-compiler"
uboot_custom_postprocess() {
if [[ "$BOARD" == "jethubj80" ]]; then
uboot_gxl_postprocess_ng "$SRC/cache/sources/amlogic-boot-fip/jethub-j80"
elif [[ "$BOARD" == "jethubj100" ]]; then
uboot_axg_postprocess_ng "$SRC/cache/sources/amlogic-boot-fip/jethub-j100"
fi
}
write_uboot_platform() {
local unable_install_uboot="Unable to install U-Boot."
local method=0
if [[ "$2" == *mmcblk* ]]; then
local mmcblk_prefix
mmcblk_prefix=$(echo "$2" | grep -Po "mmcblk\d")
logger "${FUNCNAME[0]}(): mmcblk_prefix = $mmcblk_prefix"
if [[ -n "$mmcblk_prefix" ]]; then
local mmc_boot=${mmcblk_prefix}boot
local of_boot0=/dev/${mmc_boot}0
local of_boot1=/dev/${mmc_boot}1
if [[ -e $of_boot0 ]]; then
method=1
logger "${FUNCNAME[0]}(): use install in boot emmc partitions"
fi
else
logger "${FUNCNAME[0]}(): mmcblk_prefix is empty. $unable_install_uboot"
return 1
fi
else
logger "${FUNCNAME[0]}(): use standart u-boot install."
fi
dd if="$1/u-boot.bin" of="$2" bs=1 count=442 conv=fsync > /dev/null 2>&1
dd if="$1/u-boot.bin" of="$2" bs=512 skip=1 seek=1 conv=fsync > /dev/null 2>&1
if [[ $method == 1 ]]; then
logger "${FUNCNAME[0]}(): of_boot0 = $of_boot0"
logger "${FUNCNAME[0]}(): of_boot1 = $of_boot1"
# unset force-read-only flag
echo 0 > "/sys/block/${mmc_boot}0/force_ro"
echo 0 > "/sys/block/${mmc_boot}1/force_ro"
logger "${FUNCNAME[0]}(): /sys/block/${mmc_boot}0/force_ro value after unsetting read-only flag: $(< "/sys/block/${mmc_boot}0/force_ro")"
logger "${FUNCNAME[0]}(): /sys/block/${mmc_boot}1/force_ro value after unsetting read-only flag: $(< "/sys/block/${mmc_boot}1/force_ro")"
local uboot_name=u-boot.bin
local uboot_size_in_kbytes=$(($(stat --printf "%s" "$1/$uboot_name") / 1024))
local uboot_offset=1 # 512 bytes in dd
logger "${FUNCNAME[0]}(): uboot_size_in_kbytes = $uboot_size_in_kbytes"
logger "${FUNCNAME[0]}(): uboot_offset = $uboot_offset"
dd if="$1/u-boot.bin" of="$of_boot0" bs=512 skip=1 conv=fsync > /dev/null 2>&1
dd if="$1/u-boot.bin" of="$of_boot1" bs=512 skip=1 conv=fsync > /dev/null 2>&1
fi
logger "${FUNCNAME[0]}(): u-boot successfulley installed"
}
comment_default_rsyslog_rules() {
local conf_file="$SDCARD/etc/rsyslog.d/50-default.conf"
if [[ ! -f "${conf_file}" ]]; then
display_alert "Can't find rsyslog default config at ${conf_file}" "${RELEASE}" "wrn"
return 2
fi
local rule_file_arr=(/var/log/syslog /var/log/auth.log /var/log/kern.log /var/log/mail.log /var/log/mail.err)
rule_file_escaped_arr=("${rule_file_arr[@]}")
for ((i = 0; i < ${#rule_file_escaped_arr[*]}; i++)); do
rule_file_escaped_arr[$i]="${rule_file_arr[$i]//\//\\/}"
done
for ((i = 0; i < ${#rule_file_escaped_arr[*]}; i++)); do
rule_file_escaped="${rule_file_escaped_arr[$i]}"
regexp="^[^#][^ \t]+[ \t]+.?${rule_file_escaped}.*$"
if grep -Pq "$regexp" "$conf_file"; then
sed -i -E -e "s/$regexp/#\0/g" "$conf_file" || {
echo "sed 's/$regexp/#\0/g' $conf_file failed"
return 1
}
else
echo "grep '$regexp' $conf_file failed"
return 2
fi
done
}
buildjethomecmds() {
local toolchain
# build aarch64 in amd64
if [[ $(dpkg --print-architecture) == amd64 ]]; then
toolchain=$(find_toolchain "$UBOOT_COMPILER" "$UBOOT_USE_GCC")
[[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${UBOOT_COMPILER}gcc $UBOOT_USE_GCC"
fi
display_alert "Compiler version" "${UBOOT_COMPILER}gcc $(eval env PATH="${toolchain}:${PATH}" "${UBOOT_COMPILER}gcc" -dumpversion)" "info"
local gpp="${UBOOT_COMPILER}g++"
local gpp_options="-Os -s -Wall -Wextra -std=c++17 -I$SRC/packages/bsp/jethub"
local gcc="${UBOOT_COMPILER}gcc"
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/jethub_get_cmdline_key.cpp" -o "$destination/usr/bin/jethub_get_cmdline_key" || exit_with_error "Unable to compile jethub_get_cmdline_key.cpp"
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/jethub_get_cmdline_key_cpuid.cpp" -o "$destination/usr/bin/jethub_get_cpuid" || exit_with_error "Unable to compile jethub_get_cmdline_key_cpuid.cpp"
if [[ $BOARD == jethubj80 ]]; then
# Bluetooth
run_host_command_logged install -m 755 "$SRC/packages/blobs/bt/hciattach/rtk_hciattach_$ARCH" "$destination/usr/bin/rtk_hciattach" || exit_with_error "Unable to install rtk_hciattach"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/$BOARD/bluetooth/jethub-rtk-hciattach.service" "$destination/lib/systemd/system/" || exit_with_error "Unable to copy jethub-rtk-hciattach.service"
run_host_command_logged install -m 755 "$SRC/packages/bsp/jethub/$BOARD/bluetooth/jethub-rtk-hciattach-starter" "$destination/usr/lib/armbian/" || exit_with_error "Unable to install jethub-rtk-hciattach-starter"
# Board eth led setup
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gcc" "$SRC/packages/bsp/jethub/$BOARD/jethub_set_eth_leds.c" -o "$destination/usr/sbin/jethub_set-eth_leds" || exit_with_error "Unable to compile jethub_set_eth_leds.c"
# Board identifiers
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/$BOARD/jethub_get_efuse_raw_key.cpp" -o "$destination/usr/bin/jethub_get_efuse_raw_key" || exit_with_error "Unable to compile jethub_get_efuse_raw_key.cpp"
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/$BOARD/jethub_get_efuse_key_mac.cpp" -o "$destination/usr/bin/jethub_get_mac" || exit_with_error "Unable to compile jethub_get_efuse_key_mac.cpp"
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/$BOARD/jethub_get_efuse_key_serial.cpp" -o "$destination/usr/bin/jethub_get_serial" || exit_with_error "Unable to compile jethub_get_efuse_key_serial.cpp"
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/$BOARD/jethub_get_efuse_key_usid.cpp" -o "$destination/usr/bin/jethub_get_usid" || exit_with_error "Unable to compile jethub_get_efuse_key_usid.cpp"
elif [[ $BOARD == jethubj100 ]]; then
# Board identifiers
run_host_command_logged env PATH="${toolchain}:${PATH}" "$gpp" $gpp_options "$SRC/packages/bsp/jethub/$BOARD/jethub_get_cmdline_key_mac.cpp" -o "$destination/usr/bin/jethub_get_mac" || exit_with_error "Unable to compile jethub_get_cmdline_key_mac.cpp"
# Wifi & Bluetooth
run_host_command_logged mkdir -pv --mode=755 "$destination/lib/firmware/" || exit_with_error "Unable to mkdir firmware"
run_host_command_logged mkdir -v --mode=775 "$destination/lib/firmware/brcm/" || exit_with_error "Unable to mkdir brcm"
run_host_command_logged cp -Pv "$SRC"/packages/bsp/jethub/"$BOARD"/{BCM4345C0.hcd,'brcmfmac43455-sdio.jethome,jethub-j100.txt','brcmfmac43455-sdio.jethome,jethub-j100.bin','brcmfmac43456-sdio.jethome,jethub-j100.txt','brcmfmac43456-sdio.jethome,jethub-j100.bin'} "$destination/lib/firmware/brcm/" || exit_with_error "Unable to copy brcm firmware symlinks"
else
exit_with_error "Unexpected board \"$BOARD\""
fi
}
family_tweaks() {
# Log rotation
comment_default_rsyslog_rules || display_alert "Unable to comment default rsyslog rules" "${BOARD}" "wrn"
# Hardware init
chroot_sdcard systemctl --no-reload enable jethub-initer.service
# AR-1098 userland fix for net interface does not up at boot
chroot_sdcard systemctl --no-reload enable jethub-ethreset.service
# pip3 packages
#chroot_sdcard pip3 install pyserial intelhex python-magic
if [[ "$BOARD" == jethubj80 ]]; then
# Bluetooth
chroot_sdcard systemctl --no-reload enable jethub-rtk-hciattach.service
fi
display_alert "Adding JetHome repository and authentication key" "/etc/apt/sources.list.d/jethome.list" "info"
run_host_command_logged cp -pv "${SRC}"/packages/bsp/jethub/jethome.gpg "${SDCARD}/etc/apt/trusted.gpg.d/"
echo "deb http://repo.jethome.ru"$([[ $BETA == yes ]] && echo "/beta")" ${RELEASE} jethome-${RELEASE}" \
>> "${SDCARD}"/etc/apt/sources.list.d/jethome.list
}
family_tweaks_bsp() {
# build jethub_get_cmdline_key jethub_get_cpuid
buildjethomecmds
# Log rotation
run_host_command_logged mkdir -pv --mode=755 "$destination/etc/rsyslog.d" || exit_with_error "Unable to mkdir /etc/rsyslog.d"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/60-jethub-logs-rotate.conf" "$destination/etc/rsyslog.d/" || exit_with_error "Unable to copy 60-jethub-logs-rotate.conf"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/jethub-remove-log-file.sh" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-remove-log-file.sh"
# Hardware init
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/jethub-initer.service" "$destination/lib/systemd/system/" || exit_with_error "Unable to copy jethub-initer.service"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/${BOARD}/libjethubconfig.sh" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-init"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/jethub-init" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-init"
# AR-1098 userland fix for net interface does not up at boot
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/jethub-ethreset.service" "$destination/lib/systemd/system/" || exit_with_error "Unable to copy jethub-ethreset.service"
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/jethub-ethreset" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-ethreset"
if [[ "$BOARD" == jethubj80 ]]; then
# Ethernet LED setup
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/$BOARD/05-jethub_set_eth_leds.rules" "$destination/etc/udev/rules.d/"
fi
if [[ "$BOARD" == jethubj100 ]]; then
# Add /dev/serial/rs485 aliases
run_host_command_logged cp -v "$SRC/packages/bsp/jethub/$BOARD/90-jethub-rs485-aliases.rules" "$destination/etc/udev/rules.d/"
fi
run_host_command_logged mkdir -pv "$destination/etc/udev/rules.d"
run_host_command_logged mkdir -pv "$destination/usr/local/bin"
}