#!/bin/sh # Installation script for BR_glibc_busybox builds # Provide ssh password ## Option 1: uncomment the following line to display entered password #sudo read -sp "Enter ssh password : " PASSWORD_SSH ## Option 2: hide the entered password clear echo "----------------------------------------------------------------------------------" echo "- Welcome to AVDSP installation -" echo "----------------------------------------------------------------------------------" echo "Boot file can boot OPC/OPO with Ethernet/Wifi and boot OPL with wifi" echo "Optical input is selected by default installation" echo "Check sound card settings with alsamixer if no audio after this installation" read -p "Please enter name for new DSP system then press Enter: " DSP_NAME echo "Please enter password for packages server connection then press Enter: " stty -echo read PASSWORD_SSH stty echo echo "$DSP_NAME is installing, please wait" CURRENT_HOST_NAME=$(hostname) # Install basic system cd /etc/ #wget http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/chrony.conf curl -L -o /etc/chrony.conf http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/chrony.conf cd .. /etc/init.d/S49chrony restart mv /etc/init.d/S01syslogd /etc/init.d/D_S01syslogd mv /etc/init.d/S02klogd /etc/init.d/D_S02klogd mv /etc/init.d/S02sysctl /etc/init.d/D_S02sysctl mv /etc/init.d/S13irqbalance /etc/init.d/D_S13irqbalance mv /etc/init.d/S21haveged /etc/init.d/D_S31haveged mv /etc/init.d/S25lircd /etc/init.d/D_S25lircd mv /etc/init.d/S60fail2ban /etc/init.d/D_S60fail2ban rm /etc/init.d/S*inadyn mv /etc/init.d/D_S98inadyn /etc/init.d/S98inadyn mv /etc/init.d/S10triggerhappy /etc/init.d/D_S13triggerhappy mv /etc/init.d/S05avahi-setup.sh /etc/init.d/D_S35avahi-setup.sh mv /etc/init.d/S30dbus /etc/init.d/S14dbus mv /etc/init.d/S40network /etc/init.d/S11network mv /etc/init.d/D_S15_rtirq.sh /etc/init.d/S15_rtirq.sh mv /etc/init.d/D_S22alsactl /etc/init.d/S22alsactl echo "Updating system clock" # sleep 1s # NOT YET DONE AUTOMATICALLY Reserve CPU #CURRENT_APPEND=$(awk '/append / {print $0}' /boot/extlinux/extlinux.conf) #sed -i 's%$CURRENT_APPEND%$CURRENT_APPEND isolcpus=1,2%g' /boot/extlinux/extlinux.conf #sed -i '4s/$/ isolcpus=1,2/' /boot/extlinux/extlinux.conf sed -i '4s/$/ rcu_nocb_poll rcu_nocbs=2,3 nohz=on nohz_full=2,3 kthread_cpus=1 irqaffinity=0 isolcpus=managed_irq,domain,2,3 nosoftlockup tsc=nowatchdog dtoverlay=dwc2/' /boot/extlinux/extlinux.conf # threadirqs and mitigation=off are suggested by rtcps # Set maximum priority for audio mkdir -p /etc/security echo '@audio - rtprio 90 # maximum realtime priority' >> /etc/security/limits.conf echo '@audio - memlock unlimited # maximum locked-in-memory address space (KB)' >> /etc/security/limits.conf # Install audio priority check pip install --upgrade rtcqs # Set high priority for irq threads handle rtc, timer, usb, snd echo '# IRQ thread service names' >> /etc/rtirq.conf echo '# (space separated list, from higher to lower priority).' >> /etc/rtirq.conf echo 'RTIRQ_NAME_LIST="rtc timer ohci ehci snd"' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# Highest priority.' >> /etc/rtirq.conf echo 'RTIRQ_PRIO_HIGH=90' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# Priority decrease step.' >> /etc/rtirq.conf echo 'RTIRQ_PRIO_DECR=5' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# Lowest priority.' >> /etc/rtirq.conf echo 'RTIRQ_PRIO_LOW=51' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# Whether to reset all IRQ threads to SCHED_OTHER.' >> /etc/rtirq.conf echo 'RTIRQ_RESET_ALL=0' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# On kernel configurations that support it,' >> /etc/rtirq.conf echo '# which services should be NOT threaded' >> /etc/rtirq.conf echo '# (space separated list).' >> /etc/rtirq.conf echo 'RTIRQ_NON_THREADED="rtc ohci ehci snd"' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# Process names which will be forced to the' >> /etc/rtirq.conf echo '# highest realtime priority range (99-91)' >> /etc/rtirq.conf echo '' >> /etc/rtirq.conf echo '# (space separated list, from highest to lower priority).' >> /etc/rtirq.conf echo 'RTIRQ_HIGH_LIST="rtc timer ohci ehci"' >> /etc/rtirq.conf # Load modules, create Loopback, import rc_keymaps echo '#!/bin/sh' >> /etc/init.d/S91modules echo '#modprobe snd &' >> /etc/init.d/S91modules echo 'modprobe snd-timer &' >> /etc/init.d/S91modules echo 'modprobe snd-pcm &' >> /etc/init.d/S91modules echo 'modprobe snd-aloop &' >> /etc/init.d/S91modules echo 'modprobe libcomposite &' >> /etc/init.d/S91modules echo 'ir-keytable -a /etc/rc_maps.cfg &' >> /etc/init.d/S91modules echo '# modprobe g_audio c_chmask=3 p_chmask=3 c_srate=48000 p_srate=48000 c_ssize=2 p_ssize=2 iProduct="uacAVDSP" idVendor="AVDSP" iManufacturer="Mini Great Things" iSerialNumber="2351117mgt" & ## more properties can be set, look at output of modinfo g_audio' >> /etc/init.d/S91modules echo '# modprobe g_audio c_srate=48000 c_ssize=4 c_chmask=3 p_chmask=0 iProduct="AVDSP USB Gadget" &' >> /etc/init.d/S91modules mv /etc/init.d/S91modules /etc/init.d/S14modules chmod +x /etc/init.d/S14modules # Set rtc max resolution echo '#!/bin/sh' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '# Set RTC max frequency and allowing a process/real-time task to dominate the CPU indefinitely' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax echo 'echo 2048 > /sys/class/rtc/rtc0/max_user_freq &' >> /etc/init.d/S01_rtcmax # echo 'echo 2048 > /proc/sys/dev/hpet/max-user-freq &' >> /etc/init.d/S01_rtcmax echo 'echo -1 > /proc/sys/kernel/sched_rt_runtime_us &' >> /etc/init.d/S01_rtcmax echo 'echo 0 > /proc/sys/kernel/timer_migration &' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '# Set irq to specific CPU' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax chmod +x /etc/init.d/S01_rtcmax # Set other enviroment parameters echo '#!/bin/sh' >> /etc/init.d/S14other_enviroments echo '#' >> /etc/init.d/S14other_enviroments echo '# Set other enviroment parameters' >> /etc/init.d/S14other_enviroments echo '#' >> /etc/init.d/S14other_enviroments echo '' >> /etc/init.d/S14other_enviroments echo 'sysctl kernel.shmmax=131072 &' >> /etc/init.d/S14other_enviroments echo 'sysctl kernel.shmall=110080 &' >> /etc/init.d/S14other_enviroments echo 'sysctl -w kernel.sem="250 32000 100 128" &' >> /etc/init.d/S14other_enviroments echo 'sysctl kernel.msgmax=65535 &' >> /etc/init.d/S14other_enviroments echo 'sysctl kernel.msgmnb=65535 &' >> /etc/init.d/S14other_enviroments echo 'sysctl kernel.msgmni=2048 &' >> /etc/init.d/S14other_enviroments echo 'sysctl fs.inotify.max_user_watches=600000 &' >> /etc/init.d/S14other_enviroments echo 'sysctl vm.swappiness=10 &' >> /etc/init.d/S14other_enviroments echo '' >> /etc/init.d/S14other_enviroments echo 'echo 4 >/proc/irq/149/smp_affinity & ### Assign CPU3 to handle irq for usb on OPL' >> /etc/init.d/S14other_enviroments echo 'echo 4 >/proc/irq/150/smp_affinity & ### Assign CPU3 to handle irq for usb on OPL' >> /etc/init.d/S14other_enviroments echo 'echo 4 >/proc/irq/151/smp_affinity & ### Assign CPU3 to handle irq for usb on OPL' >> /etc/init.d/S14other_enviroments echo 'echo 4 >/proc/irq/156/smp_affinity & ### Assign CPU3 to handle irq for usb on OPL' >> /etc/init.d/S14other_enviroments echo 'echo 4 >/proc/irq/157/smp_affinity & ### Assign CPU3 to handle irq for usb on OPL' >> /etc/init.d/S14other_enviroments chmod +x /etc/init.d/S14other_enviroments # Install USB Audio Gadget (depend on board, dtb file might need to be edited to enable otg) # Part 1: first time creation mkdir /config CONFIGFS_HOME=/config CAPTURE_CHANNEL_MASK=3 CAPTURE_SAMPLE_RATES=48000 CAPTURE_SAMPLE_SIZE=2 PLAY_CHANNEL_MASK=3 PLAY_SAMPLE_RATES=48000 PLAY_SAMPLE_SIZE=2 modprobe snd modprobe snd-timer modprobe snd-pcm modprobe snd-aloop modprobe libcomposite mount none $CONFIGFS_HOME -t configfs mkdir $CONFIGFS_HOME/usb_gadget/uacAVDSP cd $CONFIGFS_HOME/usb_gadget/uacAVDSP echo 0x1d6b > idVendor # Linux Foundation echo 0x0101 > idProduct # Linux-USB Audio Gadget or 0x0104 for Multifunction Composite Gadget echo 0x0100 > bcdDevice # v1.0.0 echo 0x0200 > bcdUSB # USB2 mkdir -p strings/0x409 echo '2351117mgt' > strings/0x409/serialnumber echo 'Mini Great Things' > strings/0x409/manufacturer echo 'uacAVDSP' > strings/0x409/product mkdir -p configs/c.1/strings/0x409 mkdir -p functions/uac2.usb0 echo $CAPTURE_CHANNEL_MASK > functions/uac2.usb0/c_chmask echo $CAPTURE_SAMPLE_RATES > functions/uac2.usb0/c_srate echo $CAPTURE_SAMPLE_SIZE > functions/uac2.usb0/c_ssize echo $PLAY_CHANNEL_MASK > functions/uac2.usb0/p_chmask echo $PLAY_SAMPLE_RATES > functions/uac2.usb0/p_srate echo $PLAY_SAMPLE_SIZE > functions/uac2.usb0/p_ssize ln -s functions/uac2.usb0 configs/c.1/ ls /sys/class/udc > UDC # Part 2: create script to re-enable at boot echo '#!/bin/sh' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# USB Audio configuration:' >> /etc/init.d/S15_UAC2 echo 'CONFIGFS_HOME=/config' >> /etc/init.d/S15_UAC2 echo 'CAPTURE_CHANNEL_MASK=3' >> /etc/init.d/S15_UAC2 echo 'CAPTURE_SAMPLE_RATES=48000' >> /etc/init.d/S15_UAC2 echo 'CAPTURE_SAMPLE_SIZE=2' >> /etc/init.d/S15_UAC2 echo 'PLAY_CHANNEL_MASK=3' >> /etc/init.d/S15_UAC2 echo 'PLAY_SAMPLE_RATES=48000' >> /etc/init.d/S15_UAC2 echo 'PLAY_SAMPLE_SIZE=2' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# Load libcomposite' >> /etc/init.d/S15_UAC2 echo '# modprobe snd' >> /etc/init.d/S15_UAC2 echo '# modprobe snd-timer' >> /etc/init.d/S15_UAC2 echo '# modprobe snd-pcm' >> /etc/init.d/S15_UAC2 echo '# modprobe snd-aloop' >> /etc/init.d/S15_UAC2 echo '# modprobe libcomposite' >> /etc/init.d/S15_UAC2 echo 'mount none $CONFIGFS_HOME -t configfs' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# Create a gadget called AVDSP_Gadget' >> /etc/init.d/S15_UAC2 echo 'mkdir $CONFIGFS_HOME/usb_gadget/uacAVDSP' >> /etc/init.d/S15_UAC2 echo 'cd $CONFIGFS_HOME/usb_gadget/uacAVDSP' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# Configure our gadget details' >> /etc/init.d/S15_UAC2 echo 'echo 0x1d6b > idVendor # Linux Foundation' >> /etc/init.d/S15_UAC2 echo 'echo 0x0101 > idProduct # Linux-USB Audio Gadget or 0x0104 for Multifunction Composite Gadget' >> /etc/init.d/S15_UAC2 echo 'echo 0x0100 > bcdDevice # v1.0.0' >> /etc/init.d/S15_UAC2 echo 'echo 0x0200 > bcdUSB # USB2' >> /etc/init.d/S15_UAC2 echo 'mkdir -p strings/0x409' >> /etc/init.d/S15_UAC2 echo 'echo '2351117mgt' > strings/0x409/serialnumber' >> /etc/init.d/S15_UAC2 echo 'echo 'Mini Great Things' > strings/0x409/manufacturer' >> /etc/init.d/S15_UAC2 echo 'echo 'uacAVDSP' > strings/0x409/product' >> /etc/init.d/S15_UAC2 echo 'mkdir -p configs/c.1/strings/0x409' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# UAC2 (audio) gadget' >> /etc/init.d/S15_UAC2 echo '# attributes from: https://www.kernel.org/doc/Documentation/ABI/testing/configfs-usb-gadget-uac2' >> /etc/init.d/S15_UAC2 echo 'mkdir -p functions/uac2.usb0' >> /etc/init.d/S15_UAC2 echo 'echo $CAPTURE_CHANNEL_MASK > functions/uac2.usb0/c_chmask' >> /etc/init.d/S15_UAC2 echo 'echo $CAPTURE_SAMPLE_RATES > functions/uac2.usb0/c_srate' >> /etc/init.d/S15_UAC2 echo 'echo $CAPTURE_SAMPLE_SIZE > functions/uac2.usb0/c_ssize' >> /etc/init.d/S15_UAC2 echo 'echo $PLAY_CHANNEL_MASK > functions/uac2.usb0/p_chmask' >> /etc/init.d/S15_UAC2 echo 'echo $PLAY_SAMPLE_RATES > functions/uac2.usb0/p_srate' >> /etc/init.d/S15_UAC2 echo 'echo $PLAY_SAMPLE_SIZE > functions/uac2.usb0/p_ssize' >> /etc/init.d/S15_UAC2 echo 'ln -s functions/uac2.usb0 configs/c.1/' >> /etc/init.d/S15_UAC2 echo '' >> /etc/init.d/S15_UAC2 echo '# End functions' >> /etc/init.d/S15_UAC2 echo 'ls /sys/class/udc > UDC' >> /etc/init.d/S15_UAC2 chmod +x /etc/init.d/S15_UAC2 # Create script to config ICUSBAUDIO7D (run once after plug ICUSBAUDIO7D in) OR sample to config sound card with amixer # amixer cset numid=8 197 # Set playback at full volume for speaker all channel # amixer cset numid=16 2 # Set optical as default in # amixer cset numid=6 8065 # Set playback at full volume for line-in sources # amixer cset numid=4 8065 # Set playback at full volume for mic-in sources # echo '#!/bin/sh' >> /home/mgt/LineVol.sh # echo 'amixer cset numid=8 197 # Set playback at full volume for speaker all channel' >> /home/mgt/LineVol.sh # echo 'amixer cset numid=16 2 # Set optical as default in' >> /home/mgt/LineVol.sh # echo 'amixer cset numid=6 8065 # Set playback at full volume for line-in sources' >> /home/mgt/LineVol.sh # echo 'amixer cset numid=4 8065 # Set playback at full volume for mic-in sources' >> /home/mgt/LineVol.sh # chmod +x /home/mgt/LineVol.sh # IR control configs & layout & triggerhappy mv /etc/rc_maps.cfg /etc/rc_maps.cfg.bak mkdir -p /etc/rc_keymaps echo '* * /etc/rc_keymaps/RM-991.toml' >> /etc/rc_maps.cfg echo '# AVDSP controls by IR remote control' >> /etc/rc_keymaps/RM-991.toml echo '[[protocols]]' >> /etc/rc_keymaps/RM-991.toml echo 'name = "RM-991"' >> /etc/rc_keymaps/RM-991.toml echo 'protocol = "nec"' >> /etc/rc_keymaps/RM-991.toml echo 'variant = "nec"' >> /etc/rc_keymaps/RM-991.toml echo '[protocols.scancodes]' >> /etc/rc_keymaps/RM-991.toml echo '0x7a1a = "KEY_VOLUMEUP"' >> /etc/rc_keymaps/RM-991.toml echo '0x7a1b = "KEY_VOLUMEDOWN"' >> /etc/rc_keymaps/RM-991.toml echo '0x70768 = "KEY_OK"' >> /etc/rc_keymaps/RM-991.toml echo '0x7a1c = "KEY_MUTE"' >> /etc/rc_keymaps/RM-991.toml echo '0x70760 = "KEY_UP"' >> /etc/rc_keymaps/RM-991.toml echo '0x70761 = "KEY_DOWN"' >> /etc/rc_keymaps/RM-991.toml echo '0x70765 = "KEY_LEFT"' >> /etc/rc_keymaps/RM-991.toml echo '0x70762 = "KEY_RIGHT"' >> /etc/rc_keymaps/RM-991.toml echo '0x70758 = "KEY_BACK"' >> /etc/rc_keymaps/RM-991.toml echo '0x817310 = "KEY_MODE"' >> /etc/rc_keymaps/RM-991.toml echo '# This sample for testing only, replace with real command' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '# AVDSP RM-991 Remote control' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_VOLUMEUP 1 touch /home/mgt/VolUP.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_VOLUMEUP 2 touch /home/mgt/VolUP_HOLD.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_VOLUMEDOWN 1 touch /home/mgt/VolDOWN.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_VOLUMEDOWN 2 touch /home/mgt/VolDOWN_HOLD.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_UP 1 touch /home/mgt/KeyUP.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_UP 2 touch /home/mgt/KeyUP_HOLD.txt' >> /etc/triggerhappy/triggers.d/RM-991.conf echo '#KEY_MUTE 1 touch /home/mgt/KeyMute.txt # /usr/bin/amixer -c ICUSBAUDIO7D set Speaker toggle' >> /etc/triggerhappy/triggers.d/RM-991.conf sed -i 's/ --user nobody/ --user root/g' /etc/init.d/S13triggerhappy sed -i '/ start-stop-daemon --start/c\ chrt 99 start-stop-daemon -S --quiet --pidfile $PIDFILE -n triggerhappy --startas /usr/bin/taskset 4 /usr/sbin/thd -- $DAEMON_ARGS &' /etc/init.d/S13triggerhappy sed -i '/ start-stop-daemon --stop/c\ start-stop-daemon --stop --quiet --pidfile $PIDFILE &' /etc/init.d/S13triggerhappy sed -i '/ && echo/c\ [ $? = 0 ] && echo "OK" || echo "FAIL"' /etc/init.d/S13triggerhappy # Add alsa-ucm for Alsa restore mkdir -p /home/mgt/temp cd /home/mgt/temp curl -L -o alsa-ucm-conf.tar.gz http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/alsa-ucm-conf.tar.gz gunzip alsa-ucm-conf.tar.gz tar xvf alsa-ucm-conf.tar -C /usr/share/alsa --strip-components=1 cd /home/mgt/ rm -rf /home/mgt/temp # Fix buildroot python3 compilation error # cp /usr/lib/python3.11/site-packages/pip/__pip-runner__.pyc /usr/lib/python3.11/site-packages/pip/__pip-runner__.py # cp /usr/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/_in_process.pyc /usr/lib/python3.11/site-packages/pip/_vendor/pep517/in_process/_in_process.py # Install camilladsp mkdir -p /home/mgt/camilladsp mkdir -p /home/mgt/camilladsp/coeffs mkdir -p /home/mgt/camilladsp/configs echo 'devices:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' samplerate: 48000' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' chunksize: 1024' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' queuelimit: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' adjust_period: 10' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' capture:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' format: S16LE' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' device: hw:Loopback' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Alsa' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' capture_samplerate: 48000' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' enable_rate_adjust: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' playback:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels: 6' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' device: hw:Loopback' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' format: S16LE' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Alsa' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' rate_measure_interval: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' resampler:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' profile: Balanced' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: AsyncSinc' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' silence_threshold: -71' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' silence_timeout: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' stop_on_rate_change: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' target_level: 1024' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' volume_ramp_time: 400' >> /home/mgt/camilladsp/configs/camilladsp.yml echo 'mixers:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' 2to6channel:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' in: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' out: 6' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mapping:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 4' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 5' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo 'pipeline:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo '- name: 2to6channel' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Mixer' >> /home/mgt/camilladsp/configs/camilladsp.yml cd /home/mgt/camilladsp #wget http://mgt.dynu.net:8008/CAMILLADSP/camilladsp /home/mgt/camilladsp/camilladsp_binaries/camilladsp_2.0.3_OPx curl -L -o /home/mgt/camilladsp/camilladsp http://mgt.dynu.net:8008/CAMILLADSP/camilladsp_binaries/camilladsp_2.0.3_OPx chmod +x camilladsp # Create camilladsp start/stop script # With current BR_OPZ_config CPU (run on OPC) number for taskset should be (count from 0) 1-0, 2-1, 3-0, 4-2, 5-0/5-2, 6-1, 7-0, 8-3 echo '#!/bin/sh' >> /etc/init.d/S11camilladsp echo '' >> /etc/init.d/S11camilladsp echo 'start() {' >> /etc/init.d/S11camilladsp echo ' printf "Check if CamillaDSP running: " &' >> /etc/init.d/S11camilladsp echo ' CamillaDSP_State=$(pgrep -f '/camilladsp/camilladsp') &' >> /etc/init.d/S11camilladsp echo ' [ "$CamillaDSP_State" = "" ] && echo -e "\nStating CamillaDSP" || echo -e "\nCamillaDSP is running" &' >> /etc/init.d/S11camilladsp echo ' (while [ "$CamillaDSP_State" = "" ]; do' >> /etc/init.d/S11camilladsp echo ' #chrt 99 start-stop-daemon -S -c mgt -n camilladsp --startas /usr/bin/taskset 8 /home/mgt/camilladsp/camilladsp /home/mgt/camilladsp/active_config.yml -- -p 1234 -o /home/mgt/camilladsp/logs/camilladsp.log -l off' >> /etc/init.d/S11camilladsp echo ' chrt 99 start-stop-daemon -S -c mgt -n camilladsp --startas /usr/bin/taskset 8 /home/mgt/camilladsp/camilladsp -- -w -s /home/mgt/camilladsp/statefile.yml -p 1234 -o /home/mgt/camilladsp/logs/camilladsp.log -l off' >> /etc/init.d/S11camilladsp echo ' MainPID=$! && sleep 0.3s' >> /etc/init.d/S11camilladsp echo ' taskset -cp 8 $(pstree -p $MainPID | sed -n 6p | cut -d "(" -f2 | cut -d ")" -f1) &' >> /etc/init.d/S11camilladsp echo ' CamillaDSP_State=$(pgrep -f '/camilladsp/camilladsp')' >> /etc/init.d/S11camilladsp echo ' done) &' >> /etc/init.d/S11camilladsp echo ' [ $? = 0 ] && echo "OK" || echo "FAIL"' >> /etc/init.d/S11camilladsp echo '}' >> /etc/init.d/S11camilladsp echo 'stop() {' >> /etc/init.d/S11camilladsp echo ' echo "Can not stop/restart CamillaDSP due to setting as system service. Reboot system if needed" &' >> /etc/init.d/S11camilladsp echo ' #killall camilladsp' >> /etc/init.d/S11camilladsp echo ' #[ $? = 0 ] && echo "OK" || echo "FAIL"' >> /etc/init.d/S11camilladsp echo '}' >> /etc/init.d/S11camilladsp echo 'restart() {' >> /etc/init.d/S11camilladsp echo ' stop' >> /etc/init.d/S11camilladsp echo ' start' >> /etc/init.d/S11camilladsp echo '}' >> /etc/init.d/S11camilladsp echo 'case "$1" in' >> /etc/init.d/S11camilladsp echo ' start)' >> /etc/init.d/S11camilladsp echo ' start' >> /etc/init.d/S11camilladsp echo ' ;;' >> /etc/init.d/S11camilladsp echo ' stop)' >> /etc/init.d/S11camilladsp echo ' stop' >> /etc/init.d/S11camilladsp echo ' ;;' >> /etc/init.d/S11camilladsp echo ' restart|reload)' >> /etc/init.d/S11camilladsp echo ' restart' >> /etc/init.d/S11camilladsp echo ' ;;' >> /etc/init.d/S11camilladsp echo ' *)' >> /etc/init.d/S11camilladsp echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/S11camilladsp echo ' exit 1' >> /etc/init.d/S11camilladsp echo 'esac' >> /etc/init.d/S11camilladsp echo 'exit $?' >> /etc/init.d/S11camilladsp chmod +x /etc/init.d/S11camilladsp mv /etc/init.d/S11camilladsp /etc/init.d/S13camilladsp # Install pycamilladsp cd /home/mgt/camilladsp #sudo git clone https://github.com/HEnquist/pycamilladsp curl -L -o /home/mgt/camilladsp/pycamilladsp.zip http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/CamillaDSP_GUI_v2/pycamilladsp.zip unzip pycamilladsp.zip rm pycamilladsp.zip cd pycamilladsp git checkout pip3 install . cd .. # Install pycamilladsp-plot cd /home/mgt/camilladsp #sudo git clone https://github.com/HEnquist/pycamilladsp-plot curl -L -o /home/mgt/camilladsp/pycamilladsp-plot.zip http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/CamillaDSP_GUI_v2/pycamilladsp-plot.zip unzip pycamilladsp-plot.zip rm pycamilladsp-plot.zip cd pycamilladsp-plot git checkout pip3 install . cd .. # Install camilladspgui cd /home/mgt/camilladsp curl -L -o /home/mgt/camilladsp/camillagui.zip http://mgt.dynu.net:8008/CAMILLADSP/AVDSP_support_files_for_Installation_scripts/CamillaDSP_GUI_v2/camillagui.zip unzip camillagui.zip -d camillagui sed -i 's%port: 5005%port: 5000%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/configs%/home/mgt/camilladsp/configs%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/coeffs%/home/mgt/camilladsp/coeffs%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/default_config.yml%/home/mgt/camilladsp/configs/camilladsp.yml%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/statefile.yml%/home/mgt/camilladsp/statefile.yml%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml #sed -i 's%~/camilladsp/active_config.txt%/home/mgt/camilladsp/active_config.txt%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml #sed -i 's%update_config_symlink: false%update_config_symlink: true%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml #echo '#active_config: "/home/mgt/camilladsp/active_config.yml"' >> /home/mgt/camilladsp/camillagui/config/camillagui.yml #echo '#active_config_txt: "/home/mgt/camilladsp/active_config.txt"' >> /home/mgt/camilladsp/camillagui/config/camillagui.yml #echo '#update_config_symlink: true' >> /home/mgt/camilladsp/camillagui/config/camillagui.yml #echo '#update_config_txt: false' >> /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/camilladsp.log%/home/mgt/camilladsp/logs/camilladsp.log%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml mkdir -p /home/mgt/camilladsp/logs touch /home/mgt/camilladsp/logs/camilladsp.log ln -s /home/mgt/camilladsp/configs/camilladsp.yml /home/mgt/camilladsp/active_config.yml rm camillagui.zip # Create camilladspgui start/stop script echo '#!/bin/sh' >> /etc/init.d/S92camilladspgui echo '' >> /etc/init.d/S92camilladspgui echo 'start() {' >> /etc/init.d/S92camilladspgui echo ' printf "Starting CamillaDSP_GUI: "' >> /etc/init.d/S92camilladspgui echo ' #start-stop-daemon -S -c mgt -n python3 --startas /usr/bin/taskset 4 /usr/bin/python3 /home/mgt/camilladsp/camillagui/main.py &' >> /etc/init.d/S92camilladspgui echo ' start-stop-daemon -S -c mgt -n python3 --startas /usr/bin/python3 /home/mgt/camilladsp/camillagui/main.py &' >> /etc/init.d/S92camilladspgui echo ' [ $? = 0 ] && echo "OK" || echo "FAIL"' >> /etc/init.d/S92camilladspgui echo '}' >> /etc/init.d/S92camilladspgui echo 'stop() {' >> /etc/init.d/S92camilladspgui echo ' printf "Stopping CamillaDSP_GUI: "' >> /etc/init.d/S92camilladspgui echo ' pkill -f camillagui/main.py' >> /etc/init.d/S92camilladspgui echo ' #killall python3' >> /etc/init.d/S92camilladspgui echo ' [ $? = 0 ] && echo "OK" || echo "FAIL"' >> /etc/init.d/S92camilladspgui echo '}' >> /etc/init.d/S92camilladspgui echo 'restart() {' >> /etc/init.d/S92camilladspgui echo ' stop' >> /etc/init.d/S92camilladspgui echo ' start' >> /etc/init.d/S92camilladspgui echo '}' >> /etc/init.d/S92camilladspgui echo 'case "$1" in' >> /etc/init.d/S92camilladspgui echo ' start)' >> /etc/init.d/S92camilladspgui echo ' start' >> /etc/init.d/S92camilladspgui echo ' ;;' >> /etc/init.d/S92camilladspgui echo ' stop)' >> /etc/init.d/S92camilladspgui echo ' stop' >> /etc/init.d/S92camilladspgui echo ' ;;' >> /etc/init.d/S92camilladspgui echo ' restart|reload)' >> /etc/init.d/S92camilladspgui echo ' restart' >> /etc/init.d/S92camilladspgui echo ' ;;' >> /etc/init.d/S92camilladspgui echo ' *)' >> /etc/init.d/S92camilladspgui echo ' echo "Usage: $0 {start|stop|restart}"' >> /etc/init.d/S92camilladspgui echo ' exit 1' >> /etc/init.d/S92camilladspgui echo 'esac' >> /etc/init.d/S92camilladspgui echo 'exit $?' >> /etc/init.d/S92camilladspgui chmod +x /etc/init.d/S92camilladspgui mv /etc/init.d/S92camilladspgui /etc/init.d/S99camilladspgui # Change ownership of camilladsp folder to mgt chown -R mgt:mgt /home/mgt/camilladsp # Remove installation script #rm /home/mgt/Cam_Ins.sh # Change hostname truncate -s 0 /etc/hostname echo "$DSP_NAME" >> /etc/hostname sed -i "s%$CURRENT_HOST_NAME%$DSP_NAME%g" /etc/hosts # Change dtb (should needed) # cp /boot/sun8i-h3-orangepi-pc.dtb.armbian /boot/sun8i-h2-plus-orangepi-zero.dtb ### Replace source file with the right dtb for the board # Reboot system echo "$DSP_NAME installation completed, reboot in 3 seconds" # Need to learn for simple count down sleep 3 reboot