diff --git a/build.sh b/build.sh index 627b463f..83d06348 100755 --- a/build.sh +++ b/build.sh @@ -4,12 +4,12 @@ apt-get install -y git rsync build-essential cmake device-tree-compiler bc binut git config --global http.version HTTP/1.1 git config --global http.postBuffer 157286400 cd buildroot -make BR2_EXTERNAL=../ext_tree luckfox_pico_max_defconfig +make BR2_EXTERNAL=../ext_tree luckfox_pico_ultra_defconfig export FORCE_UNSAFE_CONFIGURE=1 export LIBCLANG_PATH=/usr/lib/llvm-14/lib export CLANG_PATH=/usr/bin/clang export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=`pwd`/output/host/arm-buildroot-linux-gnueabihf/sysroot" -rm -rf output/image/* ; rm -rf output/target ; find output/ -name ".stamp*installed" -delete ; rm -f output/build/host-gcc-final-*/.stamp_host_installed +rm -rf output/target ; find output/ -name ".stamp_target_installed" -delete ; rm -f output/build/host-gcc-final-*/.stamp_host_installed make diff --git a/buildroot/board/luckfox-pico/common/post-image.sh b/buildroot/board/luckfox-pico/common/post-image.sh index 669a1889..fba4e104 100755 --- a/buildroot/board/luckfox-pico/common/post-image.sh +++ b/buildroot/board/luckfox-pico/common/post-image.sh @@ -1,5 +1,10 @@ #!/bin/sh +# Copy tidal.sqfs to images directory for flashing +if [ -f "/tmp/tidal.sqfs" ]; then + cp /tmp/tidal.sqfs $BINARIES_DIR/ +fi + mv -f $BINARIES_DIR/rootfs.ubi $BINARIES_DIR/rootfs.img 2>/dev/null mv -f $BINARIES_DIR/uboot-env.bin $BINARIES_DIR/env.img 2>/dev/null rm -f $BINARIES_DIR/*.dtb diff --git a/ext_tree/Config.in b/ext_tree/Config.in index 3b23e1dd..688c94ea 100644 --- a/ext_tree/Config.in +++ b/ext_tree/Config.in @@ -8,4 +8,5 @@ menu "Custom packages" source "../ext_tree/package/squeezeliteR2/Config.in" source "../ext_tree/package/status-monitor/Config.in" source "../ext_tree/package/qobuz-connect/Config.in" + source "../ext_tree/package/tidal-connect/Config.in" endmenu diff --git a/ext_tree/board/luckfox/config/uboot-env.txt b/ext_tree/board/luckfox/config/uboot-env.txt new file mode 100644 index 00000000..0a66802e --- /dev/null +++ b/ext_tree/board/luckfox/config/uboot-env.txt @@ -0,0 +1,4 @@ +blkdevparts=mmcblk0:32K(env),512K@32K(idblock),256K(uboot),32M(boot),512M(oem),256M(userdata),6G(rootfs) +sys_bootargs= root=/dev/mmcblk0p7 rootfstype=ext4 rk_dma_heap_cma=24M +sd_parts=mmcblk0:16K@512(env),512K@32K(idblock),4M(uboot) +bootcmd=mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_pll.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r} diff --git a/ext_tree/board/luckfox/dts_max/rv1106-pinctrl.dtsi b/ext_tree/board/luckfox/dts_max/rv1106-pinctrl.dtsi index a272fa3c..76246ca7 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106-pinctrl.dtsi +++ b/ext_tree/board/luckfox/dts_max/rv1106-pinctrl.dtsi @@ -350,6 +350,11 @@ i2s0_8ch { /* gpio1_d3 */ <1 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up_drv_level_2>; }; + mute_inv_gpio: mute-inv-gpio { + rockchip,pins = + /* gpio2_a5 - Inverted mute signal (pin 69) */ + <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>; + }; dsd_on_gpio: dsd-on-gpio { rockchip,pins = /* gpio1_d0 - DSD_ON signal */ diff --git a/ext_tree/board/luckfox/dts_max/rv1106_512_ext-ipc.dtsi b/ext_tree/board/luckfox/dts_max/rv1106_512_ext-ipc.dtsi index fb6e74a3..15aaaa44 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_512_ext-ipc.dtsi +++ b/ext_tree/board/luckfox/dts_max/rv1106_512_ext-ipc.dtsi @@ -70,6 +70,7 @@ i2s0_8ch: i2s@ffae0000 { rockchip,cru = <&cru>; rockchip,grf = <&grf>; mute-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_HIGH>; + mute-inv-gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_HIGH>; dsd-enable-gpios = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&i2s0_lrck @@ -81,6 +82,7 @@ i2s0_8ch: i2s@ffae0000 { &i2s0_sdo2_sdi2 &i2s0_sdo3_sdi1 &mute_gpio + &mute_inv_gpio &dsd_on_gpio &mclk_sel_gpio>; status = "disable"; diff --git a/ext_tree/board/luckfox/dts_max/rv1106_512_ext.dts b/ext_tree/board/luckfox/dts_max/rv1106_512_ext.dts index cb2b05de..1607e9b1 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_512_ext.dts +++ b/ext_tree/board/luckfox/dts_max/rv1106_512_ext.dts @@ -62,7 +62,7 @@ /**********EMMC*************/ &emmc { - status = "disable"; + status = "okay"; }; /**********ETH**********/ diff --git a/ext_tree/board/luckfox/dts_max/rv1106_ext-ipc.dtsi b/ext_tree/board/luckfox/dts_max/rv1106_ext-ipc.dtsi index eacc44a8..e1e6791f 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_ext-ipc.dtsi +++ b/ext_tree/board/luckfox/dts_max/rv1106_ext-ipc.dtsi @@ -70,6 +70,7 @@ i2s0_8ch: i2s@ffae0000 { rockchip,cru = <&cru>; rockchip,grf = <&grf>; mute-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_HIGH>; + mute-inv-gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_HIGH>; dsd-enable-gpios = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&i2s0_lrck @@ -81,6 +82,7 @@ i2s0_8ch: i2s@ffae0000 { &i2s0_sdo2_sdi2 &i2s0_sdo3_sdi1 &mute_gpio + &mute_inv_gpio &dsd_on_gpio &mclk_sel_gpio>; status = "disable"; diff --git a/ext_tree/board/luckfox/dts_max/rv1106_ext.dts b/ext_tree/board/luckfox/dts_max/rv1106_ext.dts index e48fa980..db76157d 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_ext.dts +++ b/ext_tree/board/luckfox/dts_max/rv1106_ext.dts @@ -62,7 +62,7 @@ /**********EMMC*************/ &emmc { - status = "disable"; + status = "okay"; }; /**********ETH**********/ diff --git a/ext_tree/board/luckfox/dts_max/rv1106_pll-ipc.dtsi b/ext_tree/board/luckfox/dts_max/rv1106_pll-ipc.dtsi index f1d652d1..90fd2135 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_pll-ipc.dtsi +++ b/ext_tree/board/luckfox/dts_max/rv1106_pll-ipc.dtsi @@ -47,6 +47,7 @@ rockchip,volume-max = <100>; rockchip,volume-default = <100>; mute-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_HIGH>; + mute-inv-gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_HIGH>; dsd-enable-gpios = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&i2s0_lrck @@ -58,6 +59,7 @@ &i2s0_sdo2_sdi2 &i2s0_sdo3_sdi1 &mute_gpio + &mute_inv_gpio &dsd_on_gpio>; status = "okay"; }; diff --git a/ext_tree/board/luckfox/dts_max/rv1106_pll.dts b/ext_tree/board/luckfox/dts_max/rv1106_pll.dts index 77c0b370..f47fda38 100644 --- a/ext_tree/board/luckfox/dts_max/rv1106_pll.dts +++ b/ext_tree/board/luckfox/dts_max/rv1106_pll.dts @@ -61,7 +61,7 @@ /**********EMMC*************/ &emmc { - status = "disable"; + status = "okay"; }; /**********ETH**********/ diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/fstab b/ext_tree/board/luckfox/rootfs_overlay/etc/fstab index 4717db82..0c47067b 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/fstab +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/fstab @@ -1,7 +1,10 @@ # -/dev/root / ext2 rw,noauto 0 1 +/dev/root / ext4 rw,noauto 0 1 +/dev/mmcblk0p6 /data ext4 rw,relatime 0 0 +/dev/mmcblk0p5 /boot vfat defaults 0 0 proc /proc proc defaults 0 0 devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0 +debugfs /sys/kernel/debug debugfs defaults 0 0 tmpfs /dev/shm tmpfs mode=1777 0 0 tmpfs /tmp tmpfs mode=1777 0 0 tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/fw_env.config b/ext_tree/board/luckfox/rootfs_overlay/etc/fw_env.config index 886f38ac..4b2fe191 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/fw_env.config +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/fw_env.config @@ -1 +1 @@ -/dev/mtd0 0x0 0x40000 0x20000 +/dev/mmcblk0 0x0 0x8000 0x200 64 diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/i2s.conf b/ext_tree/board/luckfox/rootfs_overlay/etc/i2s.conf index 15551dfc..6ae02c84 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/i2s.conf +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/i2s.conf @@ -5,4 +5,13 @@ MCLK=512 MODE=pll ### std, lr, plr, 8ch ###### -SUBMODE=std \ No newline at end of file +SUBMODE=std + +### PCM channel swap: 0 or 1 ### +PCM_SWAP=0 + +### DSD physical swap: 0 or 1 ### +DSD_SWAP=1 + +### Frequency domain swap (44/48): 0 or 1 ### +FREQ_SWAP=0 \ No newline at end of file diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S01RkLunch b/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S01RkLunch index 0f0cf2be..6c380c49 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S01RkLunch +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S01RkLunch @@ -1,8 +1,22 @@ #!/bin/sh +# Find mixer control with playback volume and switch capabilities +MIXER=$(amixer 2>/dev/null | awk ' + /^Simple mixer control/ { + control = $0 + gsub(/.*'\''/, "", control) + gsub(/'\''.*/, "", control) + } + /Capabilities:/ && /pvolume/ && /pswitch/ { + print control + exit + } +') +# Fallback to first available control if none found +[ -z "$MIXER" ] && MIXER=$(amixer 2>/dev/null | awk -F "'" 'NR==1 {print $2; exit}') + echo 1 > /sys/devices/platform/ffae0000.i2s/mute -MIXER=`amixer 2>/dev/null| awk -F "'" 'NR==1 {print $2; exit}'` -/usr/bin/amixer set "$MIXER" mute +[ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null if [ -f /data/ethaddr.txt ]; then MAC=`cat /data/ethaddr.txt` @@ -23,10 +37,16 @@ MIXER=`amixer 2>/dev/null| awk -F "'" 'NR==1 {print $2; exit}'` /sbin/ifconfig eth0 up && /sbin/udhcpc -i eth0 grep MCLK=1024 /etc/i2s.conf && echo 1024 > /sys/devices/platform/ffae0000.i2s/mclk_multiplier -echo 100 > /sys/devices/platform/ffae0000.i2s/premute_delay_ms echo 300 > /sys/devices/platform/ffae0000.i2s/postmute_delay_ms -echo 1 > /sys/devices/platform/ffae0000.i2s/dsd_physical_swap -echo 0 > /sys/devices/platform/ffae0000.i2s/pcm_channel_swap + +PCM_SWAP=$(grep '^PCM_SWAP=' /etc/i2s.conf | cut -d'=' -f2 | tr -d '[:space:]') +[ -n "$PCM_SWAP" ] && echo "$PCM_SWAP" > /sys/devices/platform/ffae0000.i2s/pcm_channel_swap || echo 0 > /sys/devices/platform/ffae0000.i2s/pcm_channel_swap + +DSD_SWAP=$(grep '^DSD_SWAP=' /etc/i2s.conf | cut -d'=' -f2 | tr -d '[:space:]') +[ -n "$DSD_SWAP" ] && echo "$DSD_SWAP" > /sys/devices/platform/ffae0000.i2s/dsd_physical_swap || echo 1 > /sys/devices/platform/ffae0000.i2s/dsd_physical_swap + +FREQ_SWAP=$(grep '^FREQ_SWAP=' /etc/i2s.conf | cut -d'=' -f2 | tr -d '[:space:]') +[ -n "$FREQ_SWAP" ] && echo "$FREQ_SWAP" > /sys/devices/platform/ffae0000.i2s/freq_domain_invert || echo 0 > /sys/devices/platform/ffae0000.i2s/freq_domain_invert rcS() diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S94ioi2s b/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S94ioi2s index 972b8cab..e26704ce 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S94ioi2s +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S94ioi2s @@ -27,6 +27,13 @@ start() { exit 1 fi echo "OK" + + # Initialize I2S/MCLK by briefly opening audio device + printf "Initializing I2S/MCLK: " + timeout 1 aplay -D default -f S16_LE -r 44100 /dev/zero 2>/dev/null & + sleep 0.3 + killall aplay 2>/dev/null + echo "OK" } stop() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aplayer b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aplayer index 8818622b..1d874a2a 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aplayer +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aplayer @@ -1,17 +1,19 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { touch /var/log/aplayer.log ln -s -f /var/log/aplayer.log /usr/aprenderer/aplayer.log printf "Starting APlayer: " cd /usr/aplayer; nice -n -30 ./aplayer > /dev/null 2>&1 && echo "OK" || echo "FAIL" + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi sync - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 aplayer } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aprenderer b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aprenderer index cdb63dab..b799c942 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aprenderer +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95aprenderer @@ -1,25 +1,20 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { + renice -10 $$ touch /var/log/aprenderer.log ln -s -f /var/log/aprenderer.log /usr/aprenderer/aprenderer.log printf "Starting APlayer UPNP: " cd /usr/aprenderer; ./ap2renderer > /dev/null 2>&1 && echo "OK" || echo "FAIL" sleep 0.5 - pid=$(pidof ap2renderer) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null fi sync - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 ap2renderer } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95apscream b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95apscream index a86a2ae9..85be68c0 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95apscream +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95apscream @@ -1,6 +1,5 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { touch /var/log/apscream.log @@ -8,11 +7,13 @@ start() { printf "Starting APscream: " cd /usr/apscream; ./apscream > /dev/null 2>&1 && echo "OK" || echo "FAIL" sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi sync - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 apscream } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95mpd b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95mpd index 1df6a8f9..223dae32 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95mpd +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95mpd @@ -1,8 +1,7 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` - start() { + renice -10 $$ printf "Starting mpd: " mkdir -p /var/cache/ ln -s /opt/upmpdcli /var/cache/ @@ -16,17 +15,12 @@ start() { sleep 0.5 /usr/bin/mpd sleep 0.5 - pid=$(pidof /usr/bin/mpd) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null fi - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 mpd killall -9 upmpdcli } diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95naa b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95naa index 04c08143..8a82c39e 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95naa +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95naa @@ -1,14 +1,15 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` - start() { printf "Starting NAA: " /usr/sbin/networkaudiod > /dev/null 2>&1 & - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 networkaudiod } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95qobuz b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95qobuz index 8d5281c6..265c04f1 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95qobuz +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95qobuz @@ -1,6 +1,5 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { local mode="$1" @@ -96,32 +95,17 @@ start() { OUTPUT_DEVICE="default" fi + renice -15 $$ # Start qobuz-connect (no LD_PRELOAD needed, all parameters embedded) /opt/qobuz-connect/qobuz-connect -o $OUTPUT_DEVICE > /dev/null 2>&1 & - sleep 2 - - # Set high priority for better audio performance - pid=$(pidof qobuz-connect) - if [ -n "$pid" ]; then - renice -15 $pid 2>/dev/null - for tid in $(ls /proc/$pid/task/ 2>/dev/null); do - renice -15 $tid 2>/dev/null - done - echo "started (PID: $pid)" - else - echo "failed to start" - echo "Error log:" - cat /tmp/qobuz.log 2>/dev/null || echo "No log available" - exit 1 + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null fi - - # Unmute audio output - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null || echo "No mixer controls available" } stop() { - # Mute audio output - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null || echo "No mixer controls available" pid=$(pidof qobuz-connect) if [ -n "$pid" ]; then kill -9 $pid diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95roonready b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95roonready index 38379c8d..9c5d1d66 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95roonready +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95roonready @@ -1,25 +1,19 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { printf "Starting RoonBrige: " MAC=`cat /sys/class/net/eth0/address | tr 'a-z' 'A-Z'` sed -i "s/^.*\"unique_id\".*/ \"unique_id\": \"$MAC\" ,/" /etc/raat.conf + renice -15 $$ /opt/RoonReady/raat_app /etc/raat.conf > /dev/null 2>&1 & sleep 0.5 - pid=$(pidof raat_app) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null fi - - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 raat_app } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95shairport b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95shairport index 495395a8..19d229a1 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95shairport +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95shairport @@ -1,23 +1,17 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` - start() { printf "Starting shairport-sync: " + renice -15 $$ /usr/bin/shairport-sync -d sleep 0.5 - pid=$(pidof shairport-sync) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done - fi - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 shairport-sync } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95spotify b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95spotify index 614284cc..375f276d 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95spotify +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95spotify @@ -1,34 +1,55 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` start() { date |grep 1970 && /etc/init.d/S48sntp start printf "Starting Spotify: " + + # Determine active ALSA card number from asound.conf + CARD_NUM=$(grep -E "card [0-9]" /etc/asound.conf 2>/dev/null | head -1 | awk '{print $2}') + if [ -z "$CARD_NUM" ]; then + # Fallback: try hw:X,X pattern + CARD_NUM=$(grep -E "hw:[0-9]" /etc/asound.conf 2>/dev/null | head -1 | sed 's/.*hw:\([0-9]\).*/\1/') + fi + [ -z "$CARD_NUM" ] && CARD_NUM=0 + + # Check if sound card exists before starting librespot + if [ ! -d "/proc/asound/card$CARD_NUM" ]; then + echo "ERROR: Sound card $CARD_NUM not found (configured in /etc/asound.conf but device missing)" + echo "Available cards:" + ls -d /proc/asound/card* 2>/dev/null || echo " No sound cards detected" + echo "Librespot will panic with 100% CPU if started without audio device. Aborting." + exit 1 + fi + + # Wait for sound device to be free (up to 10 seconds) + RETRY=0 + while [ $RETRY -lt 10 ]; do + if ! fuser /dev/snd/pcmC${CARD_NUM}* >/dev/null 2>&1; then + break + fi + logger -t spotify "Sound card $CARD_NUM busy, waiting... ($RETRY/10)" 2>/dev/null || true + sleep 1 + RETRY=$((RETRY + 1)) + done + + if [ $RETRY -eq 10 ]; then + logger -t spotify "ERROR: Sound card still busy after 10s, cannot start librespot" 2>/dev/null || true + exit 1 + fi + NAME=`hostname`_`ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'` + renice -15 $$ /usr/bin/librespot --cache /tmp --cache-size-limit 64M --bitrate 320 -R 100 --name $NAME > /dev/null 2>&1 & - sleep 1 - pid=$(pidof librespot) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null fi - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null - } -stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null - - # Try graceful stop first - killall librespot 2>/dev/null - sleep 1 +} - # Force kill if still running (handles 100% CPU hang case) - if pidof librespot >/dev/null; then - logger -t spotify "Librespot not responding, forcing kill" - killall -9 librespot - fi +stop() { + killall -9 librespot 2>/dev/null } restart() { stop diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95squeezelite b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95squeezelite index aee1f01e..1ffeaaaf 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95squeezelite +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95squeezelite @@ -1,25 +1,46 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` - NAME=`hostname`_`ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'` -OPTIONS="-z -D 1000:u32be -r 44100-705600:1000 -a 400:3::0 -M $NAME" + +# Auto-detect DSD format support by testing with aplay +DSD_FORMAT="u32le" # Default for most DACs + +# Detect audio device from asound.conf +AUDIO_DEV="default" +if [ -f /etc/asound.conf ]; then + CARD_NUM=$(grep "^card" /etc/asound.conf | head -1 | awk '{print $2}') + if [ -n "$CARD_NUM" ] && [ -d "/proc/asound/card$CARD_NUM" ]; then + AUDIO_DEV="hw:$CARD_NUM,0" + fi +fi + +# Get supported formats from device +HW_PARAMS=$(aplay -v -D "$AUDIO_DEV" --dump-hw-params /dev/zero 2>&1) + +# Check for DSD formats in order of preference (BE first for native DSD DACs) +if echo "$HW_PARAMS" | grep -q "DSD_U32_BE"; then + DSD_FORMAT="u32be" + elif echo "$HW_PARAMS" | grep -q "DSD_U32_LE"; then + DSD_FORMAT="u32le" + elif echo "$HW_PARAMS" | grep -q "DSD_U16_BE"; then + DSD_FORMAT="u16be" + elif echo "$HW_PARAMS" | grep -q "DSD_U16_LE"; then + DSD_FORMAT="u16le" +fi + +OPTIONS="-z -D 1000:$DSD_FORMAT -r 44100-22579200:1000 -a 400:3::0 -M $NAME" start() { printf "Starting Squeezelite: " + renice -15 $$ /usr/bin/squeezelite $OPTIONS - sleep 0.5 - pid=$(pidof squeezelite) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done - fi - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 squeezelite } restart() { diff --git a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95tidal b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95tidal index 98250115..12a2e7b8 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95tidal +++ b/ext_tree/board/luckfox/rootfs_overlay/etc/rc.pure/S95tidal @@ -1,7 +1,5 @@ #!/bin/sh -MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` - start() { printf "Starting Tidalconnect: " @@ -10,7 +8,7 @@ start() { mount -t squashfs -o loop,ro /usr/lib/tidal.sqfs /usr/lib/tidal 2>/dev/null && \ touch /tmp/tidal_mounted fi - + renice -15 $$ export LD_LIBRARY_PATH=/usr/lib/tidal ( tidalconnect \ @@ -20,24 +18,20 @@ start() { --clientid "VCjoaRrbaMU005Tk" \ > /dev/null 2>&1 < /dev/null & ) & - sleep 1 - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null - pid=$(pidof tidalconnect) - if [ -n "$pid" ]; then - renice -15 $pid - for tid in $(ls /proc/$pid/task/); do - renice -15 $tid - done - fi # Refresh avahi to announce tidal service /etc/init.d/S50avahi-daemon restart > /dev/null 2>&1 + + sleep 0.5 + if [ -f /tmp/mixer_control_cache ]; then + MIXER=$(cat /tmp/mixer_control_cache | cut -d, -f1 | tr -d "'") + [ -n "$MIXER" ] && amixer set "$MIXER" unmute 2>/dev/null + fi exit } stop() { - [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null killall -9 tidalconnect export LD_LIBRARY_PATH="" diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_ext.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_ext.sh index 25b04625..7ba43bbe 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_ext.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_ext.sh @@ -1,14 +1,14 @@ #!/bin/sh sed -i 's/007c003c/007c001c/' /etc/init.d/S94ioi2s +sed -i 's/MODE=pll/MODE=ext/' /etc/i2s.conf sed -i 's/MCLK=512/MCLK=1024/' /etc/i2s.conf -flash_erase /dev/mtd3 0x003C0000 0x2 -sleep 1 -nandwrite -p /dev/mtd3 -s 0x003C0000 /data/boot/1024_ext.dtb +fw_setenv bootcmd 'mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_ext.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r}' sync #reboot -f + diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_pll.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_pll.sh index fb7af7b0..35bb08d5 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_pll.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/2_1024_pll.sh @@ -1,11 +1,10 @@ #!/bin/sh -# Script to set MCLK = 1024x in PLL mode -# Set MCLK multiplier via sysfs echo 1024 > /sys/devices/platform/ffae0000.i2s/mclk_multiplier - -# Update configuration file sed -i 's/^MCLK=.*/MCLK=1024/' /etc/i2s.conf +sed -i 's/MODE=ext/MODE=pll/' /etc/i2s.conf + +fw_setenv bootcmd 'mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_pll.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r}' -echo "MCLK multiplier set to 1024x for PLL mode" -sync \ No newline at end of file +sync +#reboot -f diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_ext.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_ext.sh index a20aeede..54557021 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_ext.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_ext.sh @@ -4,12 +4,11 @@ sed -i 's/007c003c/007c001c/' /etc/init.d/S94ioi2s sed -i 's/MODE=pll/MODE=ext/' /etc/i2s.conf sed -i 's/MCLK=1024/MCLK=512/' /etc/i2s.conf -flash_erase /dev/mtd3 0x003C0000 0x2 -sleep 1 -nandwrite -p /dev/mtd3 -s 0x003C0000 /data/boot/512_ext.dtb +fw_setenv bootcmd 'mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_512_ext.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r}' sync #reboot -f + diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_pll.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_pll.sh index a588c8f5..d5d98717 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_pll.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/2_512_pll.sh @@ -1,11 +1,10 @@ #!/bin/sh -# Script to set MCLK = 512x in PLL mode - -# Set MCLK multiplier via sysfs echo 512 > /sys/devices/platform/ffae0000.i2s/mclk_multiplier - -# Update configuration file sed -i 's/^MCLK=.*/MCLK=512/' /etc/i2s.conf +sed -i 's/MODE=ext/MODE=pll/' /etc/i2s.conf + +fw_setenv bootcmd 'mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_pll.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r}' + +sync +#reboot -f -echo "MCLK multiplier set to 512x for PLL mode" -sync \ No newline at end of file diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/2pll.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/2pll.sh index 68ccce34..0a607925 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/2pll.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/2pll.sh @@ -1,12 +1,10 @@ #!/bin/sh -sed -i 's/007c001c/007c003c/' /etc/init.d/S94ioi2s sed -i 's/MODE=ext/MODE=pll/' /etc/i2s.conf sed -i 's/MCLK=512/MCLK=1024/' /etc/i2s.conf +echo 1024 > /sys/devices/platform/ffae0000.i2s/mclk_multiplier -flash_erase /dev/mtd3 0x003C0000 0x2 -sleep 1 -nandwrite -p /dev/mtd3 -s 0x003C0000 /data/boot/1024_pll.dtb +fw_setenv bootcmd 'mmc dev ${devnum}; fatload mmc ${devnum}:5 ${kernel_addr_r} zImage; fatload mmc ${devnum}:5 ${fdt_addr_r} rv1106_pll.dtb; bootz ${kernel_addr_r} - ${fdt_addr_r}' sync -#reboot -f +#reboot -f \ No newline at end of file diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/export.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/export.sh index 209932b7..0662e487 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/export.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/export.sh @@ -1,32 +1,31 @@ #!/bin/sh -rm -f /etc/init.d/S95* - /opt/2pll.sh sleep 1 -mtd_debug read /dev/mtd0 0 262144 /data/env.img -sleep 1 -mtd_debug read /dev/mtd1 0 262144 /data/idblock.img -sleep 1 -mtd_debug read /dev/mtd2 0 524288 /data/uboot.img -sleep 1 -mtd_debug read /dev/mtd3 0 4194304 /data/boot.img -sleep 1 +dd if=/dev/mmcblk0p1 of=/data/mmcblk0p1 bs=1M +dd if=/dev/mmcblk0p2 of=/data/mmcblk0p2 bs=1M +dd if=/dev/mmcblk0p3 of=/data/mmcblk0p3 bs=1M -rsync -axclHSzv --delete --one-file-system \ +rsync -alHWSzcv --delete --numeric-ids --one-file-system \ +--exclude=/dev \ +--exclude=/proc \ +--exclude=/tmp \ +--exclude=/run \ +--exclude=/sys \ --exclude=/root/.bash_history \ --exclude=/root/\.ssh/* \ --exclude=/var/tmp/systemd-private* \ --exclude=/var/log/* \ --exclude=/var/cache/upmpdcli/* \ --exclude=/etc/resolv.conf \ ---exclude=/var/www/radio.json \ --exclude=/data/ethaddr.txt \ --exclude=/root/* \ --exclude=/etc/init.d/S95* \ --exclude=/usr/aplayer/*.dat \ --exclude=/usr/aprenderer/*.dat \ -/ ppy@luckfox.puredsd.ru::luckfox_upload +/ ppy@luckfox.puredsd.ru::luckfox_upload_ultra + +rm -f /data/mmc* + -rm -f /data/*.img diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/qobuz-connect/qobuz-connect b/ext_tree/board/luckfox/rootfs_overlay/opt/qobuz-connect/qobuz-connect index 25697d69..15d44218 100755 Binary files a/ext_tree/board/luckfox/rootfs_overlay/opt/qobuz-connect/qobuz-connect and b/ext_tree/board/luckfox/rootfs_overlay/opt/qobuz-connect/qobuz-connect differ diff --git a/ext_tree/board/luckfox/rootfs_overlay/opt/update.sh b/ext_tree/board/luckfox/rootfs_overlay/opt/update.sh index 8cfc0ba2..30e7b5dd 100755 --- a/ext_tree/board/luckfox/rootfs_overlay/opt/update.sh +++ b/ext_tree/board/luckfox/rootfs_overlay/opt/update.sh @@ -1,40 +1,66 @@ #!/bin/sh +SCRIPT_PATH="/opt/update.sh" +SCRIPT_NEW="/tmp/update.sh.new" +UPDATE_SERVER="luckfox@luckfox.puredsd.ru::luckfox_ultra/opt/update.sh" +# Check if script update is needed (only on first run, not on restart) +if [ "$UPDATE_SELF_DONE" != "1" ]; then + echo "Checking for update.sh updates..." + + # Download new version of update.sh to temp location + sshpass -p 'luckfox' rsync -av "$UPDATE_SERVER" "$SCRIPT_NEW" 2>/dev/null + + if [ $? -eq 0 ] && [ -f "$SCRIPT_NEW" ]; then + # Compare checksums + OLD_MD5=$(md5sum "$SCRIPT_PATH" | awk '{print $1}') + NEW_MD5=$(md5sum "$SCRIPT_NEW" | awk '{print $1}') + + if [ "$OLD_MD5" != "$NEW_MD5" ]; then + echo "New version of update.sh found, updating..." + chmod +x "$SCRIPT_NEW" + cp "$SCRIPT_NEW" "$SCRIPT_PATH" + rm -f "$SCRIPT_NEW" + + echo "Restarting with new update.sh..." + export UPDATE_SELF_DONE=1 + exec "$SCRIPT_PATH" "$@" + else + echo "update.sh is up to date" + rm -f "$SCRIPT_NEW" + fi + else + echo "Could not check for updates, continuing..." + fi +fi + +killall -9 status_monitor /etc/init.d/S95* stop -killall status_monitor -rm -f /data/*.img -sshpass -p 'luckfox' rsync -acv --delete --size-only --one-file-system \ +sshpass -p 'luckfox' rsync -acv --delete-before --one-file-system \ --exclude=.git \ --exclude=/dev \ --exclude=/proc \ --exclude=/sys \ --exclude=/mnt \ --exclude=/root \ +--exclude=/tmp \ +--exclude=/etc/asound.conf \ --filter='protect /usr/aprenderer/*.dat' \ --filter='protect /usr/aplayer/*.dat' \ --filter='protect /data/ethaddr.txt' \ --filter='protect /etc/resolv.conf' \ --filter='protect /etc/init.d/S95*' \ ---filter='protect /var/www/radio.json' \ -luckfox@luckfox.puredsd.ru::luckfox / || exit 1 - -flash_erase /dev/mtd0 0 0 || exit 1 -mtd_debug write /dev/mtd0 0 262144 /data/env.img || exit 1 -sleep 2 -flash_erase /dev/mtd1 0 0 || exit 1 -mtd_debug write /dev/mtd1 0 262144 /data/idblock.img || exit 1 -sleep 2 -flash_erase /dev/mtd2 0 0 || exit 1 -mtd_debug write /dev/mtd2 0 524288 /data/uboot.img || exit 1 -sleep 2 -flash_erase /dev/mtd3 0 0 || exit 1 -mtd_debug write /dev/mtd3 0 4194304 /data/boot.img || exit 1 -sleep 2 +luckfox@luckfox.puredsd.ru::luckfox_ultra / || exit 1 +sleep 1 +sync -rm -f /data/*.img +dd if=/data/mmcblk0p1 of=/dev/mmcblk0p1 bs=1M +dd if=/data/mmcblk0p2 of=/dev/mmcblk0p2 bs=1M +dd if=/data/mmcblk0p3 of=/dev/mmcblk0p3 bs=1M +sync +rm -f /data/*.img sync diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/css/style.css b/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/css/style.css index 3cc2d8a6..d559fa12 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/css/style.css +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/css/style.css @@ -1516,3 +1516,61 @@ input[name="dsd_swap"][value="1"]:checked ~ .toggle-label-compact .toggle-option transform: translateX(50%) translateY(-50%); } +input[name="freq_swap"][value="0"]:checked ~ .toggle-label-compact .toggle-slider-compact { + left: -2px; +} + +input[name="freq_swap"][value="1"]:checked ~ .toggle-label-compact .toggle-slider-compact { + left: 56px; +} + +input[name="freq_swap"][value="0"]:checked ~ .toggle-label-compact .toggle-option-compact.left { + color: #fff; + left: 29px; + transform: translateX(-50%) translateY(-50%); +} + +input[name="freq_swap"][value="0"]:checked ~ .toggle-label-compact .toggle-option-compact.right { + color: #888; +} + +input[name="freq_swap"][value="1"]:checked ~ .toggle-label-compact .toggle-option-compact.left { + color: #888; +} + +input[name="freq_swap"][value="1"]:checked ~ .toggle-label-compact .toggle-option-compact.right { + color: #fff; + right: 29px; + transform: translateX(50%) translateY(-50%); +} + +/* -------------------------------------------------- + BUTTON DISSOLVE ANIMATION +-------------------------------------------------- */ +@keyframes dissolve { + 0% { + opacity: 1; + transform: scale(1); + filter: blur(0px); + } + 30% { + opacity: 0.8; + transform: scale(1.05); + } + 60% { + opacity: 0.4; + transform: scale(1.15); + filter: blur(4px); + } + 100% { + opacity: 0; + transform: scale(1.5); + filter: blur(15px); + } +} + +.btn-dissolving { + animation: dissolve 1s ease-out forwards; + pointer-events: none; + overflow: visible !important; +} diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/js/app.js b/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/js/app.js index a47d0bdd..046757ac 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/js/app.js +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/assets/js/app.js @@ -84,7 +84,8 @@ $(document).ready(function () { 'cancel_btn': 'Отмена', 'apply_reboot': 'Применить и перезагрузить', 'pcm_swap_title': 'PCM Swap', - 'dsd_swap_title': 'DSD Swap' + 'dsd_swap_title': 'DSD Swap', + 'freq_swap_title': '44/48 Swap' }, 'en': { 'alsa_output': 'ALSA Output:', @@ -128,7 +129,8 @@ $(document).ready(function () { 'cancel_btn': 'Cancel', 'apply_reboot': 'Apply & Reboot', 'pcm_swap_title': 'PCM Swap', - 'dsd_swap_title': 'DSD Swap' + 'dsd_swap_title': 'DSD Swap', + 'freq_swap_title': '44/48 Swap' }, 'de': { 'alsa_output': 'ALSA Ausgang:', @@ -172,7 +174,8 @@ $(document).ready(function () { 'cancel_btn': 'Abbrechen', 'apply_reboot': 'Anwenden & Neustart', 'pcm_swap_title': 'PCM Swap', - 'dsd_swap_title': 'DSD Swap' + 'dsd_swap_title': 'DSD Swap', + 'freq_swap_title': '44/48 Swap' }, 'fr': { 'alsa_output': 'Sortie ALSA:', @@ -216,7 +219,8 @@ $(document).ready(function () { 'cancel_btn': 'Annuler', 'apply_reboot': 'Appliquer et redémarrer', 'pcm_swap_title': 'PCM Swap', - 'dsd_swap_title': 'DSD Swap' + 'dsd_swap_title': 'DSD Swap', + 'freq_swap_title': '44/48 Swap' }, 'zh': { 'alsa_output': 'ALSA 输出:', @@ -260,7 +264,8 @@ $(document).ready(function () { 'cancel_btn': '取消', 'apply_reboot': '应用并重启', 'pcm_swap_title': 'PCM Swap', - 'dsd_swap_title': 'DSD Swap' + 'dsd_swap_title': 'DSD Swap', + 'freq_swap_title': '44/48 Swap' } }; @@ -544,6 +549,19 @@ $(document).ready(function () { $('.btn-custom').click(function(e) { if ($(e.target).is('a') || $(e.target).is('img')) return true; if (!$(this).data('service') || $(this).hasClass('active')) return; + + // Блокируем клики если уже идёт переключение + if (isServiceSwitching) { + const busyText = { + 'ru': 'Идёт переключение плеера, подождите...', + 'en': 'Player switch in progress, please wait...', + 'de': 'Player-Wechsel läuft, bitte warten...', + 'fr': 'Changement de lecteur en cours, veuillez patienter...', + 'zh': '播放器切换中,请稍候...' + }; + customAlert(busyText[currentLang] || busyText['en']); + return; + } const service = $(this).data('service'); forceStatusCheck(); // Принудительная проверка при клике @@ -586,23 +604,14 @@ $(document).ready(function () { data: { service: service }, timeout: 15000, success: function() { - // Даем время на старт сервиса - увеличенное время для двухэтапных запусков - const initialDelay = (service === 'qobuz') ? 5000 : (service === 'tidalconnect') ? 4000 : 2000; + console.log('Команда переключения на', service, 'отправлена, начинаем проверку...'); - console.log('Команда переключения на', service, 'отправлена, ждем', initialDelay, 'мс...'); - if (service === 'qobuz') { - console.log('Qobuz: используется максимальная задержка для двухэтапного запуска (пробный + рабочий)'); - } else if (service === 'tidalconnect') { - console.log('Tidal: используется увеличенная задержка для двухэтапного запуска'); - } - - // ДОБАВЛЕНА начальная задержка - даем сервису время запуститься! - setTimeout(() => { - const checkInterval = POLLING_CONFIG.SWITCHING_INTERVAL; - let checkCount = 0; - const maxChecks = 60; // 30 секунд максимум + // Сразу начинаем проверку без задержки + const checkInterval = 500; // 500ms между проверками + let checkCount = 0; + const maxChecks = 40; // 20 секунд максимум - function checkServiceStatusChange() { + function checkServiceStatusChange() { $.ajax({ url: 'status_fast.php', // Используем оптимизированный запрос method: 'GET', @@ -677,10 +686,8 @@ $(document).ready(function () { }); } - // Мониторинг удален - полагаемся на polling - - checkServiceStatusChange(); - }, initialDelay); // Используем адаптивную задержку + // Запускаем проверку сразу + checkServiceStatusChange(); }, error: function(xhr, status, error) { console.error('AJAX error switching to', service, ':', status, error, 'Response:', xhr.responseText); @@ -700,7 +707,7 @@ $(document).ready(function () { // Кастомный confirm диалог function customConfirm(message, callback) { - $('#confirm-message').text(message); + $('#confirm-message').html(message); $('#custom-confirm').addClass('show'); // Обновляем текст кнопок на основе языка @@ -1094,10 +1101,9 @@ $(document).ready(function () { // Первая проверка статуса forceStatusCheck(); - // Регулярный polling каждые 3 секунды - используем быстрый запрос + // Регулярный polling каждые 3 секунды statusInterval = setInterval(function() { if (!isServiceSwitching && !isVolumeChanging) { - // Обычный мониторинг через быстрый status_fast.php (C-monitor) $.ajax({ url: 'status_fast.php', method: 'GET', @@ -1150,6 +1156,13 @@ $(document).ready(function () { $('#modal-dsd-normal').prop('checked', true); } + // Set freq swap toggle + if (data.freq_swap === '1') { + $('#modal-freq-swap').prop('checked', true); + } else { + $('#modal-freq-normal').prop('checked', true); + } + // Set submode buttons active state $('.i2s-submode-btn').removeClass('active'); $(`.i2s-submode-btn[value="${data.submode}"]`).addClass('active'); @@ -1282,6 +1295,8 @@ $(document).ready(function () { formData.append('pcm_swap', this.value); } else if (this.name === 'dsd_swap') { formData.append('dsd_swap', this.value); + } else if (this.name === 'freq_swap') { + formData.append('freq_swap', this.value); } // Apply setting immediately @@ -1314,5 +1329,163 @@ $(document).ready(function () { return false; }); + // ===== SWIPE TO HIDE BUTTONS FUNCTIONALITY ===== + const HIDDEN_BUTTONS_KEY = 'hiddenButtons'; + let startX = 0; + let endX = 0; + const SWIPE_THRESHOLD = 100; + + // Load hidden buttons from localStorage on page load + function loadHiddenButtons() { + const hidden = localStorage.getItem(HIDDEN_BUTTONS_KEY); + if (hidden) { + try { + const hiddenArray = JSON.parse(hidden); + hiddenArray.forEach(service => { + $(`button[data-service="${service}"]`).hide(); + }); + } catch (e) { + console.error('Failed to parse hidden buttons:', e); + } + } + } + + // Save hidden buttons to localStorage + function saveHiddenButtons() { + const hiddenButtons = []; + $('button[data-service]').each(function() { + if ($(this).is(':hidden')) { + hiddenButtons.push($(this).data('service')); + } + }); + localStorage.setItem(HIDDEN_BUTTONS_KEY, JSON.stringify(hiddenButtons)); + } + + // Handle swipe gestures on player buttons (touch and mouse) + $('button[data-service]').each(function() { + const $button = $(this); + let isDragging = false; + + // Touch events + this.addEventListener('touchstart', function(e) { + startX = e.changedTouches[0].screenX; + }, { passive: true }); + + this.addEventListener('touchend', function(e) { + endX = e.changedTouches[0].screenX; + handleSwipe($button); + }, { passive: true }); + + // Mouse events for desktop + $button.on('mousedown', function(e) { + startX = e.screenX; + isDragging = false; + }); + + $button.on('mousemove', function(e) { + if (e.buttons === 1) { // Left mouse button is pressed + isDragging = true; + } + }); + + $button.on('mouseup', function(e) { + if (isDragging) { + endX = e.screenX; + handleSwipe($button); + e.preventDefault(); + e.stopPropagation(); + } + isDragging = false; + }); + }); + + function handleSwipe($button) { + const swipeDistance = endX - startX; + + // Swipe left to hide + if (swipeDistance < -SWIPE_THRESHOLD) { + const serviceName = $button.text().trim(); + const currentHost = window.location.hostname; + const resetUrl = `http://${currentHost}/default.php`; + + const hideText = { + 'ru': 'Скрыть кнопку', + 'en': 'Hide button', + 'de': 'Schaltfläche ausblenden', + 'fr': 'Masquer le bouton', + 'zh': '隐藏按钮' + }; + + const restoreText = { + 'ru': 'Для восстановления всех кнопок откройте:', + 'en': 'To restore all buttons, visit:', + 'de': 'Um alle Schaltflächen wiederherzustellen, besuchen Sie:', + 'fr': 'Pour restaurer tous les boutons, visitez:', + 'zh': '要恢复所有按钮,请访问:' + }; + + const message = `${hideText[currentLang] || hideText['en']} "${serviceName}"?

