400 lines
13 KiB
Bash
Executable File
400 lines
13 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
POST_ROOTFS_ONLY=1
|
|
|
|
source "${RK_POST_HELPER:-$(dirname "$(realpath "$0")")/post-helper}"
|
|
|
|
build_wifibt()
|
|
{
|
|
check_config RK_KERNEL RK_WIFIBT RK_WIFIBT_MODULES || return 0
|
|
source "$RK_SCRIPTS_DIR/kernel-helper"
|
|
|
|
message "=========================================="
|
|
message " Start building wifi/BT ($RK_WIFIBT_MODULES)"
|
|
message "=========================================="
|
|
|
|
RKWIFIBT_DIR="$RK_SDK_DIR/external/rkwifibt"
|
|
|
|
echo -e "\e[36m"
|
|
if find "$RKWIFIBT_DIR"/* -not -user $RK_OWNER_UID | grep ""; then
|
|
error "Found files owned by other users!"
|
|
error "$RKWIFIBT_DIR is dirty for building!"
|
|
error "Please clear it:"
|
|
error "cd $RKWIFIBT_DIR"
|
|
error "git add -f ."
|
|
error "sudo git reset --hard"
|
|
error "sudo chown -h -R $RK_OWNER:$RK_OWNER $RKWIFIBT_DIR/"
|
|
exit 1
|
|
fi
|
|
echo -e "\e[0m"
|
|
|
|
# Make sure that the kernel is ready
|
|
if [ ! -r kernel/include/generated/asm-offsets.h ]; then
|
|
notice "Kernel is not ready, building it for wifi/BT..."
|
|
"$RK_SCRIPTS_DIR/mk-kernel.sh"
|
|
fi
|
|
|
|
# Check kernel config
|
|
WIFI_USB=`grep "CONFIG_USB=y" kernel/.config` || true
|
|
WIFI_SDIO=`grep "CONFIG_MMC=y" kernel/.config` || true
|
|
WIFI_PCIE=`grep "CONFIG_PCIE_DW_ROCKCHIP=y" kernel/.config` || true
|
|
WIFI_RFKILL=`grep "CONFIG_RFKILL=y" kernel/.config` || true
|
|
if [ -z "WIFI_SDIO" ]; then
|
|
echo "=== WARNNING CONFIG_MMC not set !!! ==="
|
|
fi
|
|
if [ -z "WIFI_RFKILL" ]; then
|
|
echo "=== WARNNING CONFIG_USB not set !!! ==="
|
|
fi
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "U" ]];then
|
|
if [ -z "$WIFI_USB" ]; then
|
|
echo "=== WARNNING CONFIG_USB not set so ABORT!!! ==="
|
|
exit 0
|
|
fi
|
|
fi
|
|
echo "kernel config: $WIFI_USB $WIFI_SDIO $WIFI_RFKILL"
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "ALL_AP" ]];then
|
|
echo "building bcmdhd sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bcmdhd CONFIG_BCMDHD=m \
|
|
CONFIG_BCMDHD_SDIO=y CONFIG_BCMDHD_PCIE=
|
|
if [ -n "$WIFI_PCIE" ]; then
|
|
echo "building bcmdhd pcie"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bcmdhd CONFIG_BCMDHD=m \
|
|
CONFIG_BCMDHD_PCIE=y CONFIG_BCMDHD_SDIO=
|
|
fi
|
|
|
|
if ! [[ "$RK_KERNEL_VERSION_RAW" = "6.1" ]];then
|
|
if [ -n "$WIFI_USB" ]; then
|
|
echo "building rtl8188fu usb"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8188fu modules
|
|
fi
|
|
echo "building rtl8189fs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8189fs modules
|
|
echo "building rtl8723ds sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8723ds modules
|
|
echo "building rtl8821cs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8821cs modules
|
|
echo "building rtl8822cs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8822cs modules
|
|
echo "building rtl8852bs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852bs modules \
|
|
DRV_PATH=$RKWIFIBT_DIR/drivers/rtl8852bs
|
|
if [ -n "$WIFI_PCIE" ]; then
|
|
echo "building rtl8852be pcie"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852be modules \
|
|
DRV_PATH=$RKWIFIBT_DIR/drivers/rtl8852be
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "ALL_CY" ]];then
|
|
echo "building CYW4354"
|
|
ln -sf chips/CYW4354_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
echo "building CYW4373"
|
|
ln -sf chips/CYW4373_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
echo "building CYW43438"
|
|
ln -sf chips/CYW43438_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
echo "building CYW43455"
|
|
ln -sf chips/CYW43455_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
echo "building CYW5557X"
|
|
ln -sf chips/CYW5557X_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
if [ -n "$WIFI_PCIE" ]; then
|
|
echo "building CYW5557X_PCIE"
|
|
ln -sf chips/CYW5557X_PCIE_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
echo "building CYW54591_PCIE"
|
|
ln -sf chips/CYW54591_PCIE_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
echo "building CYW54591"
|
|
ln -sf chips/CYW54591_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
|
|
if ! [[ "$RK_KERNEL_VERSION_RAW" = "6.1" ]];then
|
|
if [ -n "$WIFI_USB" ]; then
|
|
echo "building rtl8188fu usb"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8188fu modules
|
|
fi
|
|
echo "building rtl8189fs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8189fs modules
|
|
echo "building rtl8723ds sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8723ds modules
|
|
echo "building rtl8821cs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8821cs modules
|
|
echo "building rtl8822cs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8822cs modules
|
|
echo "building rtl8852bs sdio"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852bs modules \
|
|
DRV_PATH=$RKWIFIBT_DIR/drivers/rtl8852bs
|
|
if [ -n "$WIFI_PCIE" ]; then
|
|
echo "building rtl8852be pcie"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852be modules \
|
|
DRV_PATH=$RKWIFIBT_DIR/drivers/rtl8852be
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "AP6" ]];then
|
|
if [[ "$RK_WIFIBT_MODULES" = "AP6275_PCIE" ]];then
|
|
echo "building bcmdhd pcie driver"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bcmdhd CONFIG_BCMDHD=m \
|
|
CONFIG_BCMDHD_PCIE=y CONFIG_BCMDHD_SDIO=
|
|
else
|
|
echo "building bcmdhd sdio driver"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bcmdhd CONFIG_BCMDHD=m \
|
|
CONFIG_BCMDHD_SDIO=y CONFIG_BCMDHD_PCIE=
|
|
fi
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW4354" ]];then
|
|
echo "building CYW4354"
|
|
ln -sf chips/CYW4354_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW4373" ]];then
|
|
echo "building CYW4373"
|
|
ln -sf chips/CYW4373_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RK960" ]];then
|
|
echo "building RK960"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rk960
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW43438" ]];then
|
|
echo "building CYW43438"
|
|
ln -sf chips/CYW43438_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW43455" ]];then
|
|
echo "building CYW43455"
|
|
ln -sf chips/CYW43455_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW5557X" ]];then
|
|
echo "building CYW5557X"
|
|
ln -sf chips/CYW5557X_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW5557X_PCIE" ]];then
|
|
echo "building CYW5557X_PCIE"
|
|
ln -sf chips/CYW5557X_PCIE_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW54591" ]];then
|
|
echo "building CYW54591"
|
|
ln -sf chips/CYW54591_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "CYW54591_PCIE" ]];then
|
|
echo "building CYW54591_PCIE"
|
|
ln -sf chips/CYW54591_PCIE_Makefile \
|
|
$RKWIFIBT_DIR/drivers/infineon/Makefile
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/infineon
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8188FU" ]];then
|
|
echo "building rtl8188fu driver"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8188fu modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8189FS" ]];then
|
|
echo "building rtl8189fs driver"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8189fs modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8723DS" ]];then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8723ds modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8821CS" ]];then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8821cs modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8822CS" ]];then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8822cs modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8852BS" ]];then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852bs modules
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "RTL8852BE" ]];then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/rtl8852be modules
|
|
fi
|
|
|
|
if ! [[ "$RK_KERNEL_VERSION_RAW" = "6.1" ]];then
|
|
echo "building realtek bt drivers"
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bluetooth_uart_driver
|
|
if [ -n "$WIFI_USB" ]; then
|
|
$KMAKE M=$RKWIFIBT_DIR/drivers/bluetooth_usb_driver
|
|
fi
|
|
fi
|
|
|
|
mkdir -p $TARGET_DIR/etc/ $TARGET_DIR/usr/bin/ \
|
|
$TARGET_DIR/lib/modules/ $TARGET_DIR/lib/firmware/rtlbt/
|
|
|
|
echo "create Android style dirs"
|
|
rm -rf "$TARGET_DIR/system"
|
|
rm -rf "$TARGET_DIR/vendor"
|
|
mkdir -p "$TARGET_DIR/system/etc"
|
|
ln -rsf "$TARGET_DIR/lib/firmware" "$TARGET_DIR/system/etc/firmware"
|
|
ln -rsf "$TARGET_DIR/system" "$TARGET_DIR/vendor"
|
|
|
|
echo "installing tools and scripts"
|
|
ensure_tools "$TARGET_DIR/usr/bin/brcm_patchram_plus1" \
|
|
"$TARGET_DIR/usr/bin/dhd_priv" \
|
|
"$TARGET_DIR/usr/bin/rtk_hciattach"
|
|
|
|
install -m 0655 $RKWIFIBT_DIR/conf/* "$TARGET_DIR/etc/"
|
|
install -m 0755 $RKWIFIBT_DIR/scripts/* "$TARGET_DIR/usr/bin/"
|
|
rm -f "$TARGET_DIR/usr/bin/wifibt-sleep-hook.sh"
|
|
for b in bt-tty wifibt-info wifibt-vendor wifibt-id wifibt-bus \
|
|
wifibt-chip wifibt-module; do
|
|
ln -sf wifibt-util.sh "$TARGET_DIR/usr/bin/$b"
|
|
done
|
|
|
|
if [ "$RK_ROOTFS_PREBUILT_TOOLS" ]; then
|
|
echo "installing prebuilt debug tools"
|
|
install -m 0755 $RKWIFIBT_DIR/bin/arm/* "$TARGET_DIR/usr/bin/"
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "ALL_CY" ]];then
|
|
echo "copy infineon/realtek firmware/nvram to rootfs"
|
|
cp $RKWIFIBT_DIR/drivers/infineon/*.ko \
|
|
$TARGET_DIR/lib/modules/ || true
|
|
cp $RKWIFIBT_DIR/firmware/infineon/*/* \
|
|
$TARGET_DIR/lib/firmware/ || true
|
|
|
|
#reatek
|
|
if ! [[ "$RK_KERNEL_VERSION_RAW" = "6.1" ]];then
|
|
cp $RKWIFIBT_DIR/firmware/realtek/*/* $TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/firmware/realtek/*/* \
|
|
$TARGET_DIR/lib/firmware/rtlbt/
|
|
cp $RKWIFIBT_DIR/drivers/bluetooth_uart_driver/hci_uart.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
if [ -n "$WIFI_USB" ]; then
|
|
cp $RKWIFIBT_DIR/drivers/bluetooth_usb_driver/rtk_btusb.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" = "ALL_AP" ]];then
|
|
echo "copy ap6xxx firmware/nvram to rootfs"
|
|
cp $RKWIFIBT_DIR/drivers/bcmdhd/*.ko $TARGET_DIR/lib/modules/
|
|
cp $RKWIFIBT_DIR/firmware/broadcom/*/wifi/* \
|
|
$TARGET_DIR/lib/firmware/ || true
|
|
cp $RKWIFIBT_DIR/firmware/broadcom/*/bt/* \
|
|
$TARGET_DIR/lib/firmware/ || true
|
|
|
|
#reatek
|
|
if ! [[ "$RK_KERNEL_VERSION_RAW" = "6.1" ]];then
|
|
echo "copy realtek firmware/nvram to rootfs"
|
|
cp $RKWIFIBT_DIR/drivers/rtl*/*.ko $TARGET_DIR/lib/modules/
|
|
cp -rf $RKWIFIBT_DIR/firmware/realtek/*/* $TARGET_DIR/lib/firmware/
|
|
cp -rf $RKWIFIBT_DIR/firmware/realtek/*/* \
|
|
$TARGET_DIR/lib/firmware/rtlbt/
|
|
cp $RKWIFIBT_DIR/drivers/bluetooth_uart_driver/hci_uart.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
if [ -n "$WIFI_USB" ]; then
|
|
cp $RKWIFIBT_DIR/drivers/bluetooth_usb_driver/rtk_btusb.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "RTL" ]];then
|
|
echo "Copy RTL file to rootfs"
|
|
if [ -d "$RKWIFIBT_DIR/firmware/realtek/$RK_WIFIBT_MODULES" ]; then
|
|
cp $RKWIFIBT_DIR/firmware/realtek/$RK_WIFIBT_MODULES/* \
|
|
$TARGET_DIR/lib/firmware/rtlbt/
|
|
cp $RKWIFIBT_DIR/firmware/realtek/$RK_WIFIBT_MODULES/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
else
|
|
echo "INFO: $RK_WIFIBT_MODULES isn't bluetooth?"
|
|
fi
|
|
|
|
WIFI_KO_DIR=$(echo $RK_WIFIBT_MODULES | tr '[A-Z]' '[a-z]')
|
|
|
|
cp $RKWIFIBT_DIR/drivers/$WIFI_KO_DIR/*.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "RK" ]];then
|
|
echo "Copy Rockchip file to rootfs"
|
|
cp $RKWIFIBT_DIR/firmware/rockchip/$RK_WIFIBT_MODULES/wifi/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/firmware/rockchip/$RK_WIFIBT_MODULES/bt/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/drivers/rk960/*.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "CYW" ]];then
|
|
echo "Copy CYW file to rootfs"
|
|
cp $RKWIFIBT_DIR/firmware/infineon/$RK_WIFIBT_MODULES/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/drivers/infineon/*.ko \
|
|
$TARGET_DIR/lib/modules/
|
|
fi
|
|
|
|
if [[ "$RK_WIFIBT_MODULES" =~ "AP6" ]];then
|
|
echo "Copy AP file to rootfs"
|
|
cp $RKWIFIBT_DIR/firmware/broadcom/$RK_WIFIBT_MODULES/wifi/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/firmware/broadcom/$RK_WIFIBT_MODULES/bt/* \
|
|
$TARGET_DIR/lib/firmware/
|
|
cp $RKWIFIBT_DIR/drivers/bcmdhd/*.ko $TARGET_DIR/lib/modules/
|
|
fi
|
|
|
|
# Install boot services
|
|
install_sysv_service $RKWIFIBT_DIR/S36wifibt-init.sh S
|
|
install_busybox_service $RKWIFIBT_DIR/S36wifibt-init.sh
|
|
install_systemd_service $RKWIFIBT_DIR/wifibt-init.service
|
|
|
|
# Install suspend hook
|
|
for hook_dir in /usr/lib/pm-utils/sleep.d /lib/systemd/system-sleep; do
|
|
[ -d "$TARGET_DIR/$hook_dir" ] || continue
|
|
install -m 0755 $RKWIFIBT_DIR/scripts/wifibt-sleep-hook.sh \
|
|
"$TARGET_DIR/$hook_dir/03wifibt"
|
|
done
|
|
|
|
# Log collection
|
|
mkdir -p "$TARGET_DIR/etc/generate_logs.d"
|
|
echo -e '#!/bin/sh\nwifibt-info > ${1:-/tmp}/wifibt-info.txt' > \
|
|
"$TARGET_DIR/etc/generate_logs.d/80-wifibt.sh"
|
|
chmod 755 "$TARGET_DIR/etc/generate_logs.d/80-wifibt.sh"
|
|
}
|
|
|
|
message "Building Wifi/BT module and firmwares..."
|
|
cd "$RK_SDK_DIR"
|
|
build_wifibt
|