${restoreText[currentLang] || restoreText['en']}
${resetUrl}`; + + customConfirm(message, function(confirmed) { + if (confirmed) { + const buttonHeight = $button.outerHeight(true); + + // Шаг 1: Фиксируем высоту БЕЗ transition + $button.css({ + 'height': buttonHeight + 'px', + 'overflow': 'hidden' + }); + + // Шаг 2: Через 20ms добавляем transition и запускаем обе анимации + setTimeout(function() { + $button.css({ + 'transition': 'height 1s ease-in-out, margin 1s ease-in-out, opacity 1s ease, transform 1s ease, filter 1s ease' + }); + + // Шаг 3: Через 20ms запускаем распыление и схлопывание одновременно + setTimeout(function() { + $button.addClass('btn-dissolving'); + $button.css({ + 'height': '0', + 'margin-top': '0', + 'margin-bottom': '0' + }); + + setTimeout(function() { + $button.hide(); + saveHiddenButtons(); + checkAndExpandButtons(); + }, 1000); + }, 20); + }, 20); + } + }); + } + } + + // Check if button pairs need to expand to full width + function checkAndExpandButtons() { + // Only on desktop (width > 500px) + if (window.innerWidth <= 500) return; + + // Check player-buttons container + const $playerButtons = $('.player-buttons'); + const $visiblePlayerButtons = $playerButtons.find('button[data-service]:visible'); + if ($visiblePlayerButtons.length === 1) { + $visiblePlayerButtons.css('width', '100%'); + } + + // Check streaming-buttons container + const $streamingButtons = $('.streaming-buttons'); + const $visibleStreamingButtons = $streamingButtons.find('button[data-service]:visible'); + if ($visibleStreamingButtons.length === 1) { + $visibleStreamingButtons.css('width', '100%'); + } + } + + // Load hidden buttons on page load + loadHiddenButtons(); + checkAndExpandButtons(); + }); /* Cache bust version: 1753367744 */ diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/config.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/config.php index b1fbcfeb..b70a7df6 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/config.php +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/config.php @@ -1,6 +1,6 @@ diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/default.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/default.php new file mode 100644 index 00000000..9be01d77 --- /dev/null +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/default.php @@ -0,0 +1,18 @@ + + + + + + Reset to Default + + + + + + diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/handle_service.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/handle_service.php index ce2a7c74..d6802959 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/handle_service.php +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/handle_service.php @@ -3,7 +3,9 @@ error_reporting(E_ALL); ini_set('display_errors', 1); - +// Lock file to prevent concurrent service switches +$lockfile = '/tmp/service_switch.lock'; +$lock_fp = null; // Lock file pointer function logMessage($message) { error_log("[Player Manager] " . $message); @@ -16,6 +18,34 @@ function executeCommand($command) { return trim((string)$output); } +function acquireLock($lockfile) { + global $lock_fp; + $lock_fp = fopen($lockfile, 'c'); + if (!$lock_fp) { + throw new Exception("Cannot open lock file"); + } + + // Non-blocking exclusive lock + if (!flock($lock_fp, LOCK_EX | LOCK_NB)) { + fclose($lock_fp); + $lock_fp = null; + throw new Exception("Service switch already in progress, please wait"); + } + + logMessage("Lock acquired"); + return $lock_fp; +} + +function releaseLock() { + global $lock_fp; + if ($lock_fp) { + flock($lock_fp, LOCK_UN); + fclose($lock_fp); + $lock_fp = null; + logMessage("Lock released"); + } +} + $players = [ 'naa' => ['process' => 'networkaudiod', 'script' => 'S95naa'], 'raat' => ['process' => 'raat_app', 'script' => 'S95roonready'], @@ -44,9 +74,13 @@ function executeCommand($command) { logMessage("Request to start player: $player_to_start"); + // Acquire lock to prevent concurrent switches + acquireLock($lockfile); + // Check script existence $script_path = "/etc/rc.pure/{$players[$player_to_start]['script']}"; if (!file_exists($script_path)) { + releaseLock(); throw new Exception("Player script not found: $script_path"); } @@ -67,18 +101,39 @@ function executeCommand($command) { // Send D-Bus signal about service change for instant update executeCommand("/opt/dbus_notify ServiceChanged \"$player_to_start\""); - // Check startup -// $check = executeCommand("/usr/bin/pgrep -x {$players[$player_to_start]['process']}"); -// if (empty($check)) { -// throw new Exception("Failed to start player: $player_to_start. Output: $start_output"); -// } + // Wait for system_monitor to confirm player started (up to 10 seconds) + $confirmed = false; + for ($i = 0; $i < 20; $i++) { + $status_file = '/tmp/system_status.json'; + if (file_exists($status_file)) { + $content = @file_get_contents($status_file); + if ($content) { + $status = @json_decode($content, true); + if ($status && isset($status['active_service']) && $status['active_service'] === $player_to_start) { + $confirmed = true; + logMessage("Player $player_to_start confirmed by system_monitor"); + break; + } + } + } + usleep(500000); // 500ms + } + + // Release lock after confirmation or timeout + releaseLock(); + + if (!$confirmed) { + logMessage("Warning: Player $player_to_start not confirmed by system_monitor within 10s"); + } echo json_encode([ 'status' => 'success', - 'message' => "Successfully started $player_to_start" + 'message' => "Successfully started $player_to_start", + 'confirmed' => $confirmed ]); } catch (Exception $e) { + releaseLock(); logMessage("Error: " . $e->getMessage()); echo json_encode([ 'status' => 'error', diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/i2s.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/i2s.php index 38ac995c..43a8dcec 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/i2s.php +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/i2s.php @@ -7,7 +7,7 @@ * Function for reading the current mode (MODE), MCLK and SUBMODE from configuration file. */ function readConfig($filePath) { - $result = ['mode' => '', 'mclk' => '', 'submode' => '', 'pcm_swap' => '0', 'dsd_swap' => '1']; + $result = ['mode' => '', 'mclk' => '', 'submode' => '', 'pcm_swap' => '0', 'dsd_swap' => '1', 'freq_swap' => '0']; if (file_exists($filePath)) { $contents = file_get_contents($filePath); if ($contents !== false) { @@ -28,6 +28,9 @@ function readConfig($filePath) { if (preg_match('/^DSD_SWAP=([01])/m', $contents, $matches)) { $result['dsd_swap'] = $matches[1]; } + if (preg_match('/^FREQ_SWAP=([01])/m', $contents, $matches)) { + $result['freq_swap'] = $matches[1]; + } } } @@ -46,6 +49,13 @@ function readConfig($filePath) { } } + if (file_exists('/sys/devices/platform/ffae0000.i2s/freq_domain_invert')) { + $freq_current = trim(file_get_contents('/sys/devices/platform/ffae0000.i2s/freq_domain_invert')); + if ($freq_current !== false) { + $result['freq_swap'] = $freq_current; + } + } + return $result; } @@ -182,6 +192,18 @@ function updateInitScript($value, $type) { } } + // If frequency domain swap setting is changed + if (isset($_POST['freq_swap'])) { + $freq_swap = $_POST['freq_swap']; + if (in_array($freq_swap, ['0', '1'])) { + // Write to sysfs + file_put_contents('/sys/devices/platform/ffae0000.i2s/freq_domain_invert', $freq_swap); + + // Update config file + updateConfigValue($config_file, 'FREQ_SWAP', $freq_swap); + } + } + // Reboot processing removed - now using reboot.php @@ -197,6 +219,7 @@ function updateInitScript($value, $type) { $current_submode = $config['submode']; $current_pcm_swap = $config['pcm_swap']; $current_dsd_swap = $config['dsd_swap']; +$current_freq_swap = $config['freq_swap']; ?> @@ -823,6 +846,22 @@ class="btn-custom " data- +
+
+

44/48 Swap

+
+ > + > + +
+
+
Warning! MCLK output has different settings in PLL and EXT modes (OUTPUT/INPUT).
diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/index.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/index.php index 45d9f5d4..69283333 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/index.php +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/index.php @@ -9,7 +9,7 @@
- +
@@ -41,7 +41,7 @@ - +
@@ -63,12 +63,12 @@
- +
@@ -83,7 +83,7 @@
- + - +
@@ -100,7 +100,7 @@
- +
@@ -111,7 +111,7 @@
- +
@@ -196,6 +196,20 @@
+
+
+

44/48 Swap

+
+ + + +
+
+
Внимание! Выход MCLK в режимах PLL и EXT имеет разные настройки (OUTPUT/INPUT). После изменения настроек I2S необходима перезагрузка системы для вступления в силу. @@ -212,7 +226,7 @@
- + diff --git a/ext_tree/board/luckfox/rootfs_overlay/var/www/volume.php b/ext_tree/board/luckfox/rootfs_overlay/var/www/volume.php index 046c3177..7550dab7 100644 --- a/ext_tree/board/luckfox/rootfs_overlay/var/www/volume.php +++ b/ext_tree/board/luckfox/rootfs_overlay/var/www/volume.php @@ -122,7 +122,7 @@ function getSystemStatus() { exec("/usr/bin/amixer -q sset \"$control\" {$volume}% 2>/dev/null", $output, $return_code); shell_exec("/opt/dbus_notify VolumeChanged \"set_volume_{$volume}\" 2>/dev/null &"); - // Триггерим немедленное обновление статуса + // Trigger immediate status update shell_exec('/usr/bin/killall -USR1 dbus_monitor 2>/dev/null &'); if ($return_code === 0) { diff --git a/ext_tree/board/luckfox/scripts/linux-post-build.sh b/ext_tree/board/luckfox/scripts/linux-post-build.sh new file mode 100755 index 00000000..d54d4d24 --- /dev/null +++ b/ext_tree/board/luckfox/scripts/linux-post-build.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# Post-build hook for Linux kernel +# Creates boot.img from zImage for eMMC boot partition + +KERNEL_DIR=$1 + +# Create boot.img as a copy of zImage +cp -f ${KERNEL_DIR}/arch/arm/boot/zImage ${KERNEL_DIR}/arch/arm/boot/boot.img + +echo "Created boot.img from zImage" diff --git a/ext_tree/board/luckfox/scripts/post-build.sh b/ext_tree/board/luckfox/scripts/post-build.sh index dd54668c..6e3731fc 100755 --- a/ext_tree/board/luckfox/scripts/post-build.sh +++ b/ext_tree/board/luckfox/scripts/post-build.sh @@ -1,29 +1,6 @@ #!/bin/sh -set -ve - -MAINDIR=`pwd` - -export LINUX_DIR=`ls -d output/build/linux-main` - -cp $LINUX_DIR/arch/arm/boot/dts/rv1106_pll.dtb $BINARIES_DIR/ -cp $LINUX_DIR/arch/arm/boot/dts/rv1106_ext.dtb $TARGET_DIR/data/boot/1024_ext.dtb -cp $LINUX_DIR/arch/arm/boot/dts/rv1106_pll.dtb $TARGET_DIR/data/boot/1024_pll.dtb -cp $LINUX_DIR/arch/arm/boot/dts/rv1106_512_ext.dtb $TARGET_DIR/data/boot/512_ext.dtb - -cd $BINARIES_DIR -# 1. Create empty boot.img file 4MB in size -dd if=/dev/zero of=boot.img bs=1 count=0 seek=4194304 -sleep 1 -# 2. Write zImage from the beginning of file -dd if=zImage of=boot.img conv=notrunc -sleep 1 -# 3. Write rv1106_pll.dtb at offset 0x003C0000 (3932160 bytes) -dd if=rv1106_pll.dtb of=boot.img bs=1 seek=3932160 conv=notrunc -sleep 1 -#rm -f $BINARIES_DIR/*.dtb -#rm -f $BINARIES_DIR/zImage -cd $MAINDIR +BUILDROOT_DIR=`pwd` rm -f $TARGET_DIR/etc/init.d/*shairport-sync rm -f $TARGET_DIR/etc/init.d/*upmpdcli @@ -40,25 +17,8 @@ chown root:root $TARGET_DIR/usr/bin/php-cgi chmod u+s $TARGET_DIR/usr/bin/php-cgi wget https://curl.se/ca/cacert.pem -O $TARGET_DIR/etc/ssl/certs/ca-certificates.crt -# Add www-data to audio group for ALSA access without sudo -sed -i 's/^audio:x:29:upmpdcli$/audio:x:29:upmpdcli,www-data/' $TARGET_DIR/etc/group - -# Compress all large binaries and libraries with UPX (MAX only - save rootfs space) -#echo "Compressing binaries and libraries with UPX..." -#find $TARGET_DIR/usr/bin -type f -size +100k -executable -exec upx --best --lzma {} \; 2>/dev/null || true -#find $TARGET_DIR/usr/sbin -type f -size +100k -executable -exec upx --best --lzma {} \; 2>/dev/null || true -#find $TARGET_DIR/usr/lib -type f -size +100k -name "*.so*" -exec upx --best --lzma {} \; 2>/dev/null || true - -# Create SquashFS for Tidal libraries (MAX only - save rootfs space) -if [ -d "$TARGET_DIR/usr/lib/tidal" ] && [ ! -f "$TARGET_DIR/usr/lib/tidal.sqfs" ]; then - echo "Creating SquashFS image for Tidal..." - mksquashfs $TARGET_DIR/usr/lib/tidal $TARGET_DIR/usr/lib/tidal.sqfs -comp xz -b 256K -noappend - - echo "Removing original Tidal directory from rootfs..." - rm -rf $TARGET_DIR/usr/lib/tidal - mkdir -p $TARGET_DIR/usr/lib/tidal -fi - +mkdir -p output/images +cp -f $BR2_EXTERNAL_ext_tree_PATH/board/luckfox/uboot/* $BINARIES_DIR/ diff --git a/ext_tree/board/luckfox/scripts/post-image-ultra.sh b/ext_tree/board/luckfox/scripts/post-image-ultra.sh new file mode 100755 index 00000000..bf083a5d --- /dev/null +++ b/ext_tree/board/luckfox/scripts/post-image-ultra.sh @@ -0,0 +1,38 @@ +#\!/bin/sh + +BOARD_DIR=$(dirname "$0") +LINUX_DIR=$PWD/output/build/linux-`grep BR2_LINUX_KERNEL_VERSION $BR2_CONFIG |cut -d= -f2 |tr -d \"` + +cp -f $BR2_EXTERNAL_ext_tree_PATH/board/luckfox/config/uboot-env.txt $BINARIES_DIR/uboot.env +mkenvimage -s 32768 -o $BINARIES_DIR/env.img $BINARIES_DIR/uboot.env + +# boot.img is already created by post-build.sh + +############### rootfs.img ########################### +mkdir -p $BINARIES_DIR/rootfs && tar -xf $BINARIES_DIR/rootfs.tar -C $BINARIES_DIR/rootfs +ROOTFS_SIZE=$(du -sm $BINARIES_DIR/rootfs | awk '{print int($1 * 1.1 + 10)}') +echo y | mkfs.ext4 -d $BINARIES_DIR/rootfs -r 1 -N 0 -m 0 -L "" -O ^64bit,^huge_file $BINARIES_DIR/rootfs.img "${ROOTFS_SIZE}M" +e2fsck -fy $BINARIES_DIR/rootfs.img +resize2fs -M $BINARIES_DIR/rootfs.img +rm -fr $BINARIES_DIR/rootfs + +############## userdata.img ########################## +echo y | mkfs.ext4 -r 1 -N 0 -m 0 -L "" -O ^64bit,^huge_file $BINARIES_DIR/userdata.img "256M" +resize2fs -M $BINARIES_DIR/userdata.img +e2fsck -fy $BINARIES_DIR/userdata.img +tune2fs -m 0 $BINARIES_DIR/userdata.img +resize2fs -M $BINARIES_DIR/userdata.img + +############## oem.img ############################### +dd if=/dev/zero of=$BINARIES_DIR/oem.img bs=1M count=10 +mkfs.fat $BINARIES_DIR/oem.img +mcopy -i $BINARIES_DIR/oem.img $LINUX_DIR/arch/arm/boot/dts/rv1106_pll.dtb ::/ +mcopy -i $BINARIES_DIR/oem.img $LINUX_DIR/arch/arm/boot/dts/rv1106_ext.dtb ::/ +mcopy -i $BINARIES_DIR/oem.img $LINUX_DIR/arch/arm/boot/dts/rv1106_512_ext.dtb ::/ +mcopy -i $BINARIES_DIR/oem.img $LINUX_DIR/arch/arm/boot/zImage ::/ + +############## Cleanup temporary files ################ +rm -f $BINARIES_DIR/uboot-env.bin +rm -f $BINARIES_DIR/uboot.env +rm -f $BINARIES_DIR/*.dtb +rm -f $BINARIES_DIR/rootfs.tar diff --git a/ext_tree/board/luckfox/uboot/download.bin b/ext_tree/board/luckfox/uboot/download.bin new file mode 100644 index 00000000..e1f935a7 Binary files /dev/null and b/ext_tree/board/luckfox/uboot/download.bin differ diff --git a/ext_tree/board/luckfox/uboot/idblock.img b/ext_tree/board/luckfox/uboot/idblock.img new file mode 100644 index 00000000..3f856816 Binary files /dev/null and b/ext_tree/board/luckfox/uboot/idblock.img differ diff --git a/ext_tree/board/luckfox/uboot/uboot.img b/ext_tree/board/luckfox/uboot/uboot.img new file mode 100644 index 00000000..3a93eb43 Binary files /dev/null and b/ext_tree/board/luckfox/uboot/uboot.img differ diff --git a/ext_tree/configs/luckfox_pico_ultra_defconfig b/ext_tree/configs/luckfox_pico_ultra_defconfig new file mode 100644 index 00000000..d4c2b8e0 --- /dev/null +++ b/ext_tree/configs/luckfox_pico_ultra_defconfig @@ -0,0 +1,4584 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot -ge8c30994 Configuration +# +BR2_HAVE_DOT_CONFIG=y +BR2_EXTERNAL_NAMES="ext_tree" +BR2_HOST_GCC_AT_LEAST_4_9=y +BR2_HOST_GCC_AT_LEAST_5=y +BR2_HOST_GCC_AT_LEAST_6=y +BR2_HOST_GCC_AT_LEAST_7=y +BR2_HOST_GCC_AT_LEAST_8=y +BR2_HOST_GCC_AT_LEAST_9=y +BR2_HOST_GCC_AT_LEAST_10=y +BR2_HOST_GCC_AT_LEAST_11=y + +# +# Target options +# +BR2_USE_MMU=y +# BR2_arcle is not set +# BR2_arceb is not set +BR2_arm=y +# BR2_armeb is not set +# BR2_aarch64 is not set +# BR2_aarch64_be is not set +# BR2_i386 is not set +# BR2_m68k is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_or1k is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_riscv is not set +# BR2_s390x is not set +# BR2_sh is not set +# BR2_sparc is not set +# BR2_sparc64 is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y +BR2_ARCH="arm" +BR2_NORMALIZED_ARCH="arm" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ABI="aapcs-linux" +BR2_GCC_TARGET_CPU="cortex-a7" +BR2_GCC_TARGET_FPU="vfpv4-d16" +BR2_GCC_TARGET_FLOAT_ABI="hard" +BR2_GCC_TARGET_MODE="arm" +BR2_BINFMT_SUPPORTS_SHARED=y +BR2_READELF_ARCH_NAME="ARM" +BR2_ARM_CPU_HAS_NEON=y +BR2_ARM_CPU_HAS_FPU=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_VFPV3=y +BR2_ARM_CPU_HAS_VFPV4=y +BR2_ARM_CPU_HAS_ARM=y +BR2_ARM_CPU_HAS_THUMB2=y +BR2_ARM_CPU_ARMV7A=y + +# +# armv4 cores +# +# BR2_arm920t is not set +# BR2_arm922t is not set +# BR2_fa526 is not set +# BR2_strongarm is not set + +# +# armv5 cores +# +# BR2_arm926t is not set +# BR2_xscale is not set + +# +# armv6 cores +# +# BR2_arm1136j_s is not set +# BR2_arm1136jf_s is not set +# BR2_arm1176jz_s is not set +# BR2_arm1176jzf_s is not set +# BR2_arm11mpcore is not set + +# +# armv7a cores +# +# BR2_cortex_a5 is not set +BR2_cortex_a7=y +# BR2_cortex_a8 is not set +# BR2_cortex_a9 is not set +# BR2_cortex_a12 is not set +# BR2_cortex_a15 is not set +# BR2_cortex_a15_a7 is not set +# BR2_cortex_a17 is not set +# BR2_cortex_a17_a7 is not set +# BR2_pj4 is not set + +# +# armv7m cores +# +# BR2_cortex_m3 is not set +# BR2_cortex_m4 is not set +# BR2_cortex_m7 is not set + +# +# armv8 cores +# +# BR2_cortex_a32 is not set +# BR2_cortex_a35 is not set +# BR2_cortex_a53 is not set +# BR2_cortex_a57 is not set +# BR2_cortex_a57_a53 is not set +# BR2_cortex_a72 is not set +# BR2_cortex_a72_a53 is not set +# BR2_cortex_a73 is not set +# BR2_cortex_a73_a35 is not set +# BR2_cortex_a73_a53 is not set +# BR2_exynos_m1 is not set +# BR2_xgene1 is not set + +# +# armv8.1a cores +# + +# +# armv8.2a cores +# +# BR2_cortex_a76 is not set +# BR2_cortex_a76_a55 is not set +# BR2_cortex_a78 is not set +# BR2_neoverse_n1 is not set + +# +# armv8.4a cores +# +# BR2_ARM_EABI is not set +BR2_ARM_EABIHF=y +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_FPU_VFPV3 is not set +# BR2_ARM_FPU_VFPV3D16 is not set +# BR2_ARM_FPU_VFPV4 is not set +BR2_ARM_FPU_VFPV4D16=y +# BR2_ARM_FPU_NEON is not set +# BR2_ARM_FPU_NEON_VFPV4 is not set +BR2_ARM_INSTRUCTIONS_ARM=y +# BR2_ARM_INSTRUCTIONS_THUMB2 is not set +BR2_BINFMT_ELF=y + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT is not set +BR2_TOOLCHAIN_EXTERNAL=y + +# +# Toolchain External Options +# +BR2_TOOLCHAIN_EXTERNAL_ARM_ARM=y +# BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN is not set +# BR2_TOOLCHAIN_EXTERNAL_CUSTOM is not set +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +# BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED is not set +BR2_TOOLCHAIN_EXTERNAL_GLIBC=y +BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL=y +BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL="toolchain-external-arm-arm" +BR2_TOOLCHAIN_EXTERNAL_PREFIX="arm-none-linux-gnueabihf" +BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARCH_SUPPORTS=y +# BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY is not set +BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=y + +# +# Host GDB Options +# +# BR2_PACKAGE_HOST_GDB is not set + +# +# Toolchain Generic Options +# +BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y +BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y +BR2_TOOLCHAIN_HAS_FORTRAN=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_TOOLCHAIN_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_HAS_UCONTEXT=y +BR2_TOOLCHAIN_HAS_OPENMP=y +BR2_TOOLCHAIN_SUPPORTS_PIE=y +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_TOOLCHAIN_EXTRA_LIBS="" +BR2_TOOLCHAIN_HAS_FULL_GETTEXT=y +BR2_TARGET_OPTIMIZATION="" +BR2_TARGET_LDFLAGS="" +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="4.20" +BR2_TOOLCHAIN_GCC_AT_LEAST_4_3=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_4=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_8=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_9=y +BR2_TOOLCHAIN_GCC_AT_LEAST_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST_8=y +BR2_TOOLCHAIN_GCC_AT_LEAST_9=y +BR2_TOOLCHAIN_GCC_AT_LEAST_10=y +BR2_TOOLCHAIN_GCC_AT_LEAST_11=y +BR2_TOOLCHAIN_GCC_AT_LEAST_12=y +BR2_TOOLCHAIN_GCC_AT_LEAST_13=y +BR2_TOOLCHAIN_GCC_AT_LEAST_14=y +BR2_TOOLCHAIN_GCC_AT_LEAST="14" +BR2_TOOLCHAIN_HAS_MNAN_OPTION=y +BR2_TOOLCHAIN_HAS_SYNC_1=y +BR2_TOOLCHAIN_HAS_SYNC_2=y +BR2_TOOLCHAIN_HAS_SYNC_4=y +BR2_TOOLCHAIN_ARM_HAS_SYNC_8=y +BR2_TOOLCHAIN_HAS_SYNC_8=y +BR2_TOOLCHAIN_HAS_LIBATOMIC=y +BR2_TOOLCHAIN_HAS_ATOMIC=y + +# +# Bare metal toolchain +# +# BR2_TOOLCHAIN_BARE_METAL_BUILDROOT is not set + +# +# Build options +# + +# +# Commands +# +BR2_CURL="curl -q --ftp-pasv --retry 3" +BR2_WGET="wget -nd -t 3" +BR2_SVN="svn --non-interactive" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SFTP="sftp" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_LZCAT="lzip -d -c" +BR2_ZSTDCAT="zstdcat" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="$(BR2_EXTERNAL_ext_tree_PATH)/configs/luckfox_pico_max_defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="https://sources.buildroot.net" +BR2_KERNEL_MIRROR="https://cdn.kernel.org/pub" +BR2_GNU_MIRROR="http://ftpmirror.gnu.org" +BR2_LUAROCKS_MIRROR="http://rocks.moonscript.org" +BR2_CPAN_MIRROR="https://cpan.metacpan.org" +BR2_JLEVEL=0 +# BR2_CCACHE is not set +# BR2_ENABLE_DEBUG is not set +# BR2_ENABLE_RUNTIME_DEBUG is not set +BR2_STRIP_strip=y +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +BR2_OPTIMIZE_3=y +# BR2_OPTIMIZE_G is not set +# BR2_OPTIMIZE_S is not set +# BR2_OPTIMIZE_FAST is not set +# BR2_ENABLE_LTO is not set +# BR2_GOOGLE_BREAKPAD_ENABLE is not set + +# +# static only needs a toolchain w/ uclibc or musl +# +BR2_SHARED_LIBS=y +# BR2_SHARED_STATIC_LIBS is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Advanced +# +# BR2_FORCE_HOST_BUILD is not set +# BR2_DOWNLOAD_FORCE_CHECK_HASHES is not set +# BR2_REPRODUCIBLE is not set +# BR2_PER_PACKAGE_DIRECTORIES is not set +# BR2_TIME_BITS_64 is not set + +# +# Security Hardening Options +# +BR2_PIC_PIE_ARCH_SUPPORTS=y +BR2_PIC_PIE=y +# BR2_SSP_NONE is not set +# BR2_SSP_REGULAR is not set +BR2_SSP_STRONG=y +# BR2_SSP_ALL is not set +BR2_SSP_OPTION="-fstack-protector-strong" +# BR2_RELRO_NONE is not set +# BR2_RELRO_PARTIAL is not set +BR2_RELRO_FULL=y +BR2_FORTIFY_SOURCE_ARCH_SUPPORTS=y +# BR2_FORTIFY_SOURCE_NONE is not set +BR2_FORTIFY_SOURCE_1=y +# BR2_FORTIFY_SOURCE_2 is not set +# BR2_FORTIFY_SOURCE_3 is not set + +# +# System configuration +# +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_HOSTNAME="PureFox" +BR2_TARGET_GENERIC_ISSUE="Welcome to PureFox" +BR2_TARGET_GENERIC_PASSWD_SHA256=y +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256" + +# +# General purpose +# +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_OPENRC is not set +# BR2_INIT_SYSTEMD is not set + +# +# Special purpose (read help) +# +# BR2_INIT_TINI is not set +# BR2_INIT_TINYINIT is not set +# BR2_INIT_NONE is not set +BR2_ROOTFS_DEVICE_CREATION_STATIC=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +BR2_ROOTFS_STATIC_DEVICE_TABLE="system/device_table_dev.txt" +# BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set +# BR2_ROOTFS_MERGED_USR is not set +BR2_TARGET_ENABLE_ROOT_LOGIN=y +BR2_TARGET_GENERIC_ROOT_PASSWD="purefox" +BR2_SYSTEM_BIN_SH_BUSYBOX=y +# BR2_SYSTEM_BIN_SH_BASH is not set +# BR2_SYSTEM_BIN_SH_DASH is not set +# BR2_SYSTEM_BIN_SH_MKSH is not set +# BR2_SYSTEM_BIN_SH_ZSH is not set +# BR2_SYSTEM_BIN_SH_NONE is not set +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="console" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE="0" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_SYSTEM_DHCP="eth0" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="" +BR2_GENERATE_LOCALE="" +# BR2_SYSTEM_ENABLE_NLS is not set +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_ext_tree_PATH)/board/luckfox/rootfs_overlay" +BR2_ROOTFS_PRE_BUILD_SCRIPT="" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_ext_tree_PATH)/board/luckfox/scripts/post-build.sh" +BR2_ROOTFS_POST_FAKEROOT_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_ext_tree_PATH)/board/luckfox/scripts/post-image-ultra.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="" +BR2_ROOTFS_POST_BUILD_SCRIPT_ARGS="" +BR2_ROOTFS_POST_IMAGE_SCRIPT_ARGS="" + +# +# Kernel +# +BR2_LINUX_KERNEL=y +# BR2_LINUX_KERNEL_LATEST_VERSION is not set +# BR2_LINUX_KERNEL_LATEST_CIP_VERSION is not set +# BR2_LINUX_KERNEL_LATEST_CIP_RT_VERSION is not set +# BR2_LINUX_KERNEL_CUSTOM_VERSION is not set +# BR2_LINUX_KERNEL_CUSTOM_TARBALL is not set +BR2_LINUX_KERNEL_CUSTOM_GIT=y +# BR2_LINUX_KERNEL_CUSTOM_HG is not set +# BR2_LINUX_KERNEL_CUSTOM_SVN is not set +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/ppy2/ale-linux-rv1106.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="main" +# BR2_LINUX_KERNEL_CUSTOM_REPO_GIT_SUBMODULES is not set +BR2_LINUX_KERNEL_VERSION="main" +BR2_LINUX_KERNEL_PATCH="../ext_tree/patches/linux_rv1106.patch" +# BR2_LINUX_KERNEL_USE_DEFCONFIG is not set +# BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG is not set +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="../ext_tree/board/luckfox/config/linux.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="" +BR2_LINUX_KERNEL_CUSTOM_LOGO_PATH="" +# BR2_LINUX_KERNEL_UIMAGE is not set +# BR2_LINUX_KERNEL_APPENDED_UIMAGE is not set +# BR2_LINUX_KERNEL_ZIMAGE is not set +# BR2_LINUX_KERNEL_APPENDED_ZIMAGE is not set +# BR2_LINUX_KERNEL_VMLINUX is not set +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_GZIP=y +# BR2_LINUX_KERNEL_LZ4 is not set +# BR2_LINUX_KERNEL_LZMA is not set +# BR2_LINUX_KERNEL_LZO is not set +# BR2_LINUX_KERNEL_XZ is not set +# BR2_LINUX_KERNEL_ZSTD is not set +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" +BR2_LINUX_KERNEL_IMAGE_NAME="boot.img" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +# BR2_LINUX_KERNEL_DTB_IS_SELF_BUILT is not set +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rv1106_pll" +BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_ext_tree_PATH)/board/luckfox/dts_max/*" +# BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME is not set +# BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT is not set +# BR2_LINUX_KERNEL_INSTALL_TARGET is not set +# BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL is not set +# BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF is not set +# BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE is not set +# BR2_LINUX_KERNEL_NEEDS_HOST_PYTHON3 is not set + +# +# Linux Kernel Extensions +# +# BR2_LINUX_KERNEL_EXT_XENOMAI is not set +# BR2_LINUX_KERNEL_EXT_RTAI is not set +# BR2_LINUX_KERNEL_EXT_EV3DEV_LINUX_DRIVERS is not set +# BR2_LINUX_KERNEL_EXT_FBTFT is not set +# BR2_LINUX_KERNEL_EXT_AUFS is not set + +# +# Linux Kernel Tools +# +# BR2_PACKAGE_LINUX_TOOLS_CPUPOWER is not set +# BR2_PACKAGE_LINUX_TOOLS_GPIO is not set +# BR2_PACKAGE_LINUX_TOOLS_IIO is not set +# BR2_PACKAGE_LINUX_TOOLS_MM is not set +# BR2_PACKAGE_LINUX_TOOLS_PCI is not set +# BR2_PACKAGE_LINUX_TOOLS_PERF is not set +# BR2_PACKAGE_LINUX_TOOLS_RTLA is not set +# BR2_PACKAGE_LINUX_TOOLS_SELFTESTS is not set +# BR2_PACKAGE_LINUX_TOOLS_USBTOOLS is not set +# BR2_PACKAGE_LINUX_TOOLS_TMON is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="../ext_tree/board/luckfox/config/busybox.config" +BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="" +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +# BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set +BR2_PACKAGE_SKELETON=y +BR2_PACKAGE_HAS_SKELETON=y +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_SKELETON_INIT_COMMON=y +BR2_PACKAGE_SKELETON_INIT_SYSV=y + +# +# Audio and video applications +# +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_ALSACONF=y +# BR2_PACKAGE_ALSA_UTILS_ACONNECT is not set +BR2_PACKAGE_ALSA_UTILS_ALSACTL=y +# BR2_PACKAGE_ALSA_UTILS_ALSALOOP is not set +BR2_PACKAGE_ALSA_UTILS_ALSAMIXER=y +# BR2_PACKAGE_ALSA_UTILS_ALSAUCM is not set +# BR2_PACKAGE_ALSA_UTILS_ALSATPLG is not set +# BR2_PACKAGE_ALSA_UTILS_AMIDI is not set +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_ALSA_UTILS_APLAY=y +# BR2_PACKAGE_ALSA_UTILS_APLAYMIDI is not set +# BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI is not set +# BR2_PACKAGE_ALSA_UTILS_ASEQDUMP is not set +# BR2_PACKAGE_ALSA_UTILS_ASEQNET is not set +# BR2_PACKAGE_ALSA_UTILS_BAT is not set +# BR2_PACKAGE_ALSA_UTILS_IECSET is not set +BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y +# BR2_PACKAGE_ATEST is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BLUEZ_ALSA is not set +# BR2_PACKAGE_DVBLAST is not set +# BR2_PACKAGE_DVDAUTHOR is not set +# BR2_PACKAGE_DVDRW_TOOLS is not set +# BR2_PACKAGE_ESPEAK is not set +BR2_PACKAGE_FAAD2=y +BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y +# BR2_PACKAGE_FFMPEG is not set +BR2_PACKAGE_FLAC=y +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_FLUID_SOUNDFONT is not set +# BR2_PACKAGE_FLUIDSYNTH is not set +# BR2_PACKAGE_GMRENDER_RESURRECT is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK1 is not set +# BR2_PACKAGE_JACK2 is not set +BR2_PACKAGE_KODI_ARCH_SUPPORTS=y + +# +# kodi needs python3 w/ .py modules, a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library, gcc >= 9.x, host gcc >= 9.x +# + +# +# kodi needs udev support for gbm +# + +# +# kodi needs an OpenGL EGL backend with OpenGL or GLES support +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MIMIC is not set +# BR2_PACKAGE_MINIMODEM is not set + +# +# miraclecast needs systemd and a glibc toolchain w/ threads and wchar +# +# BR2_PACKAGE_MJPEGTOOLS is not set +# BR2_PACKAGE_MODPLUGTOOLS is not set +# BR2_PACKAGE_MOTION is not set +BR2_PACKAGE_MPD=y + +# +# Archive plugins +# +# BR2_PACKAGE_MPD_BZIP2 is not set +# BR2_PACKAGE_MPD_SQLITE is not set +# BR2_PACKAGE_MPD_ZZIP is not set + +# +# Commercial services +# +# BR2_PACKAGE_MPD_QOBUZ is not set +# BR2_PACKAGE_MPD_SOUNDCLOUD is not set + +# +# Converter plugins +# +# BR2_PACKAGE_MPD_LIBSAMPLERATE is not set +# BR2_PACKAGE_MPD_LIBSOXR is not set + +# +# Decoder plugins +# +BR2_PACKAGE_MPD_DSD=y +BR2_PACKAGE_MPD_FAAD2=y +# BR2_PACKAGE_MPD_FFMPEG is not set +BR2_PACKAGE_MPD_FLAC=y +# BR2_PACKAGE_MPD_FLUIDSYNTH is not set +BR2_PACKAGE_MPD_LIBSNDFILE=y +BR2_PACKAGE_MPD_MAD=y +# BR2_PACKAGE_MPD_MODPLUG is not set +# BR2_PACKAGE_MPD_MPG123 is not set +# BR2_PACKAGE_MPD_MUSEPACK is not set +# BR2_PACKAGE_MPD_OPUS is not set +# BR2_PACKAGE_MPD_SIDPLAY is not set +BR2_PACKAGE_MPD_VORBIS=y +BR2_PACKAGE_MPD_WAVPACK=y + +# +# Encoder plugins +# +# BR2_PACKAGE_MPD_LAME is not set +# BR2_PACKAGE_MPD_TWOLAME is not set + +# +# Input plugins +# +# BR2_PACKAGE_MPD_CDIO_PARANOIA is not set +BR2_PACKAGE_MPD_CURL=y +# BR2_PACKAGE_MPD_LIBMMS is not set +# BR2_PACKAGE_MPD_LIBNFS is not set + +# +# samba support needs a glibc toolchain w/ dynamic library, RPC +# + +# +# Output plugins +# +BR2_PACKAGE_MPD_ALSA=y +# BR2_PACKAGE_MPD_AO is not set +BR2_PACKAGE_MPD_HTTPD_OUTPUT=y +# BR2_PACKAGE_MPD_JACK2 is not set +# BR2_PACKAGE_MPD_OPENAL is not set +# BR2_PACKAGE_MPD_OSS is not set +# BR2_PACKAGE_MPD_PULSEAUDIO is not set +# BR2_PACKAGE_MPD_SHOUTCAST is not set + +# +# Miscellaneous plugins +# +BR2_PACKAGE_MPD_AVAHI_SUPPORT=y + +# +# io_uring support needs a toolchain w/ headers >= 5.1 +# +# BR2_PACKAGE_MPD_LIBMPDCLIENT is not set +BR2_PACKAGE_MPD_TCP=y +# BR2_PACKAGE_MPD_UPNP_PUPNP is not set +# BR2_PACKAGE_MPD_UPNP_NPUPNP is not set +BR2_PACKAGE_MPD_UPNP_DISABLED=y + +# +# Tag plugins +# +BR2_PACKAGE_MPD_ID3TAG=y +# BR2_PACKAGE_MPD_MPC is not set +# BR2_PACKAGE_MPG123 is not set +# BR2_PACKAGE_MPV is not set +# BR2_PACKAGE_MULTICAT is not set +# BR2_PACKAGE_MUSEPACK is not set +# BR2_PACKAGE_NCMPC is not set +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PIPEWIRE is not set +BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_SPEECHD is not set +# BR2_PACKAGE_SQUEEZELITE is not set +# BR2_PACKAGE_TINYCOMPRESS is not set +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UDPXY is not set +BR2_PACKAGE_UPMPDCLI=y +# BR2_PACKAGE_V4L2GRAB is not set +# BR2_PACKAGE_V4L2LOOPBACK is not set +# BR2_PACKAGE_VLC is not set +# BR2_PACKAGE_VORBIS_TOOLS is not set +BR2_PACKAGE_WAVPACK=y +# BR2_PACKAGE_YAVTA is not set +# BR2_PACKAGE_YMPD is not set +# BR2_PACKAGE_ZYNADDSUBFX is not set + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BROTLI is not set +# BR2_PACKAGE_BZIP2 is not set +# BR2_PACKAGE_GZIP is not set +# BR2_PACKAGE_LRZIP is not set +# BR2_PACKAGE_LZIP is not set +# BR2_PACKAGE_LZOP is not set +# BR2_PACKAGE_P7ZIP is not set +# BR2_PACKAGE_PIGZ is not set +# BR2_PACKAGE_PIXZ is not set +# BR2_PACKAGE_UNRAR is not set +# BR2_PACKAGE_UNZIP is not set +# BR2_PACKAGE_XZ is not set +# BR2_PACKAGE_ZIP is not set +# BR2_PACKAGE_ZSTD is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BABELTRACE2 is not set +# BR2_PACKAGE_BCC is not set +# BR2_PACKAGE_BLKTRACE is not set +# BR2_PACKAGE_BONNIE is not set +BR2_PACKAGE_BPFTOOL_ARCH_SUPPORTS=y +# BR2_PACKAGE_BPFTOOL is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set + +# +# clinfo needs an OpenCL provider +# + +# +# clpeak needs an OpenCL provider, a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_COREMARK is not set +# BR2_PACKAGE_COREMARK_PRO is not set + +# +# dacapo needs OpenJDK +# +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DIEHARDER is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DT is not set +# BR2_PACKAGE_DUMA is not set +# BR2_PACKAGE_FIO is not set +BR2_PACKAGE_FWTS_ARCH_SUPPORTS=y +# BR2_PACKAGE_FWTS is not set +BR2_PACKAGE_GDB_ARCH_SUPPORTS=y +# BR2_PACKAGE_GDB is not set +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_GOOGLE_BREAKPAD is not set +# BR2_PACKAGE_HYPERFINE is not set +# BR2_PACKAGE_IOZONE is not set +BR2_PACKAGE_KEXEC_ARCH_SUPPORTS=y +# BR2_PACKAGE_KEXEC is not set +BR2_PACKAGE_KVM_UNIT_TESTS_ARCH_SUPPORTS=y +# BR2_PACKAGE_KVM_UNIT_TESTS is not set +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LIBBPF is not set +# BR2_PACKAGE_LIBTRACEEVENT is not set +# BR2_PACKAGE_LIBTRACEFS is not set +# BR2_PACKAGE_LMBENCH is not set +# BR2_PACKAGE_LSOF is not set +BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTP_TESTSUITE is not set +BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTRACE is not set +# BR2_PACKAGE_LTTNG_BABELTRACE is not set +# BR2_PACKAGE_LTTNG_MODULES is not set +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MBPOLL is not set +# BR2_PACKAGE_MBW is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_NETSNIFF_NG is not set +# BR2_PACKAGE_NMON is not set +BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPROFILE is not set +# BR2_PACKAGE_PAX_UTILS is not set +BR2_PACKAGE_PERFTEST_ARCH_SUPPORTS=y +# BR2_PACKAGE_PERFTEST is not set +BR2_PACKAGE_PLY_ARCH_SUPPORTS=y + +# +# ply needs a toolchain w/ dynamic library, headers >= 5.5 +# +# BR2_PACKAGE_POKE is not set +BR2_PACKAGE_PTM2HUMAN_ARCH_SUPPORTS=y +# BR2_PACKAGE_PTM2HUMAN is not set +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set +# BR2_PACKAGE_RWMEM is not set +# BR2_PACKAGE_SENTRY_NATIVE is not set +# BR2_PACKAGE_SIGNAL_ESTIMATOR is not set +# BR2_PACKAGE_SPIDEV_TEST is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_STRESS_NG is not set + +# +# sysdig needs a glibc toolchain w/ C++, threads, gcc >= 8, dynamic library, a Linux kernel, and luajit or lua 5.1 to be built +# + +# +# sysprof needs a toolchain w/ dynamic library, wchar, threads, C++, gcc >= 7, headers >= 5.12 +# + +# +# tbtools needs udev /dev management w/ glibc toolchain +# +# BR2_PACKAGE_TCF_AGENT is not set +BR2_PACKAGE_TCF_AGENT_ARCH="arm" +BR2_PACKAGE_TCF_AGENT_ARCH_SUPPORTS=y +# BR2_PACKAGE_TRACE_CMD is not set +BR2_PACKAGE_TRINITY_ARCH_SUPPORTS=y +# BR2_PACKAGE_TRINITY is not set +# BR2_PACKAGE_UCLIBC_NG_TEST is not set +BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_UFTRACE is not set +BR2_PACKAGE_VALGRIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_VMTOUCH is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_AVOCADO is not set +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BITWISE is not set +# BR2_PACKAGE_BUSTLE is not set +# BR2_PACKAGE_CHECK is not set +BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y +# BR2_PACKAGE_CMAKE_CTEST is not set +# BR2_PACKAGE_CPPUNIT is not set +# BR2_PACKAGE_CUKINIA is not set +# BR2_PACKAGE_CUNIT is not set +# BR2_PACKAGE_CVS is not set +# BR2_PACKAGE_CXXTEST is not set +# BR2_PACKAGE_DIFFUTILS is not set +# BR2_PACKAGE_DOS2UNIX is not set +# BR2_PACKAGE_FD is not set +# BR2_PACKAGE_FINDUTILS is not set +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GAWK is not set +# BR2_PACKAGE_GETTEXT is not set +BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" +# BR2_PACKAGE_GIT is not set +# BR2_PACKAGE_GIT_CRYPT is not set +# BR2_PACKAGE_GPERF is not set +# BR2_PACKAGE_GREP is not set +# BR2_PACKAGE_JO is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_MAWK is not set +# BR2_PACKAGE_PATCH is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_RIPGREP is not set +# BR2_PACKAGE_SED is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TIG is not set +# BR2_PACKAGE_TREE is not set +# BR2_PACKAGE_UNIFDEF is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_ABOOTIMG is not set +# BR2_PACKAGE_AUFS_UTIL is not set +# BR2_PACKAGE_AUTOFS is not set +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CPIO is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DAVFS2 is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_DUST is not set +BR2_PACKAGE_E2FSPROGS=y +# BR2_PACKAGE_E2FSPROGS_DEBUGFS is not set +# BR2_PACKAGE_E2FSPROGS_E2IMAGE is not set + +# +# e2scrub needs bash, coreutils, lvm2, and util-linux +# +# BR2_PACKAGE_E2FSPROGS_E4DEFRAG is not set +BR2_PACKAGE_E2FSPROGS_FSCK=y +# BR2_PACKAGE_E2FSPROGS_FUSE2FS is not set +BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EROFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_EXFATPROGS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FIRMWARE_UTILS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_FSCRYPTCTL is not set +# BR2_PACKAGE_FUSE_OVERLAYFS is not set +# BR2_PACKAGE_FWUP is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_GOCRYPTFS is not set +# BR2_PACKAGE_IMX_USB_LOADER is not set +# BR2_PACKAGE_MMC_UTILS is not set +BR2_PACKAGE_MTD=y +BR2_PACKAGE_MTD_JFFS_UTILS=y + +# +# MTD tools selection +# +BR2_PACKAGE_MTD_DOCFDISK=y +BR2_PACKAGE_MTD_DOC_LOADBIOS=y +BR2_PACKAGE_MTD_FLASHCP=y +BR2_PACKAGE_MTD_FLASH_ERASE=y +BR2_PACKAGE_MTD_FLASH_LOCK=y +BR2_PACKAGE_MTD_FLASH_OTP_DUMP=y +BR2_PACKAGE_MTD_FLASH_OTP_INFO=y +BR2_PACKAGE_MTD_FLASH_OTP_LOCK=y +BR2_PACKAGE_MTD_FLASH_OTP_WRITE=y +BR2_PACKAGE_MTD_FLASH_OTP_ERASE=y +BR2_PACKAGE_MTD_FLASH_UNLOCK=y +BR2_PACKAGE_MTD_FTL_CHECK=y +BR2_PACKAGE_MTD_FTL_FORMAT=y +BR2_PACKAGE_MTD_JFFS2DUMP=y +BR2_PACKAGE_MTD_LSMTD=y +# BR2_PACKAGE_MTD_MKFSJFFS2 is not set +# BR2_PACKAGE_MTD_MKFSUBIFS is not set +BR2_PACKAGE_MTD_MTD_DEBUG=y +# BR2_PACKAGE_MTD_MTDPART is not set +BR2_PACKAGE_MTD_NANDDUMP=y +BR2_PACKAGE_MTD_NANDTEST=y +BR2_PACKAGE_MTD_NANDWRITE=y +# BR2_PACKAGE_MTD_NANDFLIPBITS is not set +# BR2_PACKAGE_MTD_NFTLDUMP is not set +# BR2_PACKAGE_MTD_NFTL_FORMAT is not set +# BR2_PACKAGE_MTD_RECV_IMAGE is not set +# BR2_PACKAGE_MTD_RFDDUMP is not set +# BR2_PACKAGE_MTD_RFDFORMAT is not set +# BR2_PACKAGE_MTD_SERVE_IMAGE is not set +# BR2_PACKAGE_MTD_SUMTOOL is not set +BR2_PACKAGE_MTD_MTDINFO=y +BR2_PACKAGE_MTD_UBIATTACH=y +BR2_PACKAGE_MTD_UBICRC32=y +BR2_PACKAGE_MTD_UBIDETACH=y +BR2_PACKAGE_MTD_UBIFORMAT=y +BR2_PACKAGE_MTD_UBIHEALTHD=y +BR2_PACKAGE_MTD_UBIMKVOL=y +BR2_PACKAGE_MTD_UBINFO=y +BR2_PACKAGE_MTD_UBINIZE=y +BR2_PACKAGE_MTD_UBIRENAME=y +BR2_PACKAGE_MTD_UBIRMVOL=y +BR2_PACKAGE_MTD_UBIRSVOL=y +BR2_PACKAGE_MTD_UBIUPDATEVOL=y +BR2_PACKAGE_MTD_UBIBLOCK=y +# BR2_PACKAGE_MTD_TESTS is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NILFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set +# BR2_PACKAGE_SP_OOPS_EXTRACT is not set +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_SUNXI_TOOLS is not set +# BR2_PACKAGE_UDFTOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set +# BR2_PACKAGE_ZEROFREE is not set + +# +# zfs needs udev /dev management +# + +# +# Fonts, cursors, icons, sounds and themes +# + +# +# Cursors +# +# BR2_PACKAGE_COMIX_CURSORS is not set +# BR2_PACKAGE_OBSIDIAN_CURSORS is not set + +# +# Fonts +# +# BR2_PACKAGE_BITSTREAM_VERA is not set +# BR2_PACKAGE_CANTARELL is not set +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_FONT_AWESOME is not set +# BR2_PACKAGE_GHOSTSCRIPT_FONTS is not set +# BR2_PACKAGE_INCONSOLATA is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_WQY_ZENHEI is not set + +# +# Icons +# +# BR2_PACKAGE_HICOLOR_ICON_THEME is not set + +# +# Sounds +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Themes +# + +# +# Games +# +# BR2_PACKAGE_ASCII_INVADERS is not set +# BR2_PACKAGE_CHOCOLATE_DOOM is not set +# BR2_PACKAGE_FLARE_ENGINE is not set +# BR2_PACKAGE_GNUCHESS is not set +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set + +# +# minetest needs X11 and an OpenGL provider +# +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set +# BR2_PACKAGE_SL is not set + +# +# solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1 +# +# BR2_PACKAGE_STELLA is not set +# BR2_PACKAGE_XORCURSES is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# + +# +# cage needs udev, EGL and OpenGL ES support +# + +# +# cog needs wpewebkit and a toolchain w/ threads +# +# BR2_PACKAGE_DMENU_WAYLAND is not set + +# +# flutter packages need flutter-engine +# + +# +# flutter-pi needs an OpenGL or OpenGLES backend +# + +# +# flutter-pi needs GBM, systemd, and udev +# +# BR2_PACKAGE_FOOT is not set +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GHOSTSCRIPT is not set + +# +# glmark2 needs an OpenGL or an openGL ES and EGL backend +# + +# +# glslsandbox-player needs openGL ES and EGL driver +# +# BR2_PACKAGE_GNUPLOT is not set + +# +# igt-gpu-tools needs udev /dev management and toolchain w/ NPTL, wchar, dynamic library, locale, headers >= 4.11 +# + +# +# ivi-homescreen needs an OpenGL or OpenGLES backend +# +# BR2_PACKAGE_JHEAD is not set + +# +# kmscube needs EGL, GBM and OpenGL ES, and a toolchain w/ thread support +# +# BR2_PACKAGE_LIBVA_UTILS is not set +BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y +# BR2_PACKAGE_NETSURF is not set +# BR2_PACKAGE_PNGQUANT is not set +# BR2_PACKAGE_RRDTOOL is not set +# BR2_PACKAGE_SPIRV_TOOLS is not set + +# +# stellarium needs Qt5 and an OpenGL provider +# + +# +# sway needs systemd, udev, EGL and OpenGL ES support +# +# BR2_PACKAGE_SWAYBG is not set +# BR2_PACKAGE_TESSERACT_OCR is not set +# BR2_PACKAGE_TINIFIER is not set + +# +# Graphic libraries +# +# BR2_PACKAGE_CEGUI is not set +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set +# BR2_PACKAGE_FBSET is not set +# BR2_PACKAGE_FBTERM is not set +# BR2_PACKAGE_FBV is not set +# BR2_PACKAGE_FREERDP is not set +# BR2_PACKAGE_GRAPHICSMAGICK is not set +# BR2_PACKAGE_IMAGEMAGICK is not set +# BR2_PACKAGE_LIBGLVND is not set +# BR2_PACKAGE_MESA3D is not set +# BR2_PACKAGE_OCRAD is not set + +# +# ogre needs X11 and an OpenGL provider +# +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set +# BR2_PACKAGE_SDL2 is not set +# BR2_PACKAGE_SPIRV_HEADERS is not set +# BR2_PACKAGE_VULKAN_HEADERS is not set +# BR2_PACKAGE_VULKAN_LOADER is not set +# BR2_PACKAGE_VULKAN_TOOLS is not set + +# +# Other GUIs +# +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y +# BR2_PACKAGE_QT5 is not set +BR2_PACKAGE_QT6_ARCH_SUPPORTS=y +# BR2_PACKAGE_QT6 is not set + +# +# tekui needs a Lua interpreter and a toolchain w/ threads, dynamic library +# + +# +# weston needs udev and a toolchain w/ locale, threads, dynamic library, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set +# BR2_PACKAGE_APITRACE is not set +# BR2_PACKAGE_MUPDF is not set + +# +# vte needs an OpenGL or an OpenGL-EGL backend +# +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_AM33X_CM3 is not set +# BR2_PACKAGE_ARMBIAN_FIRMWARE is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_MURATA_CYW_FW is not set +# BR2_PACKAGE_ODROIDC2_FIRMWARE is not set +# BR2_PACKAGE_PANEL_MIPI_DBI_FIRMWARE is not set +# BR2_PACKAGE_QCOM_DB410C_FIRMWARE is not set +# BR2_PACKAGE_QORIQ_FM_UCODE is not set +# BR2_PACKAGE_RCW_SMARC_SAL28 is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_SUNXI_BOARDS is not set +# BR2_PACKAGE_TS4900_FPGA is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_WILC1000_FIRMWARE is not set +# BR2_PACKAGE_WILC3000_FIRMWARE is not set +# BR2_PACKAGE_WILINK_BT_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_18XX_TI_UTILS is not set +# BR2_PACKAGE_A10DISP is not set +# BR2_PACKAGE_ACPICA is not set +# BR2_PACKAGE_ACPID is not set +# BR2_PACKAGE_ACPITOOL is not set +# BR2_PACKAGE_AER_INJECT is not set +# BR2_PACKAGE_ALTERA_STAPL is not set +# BR2_PACKAGE_AM335X_PRU_PACKAGE is not set +# BR2_PACKAGE_APCUPSD is not set +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management +# +# BR2_PACKAGE_BFSCRIPTS is not set + +# +# brickd needs udev /dev management, a toolchain w/ threads, wchar +# +# BR2_PACKAGE_BRLTTY is not set +# BR2_PACKAGE_CBOOTIMAGE is not set +# BR2_PACKAGE_CC_TOOL is not set +# BR2_PACKAGE_CDRKIT is not set +BR2_PACKAGE_CPUBURN_ARM_ARCH_SUPPORTS=y +# BR2_PACKAGE_CPUBURN_ARM is not set +# BR2_PACKAGE_CRUCIBLE is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set +# BR2_PACKAGE_DAHDI_LINUX is not set +# BR2_PACKAGE_DAHDI_TOOLS is not set +BR2_PACKAGE_DBUS=y + +# +# dbusbroker needs systemd and a toolchain w/ threads +# +BR2_PACKAGE_DBUS_CPP=y +# BR2_PACKAGE_DBUS_CXX is not set +BR2_PACKAGE_DBUS_GLIB=y +BR2_PACKAGE_DBUS_TRIGGERD=y +# BR2_PACKAGE_DFU_PROGRAMMER is not set +# BR2_PACKAGE_DFU_UTIL is not set +# BR2_PACKAGE_DMRAID is not set + +# +# dt-utils needs udev /dev management +# +# BR2_PACKAGE_DTBOCFG is not set +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_DUMP1090 is not set +# BR2_PACKAGE_DVBSNOOP is not set +# BR2_PACKAGE_EDID_DECODE is not set +# BR2_PACKAGE_ESP_HOSTED is not set + +# +# espflash needs udev /dev management +# + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y +# BR2_PACKAGE_FLASHROM is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREEIPMI is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FWUPD is not set +# BR2_PACKAGE_FWUPD_EFI is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GCNANO_BINARIES is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set +# BR2_PACKAGE_GPTFDISK is not set +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HDDTEMP is not set +# BR2_PACKAGE_HDPARM is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_HWLOC is not set +# BR2_PACKAGE_I2C_TOOLS is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_IOTOOLS is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set + +# +# ledmon needs udev and a toolchain w/ threads +# +# BR2_PACKAGE_LIBIEC61850 is not set +# BR2_PACKAGE_LIBMANETTE is not set +# BR2_PACKAGE_LIBUBOOTENV is not set +# BR2_PACKAGE_LIBUIO is not set +# BR2_PACKAGE_LINUX_BACKPORTS is not set +# BR2_PACKAGE_LINUX_SERIAL_TEST is not set +# BR2_PACKAGE_LINUXCONSOLETOOLS is not set +# BR2_PACKAGE_LIRC_TOOLS is not set +# BR2_PACKAGE_LM_SENSORS is not set +# BR2_PACKAGE_LSHW is not set +# BR2_PACKAGE_LSSCSI is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LUKSMETA is not set +# BR2_PACKAGE_LVM2 is not set +# BR2_PACKAGE_MALI_DRIVER is not set +# BR2_PACKAGE_MALI_T76X is not set +# BR2_PACKAGE_MBPFAN is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MDEVD is not set + +# +# mdio-tools needs a toolchain w/ headers >= 5.1 +# +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MEMTOOL is not set +# BR2_PACKAGE_MHZ is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_MXT_APP is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_NVIDIA_MODPROBE is not set +# BR2_PACKAGE_NVIDIA_PERSISTENCED is not set +# BR2_PACKAGE_NVME is not set +# BR2_PACKAGE_OFONO is not set +# BR2_PACKAGE_OLA is not set +# BR2_PACKAGE_OPEN2300 is not set +# BR2_PACKAGE_OPENFPGALOADER is not set +# BR2_PACKAGE_OPENIPMI is not set +# BR2_PACKAGE_OPENOCD is not set + +# +# owl-linux is only supported on ARM9 architecture +# +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PDBG is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PICOTOOL is not set +# BR2_PACKAGE_PIFMRDS is not set +# BR2_PACKAGE_PIGPIO is not set +# BR2_PACKAGE_POWERTOP is not set +# BR2_PACKAGE_PPS_TOOLS is not set +# BR2_PACKAGE_PRU_SOFTWARE_SUPPORT is not set +# BR2_PACKAGE_QORIQ_CADENCE_DP_FIRMWARE is not set +# BR2_PACKAGE_RASPI_GPIO is not set +# BR2_PACKAGE_RDMA_CORE is not set +# BR2_PACKAGE_READ_EDID is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_ROCKCHIP_MALI is not set +BR2_PACKAGE_ROCKCHIP_RKBIN=y +BR2_PACKAGE_ROCKCHIP_RKBIN_TPL_FILENAME="" +BR2_PACKAGE_ROCKCHIP_RKBIN_BL31_FILENAME="" +BR2_PACKAGE_ROCKCHIP_RKBIN_TEE_FILENAME="" +# BR2_PACKAGE_RPI_USERLAND is not set +# BR2_PACKAGE_RS485CONF is not set +# BR2_PACKAGE_RTC_TOOLS is not set +# BR2_PACKAGE_RTL8188EU is not set +# BR2_PACKAGE_RTL8189ES is not set +# BR2_PACKAGE_RTL8189FS is not set +# BR2_PACKAGE_RTL8192EU is not set +# BR2_PACKAGE_RTL8723BU is not set +# BR2_PACKAGE_RTL8723DS is not set +# BR2_PACKAGE_RTL8723DS_BT is not set +# BR2_PACKAGE_RTL8812AU_AIRCRACK_NG is not set +# BR2_PACKAGE_RTL8821AU is not set +# BR2_PACKAGE_RTL8821CU is not set +# BR2_PACKAGE_RTL8822CS is not set +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS=y +# BR2_PACKAGE_SEDUTIL is not set +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SIGROK_CLI is not set +# BR2_PACKAGE_SISPMCTL is not set +# BR2_PACKAGE_SMARTMONTOOLS is not set +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SPI_TOOLS is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_STM32FLASH is not set +# BR2_PACKAGE_SUNXI_CEDARX is not set +# BR2_PACKAGE_SUNXI_MALI_UTGARD is not set +# BR2_PACKAGE_SYSSTAT is not set +# BR2_PACKAGE_TI_GFX is not set +# BR2_PACKAGE_TI_SGX_KM is not set + +# +# ti-sgx-um needs udev and a glibc toolchain w/ threads +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set + +# +# tio needs lua (but not luajit) +# +# BR2_PACKAGE_TRIGGERHAPPY is not set +# BR2_PACKAGE_UBOOT_BOOTCOUNT is not set +BR2_PACKAGE_UBOOT_TOOLS=y +# BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKEFICAPSULE is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE is not set +BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV=y +# BR2_PACKAGE_UBOOT_TOOLS_DUMPIMAGE is not set +# BR2_PACKAGE_UBUS is not set + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_UHUBCTL is not set +# BR2_PACKAGE_UMTPRD is not set + +# +# upower needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set +# BR2_PACKAGE_USBGUARD is not set + +# +# usbip needs udev /dev management +# + +# +# usbmount requires udev to be enabled +# + +# +# usbutils needs udev /dev management and toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_W_SCAN is not set +# BR2_PACKAGE_WF111 is not set +# BR2_PACKAGE_WILC_DRIVER is not set +# BR2_PACKAGE_WIPE is not set +# BR2_PACKAGE_XORRISO is not set +# BR2_PACKAGE_XR819_XRADIO is not set + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_4TH is not set +# BR2_PACKAGE_CHICKEN is not set +# BR2_PACKAGE_ENSCRIPT is not set +BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS=y +BR2_PACKAGE_ERLANG_ARCH_SUPPORTS=y +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_EXECLINE is not set +# BR2_PACKAGE_FICL is not set +BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS=y +# BR2_PACKAGE_GAUCHE is not set +# BR2_PACKAGE_GUILE is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JANET is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER="host-lua" +BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_MICROPYTHON is not set +# BR2_PACKAGE_MOARVM is not set +BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS=y +BR2_PACKAGE_MONO_ARCH_SUPPORTS=y +# BR2_PACKAGE_MONO is not set +BR2_PACKAGE_NODEJS_ARCH_SUPPORTS=y +# BR2_PACKAGE_NODEJS is not set +# BR2_PACKAGE_OCTAVE is not set +BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS=y +BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS=y + +# +# openjdk needs X.Org +# +# BR2_PACKAGE_PERL is not set +BR2_PACKAGE_PHP_ARCH_SUPPORTS=y +BR2_PACKAGE_PHP=y +BR2_PACKAGE_PHP_SAPI_CGI=y +# BR2_PACKAGE_PHP_SAPI_CLI is not set +# BR2_PACKAGE_PHP_SAPI_FPM is not set + +# +# Extensions +# +# BR2_PACKAGE_PHP_EXT_CALENDAR is not set +BR2_PACKAGE_PHP_EXT_FILEINFO=y +# BR2_PACKAGE_PHP_EXT_OPCACHE is not set +# BR2_PACKAGE_PHP_EXT_READLINE is not set +BR2_PACKAGE_PHP_EXT_SESSION=y + +# +# Compression extensions +# +# BR2_PACKAGE_PHP_EXT_BZIP2 is not set +# BR2_PACKAGE_PHP_EXT_PHAR is not set +# BR2_PACKAGE_PHP_EXT_ZIP is not set +BR2_PACKAGE_PHP_EXT_ZLIB=y + +# +# Cryptography extensions +# +# BR2_PACKAGE_PHP_EXT_LIBARGON2 is not set +# BR2_PACKAGE_PHP_EXT_LIBSODIUM is not set +# BR2_PACKAGE_PHP_EXT_OPENSSL is not set + +# +# Database extensions +# +# BR2_PACKAGE_PHP_EXT_DBA is not set +# BR2_PACKAGE_PHP_EXT_MYSQLI is not set +# BR2_PACKAGE_PHP_EXT_PGSQL is not set +# BR2_PACKAGE_PHP_EXT_SQLITE is not set +# BR2_PACKAGE_PHP_EXT_PDO is not set + +# +# Human language and character encoding support +# + +# +# Gettext support needs NLS enabled +# +# BR2_PACKAGE_PHP_EXT_ICONV is not set +# BR2_PACKAGE_PHP_EXT_INTL is not set +# BR2_PACKAGE_PHP_EXT_MBSTRING is not set + +# +# Image processing +# +# BR2_PACKAGE_PHP_EXT_EXIF is not set +BR2_PACKAGE_PHP_EXT_GD=y + +# +# Mathematical extensions +# +# BR2_PACKAGE_PHP_EXT_BCMATH is not set +# BR2_PACKAGE_PHP_EXT_GMP is not set + +# +# Other basic extensions +# +# BR2_PACKAGE_PHP_EXT_TOKENIZER is not set + +# +# Other services +# +# BR2_PACKAGE_PHP_EXT_CURL is not set +# BR2_PACKAGE_PHP_EXT_FTP is not set +# BR2_PACKAGE_PHP_EXT_SNMP is not set +BR2_PACKAGE_PHP_EXT_SOCKETS=y + +# +# Process Control +# +# BR2_PACKAGE_PHP_EXT_PCNTL is not set +BR2_PACKAGE_PHP_EXT_POSIX=y +# BR2_PACKAGE_PHP_EXT_SHMOP is not set +# BR2_PACKAGE_PHP_EXT_SYSVMSG is not set +# BR2_PACKAGE_PHP_EXT_SYSVSEM is not set +# BR2_PACKAGE_PHP_EXT_SYSVSHM is not set + +# +# Variable and Type related +# +# BR2_PACKAGE_PHP_EXT_CTYPE is not set +# BR2_PACKAGE_PHP_EXT_FILTER is not set + +# +# Web services +# +# BR2_PACKAGE_PHP_EXT_SOAP is not set + +# +# XML manipulation +# +# BR2_PACKAGE_PHP_EXT_DOM is not set +BR2_PACKAGE_PHP_EXT_LIBXML2=y +# BR2_PACKAGE_PHP_EXT_SIMPLEXML is not set +# BR2_PACKAGE_PHP_EXT_XML is not set +# BR2_PACKAGE_PHP_EXT_XMLREADER is not set +# BR2_PACKAGE_PHP_EXT_XMLWRITER is not set +# BR2_PACKAGE_PHP_EXT_XSL is not set +# BR2_PACKAGE_PHP_EXT_FFI is not set + +# +# External php extensions +# +# BR2_PACKAGE_PHP_AMQP is not set +# BR2_PACKAGE_PHP_APCU is not set +# BR2_PACKAGE_PHP_GEOIP is not set +# BR2_PACKAGE_PHP_GNUPG is not set +# BR2_PACKAGE_PHP_IMAGICK is not set +# BR2_PACKAGE_PHP_MEMCACHED is not set +# BR2_PACKAGE_PHP_PAM is not set +# BR2_PACKAGE_PHP_PECL_DBUS is not set +# BR2_PACKAGE_PHP_SSH2 is not set +# BR2_PACKAGE_PHP_XDEBUG is not set +# BR2_PACKAGE_PHP_YAML is not set +# BR2_PACKAGE_PHP_ZMQ is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_QUICKJS is not set +# BR2_PACKAGE_RUBY is not set +BR2_PACKAGE_SWIPL_ARCH_SUPPORTS=y +# BR2_PACKAGE_SWIPL is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +BR2_PACKAGE_ALSA_LIB=y +BR2_PACKAGE_ALSA_LIB_DEVDIR="/dev/snd" +BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS="all" +BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS="all" +BR2_PACKAGE_ALSA_LIB_ALOAD=y +BR2_PACKAGE_ALSA_LIB_MIXER=y +BR2_PACKAGE_ALSA_LIB_PCM=y +BR2_PACKAGE_ALSA_LIB_RAWMIDI=y +BR2_PACKAGE_ALSA_LIB_HWDEP=y +BR2_PACKAGE_ALSA_LIB_SEQ=y +BR2_PACKAGE_ALSA_LIB_UCM=y +BR2_PACKAGE_ALSA_LIB_ALISP=y +BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS=y +BR2_PACKAGE_ALSA_LIB_TOPOLOGY=y +BR2_PACKAGE_ALSA_PLUGINS=y +# BR2_PACKAGE_ALURE is not set +# BR2_PACKAGE_AUBIO is not set +# BR2_PACKAGE_BCG729 is not set +# BR2_PACKAGE_CAPS is not set +BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS=y +# BR2_PACKAGE_FDK_AAC is not set +BR2_PACKAGE_GTKIOSTREAM_ARCH_SUPPORTS=y +# BR2_PACKAGE_GTKIOSTREAM is not set +# BR2_PACKAGE_LIBAO is not set +# BR2_PACKAGE_LIBBROADVOICE is not set +# BR2_PACKAGE_LIBCANBERRA is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDDB is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCDIO_PARANOIA is not set +# BR2_PACKAGE_LIBCODEC2 is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBEBUR128 is not set +# BR2_PACKAGE_LIBG7221 is not set +# BR2_PACKAGE_LIBGSM is not set +BR2_PACKAGE_LIBID3TAG=y +# BR2_PACKAGE_LIBILBC is not set +# BR2_PACKAGE_LIBLO is not set +BR2_PACKAGE_LIBMAD=y +# BR2_PACKAGE_LIBMAD_OPTIMIZATION_DEFAULT is not set +# BR2_PACKAGE_LIBMAD_OPTIMIZATION_SPEED is not set +BR2_PACKAGE_LIBMAD_OPTIMIZATION_ACCURACY=y +# BR2_PACKAGE_LIBMAD_SSO is not set +BR2_PACKAGE_LIBMAD_ASO=y +# BR2_PACKAGE_LIBMAD_STRICT_ISO is not set +# BR2_PACKAGE_LIBMODPLUG is not set +BR2_PACKAGE_LIBMPDCLIENT=y +# BR2_PACKAGE_LIBOPENMPT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set +# BR2_PACKAGE_LIBSIDPLAY2 is not set +# BR2_PACKAGE_LIBSILK is not set +BR2_PACKAGE_LIBSNDFILE=y +# BR2_PACKAGE_LIBSOUNDTOUCH is not set +# BR2_PACKAGE_LIBSOXR is not set +BR2_PACKAGE_LIBVORBIS=y +# BR2_PACKAGE_LILV is not set +# BR2_PACKAGE_LV2 is not set +# BR2_PACKAGE_MP4V2 is not set +BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENAL is not set +# BR2_PACKAGE_OPENCORE_AMR is not set +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_OPUSFILE is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SBC is not set +# BR2_PACKAGE_SPANDSP is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_SPEEXDSP is not set +# BR2_PACKAGE_SRATOM is not set +# BR2_PACKAGE_TAGLIB is not set +# BR2_PACKAGE_TINYALSA is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_ARCH_SUPPORTS=y +# BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING is not set + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LIBDEFLATE is not set +# BR2_PACKAGE_LIBJCAT is not set +# BR2_PACKAGE_LIBMSPACK is not set +# BR2_PACKAGE_LIBSQUISH is not set +# BR2_PACKAGE_LIBZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_MINIZIP is not set +# BR2_PACKAGE_MINIZIP_ZLIB is not set +# BR2_PACKAGE_SNAPPY is not set +# BR2_PACKAGE_SZIP is not set +# BR2_PACKAGE_ZCHUNK is not set +BR2_PACKAGE_ZLIB_NG_ARCH_SUPPORTS=y +BR2_PACKAGE_ZLIB=y +BR2_PACKAGE_LIBZLIB=y +# BR2_PACKAGE_ZLIB_NG is not set +BR2_PACKAGE_HAS_ZLIB=y +BR2_PACKAGE_PROVIDES_ZLIB="libzlib" +BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib" +# BR2_PACKAGE_ZZIPLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEARSSL is not set +BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y +# BR2_PACKAGE_BOTAN is not set +BR2_PACKAGE_CA_CERTIFICATES=y +# BR2_PACKAGE_CRYPTODEV_LINUX is not set +# BR2_PACKAGE_CRYPTOPP is not set +# BR2_PACKAGE_GCR is not set +BR2_PACKAGE_GNUTLS=y +# BR2_PACKAGE_GNUTLS_OPENSSL is not set +# BR2_PACKAGE_GNUTLS_TOOLS is not set +# BR2_PACKAGE_GNUTLS_ENABLE_SSL2 is not set +# BR2_PACKAGE_GNUTLS_ENABLE_GOST is not set +# BR2_PACKAGE_LIBARGON2 is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBB2 is not set +# BR2_PACKAGE_LIBGCRYPT is not set +BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBGPG_ERROR is not set +BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="arm-unknown-linux-gnueabi" +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKCAPI is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMD is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set +# BR2_PACKAGE_LIBOLM is not set +# BR2_PACKAGE_LIBP11 is not set +# BR2_PACKAGE_LIBSCRYPT is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSODIUM is not set +# BR2_PACKAGE_LIBSSH is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_LIBTOMCRYPT is not set +# BR2_PACKAGE_LIBUECC is not set +BR2_PACKAGE_LIBXCRYPT=y +# BR2_PACKAGE_MBEDTLS is not set +BR2_PACKAGE_NETTLE=y +# BR2_PACKAGE_OATH_TOOLKIT is not set +BR2_PACKAGE_LIBRESSL_ARCH_SUPPORTS=y +BR2_PACKAGE_OPENSSL=y +BR2_PACKAGE_LIBOPENSSL=y +BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH="linux-armv4" +# BR2_PACKAGE_LIBOPENSSL_BIN is not set +# BR2_PACKAGE_LIBOPENSSL_ENGINES is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_CHACHA is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_RC2 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_RC4 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_MD2 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_MD4 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_MDC2 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_BLAKE2 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_IDEA is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_SEED is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_DES is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_RMD160 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_WHIRLPOOL is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_BLOWFISH is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL3 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_WEAK_SSL is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_PSK is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_CAST is not set +# BR2_PACKAGE_LIBOPENSSL_UNSECURE is not set +# BR2_PACKAGE_LIBOPENSSL_DYNAMIC_ENGINE is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_COMP is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_ARGON2 is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_CACHED_FETCH is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_CMP is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_THREAD_POOL is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_ECX is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_PADLOCK_ENGINE is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_MODULE is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_QUIC is not set +# BR2_PACKAGE_LIBOPENSSL_SECURE_MEMORY is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_SIV is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL_TRACE is not set +# BR2_PACKAGE_LIBRESSL is not set +BR2_PACKAGE_HAS_OPENSSL=y +BR2_PACKAGE_PROVIDES_OPENSSL="libopenssl" +BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl" +# BR2_PACKAGE_PARSEC is not set +# BR2_PACKAGE_PARSEC_TOOL is not set +# BR2_PACKAGE_PKCS11_HELPER is not set +# BR2_PACKAGE_RHASH is not set +# BR2_PACKAGE_TINYDTLS is not set +# BR2_PACKAGE_TPM2_OPENSSL is not set +# BR2_PACKAGE_TPM2_PKCS11 is not set +# BR2_PACKAGE_TPM2_TSS is not set +# BR2_PACKAGE_TROUSERS is not set +# BR2_PACKAGE_USTREAM_SSL is not set +BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y +# BR2_PACKAGE_WOLFSSL is not set +# BR2_PACKAGE_WOLFTPM is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_HIREDIS is not set +# BR2_PACKAGE_KOMPEXSQLITE is not set +# BR2_PACKAGE_LEVELDB is not set +# BR2_PACKAGE_LIBDBI is not set +# BR2_PACKAGE_LIBDBI_DRIVERS is not set +# BR2_PACKAGE_LIBGIT2 is not set +# BR2_PACKAGE_LIBMDBX is not set +# BR2_PACKAGE_LIBODB is not set +# BR2_PACKAGE_LIBODB_BOOST is not set +# BR2_PACKAGE_LMDB is not set +# BR2_PACKAGE_MARIADB is not set +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +# BR2_PACKAGE_REDIS_PLUS_PLUS is not set +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set +# BR2_PACKAGE_SQLITECPP is not set +# BR2_PACKAGE_UNIXODBC is not set + +# +# Filesystem +# +BR2_PACKAGE_LIBCONFIG=y +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBFUSE3 is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set +# BR2_PACKAGE_PHYSFS is not set + +# +# Graphics +# +# BR2_PACKAGE_ASSIMP is not set +# BR2_PACKAGE_AT_SPI2_CORE is not set +# BR2_PACKAGE_ATKMM is not set +# BR2_PACKAGE_ATKMM2_28 is not set +BR2_PACKAGE_BAYER2RGB_NEON_ARCH_SUPPORTS=y +# BR2_PACKAGE_BAYER2RGB_NEON is not set +# BR2_PACKAGE_BULLET is not set +# BR2_PACKAGE_CAIRO is not set +# BR2_PACKAGE_CAIROMM is not set +# BR2_PACKAGE_CAIROMM1_14 is not set + +# +# chipmunk needs an OpenGL backend +# +# BR2_PACKAGE_EXEMPI is not set +# BR2_PACKAGE_EXIV2 is not set +BR2_PACKAGE_FLUTTER_ENGINE_ARCH_SUPPORTS=y + +# +# flutter-engine needs an OpenGL or OpenGLES backend +# +# BR2_PACKAGE_FONTCONFIG is not set +BR2_PACKAGE_FREETYPE=y +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_GIFLIB is not set + +# +# granite needs libgtk3 and a toolchain w/ wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_GRAPHENE is not set +# BR2_PACKAGE_GRAPHITE2 is not set + +# +# gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_HARFBUZZ is not set +# BR2_PACKAGE_IJS is not set +# BR2_PACKAGE_IMLIB2 is not set + +# +# irrlicht needs X11 and an OpenGL provider +# +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JBIG2DEC is not set +BR2_PACKAGE_JPEG_SIMD_SUPPORT=y +BR2_PACKAGE_JPEG=y +# BR2_PACKAGE_LIBJPEG is not set +BR2_PACKAGE_JPEG_TURBO=y +# BR2_PACKAGE_JPEG_TURBO_TOOLS is not set +BR2_PACKAGE_HAS_JPEG=y +BR2_PACKAGE_PROVIDES_JPEG="jpeg-turbo" +# BR2_PACKAGE_KMSXX is not set +# BR2_PACKAGE_LCMS2 is not set +# BR2_PACKAGE_LENSFUN is not set +# BR2_PACKAGE_LEPTONICA is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBAVIF is not set +# BR2_PACKAGE_LIBDECOR is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set + +# +# libepoxy needs an OpenGL and/or OpenGL EGL backend +# +# BR2_PACKAGE_LIBEXIF is not set + +# +# libfm needs X.org and a toolchain w/ wchar, threads, C++, gcc >= 4.9 +# +# BR2_PACKAGE_LIBFM_EXTRA is not set + +# +# libfreeglut depends on X.org and needs an OpenGL backend +# +# BR2_PACKAGE_LIBFREEIMAGE is not set +# BR2_PACKAGE_LIBGEOTIFF is not set + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglfw depends on X.org or Wayland and an OpenGL or GLES backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBGTA is not set + +# +# libgtk3 needs an OpenGL or an OpenGL-EGL backend +# + +# +# libgtk4 needs an OpenGL(ES) EGL backend +# +# BR2_PACKAGE_LIBJXL is not set +# BR2_PACKAGE_LIBMEDIAART is not set +# BR2_PACKAGE_LIBMNG is not set +BR2_PACKAGE_LIBPNG=y +# BR2_PACKAGE_LIBQRENCODE is not set +# BR2_PACKAGE_LIBRAW is not set +# BR2_PACKAGE_LIBRSVG is not set +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBVA is not set +# BR2_PACKAGE_LIBVIPS is not set +BR2_PACKAGE_LIBVPL_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBVPL is not set + +# +# libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend +# +# BR2_PACKAGE_MENU_CACHE is not set +# BR2_PACKAGE_OPENCV3 is not set +# BR2_PACKAGE_OPENCV4 is not set +# BR2_PACKAGE_OPENJPEG is not set +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PANGOMM is not set +# BR2_PACKAGE_PANGOMM2_46 is not set +# BR2_PACKAGE_PIXMAN is not set +# BR2_PACKAGE_POPPLER is not set +# BR2_PACKAGE_STB is not set +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y + +# +# webkitgtk needs libgtk3 and a toolchain w/ C++, wchar, NPTL, dynamic library, gcc >= 10, host gcc >= 4.9 +# +# BR2_PACKAGE_WEBP is not set + +# +# wlroots needs udev, EGL and OpenGL ES support +# +# BR2_PACKAGE_WOFF2 is not set + +# +# wpebackend-fdo needs a toolchain w/ C++, wchar, threads, dynamic library and EGL support +# +BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y + +# +# wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend +# +# BR2_PACKAGE_ZBAR is not set +# BR2_PACKAGE_ZXING_CPP is not set + +# +# Hardware handling +# +# BR2_PACKAGE_ACSCCID is not set +# BR2_PACKAGE_BCM2835 is not set +# BR2_PACKAGE_C_PERIPHERY is not set +# BR2_PACKAGE_CCID is not set +BR2_PACKAGE_CPUINFO_ARCH_SUPPORTS=y +# BR2_PACKAGE_CPUINFO is not set +# BR2_PACKAGE_DTC is not set +BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS=y +# BR2_PACKAGE_GNU_EFI is not set +# BR2_PACKAGE_HACKRF is not set + +# +# hidapi needs udev /dev management and a toolchain w/ NPTL, gcc >= 4.9 +# +# BR2_PACKAGE_JITTERENTROPY_LIBRARY is not set +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LET_ME_CREATE is not set +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libblockdev needs udev /dev management and a toolchain w/ wchar, threads, dynamic library, locale +# +# BR2_PACKAGE_LIBCEC is not set +# BR2_PACKAGE_LIBDISPLAY_INFO is not set +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBFTDI1 is not set +# BR2_PACKAGE_LIBGPHOTO2 is not set +# BR2_PACKAGE_LIBGPIOD is not set + +# +# libgpiod2 needs kernel headers >= 5.10 +# + +# +# libgudev needs udev /dev handling and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBIIO is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set +# BR2_PACKAGE_LIBMBIM is not set +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBNVME is not set +# BR2_PACKAGE_LIBPCIACCESS is not set +# BR2_PACKAGE_LIBPHIDGET is not set +# BR2_PACKAGE_LIBPRI is not set +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBQRTR_GLIB is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set +# BR2_PACKAGE_LIBSERIAL is not set +# BR2_PACKAGE_LIBSERIALPORT is not set +# BR2_PACKAGE_LIBSIGROK is not set +# BR2_PACKAGE_LIBSIGROKDECODE is not set +# BR2_PACKAGE_LIBSOC is not set +# BR2_PACKAGE_LIBSS7 is not set +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBUSBGX is not set +# BR2_PACKAGE_LIBV4L is not set +# BR2_PACKAGE_LIBXKBCOMMON is not set +BR2_PACKAGE_MRAA_ARCH_SUPPORTS=y +# BR2_PACKAGE_MRAA is not set +# BR2_PACKAGE_MTDEV is not set +# BR2_PACKAGE_NEARDAL is not set +BR2_PACKAGE_OPENCSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENCSD is not set +# BR2_PACKAGE_OPENSC is not set +# BR2_PACKAGE_OWFS is not set +# BR2_PACKAGE_PCSC_LITE is not set +# BR2_PACKAGE_PICO_SDK is not set +# BR2_PACKAGE_RPI_RGB_LED_MATRIX is not set +# BR2_PACKAGE_TSLIB is not set +# BR2_PACKAGE_UHD is not set +# BR2_PACKAGE_URG is not set + +# +# Javascript +# +# BR2_PACKAGE_ANGULARJS is not set +# BR2_PACKAGE_BOOTSTRAP is not set +# BR2_PACKAGE_CHARTJS is not set +# BR2_PACKAGE_DATATABLES is not set +# BR2_PACKAGE_DUKTAPE is not set +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_FORGE is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set +# BR2_PACKAGE_JSZIP is not set +# BR2_PACKAGE_OPENLAYERS is not set +# BR2_PACKAGE_VIS_NETWORK is not set +# BR2_PACKAGE_VUEJS is not set + +# +# JSON/XML +# +# BR2_PACKAGE_BENEJSON is not set +# BR2_PACKAGE_CJSON is not set +BR2_PACKAGE_EXPAT=y +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JOSE is not set +# BR2_PACKAGE_JSMN is not set +# BR2_PACKAGE_JSON_C is not set +# BR2_PACKAGE_JSON_FOR_MODERN_CPP is not set +# BR2_PACKAGE_JSON_GLIB is not set +BR2_PACKAGE_JSONCPP=y +# BR2_PACKAGE_LIBBSON is not set +# BR2_PACKAGE_LIBFASTJSON is not set +# BR2_PACKAGE_LIBJSON is not set +# BR2_PACKAGE_LIBJWT is not set +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBUCL is not set +BR2_PACKAGE_LIBXML2=y +# BR2_PACKAGE_LIBXMLB is not set +# BR2_PACKAGE_LIBXMLPP is not set +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set +# BR2_PACKAGE_PUGIXML is not set +# BR2_PACKAGE_RAPIDJSON is not set +# BR2_PACKAGE_RAPIDXML is not set +# BR2_PACKAGE_RAPTOR is not set +# BR2_PACKAGE_SERD is not set +# BR2_PACKAGE_SORD is not set +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_TINYXML2 is not set +# BR2_PACKAGE_VALIJSON is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_XML_SECURITY_C is not set +BR2_PACKAGE_YAJL=y +# BR2_PACKAGE_YAML_CPP is not set + +# +# Logging +# +# BR2_PACKAGE_GLOG is not set +# BR2_PACKAGE_HAWKTRACER is not set +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CPP is not set +# BR2_PACKAGE_LOG4CXX is not set + +# +# log4qt needs qt5 +# +# BR2_PACKAGE_OPENTRACING_CPP is not set +# BR2_PACKAGE_SPDLOG is not set +# BR2_PACKAGE_ULOG is not set +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# +# BR2_PACKAGE_BENTO4 is not set +# BR2_PACKAGE_BITSTREAM is not set +# BR2_PACKAGE_DAV1D is not set +# BR2_PACKAGE_KVAZAAR is not set +# BR2_PACKAGE_LIBAACS is not set +# BR2_PACKAGE_LIBASS is not set +# BR2_PACKAGE_LIBBDPLUS is not set +# BR2_PACKAGE_LIBBLURAY is not set +BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBCAMERA is not set + +# +# libcamera-apps needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8, headers >= 5.5 +# +# BR2_PACKAGE_LIBDE265 is not set +# BR2_PACKAGE_LIBDVBCSA is not set +# BR2_PACKAGE_LIBDVBPSI is not set +# BR2_PACKAGE_LIBDVBSI is not set +# BR2_PACKAGE_LIBDVDCSS is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set +# BR2_PACKAGE_LIBEBML is not set +# BR2_PACKAGE_LIBHDHOMERUN is not set +# BR2_PACKAGE_LIBHEIF is not set + +# +# libimxvpuapi needs an i.MX platform with VPU support +# +# BR2_PACKAGE_LIBMATROSKA is not set +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +BR2_PACKAGE_LIBOGG=y +# BR2_PACKAGE_LIBOPENAPTX is not set +BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBOPENH264 is not set +# BR2_PACKAGE_LIBOPUSENC is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIBUDFREAD is not set +# BR2_PACKAGE_LIBVPX is not set +# BR2_PACKAGE_LIBYUV is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set +# BR2_PACKAGE_X264 is not set +# BR2_PACKAGE_X265 is not set + +# +# Networking +# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_AZMQ is not set +# BR2_PACKAGE_AZURE_IOT_SDK_C is not set +# BR2_PACKAGE_BATMAN_ADV is not set +# BR2_PACKAGE_BELLE_SIP is not set +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CNI_PLUGINS is not set +# BR2_PACKAGE_CPP_HTTPLIB is not set +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CURLPP is not set +# BR2_PACKAGE_CZMQ is not set +# BR2_PACKAGE_DAQ is not set +# BR2_PACKAGE_DAQ3 is not set +# BR2_PACKAGE_DAVICI is not set +# BR2_PACKAGE_DHT is not set +# BR2_PACKAGE_ENET is not set +# BR2_PACKAGE_FILEMQ is not set +# BR2_PACKAGE_FREERADIUS_CLIENT is not set +# BR2_PACKAGE_GENSIO is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set +# BR2_PACKAGE_GRPC is not set +# BR2_PACKAGE_GSSDP is not set +# BR2_PACKAGE_GUPNP is not set +# BR2_PACKAGE_GUPNP_AV is not set +# BR2_PACKAGE_GUPNP_DLNA is not set +# BR2_PACKAGE_IBRCOMMON is not set +# BR2_PACKAGE_IBRDTN is not set +# BR2_PACKAGE_LIBCGI is not set +# BR2_PACKAGE_LIBCGICC is not set +# BR2_PACKAGE_LIBCOAP is not set +# BR2_PACKAGE_LIBCPPRESTSDK is not set +BR2_PACKAGE_LIBCURL=y +# BR2_PACKAGE_LIBCURL_CURL is not set +# BR2_PACKAGE_LIBCURL_VERBOSE is not set +BR2_PACKAGE_LIBCURL_PROXY_SUPPORT=y +BR2_PACKAGE_LIBCURL_COOKIES_SUPPORT=y +# BR2_PACKAGE_LIBCURL_WEBSOCKETS_SUPPORT is not set +BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES=y +BR2_PACKAGE_LIBCURL_OPENSSL=y +# BR2_PACKAGE_LIBCURL_GNUTLS is not set +# BR2_PACKAGE_LIBCURL_TLS_NONE is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBEST is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBHTP is not set +# BR2_PACKAGE_LIBHTTPPARSER is not set +# BR2_PACKAGE_LIBHTTPSERVER is not set +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBIDN2 is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBKRB5 is not set +# BR2_PACKAGE_LIBLDNS is not set +# BR2_PACKAGE_LIBMAXMINDDB is not set +# BR2_PACKAGE_LIBMBUS is not set +# BR2_PACKAGE_LIBMEMCACHED is not set +BR2_PACKAGE_LIBMICROHTTPD=y +# BR2_PACKAGE_LIBMICROHTTPD_SSL is not set +# BR2_PACKAGE_LIBMINIUPNPC is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set +# BR2_PACKAGE_LIBMODSECURITY is not set +# BR2_PACKAGE_LIBNATPMP is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNET is not set +# BR2_PACKAGE_LIBNETCONF2 is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNICE is not set +# BR2_PACKAGE_LIBNIDS is not set +# BR2_PACKAGE_LIBNL is not set +BR2_PACKAGE_LIBNPUPNP=y +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPAGEKITE is not set +BR2_PACKAGE_LIBPCAP=y +# BR2_PACKAGE_LIBPJSIP is not set +# BR2_PACKAGE_LIBPSL is not set +# BR2_PACKAGE_LIBRELP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSHOUT is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSOUP3 is not set +# BR2_PACKAGE_LIBSRTP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTEAM is not set +# BR2_PACKAGE_LIBTELNET is not set +# BR2_PACKAGE_LIBTIRPC is not set +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBTORRENT_RASTERBAR is not set +# BR2_PACKAGE_LIBUEV is not set +# BR2_PACKAGE_LIBUHTTPD is not set +# BR2_PACKAGE_LIBUPNP is not set +BR2_PACKAGE_LIBUPNPP=y +# BR2_PACKAGE_LIBURIPARSER is not set +# BR2_PACKAGE_LIBUTP is not set +# BR2_PACKAGE_LIBUWSC is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCK is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_LIBYANG is not set +BR2_PACKAGE_LIBZENOH_C_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBZENOH_C is not set +# BR2_PACKAGE_LIBZENOH_PICO is not set +# BR2_PACKAGE_LKSCTP_TOOLS is not set +# BR2_PACKAGE_MBUFFER is not set +# BR2_PACKAGE_MDNSD is not set +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_NANOMSG is not set +# BR2_PACKAGE_NEON is not set +# BR2_PACKAGE_NETOPEER2 is not set +# BR2_PACKAGE_NGHTTP2 is not set +# BR2_PACKAGE_NORM is not set +# BR2_PACKAGE_NSS_MDNS is not set +# BR2_PACKAGE_NSS_MYHOSTNAME is not set +# BR2_PACKAGE_NSS_PAM_LDAPD is not set +# BR2_PACKAGE_OATPP is not set +# BR2_PACKAGE_OMNIORB is not set +# BR2_PACKAGE_OPEN_ISNS is not set +# BR2_PACKAGE_OPEN62541 is not set +# BR2_PACKAGE_OPENLDAP is not set +# BR2_PACKAGE_OPENMPI is not set +# BR2_PACKAGE_OPENPGM is not set +# BR2_PACKAGE_OPENZWAVE is not set +# BR2_PACKAGE_ORTP is not set +# BR2_PACKAGE_PAHO_MQTT_C is not set +# BR2_PACKAGE_PAHO_MQTT_CPP is not set +# BR2_PACKAGE_PISTACHE is not set +# BR2_PACKAGE_QDECODER is not set +# BR2_PACKAGE_QPID_PROTON is not set +# BR2_PACKAGE_RABBITMQ_C is not set +# BR2_PACKAGE_RESIPROCATE is not set +# BR2_PACKAGE_RESTCLIENT_CPP is not set +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SIPROXD is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SLIRP4NETNS is not set +# BR2_PACKAGE_SNMPPP is not set +# BR2_PACKAGE_SOFIA_SIP is not set +# BR2_PACKAGE_SSCEP is not set +# BR2_PACKAGE_SYSREPO is not set +# BR2_PACKAGE_THRIFT is not set +# BR2_PACKAGE_USBREDIR is not set +# BR2_PACKAGE_WAMPCC is not set +# BR2_PACKAGE_WEBSOCKETPP is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set + +# +# Other +# +# BR2_PACKAGE_ACE is not set +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set +# BR2_PACKAGE_ARMADILLO is not set +# BR2_PACKAGE_ATF is not set +# BR2_PACKAGE_AVRO_C is not set +# BR2_PACKAGE_BASU is not set +# BR2_PACKAGE_BCTOOLBOX is not set +# BR2_PACKAGE_BDWGC is not set +# BR2_PACKAGE_BELR is not set +BR2_PACKAGE_BOOST=y +# BR2_PACKAGE_BOOST_ATOMIC is not set +# BR2_PACKAGE_BOOST_CHRONO is not set +# BR2_PACKAGE_BOOST_CONTAINER is not set +BR2_PACKAGE_BOOST_CONTEXT_ARCH_SUPPORTS=y +# BR2_PACKAGE_BOOST_CONTEXT is not set +# BR2_PACKAGE_BOOST_CONTRACT is not set +# BR2_PACKAGE_BOOST_COROUTINE is not set +# BR2_PACKAGE_BOOST_DATE_TIME is not set +# BR2_PACKAGE_BOOST_EXCEPTION is not set +# BR2_PACKAGE_BOOST_FIBER is not set +# BR2_PACKAGE_BOOST_FILESYSTEM is not set +# BR2_PACKAGE_BOOST_GRAPH is not set +# BR2_PACKAGE_BOOST_GRAPH_PARALLEL is not set +# BR2_PACKAGE_BOOST_IOSTREAMS is not set +# BR2_PACKAGE_BOOST_JSON is not set +# BR2_PACKAGE_BOOST_LOCALE is not set +# BR2_PACKAGE_BOOST_LOG is not set +# BR2_PACKAGE_BOOST_MATH is not set +# BR2_PACKAGE_BOOST_MPI is not set +# BR2_PACKAGE_BOOST_NOWIDE is not set +# BR2_PACKAGE_BOOST_PROGRAM_OPTIONS is not set +# BR2_PACKAGE_BOOST_RANDOM is not set +# BR2_PACKAGE_BOOST_REGEX is not set +# BR2_PACKAGE_BOOST_SERIALIZATION is not set +# BR2_PACKAGE_BOOST_STACKTRACE is not set +# BR2_PACKAGE_BOOST_SYSTEM is not set +# BR2_PACKAGE_BOOST_TEST is not set +# BR2_PACKAGE_BOOST_THREAD is not set +# BR2_PACKAGE_BOOST_TIMER is not set +# BR2_PACKAGE_BOOST_TYPE_ERASURE is not set +# BR2_PACKAGE_BOOST_URL is not set +# BR2_PACKAGE_BOOST_WAVE is not set +# BR2_PACKAGE_C_CAPNPROTO is not set +# BR2_PACKAGE_CAPNPROTO is not set +# BR2_PACKAGE_CATCH2 is not set +# BR2_PACKAGE_CCTZ is not set +# BR2_PACKAGE_CEREAL is not set +# BR2_PACKAGE_CLANG is not set +# BR2_PACKAGE_CMOCKA is not set +# BR2_PACKAGE_CPPCMS is not set +# BR2_PACKAGE_CRACKLIB is not set +# BR2_PACKAGE_DAWGDIC is not set +# BR2_PACKAGE_DING_LIBS is not set +# BR2_PACKAGE_DLIB is not set +# BR2_PACKAGE_DOTCONF is not set +# BR2_PACKAGE_DOUBLE_CONVERSION is not set +# BR2_PACKAGE_EIGEN is not set +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_ELL is not set +# BR2_PACKAGE_FARMHASH is not set +# BR2_PACKAGE_FFT2D is not set +# BR2_PACKAGE_FFTW is not set +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_FLATBUFFERS is not set +# BR2_PACKAGE_FLATCC is not set +# BR2_PACKAGE_FP16 is not set +# BR2_PACKAGE_FXDIV is not set +# BR2_PACKAGE_GCONF is not set +# BR2_PACKAGE_GDAL is not set +# BR2_PACKAGE_GEMMLOWP is not set +# BR2_PACKAGE_GFLAGS is not set +# BR2_PACKAGE_GLI is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GLIBMM2_66 is not set +# BR2_PACKAGE_GLM is not set +BR2_PACKAGE_GMP=y +BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y + +# +# gobject-introspection needs python3 +# +# BR2_PACKAGE_GSL is not set +# BR2_PACKAGE_GTEST is not set +# BR2_PACKAGE_GUMBO_PARSER is not set +# BR2_PACKAGE_HIGHWAY is not set +BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y +# BR2_PACKAGE_JEMALLOC is not set +BR2_PACKAGE_LAPACK_ARCH_SUPPORTS=y +# BR2_PACKAGE_LAPACK is not set +BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBABSEIL_CPP is not set +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBAVL is not set +# BR2_PACKAGE_LIBB64 is not set +# BR2_PACKAGE_LIBBACKTRACE is not set +BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBBSD is not set +# BR2_PACKAGE_LIBBYTESIZE is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set +# BR2_PACKAGE_LIBCGROUP is not set +# BR2_PACKAGE_LIBCLC is not set +# BR2_PACKAGE_LIBCOFI is not set +# BR2_PACKAGE_LIBCORRECT is not set +# BR2_PACKAGE_LIBCROSSGUID is not set +# BR2_PACKAGE_LIBCSV is not set +BR2_PACKAGE_LIBDAEMON=y +# BR2_PACKAGE_LIBDEX is not set +# BR2_PACKAGE_LIBDILL is not set +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +BR2_PACKAGE_LIBEVENT=y + +# +# libexecinfo needs a musl or uclibc toolchain w/ dynamic library +# +BR2_PACKAGE_LIBFFI=y +# BR2_PACKAGE_LIBFUTILS is not set +# BR2_PACKAGE_LIBGEE is not set +# BR2_PACKAGE_LIBGEOS is not set +BR2_PACKAGE_LIBGLIB2=y +# BR2_PACKAGE_LIBGLOB is not set +# BR2_PACKAGE_LIBICAL is not set +# BR2_PACKAGE_LIBITE is not set +# BR2_PACKAGE_LIBKS is not set +# BR2_PACKAGE_LIBLINEAR is not set +# BR2_PACKAGE_LIBLOKI is not set +# BR2_PACKAGE_LIBNPTH is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set +# BR2_PACKAGE_LIBOSMIUM is not set + +# +# libpeas needs python3 +# +# BR2_PACKAGE_LIBPFM4 is not set +# BR2_PACKAGE_LIBPLIST is not set +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBPWQUALITY is not set +# BR2_PACKAGE_LIBQB is not set +BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSECCOMP is not set +# BR2_PACKAGE_LIBSHDATA is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGC2 is not set +BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSIGSEGV is not set +# BR2_PACKAGE_LIBSOLV is not set +# BR2_PACKAGE_LIBSPATIALINDEX is not set +# BR2_PACKAGE_LIBTALLOC is not set +BR2_PACKAGE_LIBTASN1=y +# BR2_PACKAGE_LIBTOMMATH is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBUNWIND is not set +BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBURCU is not set + +# +# liburing needs a toolchain w/ gcc >= 4.9, headers >= 5.1 +# +# BR2_PACKAGE_LIBUTEMPTER is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LIGHTNING is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LIQUID_DSP is not set +BR2_PACKAGE_LLVM_ARCH_SUPPORTS=y +BR2_PACKAGE_LLVM_TARGET_ARCH="ARM" +# BR2_PACKAGE_LLVM is not set +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MATIO is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MPIR is not set +# BR2_PACKAGE_MSGPACK is not set +# BR2_PACKAGE_NEON_2_SSE is not set +BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET="ARMV7" +BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENBLAS is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +BR2_PACKAGE_POCO_ARCH_SUPPORTS=y +# BR2_PACKAGE_POCO is not set +BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS=y +BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_PROTOZERO is not set +# BR2_PACKAGE_PSIMD is not set +# BR2_PACKAGE_PTHREADPOOL is not set +# BR2_PACKAGE_QHULL is not set +# BR2_PACKAGE_QLIBC is not set +# BR2_PACKAGE_REPROC is not set +# BR2_PACKAGE_RIEMANN_C_CLIENT is not set +BR2_PACKAGE_RUY_ARCH_SUPPORTS=y +# BR2_PACKAGE_RUY is not set +# BR2_PACKAGE_SHAPELIB is not set +# BR2_PACKAGE_SKALIBS is not set +# BR2_PACKAGE_SPHINXBASE is not set +# BR2_PACKAGE_TBB is not set +BR2_PACKAGE_TENSORFLOW_LITE_ARCH_SUPPORTS=y +# BR2_PACKAGE_TENSORFLOW_LITE is not set +# BR2_PACKAGE_TINYCBOR is not set +# BR2_PACKAGE_TL_EXPECTED is not set +# BR2_PACKAGE_TLLIST is not set +# BR2_PACKAGE_UVW is not set +# BR2_PACKAGE_VOLK is not set +# BR2_PACKAGE_XAPIAN is not set + +# +# Security +# +# BR2_PACKAGE_LIBAPPARMOR is not set +# BR2_PACKAGE_LIBSELINUX is not set +# BR2_PACKAGE_LIBSEMANAGE is not set +# BR2_PACKAGE_LIBSEPOL is not set +# BR2_PACKAGE_SAFECLIB is not set +# BR2_PACKAGE_SOFTHSM2 is not set + +# +# Text and terminal handling +# +# BR2_PACKAGE_AUGEAS is not set +# BR2_PACKAGE_CLI11 is not set +# BR2_PACKAGE_DOCOPT_CPP is not set +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_FCFT is not set +BR2_PACKAGE_FMT=y +# BR2_PACKAGE_FSTRCMP is not set +# BR2_PACKAGE_ICU is not set +# BR2_PACKAGE_INIH is not set +# BR2_PACKAGE_LIBCLI is not set +# BR2_PACKAGE_LIBECOLI is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBUNIBREAK is not set +BR2_PACKAGE_LIBUNISTRING=y +# BR2_PACKAGE_LINENOISE is not set +BR2_PACKAGE_NCURSES=y +BR2_PACKAGE_NCURSES_WCHAR=y +BR2_PACKAGE_NCURSES_TARGET_PROGS=y +BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_ONIGURUMA is not set +# BR2_PACKAGE_PCRE is not set +BR2_PACKAGE_PCRE2=y +BR2_PACKAGE_PCRE2_16=y +# BR2_PACKAGE_PCRE2_32 is not set +BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_PCRE2_JIT is not set +BR2_PACKAGE_POPT=y +# BR2_PACKAGE_RE2 is not set +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set +# BR2_PACKAGE_TCLAP is not set +# BR2_PACKAGE_TERMCOLOR is not set +# BR2_PACKAGE_UTF8PROC is not set + +# +# Mail +# +# BR2_PACKAGE_DOVECOT is not set +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_BITCOIN is not set +# BR2_PACKAGE_CLAMAV is not set +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_COLLECTL is not set + +# +# domoticz needs lua 5.3 and a toolchain w/ C++, gcc >= 6, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_FFT_EVAL is not set +# BR2_PACKAGE_GITLAB_RUNNER is not set +# BR2_PACKAGE_GNURADIO is not set +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set + +# +# gqrx needs qt5 +# +# BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_LINUX_SYSCALL_SUPPORT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_NETDATA is not set +# BR2_PACKAGE_PROJ is not set +BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y +# BR2_PACKAGE_QEMU is not set +# BR2_PACKAGE_QPDF is not set +# BR2_PACKAGE_RTL_433 is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set +# BR2_PACKAGE_SUNWAIT is not set +# BR2_PACKAGE_TASKD is not set +BR2_PACKAGE_XMRIG_ARCH_SUPPORTS=y +# BR2_PACKAGE_XMRIG is not set +# BR2_PACKAGE_XUTIL_UTIL_MACROS is not set +BR2_PACKAGE_Z3_ARCH_SUPPORTS=y +# BR2_PACKAGE_Z3 is not set + +# +# Networking applications +# +# BR2_PACKAGE_AIRCRACK_NG is not set +# BR2_PACKAGE_ALFRED is not set +# BR2_PACKAGE_AOETOOLS is not set +# BR2_PACKAGE_APACHE is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARP_SCAN is not set +# BR2_PACKAGE_ARPTABLES is not set +# BR2_PACKAGE_ASTERISK is not set +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AUTOSSH is not set +BR2_PACKAGE_AVAHI=y +BR2_PACKAGE_AVAHI_AUTOIPD=y +BR2_PACKAGE_AVAHI_DAEMON=y +BR2_PACKAGE_AVAHI_LIBAVAHI_CLIENT=y +BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_AVAHI_DEFAULT_SERVICES=y +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BABELD is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BATCTL is not set +# BR2_PACKAGE_BCUSDK is not set +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BIRD is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BMX7 is not set +# BR2_PACKAGE_BOINC is not set +# BR2_PACKAGE_BRCM_PATCHRAM_PLUS is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_C_ICAP is not set +# BR2_PACKAGE_CAN_UTILS is not set +# BR2_PACKAGE_CANNELLONI is not set +# BR2_PACKAGE_CASYNC is not set + +# +# cfm needs a toolchain w/ threads, kernel headers >= 5.0 +# +# BR2_PACKAGE_CHRONY is not set +BR2_PACKAGE_CIVETWEB=y +# BR2_PACKAGE_CIVETWEB_SERVER is not set +BR2_PACKAGE_CIVETWEB_LIB=y +# BR2_PACKAGE_CLOUDFLARED is not set +# BR2_PACKAGE_CONNMAN is not set + +# +# connman-gtk needs libgtk3 and a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library +# +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CORKSCREW is not set +# BR2_PACKAGE_CRDA is not set +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set +# BR2_PACKAGE_DANTE is not set +# BR2_PACKAGE_DARKHTTPD is not set +# BR2_PACKAGE_DEHYDRATED is not set +# BR2_PACKAGE_DHCP is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DRBD_UTILS is not set +BR2_PACKAGE_DROPBEAR=y +# BR2_PACKAGE_DROPBEAR_CLIENT is not set +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_DROPBEAR_SMALL=y +# BR2_PACKAGE_DROPBEAR_WTMP is not set +# BR2_PACKAGE_DROPBEAR_LASTLOG is not set +BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO=y +BR2_PACKAGE_DROPBEAR_LOCALOPTIONS_FILE="" +# BR2_PACKAGE_EASYFRAMES is not set +# BR2_PACKAGE_EBTABLES is not set + +# +# ejabberd needs erlang, toolchain w/ C++ +# +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FASTD is not set +# BR2_PACKAGE_FCGIWRAP is not set +# BR2_PACKAGE_FIREWALLD is not set +# BR2_PACKAGE_FLANNEL is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_FREERADIUS_SERVER is not set +# BR2_PACKAGE_FREESWITCH is not set +# BR2_PACKAGE_FRR is not set +# BR2_PACKAGE_GERBERA is not set +# BR2_PACKAGE_GESFTPSERVER is not set +# BR2_PACKAGE_GLOOX is not set +# BR2_PACKAGE_GLORYTUN is not set + +# +# gupnp-tools needs libgtk3 +# +# BR2_PACKAGE_HANS is not set +BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y +# BR2_PACKAGE_HAPROXY is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTPDATE is not set +# BR2_PACKAGE_HTTPING is not set +# BR2_PACKAGE_I2PD is not set +# BR2_PACKAGE_IANA_ASSIGNMENTS is not set +# BR2_PACKAGE_IBRDTN_TOOLS is not set +# BR2_PACKAGE_IBRDTND is not set +# BR2_PACKAGE_IFENSLAVE is not set +# BR2_PACKAGE_IFMETRIC is not set +# BR2_PACKAGE_IFPLUGD is not set +# BR2_PACKAGE_IFTOP is not set +# BR2_PACKAGE_IFUPDOWN is not set +BR2_PACKAGE_IFUPDOWN_SCRIPTS=y +# BR2_PACKAGE_IGD2_FOR_LINUX is not set +# BR2_PACKAGE_IGH_ETHERCAT is not set +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IODINE is not set +# BR2_PACKAGE_IPCALC is not set +# BR2_PACKAGE_IPERF is not set +# BR2_PACKAGE_IPERF3 is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IRSSI is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_IWD is not set +# BR2_PACKAGE_JANUS_GATEWAY is not set +# BR2_PACKAGE_KEEPALIVED is not set +# BR2_PACKAGE_KISMET is not set +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_KSMBD_TOOLS is not set +# BR2_PACKAGE_LEAFNODE2 is not set +# BR2_PACKAGE_LFT is not set +# BR2_PACKAGE_LFTP is not set +BR2_PACKAGE_LIGHTTPD=y +# BR2_PACKAGE_LIGHTTPD_BROTLI is not set +# BR2_PACKAGE_LIGHTTPD_BZIP2 is not set +# BR2_PACKAGE_LIGHTTPD_DBI is not set +# BR2_PACKAGE_LIGHTTPD_GNUTLS is not set +# BR2_PACKAGE_LIGHTTPD_KRB5 is not set +# BR2_PACKAGE_LIGHTTPD_LDAP is not set +# BR2_PACKAGE_LIGHTTPD_LIBEV is not set +# BR2_PACKAGE_LIGHTTPD_MAXMINDDB is not set +# BR2_PACKAGE_LIGHTTPD_MBEDTLS is not set + +# +# mysql support needs mariadb +# +# BR2_PACKAGE_LIGHTTPD_NETTLE is not set +# BR2_PACKAGE_LIGHTTPD_OPENSSL is not set +# BR2_PACKAGE_LIGHTTPD_PCRE is not set +# BR2_PACKAGE_LIGHTTPD_PGSQL is not set +# BR2_PACKAGE_LIGHTTPD_WEBDAV is not set +# BR2_PACKAGE_LIGHTTPD_WOLFSSL is not set +# BR2_PACKAGE_LIGHTTPD_ZLIB is not set +# BR2_PACKAGE_LIGHTTPD_ZSTD is not set +# BR2_PACKAGE_LINKNX is not set +# BR2_PACKAGE_LINKS is not set +# BR2_PACKAGE_LINPHONE is not set +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LINUXPTP is not set +# BR2_PACKAGE_LLDPD is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_LYNX is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MINIDLNA is not set +# BR2_PACKAGE_MINISSDPD is not set +# BR2_PACKAGE_MJPG_STREAMER is not set +# BR2_PACKAGE_MODEM_MANAGER is not set +BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MOSH is not set +# BR2_PACKAGE_MOSQUITTO is not set +# BR2_PACKAGE_MROUTED is not set + +# +# mrp needs a toolchain w/ threads, kernel headers >= 5.0 +# +# BR2_PACKAGE_MSTPD is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NET_TOOLS is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETCALC is not set +# BR2_PACKAGE_NETCAT is not set +# BR2_PACKAGE_NETCAT_OPENBSD is not set +# BR2_PACKAGE_NETHOGS is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a glibc or musl toolchain w/ headers >= 4.6, dynamic library, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGINX is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set +# BR2_PACKAGE_NLOAD is not set +# BR2_PACKAGE_NMAP is not set +# BR2_PACKAGE_NOIP is not set +BR2_PACKAGE_NTP=y +BR2_PACKAGE_NTP_SNTP=y +# BR2_PACKAGE_NTP_NTP_KEYGEN is not set +# BR2_PACKAGE_NTP_NTP_SHM_CLK is not set +# BR2_PACKAGE_NTP_NTPD is not set +BR2_PACKAGE_NTP_NTPDATE=y +BR2_PACKAGE_NTP_NTPDC=y +BR2_PACKAGE_NTP_NTPQ=y +# BR2_PACKAGE_NTP_NTPSNMPD is not set +# BR2_PACKAGE_NTP_NTPTIME is not set +# BR2_PACKAGE_NTP_TICKADJ is not set +# BR2_PACKAGE_NTPSEC is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCP6C is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPEN_ISCSI is not set +# BR2_PACKAGE_OPEN_LLDP is not set +# BR2_PACKAGE_OPEN_PLC_UTILS is not set +# BR2_PACKAGE_OPENCONNECT is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENRESOLV is not set +BR2_PACKAGE_OPENSSH=y +BR2_PACKAGE_OPENSSH_CLIENT=y +# BR2_PACKAGE_OPENSSH_SERVER is not set +# BR2_PACKAGE_OPENSSH_KEY_UTILS is not set +# BR2_PACKAGE_OPENSSH_SANDBOX is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PARPROUTED is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PHYTOOL is not set +# BR2_PACKAGE_PIMD is not set +# BR2_PACKAGE_PIXIEWPS is not set +# BR2_PACKAGE_POUND is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PRIVOXY is not set +# BR2_PACKAGE_PROFTPD is not set + +# +# prosody needs the lua interpreter, dynamic library +# +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_PURE_FTPD is not set +# BR2_PACKAGE_PUTTY is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_REAVER is not set +# BR2_PACKAGE_REDIR is not set +# BR2_PACKAGE_RP_PPPOE is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +BR2_PACKAGE_RSYNC=y +# BR2_PACKAGE_RTORRENT is not set +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_S6_DNS is not set +# BR2_PACKAGE_S6_NETWORKING is not set +# BR2_PACKAGE_SAMBA4 is not set +# BR2_PACKAGE_SCONESERVER is not set +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SHADOWSOCKS_LIBEV is not set +BR2_PACKAGE_SHAIRPORT_SYNC=y +# BR2_PACKAGE_SHAIRPORT_SYNC_CONVOLUTION is not set +# BR2_PACKAGE_SHAIRPORT_SYNC_DBUS is not set +# BR2_PACKAGE_SHAIRPORT_SYNC_LIBSOXR is not set +# BR2_PACKAGE_SHAIRPORT_SYNC_MQTT is not set +# BR2_PACKAGE_SHELLINABOX is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SNGREP is not set +# BR2_PACKAGE_SNORT is not set +# BR2_PACKAGE_SNORT3 is not set +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SOFTETHER is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set +# BR2_PACKAGE_SQUID is not set +# BR2_PACKAGE_SSDP_RESPONDER is not set +# BR2_PACKAGE_SSHGUARD is not set +BR2_PACKAGE_SSHPASS=y +# BR2_PACKAGE_SSLH is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_SURICATA is not set +# BR2_PACKAGE_TAILSCALE is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_TFTPD is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINC is not set +# BR2_PACKAGE_TINYPROXY is not set +# BR2_PACKAGE_TINYSSH is not set +# BR2_PACKAGE_TIPIDEE is not set +# BR2_PACKAGE_TOR is not set +# BR2_PACKAGE_TRACEROUTE is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TUNCTL is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UACME is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_UFTP is not set +# BR2_PACKAGE_UHTTPD is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_UNBOUND is not set +# BR2_PACKAGE_UQMI is not set +# BR2_PACKAGE_UREDIR is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_USTREAMER is not set +# BR2_PACKAGE_VDE2 is not set +# BR2_PACKAGE_VDR is not set +# BR2_PACKAGE_VNSTAT is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WAVEMON is not set +# BR2_PACKAGE_WGET is not set +# BR2_PACKAGE_WHOIS is not set +# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT is not set +# BR2_PACKAGE_WIREGUARD_TOOLS is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set +# BR2_PACKAGE_WIRESHARK is not set +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WPAN_TOOLS is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set +# BR2_PACKAGE_XTABLES_ADDONS is not set +# BR2_PACKAGE_ZABBIX is not set +# BR2_PACKAGE_ZEEK is not set +# BR2_PACKAGE_ZNC is not set + +# +# Package managers +# + +# +# ------------------------------------------------------- +# + +# +# Please note: +# + +# +# - Buildroot does *not* generate binary packages, +# + +# +# - Buildroot does *not* install any package database. +# + +# +# * +# + +# +# It is up to you to provide those by yourself if you +# + +# +# want to use any of those package managers. +# + +# +# * +# + +# +# See the manual: +# + +# +# http://buildroot.org/manual.html#faq-no-binary-packages +# + +# +# ------------------------------------------------------- +# +# BR2_PACKAGE_OPKG is not set +# BR2_PACKAGE_OPKG_UTILS is not set + +# +# rpm needs a toolchain w/ dynamic library, threads and lua >= 5.3 +# + +# +# Real-Time +# +BR2_PACKAGE_XENOMAI_COBALT_ARCH_SUPPORTS=y +# BR2_PACKAGE_XENOMAI is not set + +# +# Security +# +# BR2_PACKAGE_APPARMOR is not set +# BR2_PACKAGE_CHECKPOLICY is not set +# BR2_PACKAGE_IMA_EVM_UTILS is not set +# BR2_PACKAGE_OPTEE_CLIENT is not set +# BR2_PACKAGE_PAXTEST is not set +# BR2_PACKAGE_POLICYCOREUTILS is not set +# BR2_PACKAGE_REFPOLICY is not set +# BR2_PACKAGE_RESTORECOND is not set +# BR2_PACKAGE_SELINUX_PYTHON is not set +# BR2_PACKAGE_SEMODULE_UTILS is not set + +# +# setools needs python3 +# +BR2_PACKAGE_URANDOM_SCRIPTS=y + +# +# Shell and utilities +# + +# +# Shells +# +# BR2_PACKAGE_BASH is not set +# BR2_PACKAGE_DASH is not set +# BR2_PACKAGE_MKSH is not set +# BR2_PACKAGE_NUSHELL is not set +# BR2_PACKAGE_ZSH is not set + +# +# Utilities +# +# BR2_PACKAGE_APG is not set +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CATATONIT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_EASY_RSA is not set +# BR2_PACKAGE_EZA is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +BR2_PACKAGE_GNUPG2_DEPENDS=y +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_MINISIGN is not set +# BR2_PACKAGE_NEOFETCH is not set +# BR2_PACKAGE_PDMENU is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_QPRINT is not set +# BR2_PACKAGE_RANGER is not set +# BR2_PACKAGE_RLWRAP is not set +# BR2_PACKAGE_RTTY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SCREENFETCH is not set +# BR2_PACKAGE_SEXPECT is not set +BR2_PACKAGE_SUDO=y +# BR2_PACKAGE_TIME is not set +# BR2_PACKAGE_TINI is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_TTYD is not set +# BR2_PACKAGE_WHICH is not set +# BR2_PACKAGE_WTFUTIL is not set +# BR2_PACKAGE_XMLSTARLET is not set +BR2_PACKAGE_XXHASH=y +# BR2_PACKAGE_YTREE is not set +# BR2_PACKAGE_ZOXIDE is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ANDROID_TOOLS is not set +# BR2_PACKAGE_ATOP is not set +# BR2_PACKAGE_ATTR is not set +BR2_PACKAGE_AUDIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_AUDIT is not set +# BR2_PACKAGE_BALENA_ENGINE is not set +# BR2_PACKAGE_BUBBLEWRAP is not set +# BR2_PACKAGE_CGROUPFS_MOUNT is not set + +# +# circus needs Python 3 and a toolchain w/ C++, threads +# +# BR2_PACKAGE_CONMON is not set +# BR2_PACKAGE_CONTAINERD is not set +# BR2_PACKAGE_COREUTILS is not set +# BR2_PACKAGE_CPULIMIT is not set +# BR2_PACKAGE_CPULOAD is not set +BR2_PACKAGE_CRIU_ARCH_SUPPORTS=y +# BR2_PACKAGE_CRIU is not set +# BR2_PACKAGE_CRUN is not set +# BR2_PACKAGE_DAEMON is not set +# BR2_PACKAGE_DC3DD is not set +# BR2_PACKAGE_DCRON is not set +# BR2_PACKAGE_DDRESCUE is not set +# BR2_PACKAGE_DEBIANUTILS is not set +# BR2_PACKAGE_DOCKER_CLI is not set +# BR2_PACKAGE_DOCKER_CLI_BUILDX is not set + +# +# docker-compose needs docker-cli and a toolchain w/ threads +# +# BR2_PACKAGE_DOCKER_ENGINE is not set +# BR2_PACKAGE_EARLYOOM is not set +# BR2_PACKAGE_EFIBOOTMGR is not set +BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y +# BR2_PACKAGE_EFIVAR is not set +# BR2_PACKAGE_EMBIGGEN_DISK is not set +# BR2_PACKAGE_EMLOG is not set +# BR2_PACKAGE_FLUENT_BIT is not set +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_GETENT is not set +# BR2_PACKAGE_GKRELLM is not set +BR2_PACKAGE_HTOP=y +# BR2_PACKAGE_IBM_SW_TPM2 is not set +BR2_PACKAGE_INITSCRIPTS=y + +# +# iotop depends on python3 +# +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_IRQBALANCE is not set +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_KMON is not set +# BR2_PACKAGE_KVMTOOL is not set + +# +# libostree needs a uClibc or glibc toolchain w/ threads, dynamic library, wchar, headers >= 5.8 +# +# BR2_PACKAGE_LXC is not set +BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y +# BR2_PACKAGE_MAKEDUMPFILE is not set +# BR2_PACKAGE_MENDER is not set +# BR2_PACKAGE_MENDER_CONNECT is not set +# BR2_PACKAGE_MFOC is not set +# BR2_PACKAGE_MOBY_BUILDKIT is not set +# BR2_PACKAGE_MOKUTIL is not set + +# +# mokutil needs a toolchain w/ dynamic library, threads, gcc >= 4.9, headers >= 3.12 +# +# BR2_PACKAGE_MONIT is not set + +# +# multipath-tools needs udev and a toolchain w/ threads, dynamic library, C++ +# +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NERDCTL is not set + +# +# netifrc needs openrc as init system +# +# BR2_PACKAGE_NUMACTL is not set +# BR2_PACKAGE_NUT is not set + +# +# pamtester depends on linux-pam +# + +# +# petitboot needs a toolchain w/ wchar, dynamic library, threads, udev /dev management +# +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PROCPS_NG is not set +# BR2_PACKAGE_PROCRANK_LINUX is not set +# BR2_PACKAGE_PROCS is not set +# BR2_PACKAGE_PSMISC is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QBEE_AGENT is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_QUOTATOOL is not set +# BR2_PACKAGE_RAUC is not set +# BR2_PACKAGE_RAUC_HAWKBIT_UPDATER is not set +# BR2_PACKAGE_RSYSLOG is not set +# BR2_PACKAGE_RUNC is not set +# BR2_PACKAGE_S6 is not set +# BR2_PACKAGE_S6_LINUX_INIT is not set +# BR2_PACKAGE_S6_LINUX_UTILS is not set +# BR2_PACKAGE_S6_PORTABLE_UTILS is not set +# BR2_PACKAGE_S6_RC is not set +# BR2_PACKAGE_SCRUB is not set +# BR2_PACKAGE_SCRYPT is not set + +# +# sdbus-c++ needs systemd and a toolchain w/ C++, gcc >= 8 +# + +# +# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 +# +# BR2_PACKAGE_SEATD is not set +# BR2_PACKAGE_SHADOW is not set +# BR2_PACKAGE_SMACK is not set +# BR2_PACKAGE_START_STOP_DAEMON is not set + +# +# supervisor needs a python interpreter +# +# BR2_PACKAGE_SWUPDATE is not set +# BR2_PACKAGE_SYSKLOGD is not set +# BR2_PACKAGE_SYSLOG_NG is not set +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_TAR is not set +# BR2_PACKAGE_TEALDEER is not set +# BR2_PACKAGE_TPM_TOOLS is not set +# BR2_PACKAGE_TPM2_ABRMD is not set +# BR2_PACKAGE_TPM2_TOOLS is not set +# BR2_PACKAGE_TPM2_TOTP is not set +# BR2_PACKAGE_UNSCD is not set +BR2_PACKAGE_UTIL_LINUX=y +BR2_PACKAGE_UTIL_LINUX_LIBBLKID=y +# BR2_PACKAGE_UTIL_LINUX_LIBFDISK is not set +# BR2_PACKAGE_UTIL_LINUX_LIBMOUNT is not set +# BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS is not set +BR2_PACKAGE_UTIL_LINUX_LIBUUID=y +# BR2_PACKAGE_UTIL_LINUX_BINARIES is not set +# BR2_PACKAGE_UTIL_LINUX_AGETTY is not set +# BR2_PACKAGE_UTIL_LINUX_BFS is not set +# BR2_PACKAGE_UTIL_LINUX_CAL is not set +# BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH is not set +# BR2_PACKAGE_UTIL_LINUX_CHMEM is not set +# BR2_PACKAGE_UTIL_LINUX_CRAMFS is not set +# BR2_PACKAGE_UTIL_LINUX_EJECT is not set +# BR2_PACKAGE_UTIL_LINUX_FALLOCATE is not set +# BR2_PACKAGE_UTIL_LINUX_FDFORMAT is not set +# BR2_PACKAGE_UTIL_LINUX_FSCK is not set +# BR2_PACKAGE_UTIL_LINUX_HARDLINK is not set +# BR2_PACKAGE_UTIL_LINUX_HWCLOCK is not set +# BR2_PACKAGE_UTIL_LINUX_IPCMK is not set +# BR2_PACKAGE_UTIL_LINUX_IPCRM is not set +# BR2_PACKAGE_UTIL_LINUX_IPCS is not set +# BR2_PACKAGE_UTIL_LINUX_IRQTOP is not set +# BR2_PACKAGE_UTIL_LINUX_KILL is not set +# BR2_PACKAGE_UTIL_LINUX_LAST is not set +# BR2_PACKAGE_UTIL_LINUX_LINE is not set +# BR2_PACKAGE_UTIL_LINUX_LOGGER is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_LOSETUP is not set +# BR2_PACKAGE_UTIL_LINUX_LSFD is not set +# BR2_PACKAGE_UTIL_LINUX_LSLOGINS is not set +# BR2_PACKAGE_UTIL_LINUX_LSMEM is not set +# BR2_PACKAGE_UTIL_LINUX_MESG is not set +# BR2_PACKAGE_UTIL_LINUX_MINIX is not set +# BR2_PACKAGE_UTIL_LINUX_MORE is not set +# BR2_PACKAGE_UTIL_LINUX_MOUNT is not set +# BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT is not set +# BR2_PACKAGE_UTIL_LINUX_NEWGRP is not set +# BR2_PACKAGE_UTIL_LINUX_NOLOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_NSENTER is not set +# BR2_PACKAGE_UTIL_LINUX_PG is not set +# BR2_PACKAGE_UTIL_LINUX_PARTX is not set +# BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_RAW is not set +# BR2_PACKAGE_UTIL_LINUX_RENAME is not set +# BR2_PACKAGE_UTIL_LINUX_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RUNUSER is not set +# BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS is not set +# BR2_PACKAGE_UTIL_LINUX_SETPRIV is not set +# BR2_PACKAGE_UTIL_LINUX_SETTERM is not set +# BR2_PACKAGE_UTIL_LINUX_SU is not set +# BR2_PACKAGE_UTIL_LINUX_SULOGIN is not set +# BR2_PACKAGE_UTIL_LINUX_SWITCH_ROOT is not set +# BR2_PACKAGE_UTIL_LINUX_TUNELP is not set +# BR2_PACKAGE_UTIL_LINUX_UL is not set +# BR2_PACKAGE_UTIL_LINUX_UNSHARE is not set +# BR2_PACKAGE_UTIL_LINUX_UTMPDUMP is not set +# BR2_PACKAGE_UTIL_LINUX_UUIDD is not set +# BR2_PACKAGE_UTIL_LINUX_VIPW is not set + +# +# waitpid needs a toolchain w/ headers >= 5.3 +# +# BR2_PACKAGE_UTIL_LINUX_WALL is not set +# BR2_PACKAGE_UTIL_LINUX_WIPEFS is not set +# BR2_PACKAGE_UTIL_LINUX_WDCTL is not set +# BR2_PACKAGE_UTIL_LINUX_WRITE is not set +# BR2_PACKAGE_UTIL_LINUX_ZRAMCTL is not set +# BR2_PACKAGE_WATCHDOG is not set +# BR2_PACKAGE_WATCHDOGD is not set +# BR2_PACKAGE_XDG_DBUS_PROXY is not set +# BR2_PACKAGE_XEN is not set +BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=y +# BR2_PACKAGE_XVISOR is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_BAT is not set +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_LESS is not set +BR2_PACKAGE_MC=y +# BR2_PACKAGE_MG is not set +# BR2_PACKAGE_MOST is not set +BR2_PACKAGE_NANO=y +BR2_PACKAGE_NANO_TINY=y +# BR2_PACKAGE_UEMACS is not set +# BR2_PACKAGE_VIM is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_AXFS is not set +# BR2_TARGET_ROOTFS_BTRFS is not set +# BR2_TARGET_ROOTFS_CLOOP is not set +# BR2_TARGET_ROOTFS_CPIO is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EROFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_F2FS is not set +# BR2_TARGET_ROOTFS_INITRAMFS is not set +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_OCI is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +BR2_TARGET_ROOTFS_TAR=y +BR2_TARGET_ROOTFS_TAR_NONE=y +# BR2_TARGET_ROOTFS_TAR_GZIP is not set +# BR2_TARGET_ROOTFS_TAR_BZIP2 is not set +# BR2_TARGET_ROOTFS_TAR_LZ4 is not set +# BR2_TARGET_ROOTFS_TAR_LZMA is not set +# BR2_TARGET_ROOTFS_TAR_LZO is not set +# BR2_TARGET_ROOTFS_TAR_XZ is not set +# BR2_TARGET_ROOTFS_TAR_ZSTD is not set +BR2_TARGET_ROOTFS_TAR_OPTIONS="" +# BR2_TARGET_ROOTFS_UBI is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_AFBOOT_STM32 is not set +# BR2_TARGET_AT91BOOTSTRAP3 is not set +# BR2_TARGET_ARM_TRUSTED_FIRMWARE is not set +# BR2_TARGET_BAREBOX is not set +BR2_TARGET_GRUB2_ARCH_SUPPORTS=y +# BR2_TARGET_GRUB2 is not set +# BR2_TARGET_MXS_BOOTLETS is not set +# BR2_TARGET_OPTEE_OS is not set +# BR2_TARGET_S500_BOOTLOADER is not set +BR2_PACKAGE_SHIM_ARCH_SUPPORTS=y +# BR2_TARGET_SHIM is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +# BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY is not set +# BR2_TARGET_UBOOT_LATEST_VERSION is not set +# BR2_TARGET_UBOOT_CUSTOM_VERSION is not set +# BR2_TARGET_UBOOT_CUSTOM_TARBALL is not set +BR2_TARGET_UBOOT_CUSTOM_GIT=y +# BR2_TARGET_UBOOT_CUSTOM_HG is not set +# BR2_TARGET_UBOOT_CUSTOM_SVN is not set +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/rockchip-linux/u-boot.git" +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="2687dce2617032930f2c43fef349bdea694c6f68" +BR2_TARGET_UBOOT_VERSION="2687dce2617032930f2c43fef349bdea694c6f68" +BR2_TARGET_UBOOT_PATCH="../ext_tree/patches/uboot.patch" +# BR2_TARGET_UBOOT_USE_DEFCONFIG is not set +BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG=y +BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE="../ext_tree/board/luckfox/config/uboot.conf" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="" +# BR2_TARGET_UBOOT_NEEDS_DTC is not set +# BR2_TARGET_UBOOT_NEEDS_PYTHON3 is not set +# BR2_TARGET_UBOOT_NEEDS_PYLIBFDT is not set +# BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS is not set +# BR2_TARGET_UBOOT_NEEDS_OPENSSL is not set +# BR2_TARGET_UBOOT_NEEDS_LZOP is not set +# BR2_TARGET_UBOOT_NEEDS_GNUTLS is not set +# BR2_TARGET_UBOOT_NEEDS_UTIL_LINUX is not set +# BR2_TARGET_UBOOT_NEEDS_XXD is not set +# BR2_TARGET_UBOOT_NEEDS_TI_K3_DM is not set +# BR2_TARGET_UBOOT_NEEDS_ROCKCHIP_RKBIN is not set + +# +# U-Boot binary format +# +# BR2_TARGET_UBOOT_FORMAT_AIS is not set +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +# BR2_TARGET_UBOOT_FORMAT_DTB is not set +# BR2_TARGET_UBOOT_FORMAT_DTB_BIN is not set +# BR2_TARGET_UBOOT_FORMAT_NAND_BIN is not set +# BR2_TARGET_UBOOT_FORMAT_ELF is not set +# BR2_TARGET_UBOOT_FORMAT_REMAKE_ELF is not set +# BR2_TARGET_UBOOT_FORMAT_IMG is not set +# BR2_TARGET_UBOOT_FORMAT_DTB_IMG is not set +# BR2_TARGET_UBOOT_FORMAT_IMX is not set +# BR2_TARGET_UBOOT_FORMAT_DTB_IMX is not set +# BR2_TARGET_UBOOT_FORMAT_ITB is not set +# BR2_TARGET_UBOOT_FORMAT_KWB is not set +# BR2_TARGET_UBOOT_FORMAT_NAND is not set +# BR2_TARGET_UBOOT_FORMAT_SB is not set +# BR2_TARGET_UBOOT_FORMAT_SD is not set +# BR2_TARGET_UBOOT_FORMAT_STM32 is not set +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="uboot.img" +# BR2_TARGET_UBOOT_SPL is not set +BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="" +BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="" + +# +# xilinx-embeddedsw needs a bare metal toolchain for tuple microblazeel-xilinx-elf +# + +# +# Host utilities +# +# BR2_PACKAGE_HOST_ABOOTIMG is not set +# BR2_PACKAGE_HOST_AESPIPE is not set +# BR2_PACKAGE_HOST_AGENT_PROXY is not set +# BR2_PACKAGE_HOST_AMLOGIC_BOOT_FIP is not set +# BR2_PACKAGE_HOST_ANDROID_TOOLS is not set +BR2_PACKAGE_HOST_ARM_GNU_TOOLCHAIN_SUPPORTS=y +# BR2_PACKAGE_HOST_ASN1C is not set +# BR2_PACKAGE_HOST_BABELTRACE2 is not set +# BR2_PACKAGE_HOST_BMAP_TOOLS is not set +# BR2_PACKAGE_HOST_BOOTGEN is not set +# BR2_PACKAGE_HOST_BTRFS_PROGS is not set +# BR2_PACKAGE_HOST_CBOOTIMAGE is not set +# BR2_PACKAGE_HOST_CHECKPOLICY is not set +# BR2_PACKAGE_HOST_CHECKSEC is not set +# BR2_PACKAGE_HOST_CMAKE is not set +BR2_HOST_CMAKE_AT_LEAST="3.18" +# BR2_PACKAGE_HOST_COMPOSER is not set +# BR2_PACKAGE_HOST_CRAMFS is not set +# BR2_PACKAGE_HOST_CRUDINI is not set +# BR2_PACKAGE_HOST_CRYPTSETUP is not set +# BR2_PACKAGE_HOST_DBUS_PYTHON is not set +# BR2_PACKAGE_HOST_DELVE is not set +# BR2_PACKAGE_HOST_DEPOT_TOOLS is not set +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_DOXYGEN is not set +BR2_PACKAGE_HOST_DTC=y +# BR2_PACKAGE_HOST_E2FSPROGS is not set +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_ENVIRONMENT_SETUP is not set +# BR2_PACKAGE_HOST_EROFS_UTILS is not set +# BR2_PACKAGE_HOST_EXFATPROGS is not set +# BR2_PACKAGE_HOST_F2FS_TOOLS is not set +# BR2_PACKAGE_HOST_FAKETIME is not set +# BR2_PACKAGE_HOST_FATCAT is not set +# BR2_PACKAGE_HOST_FIRMWARE_UTILS is not set +BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_FLUTTER_SDK_BIN is not set +# BR2_PACKAGE_HOST_FWUP is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_GNUPG is not set +# BR2_PACKAGE_HOST_GNUPG2 is not set +BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS=y +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_HOST_CGO_LINKING_SUPPORTS=y +# BR2_PACKAGE_HOST_GO is not set +BR2_PACKAGE_PROVIDES_HOST_GO="host-go-bin" +BR2_PACKAGE_HOST_GO_BIN_HOST_ARCH="amd64" +BR2_PACKAGE_HOST_GO_BIN_HOST_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE1_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE3_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_GPTFDISK is not set +# BR2_PACKAGE_HOST_IMAGEMAGICK is not set +# BR2_PACKAGE_HOST_IMX_MKIMAGE is not set +# BR2_PACKAGE_HOST_IMX_USB_LOADER is not set +# BR2_PACKAGE_HOST_JQ is not set +# BR2_PACKAGE_HOST_JSMIN is not set +BR2_PACKAGE_HOST_KMOD=y +# BR2_PACKAGE_HOST_KMOD_GZ is not set +# BR2_PACKAGE_HOST_KMOD_ZSTD is not set +# BR2_PACKAGE_HOST_KMOD_XZ is not set +# BR2_PACKAGE_HOST_LIBP11 is not set +# BR2_PACKAGE_HOST_LLD is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_LTTNG_BABELTRACE is not set +# BR2_PACKAGE_HOST_LZMA_ALONE is not set +# BR2_PACKAGE_HOST_MENDER_ARTIFACT is not set +# BR2_PACKAGE_HOST_MESON_TOOLS is not set +# BR2_PACKAGE_HOST_MFGTOOLS is not set +# BR2_PACKAGE_HOST_MICROCHIP_HSS_PAYLOAD_GENERATOR is not set +# BR2_PACKAGE_HOST_MINISIGN is not set +BR2_PACKAGE_HOST_MKPASSWD=y +# BR2_PACKAGE_HOST_MOBY_BUILDKIT is not set +# BR2_PACKAGE_HOST_MOSQUITTO is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_MXSLDR is not set +BR2_PACKAGE_HOST_NODEJS_BIN_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_NODEJS is not set +BR2_PACKAGE_PROVIDES_HOST_NODEJS="host-nodejs-bin" +# BR2_PACKAGE_HOST_ODB is not set +# BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_OPKG_UTILS is not set +# BR2_PACKAGE_HOST_PAHOLE is not set +# BR2_PACKAGE_HOST_PARTED is not set +BR2_PACKAGE_HOST_PATCHELF=y +# BR2_PACKAGE_HOST_PIGZ is not set +BR2_PACKAGE_HOST_PKGCONF=y +# BR2_PACKAGE_HOST_PRU_SOFTWARE_SUPPORT is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_PYTHON_CYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_GREENLET is not set +# BR2_PACKAGE_HOST_PYTHON_INIPARSE is not set +# BR2_PACKAGE_HOST_PYTHON_LXML is not set +# BR2_PACKAGE_HOST_PYTHON_PYYAML is not set +# BR2_PACKAGE_HOST_PYTHON_SIX is not set +# BR2_PACKAGE_HOST_PYTHON_USWID is not set +# BR2_PACKAGE_HOST_PYTHON_XLRD is not set +# BR2_PACKAGE_HOST_PYTHON3 is not set +BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_QEMU is not set +# BR2_PACKAGE_HOST_QORIQ_RCW is not set +# BR2_PACKAGE_HOST_RASPBERRYPI_USBBOOT is not set +# BR2_PACKAGE_HOST_RAUC is not set +# BR2_PACKAGE_HOST_RISCV_ISA_SIM is not set +# BR2_PACKAGE_HOST_RUNC is not set +BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_TIER2_HOST_TOOLS_PLATFORMS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_ARCH="armv7" +BR2_PACKAGE_HOST_RUSTC_ABI="eabihf" +BR2_PACKAGE_HOST_RUSTC=y +# BR2_PACKAGE_HOST_RUST is not set +BR2_PACKAGE_HOST_RUST_BIN=y +BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SDBUS_CPP is not set +# BR2_PACKAGE_HOST_SDBUSPLUS is not set +# BR2_PACKAGE_HOST_SENTRY_CLI is not set +# BR2_PACKAGE_HOST_SKOPEO is not set +# BR2_PACKAGE_HOST_SLOCI_IMAGE is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SUNXI_TOOLS is not set +# BR2_PACKAGE_HOST_SWIG is not set +# BR2_PACKAGE_HOST_SWTPM is not set +# BR2_PACKAGE_HOST_SWUGENERATOR is not set +# BR2_PACKAGE_HOST_TEGRARCM is not set +BR2_PACKAGE_HOST_TI_CGT_PRU_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_TI_CGT_PRU is not set +# BR2_PACKAGE_HOST_TIPIDEE is not set +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/luckfox-pico/common/uboot-env.txt" +BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="0x40000" +# BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_REDUNDANT is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT is not set +# BR2_PACKAGE_HOST_UTIL_LINUX is not set +# BR2_PACKAGE_HOST_UTP_COM is not set +# BR2_PACKAGE_HOST_UUU is not set +# BR2_PACKAGE_HOST_VBOOT_UTILS is not set +# BR2_PACKAGE_HOST_XORRISO is not set +# BR2_PACKAGE_HOST_ZIP is not set +# BR2_PACKAGE_HOST_ZSTD is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2025.02 +# +# BR2_GDB_VERSION_13 is not set +# BR2_nios2 is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_NIOS2_GLIBC_BLEEDING_EDGE is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_NIOS2_GLIBC_STABLE is not set +# BR2_PACKAGE_DIRECTFB is not set +# BR2_PACKAGE_SDL2_DIRECTFB is not set +# BR2_PACKAGE_SDL_DIRECTFB is not set +# BR2_PACKAGE_QT5BASE_DIRECTFB is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DIRECTFB is not set +# BR2_PACKAGE_LITE is not set +# BR2_PACKAGE_LINUX_FUSION is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_MONGODB is not set +# BR2_PACKAGE_PYTHON_M2CRYPTO is not set +# BR2_KERNEL_HEADERS_4_19 is not set +# BR2_KERNEL_HEADERS_6_11 is not set +# BR2_PACKAGE_GIBLIB is not set +# BR2_PACKAGE_FCONFIG is not set +# BR2_PACKAGE_LIBHID is not set +# BR2_PACKAGE_QUAGGA is not set + +# +# Legacy options removed in 2024.11 +# +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_PROCPS_NS_ORIGINAL_TOP is not set +# BR2_PACKAGE_QEMU_TARGET_NIOS2 is not set +# BR2_PACKAGE_POPPERJS is not set +# BR2_KERNEL_HEADERS_6_10 is not set +BR2_PACKAGE_IPMITOOL_PEN_REG_URI="" +# BR2_PACKAGE_ERLANG_P1_YAML is not set +# BR2_PACKAGE_ERLANG_P1_XMPP is not set +# BR2_PACKAGE_ERLANG_P1_XML is not set +# BR2_PACKAGE_ERLANG_P1_STUN is not set +# BR2_PACKAGE_FBV_GIF is not set +# BR2_BINUTILS_VERSION_2_40_X is not set + +# +# Legacy options removed in 2024.08 +# +# BR2_PACKAGE_MIDORI is not set +# BR2_PACKAGE_FROTZ is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FLUTTER_DYNAMIC_LAYOUTS_EXAMPLE is not set +# BR2_KERNEL_HEADERS_6_9 is not set +# BR2_x86_knightslanding is not set +# BR2_x86_knightsmill is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_CAIRO_SVG is not set +# BR2_PACKAGE_CAIRO_SCRIPT is not set +# BR2_PACKAGE_CAIRO_PS is not set +# BR2_PACKAGE_CAIRO_PDF is not set +# BR2_PACKAGE_CAIRO_XML is not set +# BR2_GDB_VERSION_12 is not set +# BR2_TARGET_BEAGLEV_DDRINIT is not set +# BR2_TARGET_BEAGLEV_SECONDBOOT is not set +# BR2_PACKAGE_ONEVPL_INTEL_GPU is not set +# BR2_PACKAGE_CGIC is not set +# BR2_PACKAGE_BEECRYPT is not set +# BR2_PACKAGE_VERSAL_FIRMWARE is not set +# BR2_KERNEL_HEADERS_6_8 is not set +# BR2_TARGET_AT91BOOTSTRAP is not set +# BR2_TARGET_AT91DATAFLASHBOOT is not set +# BR2_PACKAGE_ON2_8170_MODULES is not set +# BR2_PACKAGE_ON2_8170_LIBS is not set +# BR2_GCC_VERSION_11_X is not set +# BR2_BINFMT_FLAT_SHARED is not set +# BR2_PACKAGE_OMXPLAYER is not set +# BR2_KERNEL_HEADERS_6_7 is not set +# BR2_TARGET_TI_K3_IMAGE_GEN is not set +# BR2_PACKAGE_FLUTTER_GALLERY is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64 is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM is not set +# BR2_BINUTILS_VERSION_2_39_X is not set + +# +# Legacy options removed in 2024.02 +# +# BR2_PACKAGE_MYSQL is not set +# BR2_PACKAGE_ORACLE_MYSQL is not set +# BR2_PACKAGE_STRONGSWAN_SCEP is not set +# BR2_PACKAGE_SHADOW_UTMPX is not set +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_DAVINCI_BOOTCOUNT is not set +# BR2_PACKAGE_PYTHON_CROSSBAR is not set +# BR2_PACKAGE_PYTHON_PYGAME is not set +# BR2_KERNEL_HEADERS_4_14 is not set +# BR2_PACKAGE_LIBCAMERA_PIPELINE_RASPBERRYPI is not set +# BR2_GDB_VERSION_11 is not set +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_GMPC is not set +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_ONEVPL is not set +# BR2_KERNEL_HEADERS_6_5 is not set +BR2_PACKAGE_WATCHDOGD_GENERIC_POLL=0 +BR2_PACKAGE_WATCHDOGD_LOADAVG_POLL=0 +BR2_PACKAGE_WATCHDOGD_FILENR_POLL=0 +BR2_PACKAGE_WATCHDOGD_MEMINFO_POLL=0 + +# +# Legacy options removed in 2023.11 +# +# BR2_PACKAGE_PYTHON_PYXB is not set +# BR2_PACKAGE_OPENJDK_VERSION_11 is not set +# BR2_KERNEL_HEADERS_6_4 is not set +# BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS is not set +# BR2_GDB_VERSION_10 is not set + +# +# Legacy options removed in 2023.08 +# +# BR2_TARGET_LPC32XXCDL is not set +# BR2_BINUTILS_VERSION_2_38_X is not set +# BR2_GCC_VERSION_10_X is not set +# BR2_KERNEL_HEADERS_6_3 is not set +# BR2_PACKAGE_TOVID is not set +# BR2_PACKAGE_LIBASPLIB is not set +# BR2_PACKAGE_OCF_LINUX is not set +# BR2_BINUTILS_VERSION_2_37_X is not set + +# +# Legacy options removed in 2023.05 +# +# BR2_KERNEL_HEADERS_6_2 is not set +# BR2_PACKAGE_ATK is not set +# BR2_PACKAGE_AT_SPI2_ATK is not set +# BR2_PACKAGE_OPTEE_BENCHMARK is not set +# BR2_PACAKGE_OPENFPGALOADER_CMSIS is not set + +# +# Legacy options removed in 2023.02 +# +# BR2_PACKAGE_PUGIXML_HEADER_ONLY is not set +# BR2_PACKAGE_UCCP420WLAN is not set +# BR2_PACKAGE_IMX_GPU_G2D_EXAMPLES is not set +# BR2_KERNEL_HEADERS_6_0 is not set +# BR2_KERNEL_HEADERS_4_9 is not set +# BR2_PACKAGE_DOCKER_PROXY is not set +# BR2_PACKAGE_PYTHON_BUNCH is not set +# BR2_TARGET_GUMMIBOOT is not set +# BR2_PACKAGE_IPUTILS_NINFOD is not set +# BR2_PACKAGE_IPUTILS_RARPD is not set +# BR2_PACKAGE_IPUTILS_RDISC is not set +# BR2_PACKAGE_IPUTILS_RDISC_SERVER is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_XINGMUX is not set +# BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOSCALE is not set +# BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOCONVERT is not set +# BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_X11 is not set +# BR2_PACKAGE_XDRIVER_XF86_VIDEO_IMX_VIV is not set +BR2_PACKAGE_QEMU_CUSTOM_TARGETS="" +# BR2_PACKAGE_XDRIVER_XF86_INPUT_KEYBOARD is not set +# BR2_TARGET_SUN20I_D1_SPL is not set +# BR2_PACKAGE_PYTHON_M2R is not set +# BR2_PACKAGE_MESA3D_XVMC is not set +# BR2_KERNEL_HEADERS_5_19 is not set +# BR2_PACKAGE_XDRIVER_XF86_VIDEO_TGA is not set +# BR2_PACKAGE_XDRIVER_XF86_VIDEO_GLINT is not set +# BR2_PACKAGE_USBREDIR_SERVER is not set + +# +# Legacy options removed in 2022.11 +# +# BR2_BINUTILS_VERSION_2_36_X is not set +# BR2_PACKAGE_RABBITMQ_SERVER is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_RC5 is not set +# BR2_PACKAGE_LIBDCADEC is not set +# BR2_KERNEL_HEADERS_5_17 is not set +# BR2_iwmmxt is not set +# BR2_PACKAGE_UHD_N230 is not set +# BR2_PACKAGE_UHD_RFNOC is not set +# BR2_PACKAGE_GPSD_OLDSTYLE is not set +# BR2_GDB_VERSION_9_2 is not set + +# +# Legacy options removed in 2022.08 +# +# BR2_ECLIPSE_REGISTER is not set +# BR2_csky is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_I915 is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_I965 is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_NOUVEAU is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_RADEON is not set +# BR2_GCC_VERSION_9_X is not set +# BR2_PACKAGE_PHP_EXT_WDDX is not set +# BR2_nds32 is not set +# BR2_PACKAGE_RTL8723BS is not set + +# +# Legacy options removed in 2022.05 +# +# BR2_PACKAGE_KTAP is not set +# BR2_KERNEL_HEADERS_5_16 is not set +# BR2_KERNEL_HEADERS_4_4 is not set +# BR2_BINUTILS_VERSION_2_32_X is not set +# BR2_sh2a is not set +# BR2_BINUTILS_VERSION_2_35_X is not set +# BR2_PACKAGE_BOOST_LAYOUT_TAGGED is not set +# BR2_PACKAGE_BOOST_LAYOUT_VERSIONED is not set + +# +# Legacy options removed in 2022.02 +# +BR2_TARGET_ROOTFS_OCI_ENTRYPOINT_ARGS="" +# BR2_PACKAGE_LIBCURL_LIBNSS is not set +# BR2_PACKAGE_WESTON_DEFAULT_FBDEV is not set +# BR2_PACKAGE_WESTON_FBDEV is not set +# BR2_PACKAGE_PYTHON_PYCLI is not set +# BR2_PACKAGE_LINUX_TOOLS_BPFTOOL is not set +# BR2_TARGET_UBOOT_NEEDS_PYTHON2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBMMS is not set +# BR2_PACKAGE_PYTHON_FUNCTOOLS32 is not set +# BR2_PACKAGE_PYTHON_ENUM34 is not set +# BR2_PACKAGE_PYTHON_ENUM is not set +# BR2_PACKAGE_PYTHON_DIALOG is not set +# BR2_PACKAGE_PYTHON_YIELDFROM is not set +# BR2_PACKAGE_PYTHON_TYPING is not set +# BR2_PACKAGE_PYTHON_SUBPROCESS32 is not set +# BR2_PACKAGE_PYTHON_SINGLEDISPATCH is not set +# BR2_PACKAGE_PYTHON_PYRO is not set +# BR2_PACKAGE_PYTHON_PYPCAP is not set +# BR2_PACKAGE_PYTHON_PATHLIB2 is not set +# BR2_PACKAGE_PYTHON_PAM is not set +# BR2_PACKAGE_PYTHON_NFC is not set +# BR2_PACKAGE_PYTHON_MAD is not set +# BR2_PACKAGE_PYTHON_IPADDRESS is not set +# BR2_PACKAGE_PYTHON_IPADDR is not set +# BR2_PACKAGE_PYTHON_ID3 is not set +# BR2_PACKAGE_PYTHON_FUTURES is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_ABC is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_TARGET_UBOOT_ZYNQ_IMAGE is not set +# BR2_PACKAGE_RPI_BT_FIRMWARE is not set +# BR2_PACKAGE_RPI_WIFI_FIRMWARE is not set +# BR2_PACKAGE_HOST_GDB_PYTHON is not set +# BR2_PACKAGE_GSTREAMER1_MM is not set +# BR2_KERNEL_HEADERS_5_14 is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE is not set +# BR2_PACKAGE_CIVETWEB_WITH_LUA is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_DRIVER is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_R6P2 is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_R8P1 is not set +# BR2_PACKAGE_QT5WEBKIT_EXAMPLES is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_GLIBC_BLEEDING_EDGE is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_MUSL_BLEEDING_EDGE is not set +# BR2_PACKAGE_IPUTILS_TFTPD is not set +# BR2_PACKAGE_IPUTILS_TRACEROUTE6 is not set +# BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MPD_UPNP is not set + +# +# Legacy options removed in 2021.11 +# +# BR2_OPENJDK_VERSION_LTS is not set +# BR2_OPENJDK_VERSION_LATEST is not set +# BR2_PACKAGE_MPD_TIDAL is not set +# BR2_PACKAGE_MROUTED_RSRR is not set +# BR2_BINUTILS_VERSION_CSKY is not set +# BR2_GCC_VERSION_CSKY is not set +# BR2_PACKAGE_CANFESTIVAL is not set +# BR2_PACKAGE_NMAP_NDIFF is not set +# BR2_GDB_VERSION_8_3 is not set +# BR2_PACKAGE_PYTHON_MELD3 is not set +# BR2_PACKAGE_STRONGSWAN_EAP is not set +# BR2_PACKAGE_GNURADIO_PAGER is not set +# BR2_KERNEL_HEADERS_5_11 is not set +# BR2_KERNEL_HEADERS_5_12 is not set +# BR2_KERNEL_HEADERS_5_13 is not set + +# +# Legacy options removed in 2021.08 +# +BR2_TARGET_GRUB2_BUILTIN_MODULES="" +BR2_TARGET_GRUB2_BUILTIN_CONFIG="" +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_PHP_EXT_MCRYPT is not set +# BR2_BINUTILS_VERSION_2_34_X is not set +# BR2_PACKAGE_LIBSOIL is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_SPIDERMONKEY is not set +# BR2_PACKAGE_KODI_LIBVA is not set +# BR2_PACKAGE_PYTHON_COHERENCE is not set +# BR2_PACKAGE_PHP_EXT_XMLRPC is not set +# BR2_GCC_VERSION_8_X is not set + +# +# Legacy options removed in 2021.05 +# +# BR2_PACKAGE_UDISKS_LVM2 is not set +# BR2_PACKAGE_LVM2_APP_LIBRARY is not set +# BR2_PACKAGE_LVM2_LVMETAD is not set +# BR2_PACKAGE_MONKEY is not set +# BR2_PACKAGE_DOCKER_CONTAINERD is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_KBD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_MOUSE is not set +# BR2_PACKAGE_MESA3D_OSMESA_CLASSIC is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST is not set +# BR2_PACKAGE_KODI_SCREENSAVER_CRYSTALMORPH is not set + +# +# Legacy options removed in 2021.02 +# +# BR2_PACKAGE_MPD_AUDIOFILE is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_BINUTILS_VERSION_2_33_X is not set +# BR2_PACKAGE_LIBUPNP18 is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IMX_SDMA is not set +# BR2_GDB_VERSION_8_2 is not set +# BR2_PACKAGE_HOST_RCW is not set +# BR2_KERNEL_HEADERS_5_9 is not set +# BR2_KERNEL_HEADERS_5_8 is not set +# BR2_powerpc_601 is not set +# BR2_PACKAGE_TI_SGX_LIBGBM is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# Legacy options removed in 2020.11 +# +# BR2_PACKAGE_GPSD_FIXED_PORT_SPEED is not set +# BR2_PACKAGE_GPSD_RECONFIGURE is not set +# BR2_PACKAGE_GPSD_CONTROLSEND is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_LIBCROCO is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY is not set +# BR2_TARGET_UBOOT_BOOT_SCRIPT is not set +# BR2_TARGET_UBOOT_ENVIMAGE is not set +# BR2_PACKAGE_KISMET_CLIENT is not set +# BR2_PACKAGE_KISMET_DRONE is not set +# BR2_GCC_VERSION_7_X is not set +# BR2_PACKAGE_GST1_VALIDATE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_YADIF is not set +# BR2_PACKAGE_GQVIEW is not set +# BR2_PACKAGE_WESTON_IMX is not set +# BR2_KERNEL_HEADERS_5_7 is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX is not set +# BR2_PACKAGE_AMD_CATALYST is not set +# BR2_PACKAGE_NVIDIA_TEGRA23 is not set +# BR2_GDB_VERSION_8_1 is not set + +# +# Legacy options removed in 2020.08 +# +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 is not set +# BR2_KERNEL_HEADERS_5_6 is not set +# BR2_KERNEL_HEADERS_5_5 is not set +# BR2_BINUTILS_VERSION_2_31_X is not set +# BR2_PACKAGE_KODI_PERIPHERAL_STEAMCONTROLLER is not set + +# +# Legacy options removed in 2020.05 +# +# BR2_PACKAGE_WIRINGPI is not set +# BR2_PACKAGE_PYTHON_PYCRYPTO is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_COLLECTD_LVM is not set +# BR2_PACKAGE_PYTHON_PYASN is not set +# BR2_PACKAGE_PYTHON_PYASN_MODULES is not set +# BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA6174 is not set +# BR2_PACKAGE_QT5CANVAS3D is not set +# BR2_PACKAGE_KODI_LIBTHEORA is not set +# BR2_PACKAGE_CEGUI06 is not set +# BR2_GCC_VERSION_5_X is not set + +# +# Legacy options removed in 2020.02 +# +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_CLASSPATH is not set +# BR2_PACKAGE_QT5_VERSION_5_6 is not set +# BR2_PACKAGE_CURL is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS is not set +# BR2_PACKAGE_FREERDP_GSTREAMER is not set +# BR2_PACKAGE_OPENCV3_WITH_GSTREAMER is not set +# BR2_PACKAGE_OPENCV_WITH_GSTREAMER is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_GCC_VERSION_OR1K is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_FIS is not set +BR2_PACKAGE_REFPOLICY_POLICY_VERSION="" +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_WIREGUARD is not set +# BR2_PACKAGE_PERL_NET_PING is not set +# BR2_PACKAGE_PERL_MIME_BASE64 is not set +# BR2_PACKAGE_PERL_DIGEST_MD5 is not set +# BR2_PACKAGE_ERLANG_P1_ICONV is not set +# BR2_KERNEL_HEADERS_5_3 is not set +# BR2_PACKAGE_PYTHON_SCAPY3K is not set +# BR2_BINUTILS_VERSION_2_30_X is not set +# BR2_PACKAGE_RPI_USERLAND_START_VCFILED is not set +# BR2_PACKAGE_TI_SGX_KM_AM335X is not set +# BR2_PACKAGE_TI_SGX_KM_AM437X is not set +# BR2_PACKAGE_TI_SGX_KM_AM4430 is not set +# BR2_PACKAGE_TI_SGX_KM_AM5430 is not set + +# +# Legacy options removed in 2019.11 +# +# BR2_PACKAGE_OPENVMTOOLS_PROCPS is not set +# BR2_PACKAGE_ALLJOYN is not set +# BR2_PACKAGE_ALLJOYN_BASE is not set +# BR2_PACKAGE_ALLJOYN_BASE_CONTROLPANEL is not set +# BR2_PACKAGE_ALLJOYN_BASE_NOTIFICATION is not set +# BR2_PACKAGE_ALLJOYN_BASE_ONBOARDING is not set +# BR2_PACKAGE_ALLJOYN_TCL_BASE is not set +# BR2_PACKAGE_ALLJOYN_TCL is not set +BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS="" +# BR2_PACKAGE_PYTHON_PYSNMP_APPS is not set +# BR2_KERNEL_HEADERS_5_2 is not set +# BR2_TARGET_RISCV_PK is not set +# BR2_PACKAGE_SQLITE_STAT3 is not set +# BR2_KERNEL_HEADERS_5_1 is not set +# BR2_PACKAGE_DEVMEM2 is not set +# BR2_PACKAGE_USTR is not set +# BR2_PACKAGE_KODI_SCREENSAVER_PLANESTATE is not set +# BR2_PACKAGE_KODI_VISUALISATION_WAVEFORHUE is not set +# BR2_PACKAGE_KODI_AUDIODECODER_OPUS is not set +# BR2_PACKAGE_MESA3D_OSMESA is not set +# BR2_PACKAGE_HOSTAPD_DRIVER_RTW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD is not set + +# +# Legacy options removed in 2019.08 +# +# BR2_TARGET_TS4800_MBRBOOT is not set +# BR2_PACKAGE_LIBAMCODEC is not set +# BR2_PACKAGE_ODROID_SCRIPTS is not set +# BR2_PACKAGE_ODROID_MALI is not set +# BR2_PACKAGE_KODI_PLATFORM_AML is not set +# BR2_GCC_VERSION_6_X is not set +# BR2_GCC_VERSION_4_9_X is not set +# BR2_GDB_VERSION_7_12 is not set +# BR2_PACKAGE_XAPP_MKFONTDIR is not set +# BR2_GDB_VERSION_8_0 is not set +# BR2_KERNEL_HEADERS_4_20 is not set +# BR2_KERNEL_HEADERS_5_0 is not set + +# +# Legacy options removed in 2019.05 +# +# BR2_CSKY_DSP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COMPOSITOR is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENCV is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_STEREO is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VCD is not set +# BR2_PACKAGE_LUNIT is not set +# BR2_PACKAGE_FFMPEG_FFSERVER is not set +# BR2_PACKAGE_LIBUMP is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_BINUTILS_VERSION_2_29_X is not set +# BR2_BINUTILS_VERSION_2_28_X is not set +# BR2_PACKAGE_GST_PLUGINS_BAD_PLUGIN_APEXSINK is not set + +# +# Legacy options removed in 2019.02 +# +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QTUIO is not set +# BR2_PACKAGE_PINENTRY_QT4 is not set +# BR2_PACKAGE_POPPLER_QT is not set +# BR2_PACKAGE_OPENCV3_WITH_QT is not set +# BR2_PACKAGE_OPENCV_WITH_QT is not set +# BR2_PACKAGE_AMD_CATALYST_CCCLE is not set +# BR2_PACKAGE_SDL_QTOPIA is not set +# BR2_PACKAGE_PYTHON_PYQT is not set +# BR2_PACKAGE_LUACRYPTO is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_BOOST_SIGNALS is not set +# BR2_PACKAGE_FFTW_PRECISION_SINGLE is not set +# BR2_PACKAGE_FFTW_PRECISION_DOUBLE is not set +# BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE is not set +# BR2_PACKAGE_LUA_5_2 is not set +# BR2_TARGET_GENERIC_PASSWD_MD5 is not set + +# +# Legacy options removed in 2018.11 +# +# BR2_TARGET_XLOADER is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_GST_DSP is not set +# BR2_PACKAGE_BOOTUTILS is not set +# BR2_PACKAGE_EXPEDITE is not set +# BR2_PACKAGE_MESA3D_OPENGL_TEXTURE_FLOAT is not set +# BR2_KERNEL_HEADERS_4_10 is not set +# BR2_KERNEL_HEADERS_4_11 is not set +# BR2_KERNEL_HEADERS_4_12 is not set +# BR2_KERNEL_HEADERS_4_13 is not set +# BR2_KERNEL_HEADERS_4_15 is not set +# BR2_KERNEL_HEADERS_4_17 is not set +# BR2_PACKAGE_LIBNFTNL_XML is not set +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_4_1 is not set +# BR2_KERNEL_HEADERS_4_16 is not set +# BR2_KERNEL_HEADERS_4_18 is not set + +# +# Legacy options removed in 2018.08 +# +# BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT is not set +# BR2_PACKAGE_XPROTO_APPLEWMPROTO is not set +# BR2_PACKAGE_XPROTO_BIGREQSPROTO is not set +# BR2_PACKAGE_XPROTO_COMPOSITEPROTO is not set +# BR2_PACKAGE_XPROTO_DAMAGEPROTO is not set +# BR2_PACKAGE_XPROTO_DMXPROTO is not set +# BR2_PACKAGE_XPROTO_DRI2PROTO is not set +# BR2_PACKAGE_XPROTO_DRI3PROTO is not set +# BR2_PACKAGE_XPROTO_FIXESPROTO is not set +# BR2_PACKAGE_XPROTO_FONTCACHEPROTO is not set +# BR2_PACKAGE_XPROTO_FONTSPROTO is not set +# BR2_PACKAGE_XPROTO_GLPROTO is not set +# BR2_PACKAGE_XPROTO_INPUTPROTO is not set +# BR2_PACKAGE_XPROTO_KBPROTO is not set +# BR2_PACKAGE_XPROTO_PRESENTPROTO is not set +# BR2_PACKAGE_XPROTO_RANDRPROTO is not set +# BR2_PACKAGE_XPROTO_RECORDPROTO is not set +# BR2_PACKAGE_XPROTO_RENDERPROTO is not set +# BR2_PACKAGE_XPROTO_RESOURCEPROTO is not set +# BR2_PACKAGE_XPROTO_SCRNSAVERPROTO is not set +# BR2_PACKAGE_XPROTO_VIDEOPROTO is not set +# BR2_PACKAGE_XPROTO_WINDOWSWMPROTO is not set +# BR2_PACKAGE_XPROTO_XCMISCPROTO is not set +# BR2_PACKAGE_XPROTO_XEXTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86BIGFONTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DGAPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DRIPROTO is not set +# BR2_PACKAGE_XPROTO_XF86VIDMODEPROTO is not set +# BR2_PACKAGE_XPROTO_XINERAMAPROTO is not set +# BR2_PACKAGE_XPROTO_XPROTO is not set +# BR2_PACKAGE_XPROTO_XPROXYMANAGEMENTPROTOCOL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_OPENGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLES2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_EGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_X11 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_WAYLAND is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_DISPMANX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_LAME is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPG123 is not set +# BR2_GDB_VERSION_7_11 is not set +# BR2_GDB_VERSION_7_10 is not set + +# +# Legacy options removed in 2018.05 +# +# BR2_PACKAGE_MEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF is not set +# BR2_PACKAGE_MEDIAART_BACKEND_QT is not set +# BR2_PACKAGE_TI_SGX_AM335X is not set +# BR2_PACKAGE_TI_SGX_AM437X is not set +# BR2_PACKAGE_TI_SGX_AM4430 is not set +# BR2_PACKAGE_TI_SGX_AM5430 is not set +# BR2_PACKAGE_JANUS_AUDIO_BRIDGE is not set +# BR2_PACKAGE_JANUS_ECHO_TEST is not set +# BR2_PACKAGE_JANUS_RECORDPLAY is not set +# BR2_PACKAGE_JANUS_SIP_GATEWAY is not set +# BR2_PACKAGE_JANUS_STREAMING is not set +# BR2_PACKAGE_JANUS_TEXT_ROOM is not set +# BR2_PACKAGE_JANUS_VIDEO_CALL is not set +# BR2_PACKAGE_JANUS_VIDEO_ROOM is not set +# BR2_PACKAGE_JANUS_MQTT is not set +# BR2_PACKAGE_JANUS_RABBITMQ is not set +# BR2_PACKAGE_JANUS_REST is not set +# BR2_PACKAGE_JANUS_UNIX_SOCKETS is not set +# BR2_PACKAGE_JANUS_WEBSOCKETS is not set +# BR2_PACKAGE_IPSEC_SECCTX_DISABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_ENABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_KERNEL is not set +# BR2_PACKAGE_LIBTFDI_CPP is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLITZER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_FLICK is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG is not set +# BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST is not set +# BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_REDMOND is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET is not set +# BR2_PACKAGE_JQUERY_UI_THEME_START is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SUNNY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_VADER is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_NFC is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SAP is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS is not set +# BR2_PACKAGE_TRANSMISSION_REMOTE is not set +# BR2_PACKAGE_LIBKCAPI_APPS is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MENCODER is not set +# BR2_PACKAGE_LIBPLAYER_MPLAYER is not set +# BR2_PACKAGE_IQVLINUX is not set +# BR2_BINFMT_FLAT_SEP_DATA is not set +# BR2_bfin is not set +# BR2_PACKAGE_KODI_ADSP_BASIC is not set +# BR2_PACKAGE_KODI_ADSP_FREESURROUND is not set + +# +# Legacy options removed in 2018.02 +# +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_BINUTILS_VERSION_2_27_X is not set +# BR2_PACKAGE_EEPROG is not set +# BR2_PACKAGE_GNUPG2_GPGV2 is not set +# BR2_PACKAGE_IMX_GPU_VIV_APITRACE is not set +# BR2_PACKAGE_IMX_GPU_VIV_G2D is not set + +# +# Legacy options removed in 2017.11 +# +# BR2_PACKAGE_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RESET is not set +# BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW is not set +# BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND is not set +# BR2_PACKAGE_SEPOLGEN is not set +# BR2_PACKAGE_OPENOBEX_BLUEZ is not set +# BR2_PACKAGE_OPENOBEX_LIBUSB is not set +# BR2_PACKAGE_OPENOBEX_APPS is not set +# BR2_PACKAGE_OPENOBEX_SYSLOG is not set +# BR2_PACKAGE_OPENOBEX_DUMP is not set +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS is not set + +# +# Legacy options removed in 2017.08 +# +# BR2_TARGET_GRUB is not set +# BR2_PACKAGE_SIMICSFS is not set +# BR2_BINUTILS_VERSION_2_26_X is not set +BR2_XTENSA_OVERLAY_DIR="" +BR2_XTENSA_CUSTOM_NAME="" +# BR2_PACKAGE_HOST_MKE2IMG is not set +BR2_TARGET_ROOTFS_EXT2_BLOCKS=0 +BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0 +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD is not set +# BR2_STRIP_none is not set +# BR2_PACKAGE_BEECRYPT_CPP is not set +# BR2_PACKAGE_SPICE_CLIENT is not set +# BR2_PACKAGE_SPICE_GUI is not set +# BR2_PACKAGE_SPICE_TUNNEL is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH is not set +# BR2_PACKAGE_INPUT_TOOLS_JSCAL is not set +# BR2_PACKAGE_INPUT_TOOLS_JSTEST is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86 is not set +# BR2_GCC_VERSION_4_8_X is not set + +# +# Legacy options removed in 2017.05 +# +# BR2_PACKAGE_SUNXI_MALI_R2P4 is not set +# BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT is not set +# BR2_PACKAGE_NODEJS_MODULES_EXPRESS is not set +# BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL is not set +# BR2_PACKAGE_OPENOCD_FT2XXX is not set +# BR2_PACKAGE_KODI_RTMPDUMP is not set +# BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_BINUTILS_VERSION_2_25_X is not set +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0 +# BR2_PACKAGE_SYSTEMD_KDBUS is not set +# BR2_PACKAGE_POLARSSL is not set +# BR2_NBD_CLIENT is not set +# BR2_NBD_SERVER is not set +# BR2_PACKAGE_GMOCK is not set +# BR2_KERNEL_HEADERS_4_8 is not set +# BR2_KERNEL_HEADERS_3_18 is not set +# BR2_GLIBC_VERSION_2_22 is not set + +# +# Legacy options removed in 2017.02 +# +# BR2_PACKAGE_PERL_DB_FILE is not set +# BR2_KERNEL_HEADERS_4_7 is not set +# BR2_KERNEL_HEADERS_4_6 is not set +# BR2_KERNEL_HEADERS_4_5 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +# BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_GDB_VERSION_7_9 is not set + +# +# Legacy options removed in 2016.11 +# +# BR2_PACKAGE_PHP_SAPI_CLI_CGI is not set +# BR2_PACKAGE_PHP_SAPI_CLI_FPM is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_WEBKITGTK24 is not set +# BR2_PACKAGE_TORSMO is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_KERNEL_HEADERS_4_3 is not set +# BR2_KERNEL_HEADERS_4_2 is not set +# BR2_PACKAGE_KODI_ADDON_XVDR is not set +# BR2_PACKAGE_IPKG is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_BINUTILS_VERSION_2_24_X is not set +# BR2_PACKAGE_WESTON_RPI is not set +# BR2_LINUX_KERNEL_TOOL_CPUPOWER is not set +# BR2_LINUX_KERNEL_TOOL_PERF is not set +# BR2_LINUX_KERNEL_TOOL_SELFTESTS is not set +# BR2_GCC_VERSION_4_8_ARC is not set +# BR2_KERNEL_HEADERS_4_0 is not set +# BR2_KERNEL_HEADERS_3_19 is not set +# BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS is not set +# BR2_PACKAGE_ELEMENTARY is not set +# BR2_LINUX_KERNEL_CUSTOM_LOCAL is not set + +# +# Legacy options removed in 2016.08 +# +# BR2_PACKAGE_EFL_JP2K is not set +# BR2_PACKAGE_SYSTEMD_COMPAT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER is not set +# BR2_PACKAGE_LIBFSLVPUWRAP is not set +# BR2_PACKAGE_LIBFSLPARSER is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT is not set +# BR2_PTHREADS_OLD is not set +# BR2_BINUTILS_VERSION_2_23_X is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_GDB_VERSION_7_8 is not set + +# +# Legacy options removed in 2016.05 +# +# BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL is not set +# BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123 is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2 is not set +# BR2_x86_i386 is not set +# BR2_PACKAGE_QT5QUICK1 is not set +BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="" +# BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID is not set +# BR2_KERNEL_HEADERS_3_17 is not set +# BR2_GDB_VERSION_7_7 is not set +# BR2_PACKAGE_FOOMATIC_FILTERS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_KODI_WAVPACK is not set +# BR2_PACKAGE_KODI_RSXS is not set +# BR2_PACKAGE_KODI_GOOM is not set +# BR2_PACKAGE_SYSTEMD_ALL_EXTRAS is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_PACKAGE_SQLITE_READLINE is not set + +# +# Legacy options removed in 2016.02 +# +# BR2_PACKAGE_DOVECOT_BZIP2 is not set +# BR2_PACKAGE_DOVECOT_ZLIB is not set +# BR2_PACKAGE_E2FSPROGS_FINDFS is not set +# BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL is not set +# BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE is not set +# BR2_PACKAGE_OPENPOWERLINK_LIBPCAP is not set +# BR2_LINUX_KERNEL_SAME_AS_HEADERS is not set +# BR2_PACKAGE_CUPS_PDFTOPS is not set +# BR2_KERNEL_HEADERS_3_16 is not set +# BR2_PACKAGE_PYTHON_PYXML is not set +# BR2_ENABLE_SSP is not set +# BR2_PACKAGE_DIRECTFB_CLE266 is not set +# BR2_PACKAGE_DIRECTFB_UNICHROME is not set +# BR2_PACKAGE_LIBELEMENTARY is not set +# BR2_PACKAGE_LIBEINA is not set +# BR2_PACKAGE_LIBEET is not set +# BR2_PACKAGE_LIBEVAS is not set +# BR2_PACKAGE_LIBECORE is not set +# BR2_PACKAGE_LIBEDBUS is not set +# BR2_PACKAGE_LIBEFREET is not set +# BR2_PACKAGE_LIBEIO is not set +# BR2_PACKAGE_LIBEMBRYO is not set +# BR2_PACKAGE_LIBEDJE is not set +# BR2_PACKAGE_LIBETHUMB is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_BR2_PACKAGE_NODEJS_0_10_X is not set +# BR2_BR2_PACKAGE_NODEJS_0_12_X is not set +# BR2_BR2_PACKAGE_NODEJS_4_X is not set + +# +# Legacy options removed in 2015.11 +# +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_SCHIFRA is not set +# BR2_PACKAGE_ZXING is not set +# BR2_PACKAGE_BLACKBOX is not set +# BR2_KERNEL_HEADERS_3_0 is not set +# BR2_KERNEL_HEADERS_3_11 is not set +# BR2_KERNEL_HEADERS_3_13 is not set +# BR2_KERNEL_HEADERS_3_15 is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_SAWMAN is not set +# BR2_PACKAGE_DIVINE is not set + +# +# Legacy options removed in 2015.08 +# +# BR2_PACKAGE_KODI_PVR_ADDONS is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +# BR2_BINUTILS_VERSION_2_24 is not set +# BR2_BINUTILS_VERSION_2_25 is not set +# BR2_PACKAGE_PERF is not set +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_PACKAGE_GPU_VIV_BIN_MX6Q is not set +# BR2_TARGET_UBOOT_NETWORK is not set + +# +# External options +# + +# +# external BR tree for Luckfox Pico Max (in /opt/PureFox/ext_tree) +# + +# +# Custom packages +# +BR2_PACKAGE_APRENDERER=y +BR2_PACKAGE_APLAYER=y +BR2_PACKAGE_NAA=y +BR2_PACKAGE_ROONREADY=y +BR2_PACKAGE_LIBRESPOT=y +BR2_PACKAGE_APSCREAM=y +BR2_PACKAGE_SQUEEZELITER2=y +BR2_PACKAGE_STATUS_MONITOR=y +# BR2_PACKAGE_QOBUZ_CONNECT is not set +BR2_PACKAGE_TIDAL_CONNECT=y diff --git a/ext_tree/external.mk b/ext_tree/external.mk index 5a413acb..3042b06e 100644 --- a/ext_tree/external.mk +++ b/ext_tree/external.mk @@ -1,2 +1,12 @@ include $(sort $(wildcard $(BR2_EXTERNAL_ext_tree_PATH)/package/*/*.mk)) +# Create boot.img (zImage + DTB at offset) after kernel build for Ultra +define LINUX_CREATE_BOOT_IMG + $(Q)cd $(LINUX_DIR)/arch/arm/boot && \ + dd if=/dev/zero of=boot.img bs=1 count=0 seek=4194304 && \ + dd if=zImage of=boot.img conv=notrunc && \ + dd if=dts/rv1106_pll.dtb of=boot.img bs=1 seek=3932160 conv=notrunc && \ + echo "Created boot.img for Ultra" +endef +LINUX_POST_BUILD_HOOKS += LINUX_CREATE_BOOT_IMG + diff --git a/ext_tree/package/librespot/0001-fix-panic-on-audio-device-unavailable.patch b/ext_tree/package/librespot/0001-fix-panic-on-audio-device-unavailable.patch new file mode 100644 index 00000000..009cda72 --- /dev/null +++ b/ext_tree/package/librespot/0001-fix-panic-on-audio-device-unavailable.patch @@ -0,0 +1,77 @@ +--- a/playback/src/audio_backend/rodio.rs ++++ b/playback/src/audio_backend/rodio.rs +@@ -1,4 +1,5 @@ + use std::process::exit; ++use std::sync::atomic::{AtomicU32, Ordering}; + use std::thread; + use std::time::Duration; + +@@ -74,6 +75,7 @@ + pub struct RodioSink { + rodio_sink: rodio::Sink, + _stream: rodio::OutputStream, ++ write_errors: AtomicU32, + } + + fn list_formats(device: &cpal::Device) { +@@ -219,12 +221,21 @@ + host.id().name() + ); + +- let (sink, stream) = create_sink(&host, device, format).unwrap(); ++ let (sink, stream) = match create_sink(&host, device, format) { ++ Ok(result) => result, ++ Err(e) => { ++ error!("FATAL: Failed to create audio sink: {:?}", e); ++ error!("Audio device is unavailable or disconnected."); ++ error!("Librespot cannot continue without audio output. Exiting to prevent 100% CPU loop."); ++ std::process::exit(1); ++ } ++ }; + + debug!("Rodio sink was created"); + RodioSink { + rodio_sink: sink, + _stream: stream, ++ write_errors: AtomicU32::new(0), + } + } + +@@ -250,15 +261,37 @@ + SAMPLE_RATE, + samples_f32, + ); ++ ++ let error_count = self.write_errors.load(Ordering::Relaxed); ++ if error_count > 50 { ++ error!("FATAL: Too many consecutive write errors ({}), audio device likely disconnected. Exiting.", error_count); ++ std::process::exit(1); ++ } ++ + self.rodio_sink.append(source); + + // Chunk sizes seem to be about 256 to 3000 ish items long. + // Assuming they're on average 1628 then a half second buffer is: + // 44100 elements --> about 27 chunks ++ let mut loop_count = 0; ++ let start_len = self.rodio_sink.len(); + while self.rodio_sink.len() > 26 { + // sleep and wait for rodio to drain a bit + thread::sleep(Duration::from_millis(10)); ++ ++ loop_count += 1; ++ ++ if loop_count % 10 == 0 && self.rodio_sink.len() >= start_len { ++ self.write_errors.fetch_add(1, Ordering::Relaxed); ++ } ++ ++ if loop_count > 100 { ++ error!("FATAL: Audio sink stuck for >1s (len: {}). Device likely disconnected. Exiting.", self.rodio_sink.len()); ++ std::process::exit(1); ++ } + } ++ ++ self.write_errors.store(0, Ordering::Relaxed); + Ok(()) + } + } diff --git a/ext_tree/package/librespot/0002-fix-exit-on-write-errors.patch b/ext_tree/package/librespot/0002-fix-exit-on-write-errors.patch new file mode 100644 index 00000000..4f2f7f77 --- /dev/null +++ b/ext_tree/package/librespot/0002-fix-exit-on-write-errors.patch @@ -0,0 +1,28 @@ +--- a/playback/src/player.rs 2025-10-20 22:20:25.267497208 +0300 ++++ b/playback/src/player.rs 2025-10-20 22:20:25.267497208 +0300 +@@ -91,6 +91,7 @@ + } + + static PLAYER_COUNTER: AtomicUsize = AtomicUsize::new(0); ++static WRITE_ERROR_COUNTER: AtomicUsize = AtomicUsize::new(0); + + enum PlayerCommand { + Load { +@@ -1673,7 +1674,17 @@ + + if let Err(e) = self.sink.write(packet, &mut self.converter) { + error!("{e}"); ++ ++ let error_count = WRITE_ERROR_COUNTER.fetch_add(1, Ordering::SeqCst); ++ if error_count >= 10 { ++ error!("FATAL: Audio sink write failed {} times consecutively. Device likely disconnected. Exiting.", error_count + 1); ++ std::process::exit(1); ++ } ++ + self.handle_pause(); ++ } else { ++ // Reset counter on successful write ++ WRITE_ERROR_COUNTER.store(0, Ordering::SeqCst); + } + } + } diff --git a/ext_tree/package/librespot/0003-fix-cpal-alsa-infinite-poll-error-loop.patch b/ext_tree/package/librespot/0003-fix-cpal-alsa-infinite-poll-error-loop.patch new file mode 100644 index 00000000..7fc9c7a4 --- /dev/null +++ b/ext_tree/package/librespot/0003-fix-cpal-alsa-infinite-poll-error-loop.patch @@ -0,0 +1,58 @@ +--- a/VENDOR/cpal/src/host/alsa/mod.rs 2025-10-21 13:05:13.535082662 +0300 ++++ b/VENDOR/cpal/src/host/alsa/mod.rs 2025-10-21 13:05:58.096155195 +0300 +@@ -592,13 +592,27 @@ + boost_current_thread_priority(stream.conf.buffer_size, stream.conf.sample_rate); + + let mut ctxt = StreamWorkerContext::new(&timeout); ++ let mut consecutive_errors = 0u32; ++ const MAX_CONSECUTIVE_ERRORS: u32 = 100; ++ + loop { ++ let mut had_error = false; + let flow = + poll_descriptors_and_prepare_buffer(&rx, stream, &mut ctxt).unwrap_or_else(|err| { ++ had_error = true; ++ consecutive_errors += 1; ++ if consecutive_errors >= MAX_CONSECUTIVE_ERRORS { ++ eprintln!("FATAL: cpal ALSA input stream: {} consecutive errors, device likely disconnected. Exiting.", consecutive_errors); ++ std::process::exit(1); ++ } + error_callback(err.into()); + PollDescriptorsFlow::Continue + }); + ++ if !had_error { ++ consecutive_errors = 0; ++ } ++ + match flow { + PollDescriptorsFlow::Continue => { + continue; +@@ -645,13 +659,27 @@ + boost_current_thread_priority(stream.conf.buffer_size, stream.conf.sample_rate); + + let mut ctxt = StreamWorkerContext::new(&timeout); ++ let mut consecutive_errors = 0u32; ++ const MAX_CONSECUTIVE_ERRORS: u32 = 100; ++ + loop { ++ let mut had_error = false; + let flow = + poll_descriptors_and_prepare_buffer(&rx, stream, &mut ctxt).unwrap_or_else(|err| { ++ had_error = true; ++ consecutive_errors += 1; ++ if consecutive_errors >= MAX_CONSECUTIVE_ERRORS { ++ eprintln!("FATAL: cpal ALSA output stream: {} consecutive errors, device likely disconnected. Exiting.", consecutive_errors); ++ std::process::exit(1); ++ } + error_callback(err.into()); + PollDescriptorsFlow::Continue + }); + ++ if !had_error { ++ consecutive_errors = 0; ++ } ++ + match flow { + PollDescriptorsFlow::Continue => continue, + PollDescriptorsFlow::XRun => { diff --git a/ext_tree/package/librespot/librespot.mk b/ext_tree/package/librespot/librespot.mk index ff47604b..062811b4 100644 --- a/ext_tree/package/librespot/librespot.mk +++ b/ext_tree/package/librespot/librespot.mk @@ -15,4 +15,10 @@ LIBRESPOT_DEPENDENCIES += host-rust-bindgen LIBRESPOT_DEPENDENCIES = alsa-lib host-rust-bindgen host-pkgconf +define LIBRESPOT_FIX_CPAL_CHECKSUM + sed -i 's/"src\/host\/alsa\/mod.rs":"8e7cc24a805b4729d43e01c1f0a7d315b1cb7b80fd97e394326a3c06cbf0eea9"/"src\/host\/alsa\/mod.rs":"b88a2b1d5e49dd4fecc158e11dbc484bbd6b554a8347dfdfd65a170bd2d46a57"/g' \ + $(@D)/VENDOR/cpal/.cargo-checksum.json +endef +LIBRESPOT_POST_PATCH_HOOKS += LIBRESPOT_FIX_CPAL_CHECKSUM + $(eval $(cargo-package)) diff --git a/ext_tree/package/qobuz-connect/qobuz-connect.mk b/ext_tree/package/qobuz-connect/qobuz-connect.mk index 79968cb8..5ee7b6d9 100644 --- a/ext_tree/package/qobuz-connect/qobuz-connect.mk +++ b/ext_tree/package/qobuz-connect/qobuz-connect.mk @@ -23,7 +23,7 @@ define QOBUZ_CONNECT_BUILD_CMDS -DCMAKE_TOOLCHAIN_FILE=$(HOST_DIR)/share/buildroot/toolchainfile.cmake \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_FLAGS="-O2 -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -Wno-format" \ + -DCMAKE_C_FLAGS="-O2 -g0 -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -Wno-format" \ -DCMAKE_PREFIX_PATH=$(STAGING_DIR)/usr \ -DCIVETWEB_LIB="$(STAGING_DIR)/usr/lib/libcivetweb.a;-lz" \ -DCIVETWEB_INCLUDE_DIR=$(STAGING_DIR)/usr/include \ @@ -34,13 +34,17 @@ endef define QOBUZ_CONNECT_INSTALL_TARGET_CMDS $(INSTALL) -d $(TARGET_DIR)/opt/qobuz-connect $(INSTALL) -m 755 $(@D)/build/qobuz_connect_sample_app $(TARGET_DIR)/opt/qobuz-connect/qobuz-connect +# $(TARGET_STRIP) $(TARGET_DIR)/opt/qobuz-connect/qobuz-connect $(INSTALL) -d $(TARGET_DIR)/usr/lib $(INSTALL) -m 755 $(@D)/sdk/lib/libqobuz_connect.so.1.0.0 $(TARGET_DIR)/usr/lib/ +# $(TARGET_STRIP) $(TARGET_DIR)/usr/lib/libqobuz_connect.so.1.0.0 ln -sf libqobuz_connect.so.1.0.0 $(TARGET_DIR)/usr/lib/libqobuz_connect.so $(INSTALL) -m 755 $(@D)/third_party/libcjson/lib/libcjson.so.1.7.13 $(TARGET_DIR)/usr/lib/ +# $(TARGET_STRIP) $(TARGET_DIR)/usr/lib/libcjson.so.1.7.13 ln -sf libcjson.so.1.7.13 $(TARGET_DIR)/usr/lib/libcjson.so.1 ln -sf libcjson.so.1 $(TARGET_DIR)/usr/lib/libcjson.so $(INSTALL) -m 755 $(@D)/third_party/libuv/lib/libuv.so.1.0.0 $(TARGET_DIR)/usr/lib/ +# $(TARGET_STRIP) $(TARGET_DIR)/usr/lib/libuv.so.1.0.0 ln -sf libuv.so.1.0.0 $(TARGET_DIR)/usr/lib/libuv.so.1 ln -sf libuv.so.1 $(TARGET_DIR)/usr/lib/libuv.so endef diff --git a/ext_tree/package/tidal-connect/Config.in b/ext_tree/package/tidal-connect/Config.in new file mode 100644 index 00000000..f54ad603 --- /dev/null +++ b/ext_tree/package/tidal-connect/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_TIDAL_CONNECT + bool "tidal-connect" + help + Tidal Connect streaming service client diff --git a/ext_tree/package/tidal-connect/files/S95tidal b/ext_tree/package/tidal-connect/files/S95tidal new file mode 100755 index 00000000..6b19390d --- /dev/null +++ b/ext_tree/package/tidal-connect/files/S95tidal @@ -0,0 +1,67 @@ +#!/bin/sh + +MIXER=`sed 's/,.*//' /tmp/mixer_control_cache` + +start() { + printf "Starting Tidalconnect: " + + # Mount SquashFS if exists (MAX firmware only) + if [ -f /usr/lib/tidal.sqfs ] && [ ! -f /tmp/tidal_mounted ]; then + mount -t squashfs -o loop,ro /usr/lib/tidal.sqfs /usr/lib/tidal 2>/dev/null && \ + touch /tmp/tidal_mounted + fi + + export LD_LIBRARY_PATH=/usr/lib/tidal + ( + tidalconnect \ + -f PureFox \ + --log-level 3 \ + --tc-certificate-path "/etc/ssl/private/tcon.crt" \ + --clientid "VCjoaRrbaMU005Tk" \ + > /dev/null 2>&1 < /dev/null & + ) & + sleep 0.1 + [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" unmute 2>/dev/null + pid=$(pidof tidalconnect) + if [ -n "$pid" ]; then + renice -15 $pid + for tid in $(ls /proc/$pid/task/); do + sleep 0.1 + renice -15 $tid + done + fi + + # Refresh avahi to announce tidal service + /etc/init.d/S50avahi-daemon restart > /dev/null 2>&1 + + exit +} + +stop() { + [ -n "$MIXER" ] && /usr/bin/amixer set "$MIXER" mute 2>/dev/null + killall -9 tidalconnect + export LD_LIBRARY_PATH="" + + # Unmount SquashFS if mounted + if [ -f /tmp/tidal_mounted ]; then + umount /usr/lib/tidal 2>/dev/null || true + rm -f /tmp/tidal_mounted + fi +} + +restart() { + stop + sleep 1 + start +} + +case "$1" in + start|stop|restart) + "$1" + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libFLAC++.so.6 b/ext_tree/package/tidal-connect/files/lib/libFLAC++.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libFLAC++.so.6 rename to ext_tree/package/tidal-connect/files/lib/libFLAC++.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libFLAC.so.8 b/ext_tree/package/tidal-connect/files/lib/libFLAC.so.8 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libFLAC.so.8 rename to ext_tree/package/tidal-connect/files/lib/libFLAC.so.8 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libX11.so.6 b/ext_tree/package/tidal-connect/files/lib/libX11.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libX11.so.6 rename to ext_tree/package/tidal-connect/files/lib/libX11.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXau.so.6 b/ext_tree/package/tidal-connect/files/lib/libXau.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXau.so.6 rename to ext_tree/package/tidal-connect/files/lib/libXau.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXdmcp.so.6 b/ext_tree/package/tidal-connect/files/lib/libXdmcp.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXdmcp.so.6 rename to ext_tree/package/tidal-connect/files/lib/libXdmcp.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXext.so.6 b/ext_tree/package/tidal-connect/files/lib/libXext.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXext.so.6 rename to ext_tree/package/tidal-connect/files/lib/libXext.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXfixes.so.3 b/ext_tree/package/tidal-connect/files/lib/libXfixes.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXfixes.so.3 rename to ext_tree/package/tidal-connect/files/lib/libXfixes.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXrender.so.1 b/ext_tree/package/tidal-connect/files/lib/libXrender.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libXrender.so.1 rename to ext_tree/package/tidal-connect/files/lib/libXrender.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libasound.so.2 b/ext_tree/package/tidal-connect/files/lib/libasound.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libasound.so.2 rename to ext_tree/package/tidal-connect/files/lib/libasound.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libatomic.so.1 b/ext_tree/package/tidal-connect/files/lib/libatomic.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libatomic.so.1 rename to ext_tree/package/tidal-connect/files/lib/libatomic.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavahi-client.so.3 b/ext_tree/package/tidal-connect/files/lib/libavahi-client.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavahi-client.so.3 rename to ext_tree/package/tidal-connect/files/lib/libavahi-client.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavahi-common.so.3 b/ext_tree/package/tidal-connect/files/lib/libavahi-common.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavahi-common.so.3 rename to ext_tree/package/tidal-connect/files/lib/libavahi-common.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavcodec.so.57 b/ext_tree/package/tidal-connect/files/lib/libavcodec.so.57 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavcodec.so.57 rename to ext_tree/package/tidal-connect/files/lib/libavcodec.so.57 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavformat.so.57 b/ext_tree/package/tidal-connect/files/lib/libavformat.so.57 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavformat.so.57 rename to ext_tree/package/tidal-connect/files/lib/libavformat.so.57 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavutil.so.55 b/ext_tree/package/tidal-connect/files/lib/libavutil.so.55 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavutil.so.55 rename to ext_tree/package/tidal-connect/files/lib/libavutil.so.55 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavutil.so.56 b/ext_tree/package/tidal-connect/files/lib/libavutil.so.56 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libavutil.so.56 rename to ext_tree/package/tidal-connect/files/lib/libavutil.so.56 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbluray.so.1 b/ext_tree/package/tidal-connect/files/lib/libbluray.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbluray.so.1 rename to ext_tree/package/tidal-connect/files/lib/libbluray.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbsd.so.0 b/ext_tree/package/tidal-connect/files/lib/libbsd.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbsd.so.0 rename to ext_tree/package/tidal-connect/files/lib/libbsd.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbz2.so.1.0 b/ext_tree/package/tidal-connect/files/lib/libbz2.so.1.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libbz2.so.1.0 rename to ext_tree/package/tidal-connect/files/lib/libbz2.so.1.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcairo.so.2 b/ext_tree/package/tidal-connect/files/lib/libcairo.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcairo.so.2 rename to ext_tree/package/tidal-connect/files/lib/libcairo.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libchromaprint.so.1 b/ext_tree/package/tidal-connect/files/lib/libchromaprint.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libchromaprint.so.1 rename to ext_tree/package/tidal-connect/files/lib/libchromaprint.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcom_err.so.2 b/ext_tree/package/tidal-connect/files/lib/libcom_err.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcom_err.so.2 rename to ext_tree/package/tidal-connect/files/lib/libcom_err.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcrypto.so.1.0.0 b/ext_tree/package/tidal-connect/files/lib/libcrypto.so.1.0.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcrypto.so.1.0.0 rename to ext_tree/package/tidal-connect/files/lib/libcrypto.so.1.0.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcrypto.so.1.1 b/ext_tree/package/tidal-connect/files/lib/libcrypto.so.1.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcrypto.so.1.1 rename to ext_tree/package/tidal-connect/files/lib/libcrypto.so.1.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcurl.so.4 b/ext_tree/package/tidal-connect/files/lib/libcurl.so.4 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libcurl.so.4 rename to ext_tree/package/tidal-connect/files/lib/libcurl.so.4 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdb-5.3.so b/ext_tree/package/tidal-connect/files/lib/libdb-5.3.so similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdb-5.3.so rename to ext_tree/package/tidal-connect/files/lib/libdb-5.3.so diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdbus-1.so.3 b/ext_tree/package/tidal-connect/files/lib/libdbus-1.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdbus-1.so.3 rename to ext_tree/package/tidal-connect/files/lib/libdbus-1.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdrm.so.2 b/ext_tree/package/tidal-connect/files/lib/libdrm.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libdrm.so.2 rename to ext_tree/package/tidal-connect/files/lib/libdrm.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libexpat.so.1 b/ext_tree/package/tidal-connect/files/lib/libexpat.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libexpat.so.1 rename to ext_tree/package/tidal-connect/files/lib/libexpat.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libfontconfig.so.1 b/ext_tree/package/tidal-connect/files/lib/libfontconfig.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libfontconfig.so.1 rename to ext_tree/package/tidal-connect/files/lib/libfontconfig.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libfreetype.so.6 b/ext_tree/package/tidal-connect/files/lib/libfreetype.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libfreetype.so.6 rename to ext_tree/package/tidal-connect/files/lib/libfreetype.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgcc_s.so.1 b/ext_tree/package/tidal-connect/files/lib/libgcc_s.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgcc_s.so.1 rename to ext_tree/package/tidal-connect/files/lib/libgcc_s.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgcrypt.so.20 b/ext_tree/package/tidal-connect/files/lib/libgcrypt.so.20 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgcrypt.so.20 rename to ext_tree/package/tidal-connect/files/lib/libgcrypt.so.20 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgme.so.0 b/ext_tree/package/tidal-connect/files/lib/libgme.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgme.so.0 rename to ext_tree/package/tidal-connect/files/lib/libgme.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgmp.so.10 b/ext_tree/package/tidal-connect/files/lib/libgmp.so.10 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgmp.so.10 rename to ext_tree/package/tidal-connect/files/lib/libgmp.so.10 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgnutls.so.30 b/ext_tree/package/tidal-connect/files/lib/libgnutls.so.30 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgnutls.so.30 rename to ext_tree/package/tidal-connect/files/lib/libgnutls.so.30 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgpg-error.so.0 b/ext_tree/package/tidal-connect/files/lib/libgpg-error.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgpg-error.so.0 rename to ext_tree/package/tidal-connect/files/lib/libgpg-error.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgsm.so.1 b/ext_tree/package/tidal-connect/files/lib/libgsm.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgsm.so.1 rename to ext_tree/package/tidal-connect/files/lib/libgsm.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgssapi_krb5.so.2 b/ext_tree/package/tidal-connect/files/lib/libgssapi_krb5.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libgssapi_krb5.so.2 rename to ext_tree/package/tidal-connect/files/lib/libgssapi_krb5.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libhogweed.so.6 b/ext_tree/package/tidal-connect/files/lib/libhogweed.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libhogweed.so.6 rename to ext_tree/package/tidal-connect/files/lib/libhogweed.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libidn.so.12 b/ext_tree/package/tidal-connect/files/lib/libidn.so.12 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libidn.so.12 rename to ext_tree/package/tidal-connect/files/lib/libidn.so.12 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libjack.so.0 b/ext_tree/package/tidal-connect/files/lib/libjack.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libjack.so.0 rename to ext_tree/package/tidal-connect/files/lib/libjack.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libk5crypto.so.3 b/ext_tree/package/tidal-connect/files/lib/libk5crypto.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libk5crypto.so.3 rename to ext_tree/package/tidal-connect/files/lib/libk5crypto.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkeyutils.so.1 b/ext_tree/package/tidal-connect/files/lib/libkeyutils.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkeyutils.so.1 rename to ext_tree/package/tidal-connect/files/lib/libkeyutils.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkrb5.so.3 b/ext_tree/package/tidal-connect/files/lib/libkrb5.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkrb5.so.3 rename to ext_tree/package/tidal-connect/files/lib/libkrb5.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkrb5support.so.0 b/ext_tree/package/tidal-connect/files/lib/libkrb5support.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libkrb5support.so.0 rename to ext_tree/package/tidal-connect/files/lib/libkrb5support.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/liblzma.so.5 b/ext_tree/package/tidal-connect/files/lib/liblzma.so.5 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/liblzma.so.5 rename to ext_tree/package/tidal-connect/files/lib/liblzma.so.5 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libmp3lame.so.0 b/ext_tree/package/tidal-connect/files/lib/libmp3lame.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libmp3lame.so.0 rename to ext_tree/package/tidal-connect/files/lib/libmp3lame.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libmpg123.so.0 b/ext_tree/package/tidal-connect/files/lib/libmpg123.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libmpg123.so.0 rename to ext_tree/package/tidal-connect/files/lib/libmpg123.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libnettle.so.8 b/ext_tree/package/tidal-connect/files/lib/libnettle.so.8 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libnettle.so.8 rename to ext_tree/package/tidal-connect/files/lib/libnettle.so.8 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libogg.so.0 b/ext_tree/package/tidal-connect/files/lib/libogg.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libogg.so.0 rename to ext_tree/package/tidal-connect/files/lib/libogg.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopenjp2.so.7 b/ext_tree/package/tidal-connect/files/lib/libopenjp2.so.7 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopenjp2.so.7 rename to ext_tree/package/tidal-connect/files/lib/libopenjp2.so.7 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopenmpt.so.0 b/ext_tree/package/tidal-connect/files/lib/libopenmpt.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopenmpt.so.0 rename to ext_tree/package/tidal-connect/files/lib/libopenmpt.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopus.so.0 b/ext_tree/package/tidal-connect/files/lib/libopus.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libopus.so.0 rename to ext_tree/package/tidal-connect/files/lib/libopus.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpixman-1.so.0 b/ext_tree/package/tidal-connect/files/lib/libpixman-1.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpixman-1.so.0 rename to ext_tree/package/tidal-connect/files/lib/libpixman-1.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpng16.so.16 b/ext_tree/package/tidal-connect/files/lib/libpng16.so.16 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpng16.so.16 rename to ext_tree/package/tidal-connect/files/lib/libpng16.so.16 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libportaudio.so.2 b/ext_tree/package/tidal-connect/files/lib/libportaudio.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libportaudio.so.2 rename to ext_tree/package/tidal-connect/files/lib/libportaudio.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpsl.so.5 b/ext_tree/package/tidal-connect/files/lib/libpsl.so.5 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libpsl.so.5 rename to ext_tree/package/tidal-connect/files/lib/libpsl.so.5 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/librtmp.so.1 b/ext_tree/package/tidal-connect/files/lib/librtmp.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/librtmp.so.1 rename to ext_tree/package/tidal-connect/files/lib/librtmp.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsamplerate.so.0 b/ext_tree/package/tidal-connect/files/lib/libsamplerate.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsamplerate.so.0 rename to ext_tree/package/tidal-connect/files/lib/libsamplerate.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libshine.so.3 b/ext_tree/package/tidal-connect/files/lib/libshine.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libshine.so.3 rename to ext_tree/package/tidal-connect/files/lib/libshine.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsnappy.so.1 b/ext_tree/package/tidal-connect/files/lib/libsnappy.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsnappy.so.1 rename to ext_tree/package/tidal-connect/files/lib/libsnappy.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsoxr.so.0 b/ext_tree/package/tidal-connect/files/lib/libsoxr.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libsoxr.so.0 rename to ext_tree/package/tidal-connect/files/lib/libsoxr.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libspeex.so.1 b/ext_tree/package/tidal-connect/files/lib/libspeex.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libspeex.so.1 rename to ext_tree/package/tidal-connect/files/lib/libspeex.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssh-gcrypt.so.4 b/ext_tree/package/tidal-connect/files/lib/libssh-gcrypt.so.4 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssh-gcrypt.so.4 rename to ext_tree/package/tidal-connect/files/lib/libssh-gcrypt.so.4 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssh2.so.1 b/ext_tree/package/tidal-connect/files/lib/libssh2.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssh2.so.1 rename to ext_tree/package/tidal-connect/files/lib/libssh2.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssl.so.1.0.0 b/ext_tree/package/tidal-connect/files/lib/libssl.so.1.0.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssl.so.1.0.0 rename to ext_tree/package/tidal-connect/files/lib/libssl.so.1.0.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssl.so.1.1 b/ext_tree/package/tidal-connect/files/lib/libssl.so.1.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libssl.so.1.1 rename to ext_tree/package/tidal-connect/files/lib/libssl.so.1.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libstdc++.so.6 b/ext_tree/package/tidal-connect/files/lib/libstdc++.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libstdc++.so.6 rename to ext_tree/package/tidal-connect/files/lib/libstdc++.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libswresample.so.2 b/ext_tree/package/tidal-connect/files/lib/libswresample.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libswresample.so.2 rename to ext_tree/package/tidal-connect/files/lib/libswresample.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtasn1.so.6 b/ext_tree/package/tidal-connect/files/lib/libtasn1.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtasn1.so.6 rename to ext_tree/package/tidal-connect/files/lib/libtasn1.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtheoradec.so.1 b/ext_tree/package/tidal-connect/files/lib/libtheoradec.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtheoradec.so.1 rename to ext_tree/package/tidal-connect/files/lib/libtheoradec.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtheoraenc.so.1 b/ext_tree/package/tidal-connect/files/lib/libtheoraenc.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtheoraenc.so.1 rename to ext_tree/package/tidal-connect/files/lib/libtheoraenc.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtwolame.so.0 b/ext_tree/package/tidal-connect/files/lib/libtwolame.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libtwolame.so.0 rename to ext_tree/package/tidal-connect/files/lib/libtwolame.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libunistring.so.2 b/ext_tree/package/tidal-connect/files/lib/libunistring.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libunistring.so.2 rename to ext_tree/package/tidal-connect/files/lib/libunistring.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva-drm.so.1 b/ext_tree/package/tidal-connect/files/lib/libva-drm.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva-drm.so.1 rename to ext_tree/package/tidal-connect/files/lib/libva-drm.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva-x11.so.1 b/ext_tree/package/tidal-connect/files/lib/libva-x11.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva-x11.so.1 rename to ext_tree/package/tidal-connect/files/lib/libva-x11.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva.so.1 b/ext_tree/package/tidal-connect/files/lib/libva.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libva.so.1 rename to ext_tree/package/tidal-connect/files/lib/libva.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvdpau.so.1 b/ext_tree/package/tidal-connect/files/lib/libvdpau.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvdpau.so.1 rename to ext_tree/package/tidal-connect/files/lib/libvdpau.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbis.so.0 b/ext_tree/package/tidal-connect/files/lib/libvorbis.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbis.so.0 rename to ext_tree/package/tidal-connect/files/lib/libvorbis.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbisenc.so.2 b/ext_tree/package/tidal-connect/files/lib/libvorbisenc.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbisenc.so.2 rename to ext_tree/package/tidal-connect/files/lib/libvorbisenc.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbisfile.so.3 b/ext_tree/package/tidal-connect/files/lib/libvorbisfile.so.3 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvorbisfile.so.3 rename to ext_tree/package/tidal-connect/files/lib/libvorbisfile.so.3 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvpx.so.4 b/ext_tree/package/tidal-connect/files/lib/libvpx.so.4 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libvpx.so.4 rename to ext_tree/package/tidal-connect/files/lib/libvpx.so.4 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwavpack.so.1 b/ext_tree/package/tidal-connect/files/lib/libwavpack.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwavpack.so.1 rename to ext_tree/package/tidal-connect/files/lib/libwavpack.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwebp.so.6 b/ext_tree/package/tidal-connect/files/lib/libwebp.so.6 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwebp.so.6 rename to ext_tree/package/tidal-connect/files/lib/libwebp.so.6 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwebpmux.so.2 b/ext_tree/package/tidal-connect/files/lib/libwebpmux.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libwebpmux.so.2 rename to ext_tree/package/tidal-connect/files/lib/libwebpmux.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libx264.so.148 b/ext_tree/package/tidal-connect/files/lib/libx264.so.148 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libx264.so.148 rename to ext_tree/package/tidal-connect/files/lib/libx264.so.148 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libx265.so.95 b/ext_tree/package/tidal-connect/files/lib/libx265.so.95 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libx265.so.95 rename to ext_tree/package/tidal-connect/files/lib/libx265.so.95 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb-render.so.0 b/ext_tree/package/tidal-connect/files/lib/libxcb-render.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb-render.so.0 rename to ext_tree/package/tidal-connect/files/lib/libxcb-render.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb-shm.so.0 b/ext_tree/package/tidal-connect/files/lib/libxcb-shm.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb-shm.so.0 rename to ext_tree/package/tidal-connect/files/lib/libxcb-shm.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb.so.1 b/ext_tree/package/tidal-connect/files/lib/libxcb.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxcb.so.1 rename to ext_tree/package/tidal-connect/files/lib/libxcb.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxml2.so.2 b/ext_tree/package/tidal-connect/files/lib/libxml2.so.2 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxml2.so.2 rename to ext_tree/package/tidal-connect/files/lib/libxml2.so.2 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxvidcore.so.4 b/ext_tree/package/tidal-connect/files/lib/libxvidcore.so.4 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libxvidcore.so.4 rename to ext_tree/package/tidal-connect/files/lib/libxvidcore.so.4 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libz.so.1 b/ext_tree/package/tidal-connect/files/lib/libz.so.1 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libz.so.1 rename to ext_tree/package/tidal-connect/files/lib/libz.so.1 diff --git a/ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libzvbi.so.0 b/ext_tree/package/tidal-connect/files/lib/libzvbi.so.0 similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/usr/lib/tidal/libzvbi.so.0 rename to ext_tree/package/tidal-connect/files/lib/libzvbi.so.0 diff --git a/ext_tree/board/luckfox/rootfs_overlay/sbin/tidalconnect b/ext_tree/package/tidal-connect/files/tidalconnect similarity index 100% rename from ext_tree/board/luckfox/rootfs_overlay/sbin/tidalconnect rename to ext_tree/package/tidal-connect/files/tidalconnect diff --git a/ext_tree/package/tidal-connect/tidal-connect.mk b/ext_tree/package/tidal-connect/tidal-connect.mk new file mode 100644 index 00000000..128ac443 --- /dev/null +++ b/ext_tree/package/tidal-connect/tidal-connect.mk @@ -0,0 +1,13 @@ +TIDAL_CONNECT_VERSION = 1.0 +TIDAL_CONNECT_SITE = $(TOPDIR)/../ext_tree/package/tidal-connect/files +TIDAL_CONNECT_SITE_METHOD = local + +define TIDAL_CONNECT_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/tidalconnect $(TARGET_DIR)/sbin/tidalconnect + $(INSTALL) -D -m 0755 $(@D)/S95tidal $(TARGET_DIR)/etc/rc.pure/S95tidal + mkdir -p $(TARGET_DIR)/usr/lib/tidal + cp -a $(@D)/lib/*.so* $(TARGET_DIR)/usr/lib/tidal/ + find $(TARGET_DIR)/usr/lib/tidal -name "*.so*" -type f -exec $(TARGET_STRIP) {} \; +endef + +$(eval $(generic-package)) diff --git a/ext_tree/patches/linux_rv1106.patch b/ext_tree/patches/linux_rv1106.patch index 5d5c5dcc..fbdfa6b3 100644 --- a/ext_tree/patches/linux_rv1106.patch +++ b/ext_tree/patches/linux_rv1106.patch @@ -52,7 +52,7 @@ diff -Naur original_dir/sound/soc/codecs/dummy-codec.c modified_dir/sound/soc/co }; diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound/soc/rockchip/rockchip_i2s_tdm.c --- original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c 2025-07-13 23:11:14.000000000 +0300 -+++ modified_dir/sound/soc/rockchip/rockchip_i2s_tdm.c 2025-10-08 22:46:48.056357108 +0300 ++++ modified_dir/sound/soc/rockchip/rockchip_i2s_tdm.c 2025-11-01 16:26:11.184929557 +0300 @@ -4,18 +4,14 @@ * * Copyright (c) 2018 Rockchip Electronics Co. Ltd. @@ -107,7 +107,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound #define DRV_NAME "rockchip-i2s-tdm" -@@ -39,328 +48,472 @@ +@@ -39,328 +48,464 @@ #define HAVE_SYNC_RESET #endif @@ -123,9 +123,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound +#define MAXBURST_PER_FIFO 64 + +/* Auto-mute timing defaults */ -+#define DEFAULT_PREMUTE_DELAY_MS 50 +#define DEFAULT_POSTMUTE_DELAY_MS 450 -+#define AUTOMUTE_DEBOUNCE_MS 1000 #define QUIRK_ALWAYS_ON BIT(0) #define QUIRK_HDMI_PATH BIT(1) @@ -278,6 +276,9 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + int volume; + bool mute; + struct gpio_desc *mute_gpio; ++ struct gpio_desc *mute_inv_gpio; /* Inverted mute signal (GPIO2_A5, pin 69) */ ++ struct gpio_desc *freq_domain_gpio; /* Frequency domain indicator GPIO (GPIO1_D1) 44.1/48 kHz */ ++ bool freq_domain_invert; // Invert frequency domain GPIO polarity + + /* MCLK multiplier for switching 512/1024 */ + int mclk_multiplier; // MCLK multiplier: 512 or 1024 @@ -285,8 +286,8 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + /* Automatic mute during switching */ + bool auto_mute_active; // Active state of automatic mute + bool user_mute_priority; // User priority over automation -+ struct delayed_work mute_pre_work; // Timer to enable mute 20ms before -+ struct delayed_work mute_post_work; // Timer to disable mute after 400ms ++ bool format_change_mute; // Mute during PCM/DSD format change (higher priority) ++ struct delayed_work mute_post_work; // Timer to disable mute after delay + struct mutex mute_lock; // Mutex for protecting mute operations + + @@ -298,14 +299,8 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + unsigned long last_auto_mute_time; + + /* Configurable auto-mute times via sysfs */ -+ unsigned int premute_delay_ms; // Delay between mute and stop/start (default 50ms) + unsigned int postmute_delay_ms; // Mute hold time after start (default 450ms) + -+ /* Delayed start for proper premute timing */ -+ struct timer_list delayed_start_timer; -+ int pending_stream; // Stream to start after premute delay -+ bool delayed_start_pending; // Delayed start is scheduled -+ + /* GPIO for DSD-on signal */ + struct gpio_desc *dsd_on_gpio; + bool dsd_mode_active; @@ -406,9 +401,6 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + } +} + -+static void rockchip_i2s_tdm_trigger_auto_mute(struct rk_i2s_tdm_dev *i2s_tdm); -+static void rockchip_i2s_tdm_trigger_stop_mute(struct rk_i2s_tdm_dev *i2s_tdm); -+static void rockchip_i2s_tdm_mute_pre_work(struct work_struct *work); +static void rockchip_i2s_tdm_mute_post_work(struct work_struct *work); static struct i2s_of_quirks { @@ -481,12 +473,9 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound static int i2s_tdm_runtime_suspend(struct device *dev) { - struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); -- -- regcache_cache_only(i2s_tdm->regmap, true); + struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); -- clk_disable_unprepare(i2s_tdm->mclk_tx); -- clk_disable_unprepare(i2s_tdm->mclk_rx); +- regcache_cache_only(i2s_tdm->regmap, true); + regcache_cache_only(i2s_tdm->regmap, true); + + /* Do not turn off MCLK if continuous MCLK quirk is enabled */ @@ -497,6 +486,9 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + dev_dbg(i2s_tdm->dev, "MCLK kept running during suspend (quirk enabled)\n"); + } +- clk_disable_unprepare(i2s_tdm->mclk_tx); +- clk_disable_unprepare(i2s_tdm->mclk_rx); +- - return 0; + return 0; } @@ -832,7 +824,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound } /* -@@ -369,16 +522,18 @@ +@@ -369,16 +514,18 @@ */ static void rockchip_i2s_tdm_sync_reset(struct rk_i2s_tdm_dev *i2s_tdm) { @@ -853,7 +845,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound static inline void rockchip_i2s_tdm_sync_reset(struct rk_i2s_tdm_dev *i2s_tdm) { } -@@ -386,57 +541,59 @@ +@@ -386,57 +533,59 @@ static void rockchip_i2s_tdm_reset(struct reset_control *rc) { @@ -955,7 +947,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound } /* -@@ -446,2088 +603,3260 @@ +@@ -446,2088 +595,3383 @@ */ static void rockchip_i2s_tdm_tx_fifo_padding(struct rk_i2s_tdm_dev *i2s_tdm, bool en) { @@ -1294,11 +1286,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound static void rockchip_i2s_tdm_stop(struct rk_i2s_tdm_dev *i2s_tdm, int stream) { - rockchip_i2s_tdm_dma_ctrl(i2s_tdm, stream, 0); -+ /* FIX: Enable mute BEFORE stop to prevent clicks */ -+ if (stream == SNDRV_PCM_STREAM_PLAYBACK) { -+ rockchip_i2s_tdm_trigger_stop_mute(i2s_tdm); -+ /* Delay already performed inside trigger_stop_mute */ -+ } ++ /* Mute is handled in trigger callback */ + + /* First stop transmission (BCLK/DATA), then DMA */ + if (i2s_tdm->clk_trcm) @@ -1383,14 +1371,14 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + I2S_XFER_RXS_START); + } + } ++ ++ /* Enable DMA */ ++ rockchip_i2s_tdm_dma_ctrl(i2s_tdm, stream, 1); - if (i2s_tdm->clk_trcm) - rockchip_i2s_tdm_xfer_trcm_stop(i2s_tdm); - else - rockchip_i2s_tdm_xfer_stop(i2s_tdm, stream, false); -+ /* Enable DMA */ -+ rockchip_i2s_tdm_dma_ctrl(i2s_tdm, stream, 1); -+ + dev_dbg(i2s_tdm->dev, "I2S/TDM %s stream resumed\n", + stream == SNDRV_PCM_STREAM_PLAYBACK ? "playback" : "capture"); } @@ -2246,11 +2234,11 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + regmap_read(i2s_tdm->regmap, I2S_RXCR, &val); + last_fmt = val & (I2S_RXCR_VDW_MASK | I2S_RXCR_CSR_MASK); + } -+ -+ if (last_fmt != fmt) -+ return true; - return false; ++ if (last_fmt != fmt) ++ return true; ++ + return false; } @@ -2558,7 +2546,25 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound - goto err; - } - // --//+++ ++ struct rk_i2s_tdm_dev *i2s_tdm = to_info(dai); ++ struct snd_dmaengine_dai_dma_data *dma_data; ++ struct clk *mclk; ++ int ret = 0; ++ unsigned int val = 0; ++ unsigned int mclk_rate, bclk_rate, div_bclk = 4, div_lrck = 64; ++ ++ dma_data = snd_soc_dai_get_dma_data(dai, substream); ++ dma_data->maxburst = MAXBURST_PER_FIFO * params_channels(params) / 2; ++ ++ ++ /* Note: Mute is now handled in trigger for proper timing */ ++ ++ ++ if (i2s_tdm->is_master_mode) { ++ if (i2s_tdm->mclk_calibrate) ++ rockchip_i2s_tdm_calibrate_mclk(i2s_tdm, substream, ++ params_rate(params)); + //+++ - if (i2s_tdm->is_master_mode) { - mclk = i2s_tdm->mclk_tx; // !must check if RX - @@ -2595,109 +2601,17 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound - } - } - } --//+++ -- -- mclk_rate = clk_get_rate(mclk); -- //--bclk_rate = i2s_tdm->bclk_fs * params_rate(params); -- bclk_rate = i2s_tdm->frame_width * params_rate(params); -- if (!bclk_rate) { -- ret = -EINVAL; -- goto err; -- } -- div_bclk = DIV_ROUND_CLOSEST(mclk_rate, bclk_rate); -- div_lrck = bclk_rate / params_rate(params); -- } -- -+ struct rk_i2s_tdm_dev *i2s_tdm = to_info(dai); -+ struct snd_dmaengine_dai_dma_data *dma_data; -+ struct clk *mclk; -+ int ret = 0; -+ unsigned int val = 0; -+ unsigned int mclk_rate, bclk_rate, div_bclk = 4, div_lrck = 64; -+ -+ dma_data = snd_soc_dai_get_dma_data(dai, substream); -+ dma_data->maxburst = MAXBURST_PER_FIFO * params_channels(params) / 2; -+ -+ -+ /* Note: Mute is now handled in trigger for proper timing */ -+ -+ -+ if (i2s_tdm->is_master_mode) { -+ if (i2s_tdm->mclk_calibrate) -+ rockchip_i2s_tdm_calibrate_mclk(i2s_tdm, substream, -+ params_rate(params)); - //+++ -- if( s2mono && (params_format(params) != SNDRV_PCM_FORMAT_S16_LE) ) { -- val |= I2S_TXCR_VDW(16); -- val |= I2S_CHN_4; -- goto s2mono_l; -- } --//+++ -- -- switch (params_format(params)) { -- case SNDRV_PCM_FORMAT_S8: -- val |= I2S_TXCR_VDW(8); -- break; -- case SNDRV_PCM_FORMAT_S16_LE: -- val |= I2S_TXCR_VDW(16); -- break; -- case SNDRV_PCM_FORMAT_S20_3LE: -- val |= I2S_TXCR_VDW(20); -- break; -- case SNDRV_PCM_FORMAT_S24_LE: -- val |= I2S_TXCR_VDW(24); -- break; -- case SNDRV_PCM_FORMAT_S32_LE: -- case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: -- val |= I2S_TXCR_VDW(32); -- break; -- default: -- ret = -EINVAL; -- goto err; -- } -- --//+++ -- switch (params_channels(params)) { -- case 8: -- val |= I2S_CHN_8; -- break; -- case 6: -- val |= I2S_CHN_6; -- break; -- case 4: -- val |= I2S_CHN_4; -- break; -- case 2: -- val |= I2S_CHN_2; -- break; -- default: -- return -EINVAL; -- } -- --s2mono_l: -- -- // only TX -- regmap_update_bits(i2s_tdm->regmap, I2S_CLKDIV, -- I2S_CLKDIV_TXM_MASK, -- I2S_CLKDIV_TXM(div_bclk)); -- //--- -- regmap_update_bits(i2s_tdm->regmap, I2S_CLKDIV, -- I2S_CLKDIV_RXM_MASK, -- I2S_CLKDIV_RXM(div_bclk)); -- //--- -- -- regmap_update_bits(i2s_tdm->regmap, I2S_CKR, -- I2S_CKR_TSD_MASK, -- I2S_CKR_TSD(div_lrck)); -- regmap_update_bits(i2s_tdm->regmap, I2S_TXCR, -- I2S_TXCR_VDW_MASK | I2S_TXCR_CSR_MASK, -- val); -- + if( i2s_tdm->mclk_external ){ + mclk = i2s_tdm->mclk_tx; + if( i2s_tdm->mclk_ext_mux ) { + /* Consider MCLK multiplier for external PLL */ -+ if( params_rate(params) % 44100 ) { ++ bool is_48k_family = (params_rate(params) % 44100) != 0; ++ ++ /* Apply frequency domain inversion if enabled */ ++ if (i2s_tdm->freq_domain_invert) ++ is_48k_family = !is_48k_family; ++ ++ if( is_48k_family ) { + clk_set_parent( i2s_tdm->mclk_ext, i2s_tdm->clk_48); + /* 48kHz family: 24.576MHz (512x) or 49.152MHz (1024x) */ + if (i2s_tdm->mclk_multiplier == 1024) { @@ -2726,22 +2640,16 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + } //+++ -- // orig -- if(0) { -- ret = rockchip_i2s_tdm_params_channels(substream, params, dai); -- if (ret < 0) +- mclk_rate = clk_get_rate(mclk); +- //--bclk_rate = i2s_tdm->bclk_fs * params_rate(params); +- bclk_rate = i2s_tdm->frame_width * params_rate(params); +- if (!bclk_rate) { +- ret = -EINVAL; - goto err; -- -- val |= ret; -- if (!is_params_dirty(substream, dai, div_bclk, div_lrck, val)) -- return 0; -- -- if (i2s_tdm->clk_trcm) -- rockchip_i2s_tdm_params_trcm(substream, dai, div_bclk, div_lrck, val); -- else -- rockchip_i2s_tdm_params(substream, dai, div_bclk, div_lrck, val); +- } +- div_bclk = DIV_ROUND_CLOSEST(mclk_rate, bclk_rate); +- div_lrck = bclk_rate / params_rate(params); - } -- // orig + mclk_rate = clk_get_rate(mclk); + + /* Special handling for DSD formats */ @@ -2772,44 +2680,120 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + val |= I2S_TXCR_VDW(8); + /* Disable DSD-on signal for PCM formats */ + if (i2s_tdm->dsd_on_gpio && i2s_tdm->dsd_mode_active) { ++ /* Enable mute before DSD->PCM switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending unmute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = false; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO deactivated (PCM mode)\n"); + /* Apply routing for PCM mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_S16_LE: + val |= I2S_TXCR_VDW(16); + /* Disable DSD-on signal for PCM formats */ + if (i2s_tdm->dsd_on_gpio && i2s_tdm->dsd_mode_active) { ++ /* Enable mute before DSD->PCM switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending unmute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = false; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO deactivated (PCM mode)\n"); + /* Apply routing for PCM mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_S20_3LE: + val |= I2S_TXCR_VDW(20); + /* Disable DSD-on signal for PCM formats */ + if (i2s_tdm->dsd_on_gpio && i2s_tdm->dsd_mode_active) { ++ /* Enable mute before DSD->PCM switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending unmute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = false; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO deactivated (PCM mode)\n"); + /* Apply routing for PCM mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_S24_LE: + val |= I2S_TXCR_VDW(24); + /* Disable DSD-on signal for PCM formats */ + if (i2s_tdm->dsd_on_gpio && i2s_tdm->dsd_mode_active) { ++ /* Enable mute before DSD->PCM switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending unmute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = false; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO deactivated (PCM mode)\n"); + /* Apply routing for PCM mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_S32_LE: @@ -2817,11 +2801,30 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + val |= I2S_TXCR_VDW(32); + /* Disable DSD-on signal for PCM formats */ + if (i2s_tdm->dsd_on_gpio && i2s_tdm->dsd_mode_active) { ++ /* Enable mute before DSD->PCM switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending unmute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = false; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO deactivated (PCM mode)\n"); + /* Apply routing for PCM mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_DSD_U8: @@ -2834,11 +2837,30 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + + /* Activate DSD-on signal */ + if (i2s_tdm->dsd_on_gpio) { ++ /* Enable mute before PCM->DSD switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending post-mute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = true; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 1); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO activated (DSD mode ON)\n"); + /* Apply routing for DSD mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_DSD_U16_LE: @@ -2851,11 +2873,30 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + + /* Activate DSD-on signal */ + if (i2s_tdm->dsd_on_gpio) { ++ /* Enable mute before PCM->DSD switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending post-mute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = true; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 1); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO activated (DSD mode ON)\n"); + /* Apply routing for DSD mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + case SNDRV_PCM_FORMAT_DSD_U32_LE: @@ -2869,11 +2910,30 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + + /* Activate DSD-on signal */ + if (i2s_tdm->dsd_on_gpio) { ++ /* Enable mute before PCM->DSD switch to eliminate clicks */ ++ if (i2s_tdm->mute_gpio) { ++ /* Cancel any pending post-mute work from trigger */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } + i2s_tdm->dsd_mode_active = true; + gpiod_set_value(i2s_tdm->dsd_on_gpio, 1); + dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: DSD-on GPIO activated (DSD mode ON)\n"); + /* Apply routing for DSD mode */ + rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ /* Wait for DAC to settle, then let normal trigger unmute handle it */ ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ /* Clear flag and restore auto_mute for next trigger */ ++ i2s_tdm->format_change_mute = false; ++ i2s_tdm->auto_mute_active = true; ++ /* DO NOT unmute here - let trigger's mute_post_work handle it */ ++ } + } + break; + default: @@ -2911,6 +2971,92 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + else + rockchip_i2s_tdm_params(substream, dai, div_bclk, div_lrck, val); +-//+++ +- if( s2mono && (params_format(params) != SNDRV_PCM_FORMAT_S16_LE) ) { +- val |= I2S_TXCR_VDW(16); +- val |= I2S_CHN_4; +- goto s2mono_l; +- } +-//+++ +- +- switch (params_format(params)) { +- case SNDRV_PCM_FORMAT_S8: +- val |= I2S_TXCR_VDW(8); +- break; +- case SNDRV_PCM_FORMAT_S16_LE: +- val |= I2S_TXCR_VDW(16); +- break; +- case SNDRV_PCM_FORMAT_S20_3LE: +- val |= I2S_TXCR_VDW(20); +- break; +- case SNDRV_PCM_FORMAT_S24_LE: +- val |= I2S_TXCR_VDW(24); +- break; +- case SNDRV_PCM_FORMAT_S32_LE: +- case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: +- val |= I2S_TXCR_VDW(32); +- break; +- default: +- ret = -EINVAL; +- goto err; +- } +- +-//+++ +- switch (params_channels(params)) { +- case 8: +- val |= I2S_CHN_8; +- break; +- case 6: +- val |= I2S_CHN_6; +- break; +- case 4: +- val |= I2S_CHN_4; +- break; +- case 2: +- val |= I2S_CHN_2; +- break; +- default: +- return -EINVAL; +- } +- +-s2mono_l: +- +- // only TX +- regmap_update_bits(i2s_tdm->regmap, I2S_CLKDIV, +- I2S_CLKDIV_TXM_MASK, +- I2S_CLKDIV_TXM(div_bclk)); +- //--- +- regmap_update_bits(i2s_tdm->regmap, I2S_CLKDIV, +- I2S_CLKDIV_RXM_MASK, +- I2S_CLKDIV_RXM(div_bclk)); +- //--- +- +- regmap_update_bits(i2s_tdm->regmap, I2S_CKR, +- I2S_CKR_TSD_MASK, +- I2S_CKR_TSD(div_lrck)); +- regmap_update_bits(i2s_tdm->regmap, I2S_TXCR, +- I2S_TXCR_VDW_MASK | I2S_TXCR_CSR_MASK, +- val); +- +-//+++ +- +- // orig +- if(0) { +- ret = rockchip_i2s_tdm_params_channels(substream, params, dai); +- if (ret < 0) +- goto err; +- +- val |= ret; +- if (!is_params_dirty(substream, dai, div_bclk, div_lrck, val)) +- return 0; +- +- if (i2s_tdm->clk_trcm) +- rockchip_i2s_tdm_params_trcm(substream, dai, div_bclk, div_lrck, val); +- else +- rockchip_i2s_tdm_params(substream, dai, div_bclk, div_lrck, val); +- } +- // orig +- - ret = rockchip_i2s_io_multiplex(substream, dai); + ret = rockchip_i2s_io_multiplex(substream, dai); @@ -2950,32 +3096,21 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + i2s_tdm->playback_paused = false; + -+ /* For playback: Enable mute NOW and schedule delayed start */ -+ mutex_lock(&i2s_tdm->mute_lock); -+ -+ /* Cancel any pending delayed start */ -+ del_timer(&i2s_tdm->delayed_start_timer); -+ i2s_tdm->delayed_start_pending = false; -+ -+ /* Enable mute immediately for mechanical relay protection */ ++ /* Ensure auto_mute is active for this playback session */ + if (!i2s_tdm->user_mute_priority) { -+ if (i2s_tdm->mute_gpio) { -+ gpiod_set_value(i2s_tdm->mute_gpio, 1); -+ } + i2s_tdm->auto_mute_active = true; -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, true); + } + -+ /* Schedule delayed start after premute delay */ -+ i2s_tdm->pending_stream = substream->stream; -+ i2s_tdm->delayed_start_pending = true; -+ mod_timer(&i2s_tdm->delayed_start_timer, -+ jiffies + msecs_to_jiffies(i2s_tdm->premute_delay_ms)); -+ -+ dev_info(i2s_tdm->dev, "TRIGGER START: Mute enabled, delaying start by %dms\n", -+ i2s_tdm->premute_delay_ms); ++ /* Start stream immediately - mute is already ON by default */ ++ rockchip_i2s_tdm_start(i2s_tdm, substream->stream); + -+ mutex_unlock(&i2s_tdm->mute_lock); ++ /* Schedule unmute after postmute delay */ ++ if (!i2s_tdm->user_mute_priority && i2s_tdm->postmute_delay_ms > 0) { ++ schedule_delayed_work(&i2s_tdm->mute_post_work, ++ msecs_to_jiffies(i2s_tdm->postmute_delay_ms)); ++ dev_info(i2s_tdm->dev, "TRIGGER START: Stream started, unmute in %dms\n", ++ i2s_tdm->postmute_delay_ms); ++ } + } else { + i2s_tdm->capture_paused = false; + rockchip_i2s_tdm_start(i2s_tdm, substream->stream); @@ -2999,13 +3134,22 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + i2s_tdm->playback_paused = false; + -+ /* Cancel any pending delayed start */ ++ /* Cancel any pending unmute work */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ ++ /* Enable mute when playback stops (no useful signal) */ + mutex_lock(&i2s_tdm->mute_lock); -+ del_timer(&i2s_tdm->delayed_start_timer); -+ i2s_tdm->delayed_start_pending = false; ++ if (!i2s_tdm->user_mute_priority && !i2s_tdm->format_change_mute) { ++ if (i2s_tdm->mute_gpio) { ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ } ++ i2s_tdm->auto_mute_active = true; ++ rockchip_i2s_tdm_apply_mute(i2s_tdm, true); ++ dev_info(i2s_tdm->dev, "TRIGGER STOP: Mute enabled (no signal)\n"); ++ } + mutex_unlock(&i2s_tdm->mute_lock); -+ -+ dev_info(i2s_tdm->dev, "TRIGGER STOP: Cancelled any pending delayed start\n"); + } else { + i2s_tdm->capture_paused = false; + } @@ -3340,24 +3484,37 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + i2s_tdm->user_mute_priority = true; + + /* Cancel any automatic timers */ -+ cancel_delayed_work(&i2s_tdm->mute_pre_work); + cancel_delayed_work(&i2s_tdm->mute_post_work); + + /* Enable mute instantly */ + rockchip_i2s_tdm_apply_mute(i2s_tdm, true); ++ dev_info(i2s_tdm->dev, "User mute ON: mute_gpio=%p inv_gpio=%p\n", ++ i2s_tdm->mute_gpio, i2s_tdm->mute_inv_gpio); + + } else { -+ /* User disabled mute - reset priority */ ++ /* User disabled mute - reset priority but keep auto_mute if no signal */ + i2s_tdm->user_mute_priority = false; -+ i2s_tdm->auto_mute_active = false; + -+ /* Cancel any automatic timers */ -+ cancel_delayed_work(&i2s_tdm->mute_pre_work); -+ cancel_delayed_work(&i2s_tdm->mute_post_work); ++ /* Check if stream is running */ ++ bool stream_running = false; ++ if (i2s_tdm->substreams[SNDRV_PCM_STREAM_PLAYBACK]) { ++ struct snd_pcm_substream *substream = i2s_tdm->substreams[SNDRV_PCM_STREAM_PLAYBACK]; ++ struct snd_pcm_runtime *runtime = substream->runtime; ++ if (runtime && runtime->status->state == SNDRV_PCM_STATE_RUNNING) { ++ stream_running = true; ++ } ++ } + -+ /* Disable mute */ -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, false); -+ dev_info(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Mute disabled by user control (priority cleared)\n"); ++ /* Only unmute if stream is running */ ++ if (stream_running) { ++ i2s_tdm->auto_mute_active = false; ++ cancel_delayed_work(&i2s_tdm->mute_post_work); ++ rockchip_i2s_tdm_apply_mute(i2s_tdm, false); ++ dev_info(i2s_tdm->dev, "User unmute: stream running, mute OFF\n"); ++ } else { ++ /* Keep auto mute active - no signal yet */ ++ dev_info(i2s_tdm->dev, "User unmute: no stream, keeping mute ON\n"); ++ } + } + + mutex_unlock(&i2s_tdm->mute_lock); @@ -3373,12 +3530,14 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound +/* Automatic mute during switching */ +static void rockchip_i2s_tdm_apply_mute(struct rk_i2s_tdm_dev *i2s_tdm, bool enable) +{ -+ unsigned long flags; -+ + if (enable) { -+ /* Enable mute INSTANTLY - premute_delay_ms already processed before call */ ++ /* Enable mute INSTANTLY */ + if (i2s_tdm->mute_gpio) + gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) { ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ dev_info(i2s_tdm->dev, "Set inverted GPIO to 0 (mute ON)\n"); ++ } + + /* Software mute through volume = 0% for DACs without GPIO mute */ + /* Clear active DMA buffers immediately for instant mute effect */ @@ -3398,197 +3557,62 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + /* DMA continues to work, but sound is muted through GPIO + software */ + + } else { -+ /* Disable mute instantly - delay was already in delayed_work */ ++ /* Disable mute - called only from scheduled work after trigger start */ + if (i2s_tdm->mute_gpio) { + gpiod_set_value(i2s_tdm->mute_gpio, 0); ++ if (i2s_tdm->mute_inv_gpio) { ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 1); ++ dev_info(i2s_tdm->dev, "Set inverted GPIO to 1 (mute OFF)\n"); ++ } + } -+ -+ -+ /* DMA is already working, mute lifted through GPIO + software */ -+ } -+} -+ -+/* Function for pre-mute work thread (enable 20ms before) */ -+static void rockchip_i2s_tdm_mute_pre_work(struct work_struct *work) -+{ -+ struct rk_i2s_tdm_dev *i2s_tdm = container_of(work, struct rk_i2s_tdm_dev, mute_pre_work.work); -+ -+ /* Check that device is still active */ -+ if (!i2s_tdm->dev || !device_is_registered(i2s_tdm->dev)) { -+ dev_warn(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Device unregistered during pre-mute work\n"); -+ return; + } -+ -+ mutex_lock(&i2s_tdm->mute_lock); -+ -+ /* Enable automatic mute only if no user priority */ -+ if (!i2s_tdm->user_mute_priority) { -+ i2s_tdm->auto_mute_active = true; -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, true); -+ } -+ -+ mutex_unlock(&i2s_tdm->mute_lock); +} + -+/* Function for post-mute work thread (disable after 400ms) */ ++/* Function for post-mute work thread (disable mute after delay) */ +static void rockchip_i2s_tdm_mute_post_work(struct work_struct *work) +{ + struct rk_i2s_tdm_dev *i2s_tdm = container_of(work, struct rk_i2s_tdm_dev, mute_post_work.work); + + /* Check that device is still active */ + if (!i2s_tdm->dev || !device_is_registered(i2s_tdm->dev)) { -+ dev_warn(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Device unregistered during post-mute work\n"); ++ dev_warn(i2s_tdm->dev, "Device unregistered during post-mute work\n"); + return; + } + + mutex_lock(&i2s_tdm->mute_lock); + -+ /* Disable automatic mute only if it was active and no user priority */ -+ if (i2s_tdm->auto_mute_active && !i2s_tdm->user_mute_priority) { -+ i2s_tdm->auto_mute_active = false; -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, false); -+ } -+ -+ mutex_unlock(&i2s_tdm->mute_lock); -+} -+ -+/* Function to start automatic mute during switching */ -+static void rockchip_i2s_tdm_trigger_auto_mute(struct rk_i2s_tdm_dev *i2s_tdm) -+{ -+ unsigned long current_time = jiffies; -+ unsigned long min_interval = msecs_to_jiffies(AUTOMUTE_DEBOUNCE_MS); // minimum interval -+ bool is_atomic_ctx = in_atomic() || in_interrupt() || irqs_disabled(); -+ -+ mutex_lock(&i2s_tdm->mute_lock); -+ -+ /* Check if auto-mute is called too frequently */ -+ if (i2s_tdm->last_auto_mute_time != 0 && -+ time_before(current_time, i2s_tdm->last_auto_mute_time + min_interval)) { -+ /* Too frequent calls - ignore completely */ -+ dev_dbg(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Auto-mute debounce - ignoring frequent call\n"); ++ /* Do NOT unmute if format change mute is active */ ++ if (i2s_tdm->format_change_mute) { ++ dev_info(i2s_tdm->dev, "POST-MUTE: Skipping unmute - format change in progress\n"); + mutex_unlock(&i2s_tdm->mute_lock); + return; + } + -+ /* Update last trigger time */ -+ i2s_tdm->last_auto_mute_time = current_time; -+ -+ /* Cancel any previous post-mute timers */ -+ cancel_delayed_work(&i2s_tdm->mute_post_work); ++ /* Unmute if auto_mute is active and no user mute priority */ ++ /* This work is only scheduled from TRIGGER_START, so stream is running */ ++ dev_info(i2s_tdm->dev, "POST-MUTE: auto_mute=%d user_priority=%d\n", ++ i2s_tdm->auto_mute_active, i2s_tdm->user_mute_priority); + -+ /* CRITICAL: Enable GPIO mute INSTANTLY first */ -+ if (!i2s_tdm->user_mute_priority) { ++ if (i2s_tdm->auto_mute_active && !i2s_tdm->user_mute_priority) { ++ i2s_tdm->auto_mute_active = false; ++ i2s_tdm->mute = false; + if (i2s_tdm->mute_gpio) { -+ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ gpiod_set_value(i2s_tdm->mute_gpio, 0); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 1); + } ++ dev_info(i2s_tdm->dev, "POST-MUTE: Unmuted after %dms\n", i2s_tdm->postmute_delay_ms); + -+ /* Enable software mute instantly */ -+ i2s_tdm->auto_mute_active = true; -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, true); -+ -+ /* Premute delay depends on context */ -+ if (i2s_tdm->premute_delay_ms > 0) { -+ if (is_atomic_ctx) { -+ /* In atomic context - only short delays via udelay */ -+ if (i2s_tdm->premute_delay_ms <= 10) { -+ udelay(i2s_tdm->premute_delay_ms * 1000); -+ } -+ /* Skip long delays - mute already enabled */ -+ dev_dbg(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Atomic context - skipping long premute delay\n"); -+ } else { -+ /* In normal context - can use mdelay */ -+ if (i2s_tdm->premute_delay_ms >= 10) { -+ mdelay(i2s_tdm->premute_delay_ms); -+ } else { -+ udelay(i2s_tdm->premute_delay_ms * 1000); -+ } -+ } -+ } -+ } -+ -+ /* Start post-mute after configurable time */ -+ if (i2s_tdm->postmute_delay_ms > 0) -+ schedule_delayed_work(&i2s_tdm->mute_post_work, msecs_to_jiffies(i2s_tdm->postmute_delay_ms)); -+ -+ mutex_unlock(&i2s_tdm->mute_lock); -+} -+ -+/* Function to enable mute when stopping playback WITHOUT automatic disable */ -+static void rockchip_i2s_tdm_trigger_stop_mute(struct rk_i2s_tdm_dev *i2s_tdm) -+{ -+ bool is_atomic_ctx = in_atomic() || in_interrupt() || irqs_disabled(); -+ -+ /* Attempt non-blocking lock in atomic context */ -+ if (is_atomic_ctx) { -+ if (!mutex_trylock(&i2s_tdm->mute_lock)) { -+ /* If failed - do only critical operations without locking */ -+ dev_warn(i2s_tdm->dev, "ROCKCHIP_I2S_TDM: Atomic context - direct GPIO mute without lock\n"); -+ if (i2s_tdm->mute_gpio && !i2s_tdm->user_mute_priority) { -+ gpiod_set_value(i2s_tdm->mute_gpio, 1); -+ } -+ return; ++ /* Notify ALSA control about mute state change */ ++ if (i2s_tdm->mute_kcontrol && i2s_tdm->dai && i2s_tdm->dai->component) { ++ snd_ctl_notify(i2s_tdm->dai->component->card->snd_card, ++ SNDRV_CTL_EVENT_MASK_VALUE, ++ &i2s_tdm->mute_kcontrol->id); + } + } else { -+ mutex_lock(&i2s_tdm->mute_lock); -+ } -+ -+ /* Cancel any previous post-mute timers */ -+ cancel_delayed_work(&i2s_tdm->mute_post_work); -+ -+ /* CRITICAL: Enable GPIO mute PHYSICALLY before stopping data */ -+ if (!i2s_tdm->user_mute_priority) { -+ /* Enable GPIO mute INSTANTLY - this is fastest */ -+ if (i2s_tdm->mute_gpio) { -+ gpiod_set_value(i2s_tdm->mute_gpio, 1); -+ } -+ -+ /* Premute delay only for very short intervals when stopping */ -+ if (i2s_tdm->premute_delay_ms > 0 && i2s_tdm->premute_delay_ms <= 5) { -+ udelay(i2s_tdm->premute_delay_ms * 1000); -+ } -+ /* Skip long delays when stopping - mute already enabled via GPIO */ -+ -+ i2s_tdm->auto_mute_active = true; -+ /* Also enable software mute for compatibility */ -+ rockchip_i2s_tdm_apply_mute(i2s_tdm, true); -+ } -+ -+ /* DO NOT start post-mute timer - mute stays enabled until next start */ -+ -+ mutex_unlock(&i2s_tdm->mute_lock); -+} -+ -+/* Timer handler for delayed start after premute */ -+static void rockchip_i2s_tdm_delayed_start_timer(struct timer_list *t) -+{ -+ struct rk_i2s_tdm_dev *i2s_tdm = from_timer(i2s_tdm, t, delayed_start_timer); -+ int stream; -+ -+ mutex_lock(&i2s_tdm->mute_lock); -+ -+ if (!i2s_tdm->delayed_start_pending) { -+ mutex_unlock(&i2s_tdm->mute_lock); -+ return; /* Start was cancelled */ ++ dev_info(i2s_tdm->dev, "POST-MUTE: Unmute BLOCKED\n"); + } + -+ stream = i2s_tdm->pending_stream; -+ i2s_tdm->delayed_start_pending = false; -+ -+ dev_info(i2s_tdm->dev, "DELAYED START: Starting stream %d after %dms premute\n", -+ stream, i2s_tdm->premute_delay_ms); -+ -+ /* Now actually start the hardware - mute was enabled 50ms ago */ -+ rockchip_i2s_tdm_dma_ctrl(i2s_tdm, stream, 1); -+ -+ if (i2s_tdm->clk_trcm) -+ rockchip_i2s_tdm_xfer_trcm_start(i2s_tdm); -+ else -+ rockchip_i2s_tdm_xfer_start(i2s_tdm, stream); -+ -+ /* Start post-mute timer to unmute after configured delay */ -+ if (i2s_tdm->postmute_delay_ms > 0) -+ schedule_delayed_work(&i2s_tdm->mute_post_work, msecs_to_jiffies(i2s_tdm->postmute_delay_ms)); -+ + mutex_unlock(&i2s_tdm->mute_lock); +} + @@ -3724,32 +3748,106 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + +static DEVICE_ATTR(dsd_physical_swap, 0644, dsd_physical_swap_show, dsd_physical_swap_store); + -+/* Premute delay sysfs interface */ -+static ssize_t premute_delay_ms_show(struct device *dev, ++/* Frequency domain GPIO polarity control sysfs interface */ ++static ssize_t freq_domain_invert_show(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); ++ return sprintf(buf, "%d\n", i2s_tdm->freq_domain_invert ? 1 : 0); ++} ++ ++static ssize_t freq_domain_invert_store(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); ++ int value; ++ ++ if (sscanf(buf, "%d", &value) != 1) ++ return -EINVAL; ++ ++ if (value != 0 && value != 1) ++ return -EINVAL; ++ ++ i2s_tdm->freq_domain_invert = (value == 1); ++ dev_info(dev, "Frequency domain GPIO polarity inversion %s\n", ++ i2s_tdm->freq_domain_invert ? "ENABLED" : "DISABLED"); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(freq_domain_invert, 0644, freq_domain_invert_show, freq_domain_invert_store); ++ ++/* Manual DSD mode control sysfs interface */ ++static ssize_t dsd_mode_manual_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); -+ return sprintf(buf, "%u\n", i2s_tdm->premute_delay_ms); ++ return sprintf(buf, "%d\n", i2s_tdm->dsd_mode_active ? 1 : 0); +} + -+static ssize_t premute_delay_ms_store(struct device *dev, ++static ssize_t dsd_mode_manual_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(dev); -+ unsigned int delay; -+ -+ if (kstrtouint(buf, 10, &delay) || delay > 1000) ++ int mode; ++ ++ if (sscanf(buf, "%d", &mode) != 1) + return -EINVAL; -+ -+ i2s_tdm->premute_delay_ms = delay; -+ dev_info(i2s_tdm->dev, "Premute delay set to %u ms", delay); -+ ++ ++ if (mode != 0 && mode != 1) ++ return -EINVAL; ++ ++ if (!i2s_tdm->dsd_on_gpio) ++ return -ENODEV; ++ ++ if (mode == 0 && i2s_tdm->dsd_mode_active) { ++ dev_info(dev, "Manual switch: DSD -> PCM\n"); ++ /* Enable mute before switch */ ++ if (i2s_tdm->mute_gpio) { ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } ++ i2s_tdm->dsd_mode_active = false; ++ gpiod_set_value(i2s_tdm->dsd_on_gpio, 0); ++ dev_info(dev, "DSD-on GPIO deactivated (PCM mode)\n"); ++ rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ i2s_tdm->format_change_mute = false; ++ } ++ } else if (mode == 1 && !i2s_tdm->dsd_mode_active) { ++ dev_info(dev, "Manual switch: PCM -> DSD\n"); ++ /* Enable mute before switch */ ++ if (i2s_tdm->mute_gpio) { ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); ++ i2s_tdm->format_change_mute = true; ++ gpiod_set_value(i2s_tdm->mute_gpio, 1); ++ if (i2s_tdm->mute_inv_gpio) ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, 0); ++ msleep(50); ++ } ++ i2s_tdm->dsd_mode_active = true; ++ gpiod_set_value(i2s_tdm->dsd_on_gpio, 1); ++ dev_info(dev, "DSD-on GPIO activated (DSD mode)\n"); ++ rockchip_i2s_tdm_apply_dsd_physical_swap(i2s_tdm); ++ if (i2s_tdm->mute_gpio) { ++ msleep(500); ++ i2s_tdm->format_change_mute = false; ++ } ++ } ++ + return count; +} + -+static DEVICE_ATTR(premute_delay_ms, 0644, premute_delay_ms_show, premute_delay_ms_store); ++static DEVICE_ATTR(dsd_mode_manual, 0644, dsd_mode_manual_show, dsd_mode_manual_store); + +/* Postmute delay sysfs interface */ +static ssize_t postmute_delay_ms_show(struct device *dev, @@ -3809,7 +3907,6 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + i2s_tdm->user_mute_priority = true; + + /* Cancel any automatic timers */ -+ cancel_delayed_work(&i2s_tdm->mute_pre_work); + cancel_delayed_work(&i2s_tdm->mute_post_work); + + /* Enable mute instantly */ @@ -3822,7 +3919,6 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + i2s_tdm->auto_mute_active = false; + + /* Cancel any automatic timers */ -+ cancel_delayed_work(&i2s_tdm->mute_pre_work); + cancel_delayed_work(&i2s_tdm->mute_post_work); + + /* Disable mute */ @@ -3899,7 +3995,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + return -EFAULT; + + /* DSD MUTE: Replace data with silence signal (50% duty cycle) */ -+ if (i2s_tdm->mute && i2s_tdm->dsd_mode_active && ++ if ((i2s_tdm->mute || i2s_tdm->auto_mute_active) && i2s_tdm->dsd_mode_active && + (substream->runtime->format == SNDRV_PCM_FORMAT_DSD_U32_LE || + substream->runtime->format == SNDRV_PCM_FORMAT_DSD_U32_BE || + substream->runtime->format == SNDRV_PCM_FORMAT_DSD_U16_LE) && @@ -3920,7 +4016,7 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + } + + /* PCM MUTE: Replace data with silence (0 volume) */ -+ if (i2s_tdm->mute && !i2s_tdm->dsd_mode_active) { ++ if ((i2s_tdm->mute || i2s_tdm->auto_mute_active) && !i2s_tdm->dsd_mode_active) { + memset(dma_area, 0, bytes); + dev_dbg(i2s_tdm->dev, "PCM Mute: replaced %lu bytes with silence\n", bytes); + goto skip_volume_processing; @@ -4108,17 +4204,16 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound - struct rk_i2s_tdm_dev *i2s_tdm = snd_soc_dai_get_drvdata(dai); + struct rk_i2s_tdm_dev *i2s_tdm = snd_soc_dai_get_drvdata(dai); + int ret; ++ ++ dai->capture_dma_data = &i2s_tdm->capture_dma_data; ++ dai->playback_dma_data = &i2s_tdm->playback_dma_data; - dai->capture_dma_data = &i2s_tdm->capture_dma_data; - dai->playback_dma_data = &i2s_tdm->playback_dma_data; -+ dai->capture_dma_data = &i2s_tdm->capture_dma_data; -+ dai->playback_dma_data = &i2s_tdm->playback_dma_data; ++ dev_info(i2s_tdm->dev, "Audiophile processing DISABLED - using standard ALSA\n"); - if (i2s_tdm->mclk_calibrate) - snd_soc_add_dai_controls(dai, &rockchip_i2s_tdm_compensation_control, 1); -+ dev_info(i2s_tdm->dev, "Audiophile processing DISABLED - using standard ALSA\n"); - -- return 0; + if (i2s_tdm->mclk_calibrate) { + ret = snd_soc_add_dai_controls(dai, &rockchip_i2s_tdm_compensation_control, 1); + if (ret) @@ -4140,7 +4235,8 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + i2s_tdm->mute_kcontrol = snd_soc_card_get_kcontrol(dai->component->card, rockchip_i2s_tdm_mute_control.name); + i2s_tdm->dai = dai; + } -+ + +- return 0; + return 0; } @@ -4189,21 +4285,21 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound { - struct rk_i2s_tdm_dev *i2s_tdm = snd_soc_dai_get_drvdata(dai); + struct rk_i2s_tdm_dev *i2s_tdm = snd_soc_dai_get_drvdata(dai); -+ -+ if (i2s_tdm->substreams[substream->stream]) -+ return -EBUSY; - if (i2s_tdm->substreams[substream->stream]) - return -EBUSY; -+ i2s_tdm->substreams[substream->stream] = substream; ++ if (i2s_tdm->substreams[substream->stream]) ++ return -EBUSY; - i2s_tdm->substreams[substream->stream] = substream; ++ i2s_tdm->substreams[substream->stream] = substream; + +- return 0; + /* Export DSD rates for userspace applications like RoonReady */ + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + dev_info(i2s_tdm->dev, "DSD support available: 2.8M, 5.6M, 11.2M, 22.5M Hz\n"); + } - -- return 0; ++ + return 0; } @@ -4800,13 +4896,13 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound { - int idx; + int idx; ++ - for (idx = 0; idx < num; idx++) { - regmap_update_bits(i2s_tdm->regmap, I2S_TXCR, - I2S_TXCR_PATH_MASK(idx), - I2S_TXCR_PATH(idx, i2s_tdm->i2s_sdos[idx])); - } -+ + for (idx = 0; idx < num; idx++) { + regmap_update_bits(i2s_tdm->regmap, I2S_TXCR, + I2S_TXCR_PATH_MASK(idx), @@ -5136,8 +5232,8 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + + i2s_tdm->dev = &pdev->dev; + i2s_tdm->volume = 100; -+ /* Initial mute state = false (sound on) to match player expectations */ -+ i2s_tdm->mute = false; ++ /* Initial mute state = true (muted on boot) */ ++ i2s_tdm->mute = true; + + /* Initialize ALSA control pointers */ + i2s_tdm->mute_kcontrol = NULL; @@ -5146,44 +5242,46 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + /* Initialize MCLK multiplier - 512 by default */ + i2s_tdm->mclk_multiplier = 512; + -+ /* Initialize automatic mute */ -+ i2s_tdm->auto_mute_active = false; ++ /* Initialize automatic mute - default ON (no signal yet) */ ++ i2s_tdm->auto_mute_active = true; + i2s_tdm->user_mute_priority = false; + mutex_init(&i2s_tdm->mute_lock); -+ INIT_DELAYED_WORK(&i2s_tdm->mute_pre_work, rockchip_i2s_tdm_mute_pre_work); + INIT_DELAYED_WORK(&i2s_tdm->mute_post_work, rockchip_i2s_tdm_mute_post_work); + + /* Initialize pause state */ + i2s_tdm->playback_paused = false; + i2s_tdm->capture_paused = false; + -+ /* Initialize debounce for auto-mute */ -+ i2s_tdm->last_auto_mute_time = 0; -+ -+ /* Initialize configurable auto-mute times */ -+ i2s_tdm->premute_delay_ms = DEFAULT_PREMUTE_DELAY_MS; // default for mute stabilization ++ /* Initialize configurable postmute delay */ + i2s_tdm->postmute_delay_ms = DEFAULT_POSTMUTE_DELAY_MS; // default for mute hold + -+ /* Initialize delayed start timer for proper premute timing */ -+ timer_setup(&i2s_tdm->delayed_start_timer, rockchip_i2s_tdm_delayed_start_timer, 0); -+ i2s_tdm->delayed_start_pending = false; -+ i2s_tdm->pending_stream = -1; -+ + dev_info(&pdev->dev, "ROCKCHIP_I2S_TDM: Initial volume = %d, mute = %d (sound %s)\n", + i2s_tdm->volume, i2s_tdm->mute, i2s_tdm->mute ? "OFF" : "ON"); + -+ i2s_tdm->mute_gpio = devm_gpiod_get_optional(&pdev->dev, "mute", GPIOD_OUT_LOW); ++ i2s_tdm->mute_gpio = devm_gpiod_get_optional(&pdev->dev, "mute", GPIOD_OUT_HIGH); + if (IS_ERR(i2s_tdm->mute_gpio)) { + ret = PTR_ERR(i2s_tdm->mute_gpio); + dev_err(&pdev->dev, "Failed to get mute GPIO: %d\n", ret); + i2s_tdm->mute_gpio = NULL; + } else if (i2s_tdm->mute_gpio) { -+ /* Set GPIO: mute=false -> GPIO=0 (sound on) */ ++ /* Set GPIO: mute=true -> GPIO=1 (muted) */ + gpiod_set_value(i2s_tdm->mute_gpio, i2s_tdm->mute ? 1 : 0); + dev_info(&pdev->dev, "ROCKCHIP_I2S_TDM: GPIO mute initialized to %d (sound %s)\n", + i2s_tdm->mute ? 1 : 0, i2s_tdm->mute ? "OFF" : "ON"); + } + ++ /* Initialize inverted mute GPIO (GPIO2_A5, pin 69) - LOW when muted */ ++ i2s_tdm->mute_inv_gpio = devm_gpiod_get_optional(&pdev->dev, "mute-inv", GPIOD_OUT_LOW); ++ if (IS_ERR(i2s_tdm->mute_inv_gpio)) { ++ ret = PTR_ERR(i2s_tdm->mute_inv_gpio); ++ dev_err(&pdev->dev, "Failed to get inverted mute GPIO: %d\n", ret); ++ i2s_tdm->mute_inv_gpio = NULL; ++ } else if (i2s_tdm->mute_inv_gpio) { ++ gpiod_set_value(i2s_tdm->mute_inv_gpio, i2s_tdm->mute ? 0 : 1); ++ dev_info(&pdev->dev, "ROCKCHIP_I2S_TDM: Inverted mute GPIO initialized to %d\n", ++ i2s_tdm->mute ? 0 : 1); ++ } ++ + /* Initialize DSD-on GPIO */ + i2s_tdm->dsd_on_gpio = devm_gpiod_get_optional(&pdev->dev, "dsd-enable", GPIOD_OUT_LOW); + if (IS_ERR(i2s_tdm->dsd_on_gpio)) { @@ -5204,6 +5302,17 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + i2s_tdm->pcm_channel_swap = false; /* PCM channel swap disabled by default */ + i2s_tdm->dsd_physical_swap = false; /* DSD physical swap disabled by default */ + ++ /* Initialize frequency domain GPIO (GPIO1_D1) polarity control */ ++ i2s_tdm->freq_domain_invert = false; /* Default: no inversion */ ++ i2s_tdm->freq_domain_gpio = devm_gpiod_get_optional(&pdev->dev, "freq-domain", GPIOD_ASIS); ++ if (IS_ERR(i2s_tdm->freq_domain_gpio)) { ++ /* GPIO might be controlled by gpio-mux-clock, this is normal */ ++ i2s_tdm->freq_domain_gpio = NULL; ++ dev_info(&pdev->dev, "ROCKCHIP_I2S_TDM: Frequency domain GPIO controlled by gpio-mux-clock\n"); ++ } else if (i2s_tdm->freq_domain_gpio) { ++ dev_info(&pdev->dev, "ROCKCHIP_I2S_TDM: Frequency domain GPIO available for polarity control\n"); ++ } ++ + of_id = of_match_device(rockchip_i2s_tdm_match, &pdev->dev); + if (!of_id) + return -EINVAL; @@ -5750,10 +5859,17 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound + /* Not critical, continue */ + } + -+ /* Create sysfs attribute for premute delay */ -+ ret = device_create_file(&pdev->dev, &dev_attr_premute_delay_ms); ++ /* Create sysfs attribute for frequency domain GPIO polarity control */ ++ ret = device_create_file(&pdev->dev, &dev_attr_freq_domain_invert); ++ if (ret) { ++ dev_err(&pdev->dev, "Failed to create freq_domain_invert sysfs attribute: %d\n", ret); ++ /* Not critical, continue */ ++ } ++ ++ /* Create sysfs attribute for manual DSD mode control */ ++ ret = device_create_file(&pdev->dev, &dev_attr_dsd_mode_manual); + if (ret) { -+ dev_err(&pdev->dev, "Failed to create premute_delay_ms sysfs attribute: %d\n", ret); ++ dev_err(&pdev->dev, "Failed to create dsd_mode_manual sysfs attribute: %d\n", ret); + /* Not critical, continue */ + } + @@ -5790,25 +5906,23 @@ diff -Naur original_dir/sound/soc/rockchip/rockchip_i2s_tdm.c modified_dir/sound static int rockchip_i2s_tdm_remove(struct platform_device *pdev) { - struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(&pdev->dev); -- ++ struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(&pdev->dev); + - pm_runtime_disable(&pdev->dev); - if (!pm_runtime_status_suspended(&pdev->dev)) - i2s_tdm_runtime_suspend(&pdev->dev); -+ struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(&pdev->dev); ++ /* Cleanup auto-mute timer */ ++ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); - clk_disable_unprepare(i2s_tdm->mclk_tx); - clk_disable_unprepare(i2s_tdm->mclk_rx); - clk_disable_unprepare(i2s_tdm->hclk); -+ /* Cleanup auto-mute timers */ -+ cancel_delayed_work_sync(&i2s_tdm->mute_pre_work); -+ cancel_delayed_work_sync(&i2s_tdm->mute_post_work); -+ del_timer_sync(&i2s_tdm->delayed_start_timer); -+ + /* Remove sysfs attributes */ + device_remove_file(&pdev->dev, &dev_attr_mclk_multiplier); + device_remove_file(&pdev->dev, &dev_attr_dsd_sample_swap); + device_remove_file(&pdev->dev, &dev_attr_pcm_channel_swap); + device_remove_file(&pdev->dev, &dev_attr_dsd_physical_swap); ++ device_remove_file(&pdev->dev, &dev_attr_freq_domain_invert); + + pm_runtime_disable(&pdev->dev); + if (!pm_runtime_status_suspended(&pdev->dev)) diff --git a/sync_master_to_ultra.sh b/sync_master_to_ultra.sh deleted file mode 100755 index d6c23864..00000000 --- a/sync_master_to_ultra.sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd "$SCRIPT_DIR" - -echo "=== Syncing master to ultra (preserving ultra-specific files) ===" - -# Check we're on master branch -CURRENT_BRANCH=$(git branch --show-current) -if [ "$CURRENT_BRANCH" != "master" ]; then - echo "ERROR: Must be on master branch. Currently on: $CURRENT_BRANCH" - exit 1 -fi - -# Check working tree is clean -if ! git diff-index --quiet HEAD --; then - echo "ERROR: Working tree has uncommitted changes. Commit or stash them first." - exit 1 -fi - -# List of patterns to EXCLUDE from sync (ultra-specific files) -EXCLUDE_PATTERNS=( - # Sync script itself (master only) - "^sync_master_to_ultra.sh$" - - # Build scripts (completely different) - "^build.sh$" - "^buildroot/board/luckfox-pico/" - "^ext_tree/configs/" - "^ext_tree/external.mk$" - - # Platform-specific kernel/boot configs - "^ext_tree/board/luckfox/config/" - "^ext_tree/board/luckfox/dts_max/" - - # Build hooks (different post-build.sh for MAX vs Ultra) - "^ext_tree/board/luckfox/scripts/post-build.sh$" - "^ext_tree/board/luckfox/scripts/post-image" - "^ext_tree/board/luckfox/scripts/linux-post-build.sh$" - - # U-boot binaries (MAX only - pre-built) - "^ext_tree/board/luckfox/uboot/" - - # Platform-specific rootfs files - "^ext_tree/board/luckfox/rootfs_overlay/etc/fstab$" - "^ext_tree/board/luckfox/rootfs_overlay/etc/fw_env.config$" - - # Platform-specific init scripts (MTD vs eMMC specific) - "^ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S01RkLunch$" - "^ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S20linkmount$" - "^ext_tree/board/luckfox/rootfs_overlay/etc/init.d/S94ioi2s$" - - # Platform-specific helper scripts (DTB switching - different for MAX/Ultra) - "^ext_tree/board/luckfox/rootfs_overlay/opt/2_.*\.sh$" - "^ext_tree/board/luckfox/rootfs_overlay/opt/export.sh$" - "^ext_tree/board/luckfox/rootfs_overlay/opt/update.sh$" - - "^buildroot/output/" -) - -echo "Step 1: Getting list of changed files in master..." -MASTER_HEAD=$(git rev-parse master) - -# Stash current ultra state -echo "Step 2: Switching to ultra branch..." -git checkout ultra - -ULTRA_HEAD=$(git rev-parse ultra) - -echo "Master HEAD: $MASTER_HEAD" -echo "Ultra HEAD: $ULTRA_HEAD" - -# Get list of files that differ between master and ultra (ignoring platform-specific) -echo "Step 3: Finding files that differ between master and ultra..." -CHANGED_FILES=$(git diff --name-only ultra master) - -echo "Step 4: Filtering files (excluding ultra-specific)..." -FILES_TO_SYNC="" -SKIPPED_COUNT=0 -SYNCED_COUNT=0 - -while IFS= read -r file; do - if [ -z "$file" ]; then - continue - fi - - SKIP=false - for pattern in "${EXCLUDE_PATTERNS[@]}"; do - if echo "$file" | grep -qE "$pattern"; then - echo " [SKIP] $file (matches: $pattern)" - SKIP=true - SKIPPED_COUNT=$((SKIPPED_COUNT + 1)) - break - fi - done - - if [ "$SKIP" = false ]; then - FILES_TO_SYNC="$FILES_TO_SYNC $file" - SYNCED_COUNT=$((SYNCED_COUNT + 1)) - fi -done <<< "$CHANGED_FILES" - -echo "" -echo "Files to sync: $SYNCED_COUNT" -echo "Files skipped: $SKIPPED_COUNT" -echo "" - -if [ -z "$FILES_TO_SYNC" ]; then - echo "No files to sync!" - exit 0 -fi - -echo "Step 5: Checking out files from master..." -for file in $FILES_TO_SYNC; do - if git cat-file -e master:"$file" 2>/dev/null; then - echo " [SYNC] $file" - # Create directory if needed - mkdir -p "$(dirname "$file")" - # Checkout file from master - git checkout master -- "$file" - else - echo " [DELETE] $file (removed in master)" - git rm -f "$file" 2>/dev/null || rm -f "$file" - fi -done - -echo "" -echo "Step 6: Updating branding (MAX → Ultra)..." -INDEX_PHP="ext_tree/board/luckfox/rootfs_overlay/var/www/index.php" -if [ -f "$INDEX_PHP" ]; then - if grep -q "MAX" "$INDEX_PHP"; then - sed -i 's/MAX/Ultra/g' "$INDEX_PHP" - git add "$INDEX_PHP" - echo " [UPDATED] $INDEX_PHP (MAX → Ultra)" - fi -fi - -echo "" -echo "Step 7: Cleaning up empty directories..." -# Find and remove empty directories (excluding .git and excluded paths) -find . -type d -empty -not -path "./.git/*" | while read -r dir; do - # Remove leading ./ from path for pattern matching - clean_dir="${dir#./}" - - SKIP=false - for pattern in "${EXCLUDE_PATTERNS[@]}"; do - if echo "$clean_dir" | grep -qE "$pattern"; then - SKIP=true - break - fi - done - - if [ "$SKIP" = false ]; then - echo " [RMDIR] $dir" - rmdir "$dir" 2>/dev/null || true - fi -done - -echo "" -echo "Step 8: Reviewing changes..." -git status - -echo "" -echo "=== Sync complete! ===" -echo "" -echo "Review the changes with: git diff" -echo "Commit with: git commit -m 'Sync from master'" -echo "Discard with: git reset --hard HEAD"