While we don't release an rpi2 specific build, there are still people out there that build their own because they don't want to use Nexmon. This updates the rpi2 script to keep up with the changes for the rpi3 while leaving out nexmon/rpi3 bluetooth bits. Also update chmod because we don't need it.
2417 lines
59 KiB
Bash
Executable File
2417 lines
59 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "This script must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $# -eq 0 ]] ; then
|
|
echo "Please pass version number, e.g. $0 2.0"
|
|
exit 0
|
|
fi
|
|
|
|
basedir=`pwd`/veyron-$1
|
|
|
|
# Make sure that the cross compiler can be found in the path before we do
|
|
# anything else, that way the builds don't fail half way through.
|
|
export CROSS_COMPILE=arm-linux-gnueabihf-
|
|
if [ $(compgen -c $CROSS_COMPILE | wc -l) -eq 0 ] ; then
|
|
echo "Missing cross compiler. Set up PATH according to the README"
|
|
exit 1
|
|
fi
|
|
# Unset CROSS_COMPILE so that if there is any native compiling needed it doesn't
|
|
# get cross compiled.
|
|
unset CROSS_COMPILE
|
|
|
|
# Package installations for various sections.
|
|
# This will build a minimal Gnome Kali system with the top 10 tools.
|
|
# This is the section to edit if you would like to add more packages.
|
|
# See http://www.kali.org/new/kali-linux-metapackages/ for meta packages you can
|
|
# use. You can also install packages, using just the package name, but keep in
|
|
# mind that not all packages work on ARM! If you specify one of those, the
|
|
# script will throw an error, but will still continue on, and create an unusable
|
|
# image, keep that in mind.
|
|
|
|
arm="abootimg cgpt fake-hwclock ntpdate u-boot-tools vboot-utils vboot-kernel-utils"
|
|
base="alsa-utils e2fsprogs initramfs-tools kali-defaults kali-menu parted pulseaudio sudo usbutils"
|
|
desktop="fonts-croscore fonts-crosextra-caladea fonts-crosextra-carlito gnome-theme-kali gtk3-engines-xfce kali-desktop-xfce kali-root-login lightdm network-manager network-manager-gnome xfce4 xserver-xorg-video-fbdev xserver-xorg-input-synaptics xserver-xorg-input-all xserver-xorg-input-libinput"
|
|
tools="aircrack-ng ethtool hydra john libnfc-bin mfoc nmap passing-the-hash sqlmap usbutils winexe wireshark"
|
|
services="apache2 openssh-server"
|
|
extras="florence iceweasel xfce4-goodies xfce4-terminal xinput wpasupplicant firmware-linux firmware-linux-nonfree firmware-libertas firmware-atheros"
|
|
|
|
packages="${arm} ${base} ${desktop} ${tools} ${services} ${extras}"
|
|
architecture="armhf"
|
|
# If you have your own preferred mirrors, set them here.
|
|
# After generating the rootfs, we set the sources.list to the default settings.
|
|
mirror=http.kali.org
|
|
|
|
# Set this to use an http proxy, like apt-cacher-ng, and uncomment further down
|
|
# to unset it.
|
|
#export http_proxy="http://localhost:3142/"
|
|
|
|
mkdir -p ${basedir}
|
|
cd ${basedir}
|
|
|
|
# create the rootfs - not much to modify here, except maybe the hostname.
|
|
debootstrap --foreign --arch $architecture kali-rolling kali-$architecture http://$mirror/kali
|
|
|
|
cp /usr/bin/qemu-arm-static kali-$architecture/usr/bin/
|
|
|
|
LANG=C systemd-nspawn -M veyron -D kali-$architecture /debootstrap/debootstrap --second-stage
|
|
|
|
# Create sources.list
|
|
cat << EOF > kali-$architecture/etc/apt/sources.list
|
|
deb http://$mirror/kali kali-rolling main contrib non-free
|
|
EOF
|
|
|
|
# Set hostname
|
|
echo "kali" > kali-$architecture/etc/hostname
|
|
|
|
# So X doesn't complain, we add kali to hosts
|
|
cat << EOF > kali-$architecture/etc/hosts
|
|
127.0.0.1 kali localhost
|
|
::1 localhost ip6-localhost ip6-loopback
|
|
fe00::0 ip6-localnet
|
|
ff00::0 ip6-mcastprefix
|
|
ff02::1 ip6-allnodes
|
|
ff02::2 ip6-allrouters
|
|
EOF
|
|
|
|
cat << EOF > kali-$architecture/etc/network/interfaces
|
|
auto lo
|
|
iface lo inet loopback
|
|
EOF
|
|
|
|
cat << EOF > kali-$architecture/etc/resolv.conf
|
|
nameserver 8.8.8.8
|
|
EOF
|
|
|
|
export MALLOC_CHECK_=0 # workaround for LP: #520465
|
|
export LC_ALL=C
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
#mount -t proc proc kali-$architecture/proc
|
|
#mount -o bind /dev/ kali-$architecture/dev/
|
|
#mount -o bind /dev/pts kali-$architecture/dev/pts
|
|
|
|
cat << EOF > kali-$architecture/debconf.set
|
|
console-common console-data/keymap/policy select Select keymap from full list
|
|
console-common console-data/keymap/full select en-latin1-nodeadkeys
|
|
EOF
|
|
|
|
cat << EOF > kali-$architecture/third-stage
|
|
#!/bin/bash
|
|
dpkg-divert --add --local --divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d
|
|
cp /bin/true /usr/sbin/invoke-rc.d
|
|
echo -e "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d
|
|
chmod 755 /usr/sbin/policy-rc.d
|
|
|
|
apt-get update
|
|
apt-get --yes --allow-change-held-packages install locales-all
|
|
|
|
debconf-set-selections /debconf.set
|
|
rm -f /debconf.set
|
|
apt-get update
|
|
apt-get -y install git-core binutils ca-certificates initramfs-tools u-boot-tools
|
|
apt-get -y install locales console-common less nano git
|
|
echo "root:toor" | chpasswd
|
|
sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' /lib/udev/rules.d/75-persistent-net-generator.rules
|
|
rm -f /etc/udev/rules.d/70-persistent-net.rules
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get --yes --allow-change-held-packages install $packages
|
|
if [ $? > 0 ];
|
|
then
|
|
apt-get --yes --allow-change-held-packages --fix-broken install
|
|
fi
|
|
apt-get --yes --allow-change-held-packages dist-upgrade
|
|
apt-get --yes --allow-change-held-packages autoremove
|
|
|
|
rm -f /usr/sbin/policy-rc.d
|
|
rm -f /usr/sbin/invoke-rc.d
|
|
dpkg-divert --remove --rename /usr/sbin/invoke-rc.d
|
|
|
|
rm -f /third-stage
|
|
EOF
|
|
|
|
chmod 755 kali-$architecture/third-stage
|
|
LANG=C systemd-nspawn -M veyron -D kali-$architecture /third-stage
|
|
|
|
cat << EOF > kali-$architecture/cleanup
|
|
#!/bin/bash
|
|
rm -rf /root/.bash_history
|
|
apt-get update
|
|
apt-get clean
|
|
rm -f /0
|
|
rm -f /hs_err*
|
|
rm -f cleanup
|
|
rm -f /usr/bin/qemu*
|
|
EOF
|
|
|
|
chmod 755 kali-$architecture/cleanup
|
|
LANG=C systemd-nspawn -M veyron -D kali-$architecture /cleanup
|
|
|
|
cat << EOF > kali-$architecture/etc/resolv.conf
|
|
nameserver 8.8.8.8
|
|
EOF
|
|
|
|
#umount kali-$architecture/proc/sys/fs/binfmt_misc
|
|
#umount kali-$architecture/dev/pts
|
|
#umount kali-$architecture/dev/
|
|
#umount kali-$architecture/proc
|
|
|
|
echo "Creating image file for Veyron Chromebooks"
|
|
dd if=/dev/zero of=${basedir}/kali-linux-$1-veyron.img bs=1M count=7000
|
|
parted kali-linux-$1-veyron.img --script -- mklabel gpt
|
|
cgpt create -z kali-linux-$1-veyron.img
|
|
cgpt create kali-linux-$1-veyron.img
|
|
|
|
cgpt add -i 1 -t kernel -b 8192 -s 32768 -l kernel -S 1 -T 5 -P 10 kali-linux-$1-veyron.img
|
|
cgpt add -i 2 -t data -b 40960 -s `expr $(cgpt show kali-linux-$1-veyron.img | grep 'Sec GPT table' | awk '{ print \$1 }') - 40960` -l Root kali-linux-$1-veyron.img
|
|
|
|
loopdevice=`losetup -f --show ${basedir}/kali-linux-$1-veyron.img`
|
|
device=`kpartx -va $loopdevice| sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
|
|
sleep 5
|
|
device="/dev/mapper/${device}"
|
|
bootp=${device}p1
|
|
rootp=${device}p2
|
|
|
|
mkfs.ext4 -O ^flex_bg -O ^metadata_csum -L rootfs $rootp
|
|
|
|
mkdir -p ${basedir}/root
|
|
mount $rootp ${basedir}/root
|
|
|
|
echo "Rsyncing rootfs into image file"
|
|
rsync -HPavz -q ${basedir}/kali-$architecture/ ${basedir}/root/
|
|
|
|
cat << EOF > ${basedir}/root/etc/apt/sources.list
|
|
deb http://http.kali.org/kali kali-rolling main contrib non-free
|
|
deb-src http://http.kali.org/kali kali-rolling main contrib non-free
|
|
EOF
|
|
|
|
# Uncomment this if you use apt-cacher-ng otherwise git clones will fail.
|
|
#unset http_proxy
|
|
|
|
# Kernel section. If you want to use a custom kernel, or configuration, replace
|
|
# them in this section.
|
|
git clone --depth 1 https://chromium.googlesource.com/chromiumos/third_party/kernel -b chromeos-3.14 ${basedir}/root/usr/src/kernel
|
|
cd ${basedir}/root/usr/src/kernel
|
|
cp ${basedir}/../kernel-configs/chromebook-3.14_wireless-3.8.config .config
|
|
cp ${basedir}/../kernel-configs/chromebook-3.14_wireless-3.8.config ../veyron.config
|
|
export ARCH=arm
|
|
# Edit the CROSS_COMPILE variable as needed.
|
|
export CROSS_COMPILE=arm-linux-gnueabihf-
|
|
touch .scmversion
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/mac80211-3.8.patch
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/0002-mwifiex-do-not-create-AP-and-P2P-interfaces-upon-dri.patch
|
|
# Commented out as it causes issues, but if you want to use the usb port as a
|
|
# serial port, you can uncomment this and build an image with it enabled.
|
|
#patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/0003-UPSTREAM-soc-rockchip-add-handler-for-usb-uart-funct.patch
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/0004-fix-brcmfmac-oops-and-race-condition.patch
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/0001-Update-carl9170-in-wireless-3.8-for-3.14-s-changes.patch
|
|
# Backported patch to support building the kernel with GCC newer than 5.
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/3711edaf01a01818f2aed9f21efe29b9818134b9.patch
|
|
patch -p1 --no-backup-if-mismatch < ${basedir}/../patches/615829a03dc729e78372d40d95ba40e2ad51783b.patch
|
|
make WIFIVERSION="-3.8" -j$(grep -c processor /proc/cpuinfo)
|
|
make WIFIVERSION="-3.8" dtbs
|
|
make WIFIVERSION="-3.8" modules_install INSTALL_MOD_PATH=${basedir}/root
|
|
cat << __EOF__ > ${basedir}/root/usr/src/kernel/arch/arm/boot/kernel-veyron.its
|
|
/dts-v1/;
|
|
|
|
/ {
|
|
description = "Chrome OS kernel image with one or more FDT blobs";
|
|
images {
|
|
kernel@1{
|
|
description = "kernel";
|
|
data = /incbin/("zImage");
|
|
type = "kernel_noload";
|
|
arch = "arm";
|
|
os = "linux";
|
|
compression = "none";
|
|
load = <0>;
|
|
entry = <0>;
|
|
};
|
|
fdt@1{
|
|
description = "rk3288-brain-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-brain-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@2{
|
|
description = "rk3288-danger-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-danger-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@3{
|
|
description = "rk3288-danger-rev1.dtb";
|
|
data = /incbin/("dts/rk3288-danger-rev1.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@4{
|
|
description = "rk3288-emile-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-emile-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@5{
|
|
description = "rk3288-evb-act8846.dtb";
|
|
data = /incbin/("dts/rk3288-evb-act8846.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@6{
|
|
description = "rk3288-evb-rk808.dtb";
|
|
data = /incbin/("dts/rk3288-evb-rk808.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@7{
|
|
description = "rk3288-fievel-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-fievel-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@8{
|
|
description = "rk3288-gus-rev1.dtb";
|
|
data = /incbin/("dts/rk3288-gus-rev1.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@9{
|
|
description = "rk3288-jaq-rev1.dtb";
|
|
data = /incbin/("dts/rk3288-jaq-rev1.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@10{
|
|
description = "rk3288-jerry-rev10.dtb";
|
|
data = /incbin/("dts/rk3288-jerry-rev10.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@11{
|
|
description = "rk3288-jerry-rev2.dtb";
|
|
data = /incbin/("dts/rk3288-jerry-rev2.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@12{
|
|
description = "rk3288-jerry-rev3.dtb";
|
|
data = /incbin/("dts/rk3288-jerry-rev3.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@13{
|
|
description = "rk3288-mickey-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-mickey-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@14{
|
|
description = "rk3288-mighty-rev1.dtb";
|
|
data = /incbin/("dts/rk3288-mighty-rev1.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@15{
|
|
description = "rk3288-minnie-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-minnie-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@16{
|
|
description = "rk3288-nicky-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-nicky-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@17{
|
|
description = "rk3288-rialto-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-rialto-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@18{
|
|
description = "rk3288-speedy.dtb";
|
|
data = /incbin/("dts/rk3288-speedy.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@19{
|
|
description = "rk3288-speedy-rev1.dtb";
|
|
data = /incbin/("dts/rk3288-speedy-rev1.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@20{
|
|
description = "rk3288-thea-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-thea-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
fdt@21{
|
|
description = "rk3288-tiger-rev0.dtb";
|
|
data = /incbin/("dts/rk3288-tiger-rev0.dtb");
|
|
type = "flat_dt";
|
|
arch = "arm";
|
|
compression = "none";
|
|
hash@1{
|
|
algo = "sha1";
|
|
};
|
|
};
|
|
|
|
};
|
|
configurations {
|
|
default = "conf@1";
|
|
conf@1{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@1";
|
|
};
|
|
conf@2{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@2";
|
|
};
|
|
conf@3{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@3";
|
|
};
|
|
conf@4{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@4";
|
|
};
|
|
conf@5{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@5";
|
|
};
|
|
conf@6{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@6";
|
|
};
|
|
conf@7{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@7";
|
|
};
|
|
conf@8{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@8";
|
|
};
|
|
conf@9{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@9";
|
|
};
|
|
conf@10{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@10";
|
|
};
|
|
conf@11{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@11";
|
|
};
|
|
conf@12{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@12";
|
|
};
|
|
conf@13{
|
|
kernel = "kernel@1:";
|
|
fdt = "fdt@13";
|
|
};
|
|
conf@14{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@14";
|
|
};
|
|
conf@15{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@15";
|
|
};
|
|
conf@16{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@16";
|
|
};
|
|
conf@17{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@17";
|
|
};
|
|
conf@18{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@18";
|
|
};
|
|
conf@19{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@19";
|
|
};
|
|
conf@20{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@20";
|
|
};
|
|
conf@21{
|
|
kernel = "kernel@1";
|
|
fdt = "fdt@21";
|
|
};
|
|
};
|
|
};
|
|
__EOF__
|
|
cd ${basedir}/root/usr/src/kernel/arch/arm/boot
|
|
mkimage -D "-I dts -O dtb -p 2048" -f kernel-veyron.its veyron-kernel
|
|
|
|
# BEHOLD THE MAGIC OF PARTUUID/PARTNROFF
|
|
echo 'noinitrd console=tty1 quiet root=PARTUUID=%U/PARTNROFF=1 rootwait rw lsm.module_locking=0 net.ifnames=0 rootfstype=ext4' > cmdline
|
|
|
|
# Pulled from ChromeOS, this is exactly what they do because there's no
|
|
# bootloader in the kernel partition on ARM.
|
|
dd if=/dev/zero of=bootloader.bin bs=512 count=1
|
|
|
|
vbutil_kernel --arch arm --pack ${basedir}/kernel.bin --keyblock /usr/share/vboot/devkeys/kernel.keyblock --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk --version 1 --config cmdline --bootloader bootloader.bin --vmlinuz veyron-kernel
|
|
cd ${basedir}/root/usr/src/kernel
|
|
make WIFIVERSION="-3.8" mrproper
|
|
cp ${basedir}/../kernel-configs/chromebook-3.14_wireless-3.8.config .config
|
|
make WIFIVERSION="-3.8" modules_prepare
|
|
cd ${basedir}
|
|
|
|
# Fix up the symlink for building external modules
|
|
# kernver is used so we don't need to keep track of what the current compiled
|
|
# version is
|
|
kernver=$(ls ${basedir}/root/lib/modules/)
|
|
cd ${basedir}/root/lib/modules/$kernver
|
|
rm build
|
|
rm source
|
|
ln -s /usr/src/kernel build
|
|
ln -s /usr/src/kernel source
|
|
cd ${basedir}
|
|
|
|
# Bit of a hack to hide the emmc partitions from XFCE
|
|
cat << EOF > ${basedir}/root/etc/udev/rules.d/99-hide-emmc-partitions.rules
|
|
KERNEL=="mmcblk0*", ENV{UDISKS_IGNORE}="1"
|
|
EOF
|
|
|
|
# Disable uap0 and p2p0 interfaces in NetworkManager
|
|
printf '\n[keyfile]\nunmanaged-devices=interface-name:p2p0\n' >> ${basedir}/root/etc/NetworkManager/NetworkManager.conf
|
|
|
|
# Create these if they don't exist, to make sure we have proper audio with pulse
|
|
mkdir -p ${basedir}/root/var/lib/alsa/
|
|
cat << EOF > ${basedir}/root/var/lib/alsa/asound.state
|
|
state.ROCKCHIPI2S {
|
|
control.1 {
|
|
iface MIXER
|
|
name 'MIC Bias VCM Bandgap'
|
|
value 'High Performance'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'Low Power'
|
|
item.1 'High Performance'
|
|
}
|
|
}
|
|
control.2 {
|
|
iface MIXER
|
|
name 'DMIC MIC Comp Filter Config'
|
|
value 6
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
}
|
|
}
|
|
control.3 {
|
|
iface MIXER
|
|
name 'MIC1 Boost Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 2'
|
|
dbmin 0
|
|
dbmax 3000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.4 {
|
|
iface MIXER
|
|
name 'MIC2 Boost Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 2'
|
|
dbmin 0
|
|
dbmax 3000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.5 {
|
|
iface MIXER
|
|
name 'MIC1 Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 20'
|
|
dbmin 0
|
|
dbmax 2000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.6 {
|
|
iface MIXER
|
|
name 'MIC2 Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 20'
|
|
dbmin 0
|
|
dbmax 2000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.7 {
|
|
iface MIXER
|
|
name 'LINEA Single Ended Volume'
|
|
value 1
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 1'
|
|
dbmin -600
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.8 {
|
|
iface MIXER
|
|
name 'LINEB Single Ended Volume'
|
|
value 1
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 1'
|
|
dbmin -600
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.9 {
|
|
iface MIXER
|
|
name 'LINEA Volume'
|
|
value 2
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 5'
|
|
dbmin -600
|
|
dbmax 2000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.10 {
|
|
iface MIXER
|
|
name 'LINEB Volume'
|
|
value 2
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 5'
|
|
dbmin -600
|
|
dbmax 2000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.11 {
|
|
iface MIXER
|
|
name 'LINEA Ext Resistor Gain Mode'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.12 {
|
|
iface MIXER
|
|
name 'LINEB Ext Resistor Gain Mode'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.13 {
|
|
iface MIXER
|
|
name 'ADCL Boost Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 7'
|
|
dbmin 0
|
|
dbmax 4200
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.14 {
|
|
iface MIXER
|
|
name 'ADCR Boost Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 7'
|
|
dbmin 0
|
|
dbmax 4200
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.15 {
|
|
iface MIXER
|
|
name 'ADCL Volume'
|
|
value 12
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
dbmin -1200
|
|
dbmax 300
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.16 {
|
|
iface MIXER
|
|
name 'ADCR Volume'
|
|
value 12
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
dbmin -1200
|
|
dbmax 300
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.17 {
|
|
iface MIXER
|
|
name 'ADC Oversampling Rate'
|
|
value '128*fs'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 '64*fs'
|
|
item.1 '128*fs'
|
|
}
|
|
}
|
|
control.18 {
|
|
iface MIXER
|
|
name 'ADC Quantizer Dither'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.19 {
|
|
iface MIXER
|
|
name 'ADC High Performance Mode'
|
|
value 'High Performance'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'Low Power'
|
|
item.1 'High Performance'
|
|
}
|
|
}
|
|
control.20 {
|
|
iface MIXER
|
|
name 'DAC Mono Mode'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.21 {
|
|
iface MIXER
|
|
name 'SDIN Mode'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.22 {
|
|
iface MIXER
|
|
name 'SDOUT Mode'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.23 {
|
|
iface MIXER
|
|
name 'SDOUT Hi-Z Mode'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.24 {
|
|
iface MIXER
|
|
name 'Filter Mode'
|
|
value Music
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Voice
|
|
item.1 Music
|
|
}
|
|
}
|
|
control.25 {
|
|
iface MIXER
|
|
name 'Record Path DC Blocking'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.26 {
|
|
iface MIXER
|
|
name 'Playback Path DC Blocking'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.27 {
|
|
iface MIXER
|
|
name 'Digital BQ Volume'
|
|
value 15
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
dbmin -1500
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.28 {
|
|
iface MIXER
|
|
name 'Digital Sidetone Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 30'
|
|
dbmin 0
|
|
dbmax 3000
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.29 {
|
|
iface MIXER
|
|
name 'Digital Coarse Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin 0
|
|
dbmax 1800
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.30 {
|
|
iface MIXER
|
|
name 'Digital Volume'
|
|
value 15
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
dbmin -1500
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.31 {
|
|
iface MIXER
|
|
name 'EQ Coefficients'
|
|
value '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
|
comment {
|
|
access 'read write'
|
|
type BYTES
|
|
count 105
|
|
}
|
|
}
|
|
control.32 {
|
|
iface MIXER
|
|
name 'Digital EQ 3 Band Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.33 {
|
|
iface MIXER
|
|
name 'Digital EQ 5 Band Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.34 {
|
|
iface MIXER
|
|
name 'Digital EQ 7 Band Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.35 {
|
|
iface MIXER
|
|
name 'Digital EQ Clipping Detection'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.36 {
|
|
iface MIXER
|
|
name 'Digital EQ Volume'
|
|
value 15
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 15'
|
|
dbmin -1500
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.37 {
|
|
iface MIXER
|
|
name 'ALC Enable'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.38 {
|
|
iface MIXER
|
|
name 'ALC Attack Time'
|
|
value '0.5ms'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 '0.5ms'
|
|
item.1 '1ms'
|
|
item.2 '5ms'
|
|
item.3 '10ms'
|
|
item.4 '25ms'
|
|
item.5 '50ms'
|
|
item.6 '100ms'
|
|
item.7 '200ms'
|
|
}
|
|
}
|
|
control.39 {
|
|
iface MIXER
|
|
name 'ALC Release Time'
|
|
value '8s'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 '8s'
|
|
item.1 '4s'
|
|
item.2 '2s'
|
|
item.3 '1s'
|
|
item.4 '0.5s'
|
|
item.5 '0.25s'
|
|
item.6 '0.125s'
|
|
item.7 '0.0625s'
|
|
}
|
|
}
|
|
control.40 {
|
|
iface MIXER
|
|
name 'ALC Make Up Volume'
|
|
value 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 12'
|
|
dbmin 0
|
|
dbmax 1200
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.41 {
|
|
iface MIXER
|
|
name 'ALC Compression Ratio'
|
|
value '1:1'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 '1:1'
|
|
item.1 '1:1.5'
|
|
item.2 '1:2'
|
|
item.3 '1:4'
|
|
item.4 '1:INF'
|
|
}
|
|
}
|
|
control.42 {
|
|
iface MIXER
|
|
name 'ALC Expansion Ratio'
|
|
value '1:1'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 '1:1'
|
|
item.1 '2:1'
|
|
item.2 '3:1'
|
|
}
|
|
}
|
|
control.43 {
|
|
iface MIXER
|
|
name 'ALC Compression Threshold Volume'
|
|
value 31
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 31'
|
|
dbmin -3100
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.44 {
|
|
iface MIXER
|
|
name 'ALC Expansion Threshold Volume'
|
|
value 31
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 31'
|
|
dbmin -6600
|
|
dbmax -3500
|
|
dbvalue.0 -3500
|
|
}
|
|
}
|
|
control.45 {
|
|
iface MIXER
|
|
name 'DAC HP Playback Performance Mode'
|
|
value 'High Performance'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'High Performance'
|
|
item.1 'Low Power'
|
|
}
|
|
}
|
|
control.46 {
|
|
iface MIXER
|
|
name 'DAC High Performance Mode'
|
|
value 'High Performance'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'Low Power'
|
|
item.1 'High Performance'
|
|
}
|
|
}
|
|
control.47 {
|
|
iface MIXER
|
|
name 'Headphone Left Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.48 {
|
|
iface MIXER
|
|
name 'Headphone Right Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.49 {
|
|
iface MIXER
|
|
name 'Speaker Left Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.50 {
|
|
iface MIXER
|
|
name 'Speaker Right Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.51 {
|
|
iface MIXER
|
|
name 'Receiver Left Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.52 {
|
|
iface MIXER
|
|
name 'Receiver Right Mixer Volume'
|
|
value 3
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 1
|
|
range '0 - 3'
|
|
dbmin -1200
|
|
dbmax 0
|
|
dbvalue.0 0
|
|
}
|
|
}
|
|
control.53 {
|
|
iface MIXER
|
|
name 'Headphone Volume'
|
|
value.0 0
|
|
value.1 0
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 2
|
|
range '0 - 31'
|
|
dbmin -6700
|
|
dbmax 300
|
|
dbvalue.0 -6700
|
|
dbvalue.1 -6700
|
|
}
|
|
}
|
|
control.54 {
|
|
iface MIXER
|
|
name 'Speaker Volume'
|
|
value.0 39
|
|
value.1 39
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 2
|
|
range '0 - 39'
|
|
dbmin -4800
|
|
dbmax 1400
|
|
dbvalue.0 1400
|
|
dbvalue.1 1400
|
|
}
|
|
}
|
|
control.55 {
|
|
iface MIXER
|
|
name 'Receiver Volume'
|
|
value.0 21
|
|
value.1 21
|
|
comment {
|
|
access 'read write'
|
|
type INTEGER
|
|
count 2
|
|
range '0 - 31'
|
|
dbmin -6200
|
|
dbmax 800
|
|
dbvalue.0 0
|
|
dbvalue.1 0
|
|
}
|
|
}
|
|
control.56 {
|
|
iface MIXER
|
|
name 'Headphone Left Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.57 {
|
|
iface MIXER
|
|
name 'Headphone Right Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.58 {
|
|
iface MIXER
|
|
name 'Speaker Left Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.59 {
|
|
iface MIXER
|
|
name 'Speaker Right Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.60 {
|
|
iface MIXER
|
|
name 'Receiver Left Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.61 {
|
|
iface MIXER
|
|
name 'Receiver Right Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.62 {
|
|
iface MIXER
|
|
name 'Zero-Crossing Detection'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.63 {
|
|
iface MIXER
|
|
name 'Enhanced Vol Smoothing'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.64 {
|
|
iface MIXER
|
|
name 'Volume Adjustment Smoothing'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.65 {
|
|
iface MIXER
|
|
name 'Biquad Coefficients'
|
|
value '000000000000000000000000000000'
|
|
comment {
|
|
access 'read write'
|
|
type BYTES
|
|
count 15
|
|
}
|
|
}
|
|
control.66 {
|
|
iface MIXER
|
|
name 'Biquad Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.67 {
|
|
iface MIXER
|
|
name 'Headphone Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.68 {
|
|
iface MIXER
|
|
name 'Headset Mic Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.69 {
|
|
iface MIXER
|
|
name 'Int Mic Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.70 {
|
|
iface MIXER
|
|
name 'Speaker Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.71 {
|
|
iface MIXER
|
|
name 'MIXHPRSEL Mux'
|
|
value 'DAC Only'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'DAC Only'
|
|
item.1 'HP Mixer'
|
|
}
|
|
}
|
|
control.72 {
|
|
iface MIXER
|
|
name 'MIXHPLSEL Mux'
|
|
value 'DAC Only'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'DAC Only'
|
|
item.1 'HP Mixer'
|
|
}
|
|
}
|
|
control.73 {
|
|
iface MIXER
|
|
name 'LINMOD Mux'
|
|
value 'Left Only'
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 'Left Only'
|
|
item.1 'Left and Right'
|
|
}
|
|
}
|
|
control.74 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer Left DAC Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.75 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer Right DAC Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.76 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.77 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.78 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.79 {
|
|
iface MIXER
|
|
name 'Right Receiver Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.80 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer Left DAC Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.81 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer Right DAC Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.82 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.83 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.84 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.85 {
|
|
iface MIXER
|
|
name 'Left Receiver Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.86 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer Left DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.87 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer Right DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.88 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.89 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.90 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.91 {
|
|
iface MIXER
|
|
name 'Right Speaker Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.92 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer Left DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.93 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer Right DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.94 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.95 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.96 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.97 {
|
|
iface MIXER
|
|
name 'Left Speaker Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.98 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer Left DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.99 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer Right DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.100 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.101 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.102 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.103 {
|
|
iface MIXER
|
|
name 'Right Headphone Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.104 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer Left DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.105 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer Right DAC Switch'
|
|
value true
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.106 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.107 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.108 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.109 {
|
|
iface MIXER
|
|
name 'Left Headphone Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.110 {
|
|
iface MIXER
|
|
name 'STENR Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 'Sidetone Right'
|
|
}
|
|
}
|
|
control.111 {
|
|
iface MIXER
|
|
name 'STENL Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 'Sidetone Left'
|
|
}
|
|
}
|
|
control.112 {
|
|
iface MIXER
|
|
name 'LTENR Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 Loopthrough
|
|
}
|
|
}
|
|
control.113 {
|
|
iface MIXER
|
|
name 'LTENL Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 Loopthrough
|
|
}
|
|
}
|
|
control.114 {
|
|
iface MIXER
|
|
name 'LBENR Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 Loopback
|
|
}
|
|
}
|
|
control.115 {
|
|
iface MIXER
|
|
name 'LBENL Mux'
|
|
value Normal
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 Normal
|
|
item.1 Loopback
|
|
}
|
|
}
|
|
control.116 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer IN12 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.117 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer IN34 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.118 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer IN56 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.119 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.120 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.121 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.122 {
|
|
iface MIXER
|
|
name 'Right ADC Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.123 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer IN12 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.124 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer IN34 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.125 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer IN56 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.126 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer LINEA Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.127 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer LINEB Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.128 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer MIC1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.129 {
|
|
iface MIXER
|
|
name 'Left ADC Mixer MIC2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.130 {
|
|
iface MIXER
|
|
name 'LINEB Mixer IN2 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.131 {
|
|
iface MIXER
|
|
name 'LINEB Mixer IN4 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.132 {
|
|
iface MIXER
|
|
name 'LINEB Mixer IN6 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.133 {
|
|
iface MIXER
|
|
name 'LINEB Mixer IN56 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.134 {
|
|
iface MIXER
|
|
name 'LINEA Mixer IN1 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.135 {
|
|
iface MIXER
|
|
name 'LINEA Mixer IN3 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.136 {
|
|
iface MIXER
|
|
name 'LINEA Mixer IN5 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.137 {
|
|
iface MIXER
|
|
name 'LINEA Mixer IN34 Switch'
|
|
value false
|
|
comment {
|
|
access 'read write'
|
|
type BOOLEAN
|
|
count 1
|
|
}
|
|
}
|
|
control.138 {
|
|
iface MIXER
|
|
name 'DMIC Mux'
|
|
value ADC
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 ADC
|
|
item.1 DMIC
|
|
}
|
|
}
|
|
control.139 {
|
|
iface MIXER
|
|
name 'MIC2 Mux'
|
|
value IN34
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 IN34
|
|
item.1 IN56
|
|
}
|
|
}
|
|
control.140 {
|
|
iface MIXER
|
|
name 'MIC1 Mux'
|
|
value IN12
|
|
comment {
|
|
access 'read write'
|
|
type ENUMERATED
|
|
count 1
|
|
item.0 IN12
|
|
item.1 IN56
|
|
}
|
|
}
|
|
}
|
|
state.RockchipHDMI {
|
|
control {
|
|
}
|
|
}
|
|
EOF
|
|
|
|
cat << EOF > ${basedir}/root/etc/pulse/default.pa
|
|
#!/usr/bin/pulseaudio -nF
|
|
#
|
|
# This file is part of PulseAudio.
|
|
#
|
|
# PulseAudio is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU Lesser General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# PulseAudio is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# This startup script is used only if PulseAudio is started per-user
|
|
# (i.e. not in system mode)
|
|
|
|
.nofail
|
|
|
|
### Load something into the sample cache
|
|
#load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/bell.oga
|
|
#load-sample-lazy pulse-hotplug /usr/share/sounds/freedesktop/stereo/device-added.oga
|
|
#load-sample-lazy pulse-coldplug /usr/share/sounds/freedesktop/stereo/device-added.oga
|
|
#load-sample-lazy pulse-access /usr/share/sounds/freedesktop/stereo/message.oga
|
|
|
|
.fail
|
|
|
|
### Automatically restore the volume of streams and devices
|
|
load-module module-device-restore
|
|
load-module module-stream-restore
|
|
load-module module-card-restore
|
|
|
|
### Automatically augment property information from .desktop files
|
|
### stored in /usr/share/application
|
|
load-module module-augment-properties
|
|
|
|
### Should be after module-*-restore but before module-*-detect
|
|
load-module module-switch-on-port-available
|
|
|
|
### Load audio drivers statically
|
|
### (it's probably better to not load these drivers manually, but instead
|
|
### use module-udev-detect -- see below -- for doing this automatically)
|
|
load-module module-alsa-sink device=plughw:0,0
|
|
#load-module module-alsa-source device=hw:1,0
|
|
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
|
|
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
|
|
#load-module module-null-sink
|
|
#load-module module-pipe-sink
|
|
|
|
### Automatically load driver modules depending on the hardware available
|
|
.ifexists module-udev-detect.so
|
|
load-module module-udev-detect
|
|
.else
|
|
### Use the static hardware detection module (for systems that lack udev support)
|
|
load-module module-detect
|
|
.endif
|
|
|
|
### Automatically connect sink and source if JACK server is present
|
|
.ifexists module-jackdbus-detect.so
|
|
.nofail
|
|
load-module module-jackdbus-detect channels=2
|
|
.fail
|
|
.endif
|
|
|
|
### Automatically load driver modules for Bluetooth hardware
|
|
.ifexists module-bluetooth-policy.so
|
|
load-module module-bluetooth-policy
|
|
.endif
|
|
|
|
.ifexists module-bluetooth-discover.so
|
|
load-module module-bluetooth-discover
|
|
.endif
|
|
|
|
### Load several protocols
|
|
.ifexists module-esound-protocol-unix.so
|
|
load-module module-esound-protocol-unix
|
|
.endif
|
|
load-module module-native-protocol-unix
|
|
|
|
### Network access (may be configured with paprefs, so leave this commented
|
|
### here if you plan to use paprefs)
|
|
#load-module module-esound-protocol-tcp
|
|
#load-module module-native-protocol-tcp
|
|
#load-module module-zeroconf-publish
|
|
|
|
### Load the RTP receiver module (also configured via paprefs, see above)
|
|
#load-module module-rtp-recv
|
|
|
|
### Load the RTP sender module (also configured via paprefs, see above)
|
|
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
|
|
#load-module module-rtp-send source=rtp.monitor
|
|
|
|
### Load additional modules from GConf settings. This can be configured with the paprefs tool.
|
|
### Please keep in mind that the modules configured by paprefs might conflict with manually
|
|
### loaded modules.
|
|
.ifexists module-gconf.so
|
|
.nofail
|
|
load-module module-gconf
|
|
.fail
|
|
.endif
|
|
|
|
### Automatically restore the default sink/source when changed by the user
|
|
### during runtime
|
|
### NOTE: This should be loaded as early as possible so that subsequent modules
|
|
### that look up the default sink/source get the right value
|
|
load-module module-default-device-restore
|
|
|
|
### Automatically move streams to the default sink if the sink they are
|
|
### connected to dies, similar for sources
|
|
load-module module-rescue-streams
|
|
|
|
### Make sure we always have a sink around, even if it is a null sink.
|
|
load-module module-always-sink
|
|
|
|
### Honour intended role device property
|
|
load-module module-intended-roles
|
|
|
|
### Automatically suspend sinks/sources that become idle for too long
|
|
load-module module-suspend-on-idle
|
|
|
|
### If autoexit on idle is enabled we want to make sure we only quit
|
|
### when no local session needs us anymore.
|
|
.ifexists module-console-kit.so
|
|
load-module module-console-kit
|
|
.endif
|
|
.ifexists module-systemd-login.so
|
|
load-module module-systemd-login
|
|
.endif
|
|
|
|
### Enable positioned event sounds
|
|
load-module module-position-event-sounds
|
|
|
|
### Cork music/video streams when a phone stream is active
|
|
load-module module-role-cork
|
|
|
|
### Modules to allow autoloading of filters (such as echo cancellation)
|
|
### on demand. module-filter-heuristics tries to determine what filters
|
|
### make sense, and module-filter-apply does the heavy-lifting of
|
|
### loading modules and rerouting streams.
|
|
load-module module-filter-heuristics
|
|
load-module module-filter-apply
|
|
|
|
# X11 modules should not be started from default.pa so that one daemon
|
|
# can be shared by multiple sessions.
|
|
|
|
### Load X11 bell module
|
|
#load-module module-x11-bell sample=x11-bell
|
|
|
|
### Register ourselves in the X11 session manager
|
|
#load-module module-x11-xsmp
|
|
|
|
### Publish connection data in the X11 root window
|
|
#.ifexists module-x11-publish.so
|
|
#.nofail
|
|
#load-module module-x11-publish
|
|
#.fail
|
|
#.endif
|
|
|
|
### Make some devices default
|
|
set-default-sink 0
|
|
#set-default-source input
|
|
EOF
|
|
|
|
|
|
# mali rules so users can access the mali0 driver...
|
|
cat << EOF > ${basedir}/root/etc/udev/rules.d/50-mali.rules
|
|
KERNEL=="mali0", MODE="0660", GROUP="video"
|
|
EOF
|
|
|
|
# Video rules aka media-rules package in ChromeOS
|
|
cat << EOF > ${basedir}/root/etc/udev/rules.d/50-media.rules
|
|
ATTR{name}=="s5p-mfc-dec", SYMLINK+="video-dec"
|
|
ATTR{name}=="s5p-mfc-enc", SYMLINK+="video-enc"
|
|
ATTR{name}=="s5p-jpeg-dec", SYMLINK+="jpeg-dec"
|
|
ATTR{name}=="exynos-gsc.0*", SYMLINK+="image-proc0"
|
|
ATTR{name}=="exynos-gsc.1*", SYMLINK+="image-proc1"
|
|
ATTR{name}=="exynos-gsc.2*", SYMLINK+="image-proc2"
|
|
ATTR{name}=="exynos-gsc.3*", SYMLINK+="image-proc3"
|
|
ATTR{name}=="rk3288-vpu-dec", SYMLINK+="video-dec"
|
|
ATTR{name}=="rk3288-vpu-enc", SYMLINK+="video-enc"
|
|
ATTR{name}=="go2001-dec", SYMLINK+="video-dec"
|
|
ATTR{name}=="go2001-enc", SYMLINK+="video-enc"
|
|
ATTR{name}=="mt81xx-vcodec-dec", SYMLINK+="video-dec"
|
|
ATTR{name}=="mt81xx-vcodec-enc", SYMLINK+="video-enc"
|
|
ATTR{name}=="mt81xx-image-proc", SYMLINK+="image-proc0"
|
|
EOF
|
|
|
|
# Touchpad configuration
|
|
mkdir -p ${basedir}/root/etc/X11/xorg.conf.d
|
|
cat << EOF > ${basedir}/root/etc/X11/xorg.conf.d/10-synaptics-chromebook.conf
|
|
Section "InputClass"
|
|
Identifier "touchpad"
|
|
MatchIsTouchpad "on"
|
|
Driver "synaptics"
|
|
Option "TapButton1" "1"
|
|
Option "TapButton2" "3"
|
|
Option "TapButton3" "2"
|
|
Option "FingerLow" "15"
|
|
Option "FingerHigh" "20"
|
|
Option "FingerPress" "256"
|
|
EndSection
|
|
EOF
|
|
|
|
cp ${basedir}/../misc/zram ${basedir}/root/etc/init.d/zram
|
|
chmod 755 ${basedir}/root/etc/init.d/zram
|
|
|
|
# Copy the broadcom firmware files in (for now) - once sources are released,
|
|
# will be able to do this without having a local copy.
|
|
mkdir -p ${basedir}/root/lib/firmware/brcm/
|
|
cp ${basedir}/../misc/brcm/* ${basedir}/root/lib/firmware/brcm/
|
|
# Copy in the touchpad firmwares - same as above.
|
|
cp ${basedir}/../misc/elan* ${basedir}/root/lib/firmware/
|
|
cp ${basedir}/../misc/max* ${basedir}/root/lib/firmware/
|
|
cd ${basedir}
|
|
|
|
# We need to kick start the sdio chip to get bluetooth/wifi going. This is ugly
|
|
# but bear with me.
|
|
cp ${basedir}/../misc/bins/* ${basedir}/root/usr/sbin/
|
|
# And now we activate via udev rule
|
|
cat << EOF > ${basedir}/root/etc/udev/rules.d/80-brcm-sdio-added.rules
|
|
ACTION=="add", SUBSYSTEM=="sdio", ENV{SDIO_CLASS}=="02", ENV{SDIO_ID}=="02D0:4354", RUN+="/usr/sbin/brcm_patchram_plus -d --patchram /lib/firmware/brcm/BCM4354_003.001.012.0306.0659.hcd --no2bytes --enable_hci --enable_lpm --scopcm=1,2,0,1,1,0,0,0,0,0 --baudrate 3000000 --use_baudrate_for_download --tosleep=50000 /dev/ttyS0"
|
|
EOF
|
|
|
|
sed -i -e 's/^#PermitRootLogin.*/PermitRootLogin yes/' ${basedir}/root/etc/ssh/sshd_config
|
|
|
|
# Unmount partitions
|
|
umount $rootp
|
|
|
|
dd if=${basedir}/kernel.bin of=$bootp
|
|
|
|
cgpt repair $loopdevice
|
|
|
|
kpartx -dv $loopdevice
|
|
losetup -d $loopdevice
|
|
|
|
|
|
# Don't pixz on 32bit, there isn't enough memory to compress the images.
|
|
MACHINE_TYPE=`uname -m`
|
|
if [ ${MACHINE_TYPE} == 'x86_64' ]; then
|
|
echo "Compressing kali-linux-$1-veyron.img"
|
|
pixz ${basedir}/kali-linux-$1-veyron.img ${basedir}/../kali-linux-$1-veyron.img.xz
|
|
rm ${basedir}/kali-linux-$1-veyron.img
|
|
fi
|
|
|
|
# Clean up all the temporary build stuff and remove the directories.
|
|
# Comment this out to keep things around if you want to see what may have gone
|
|
# wrong.
|
|
echo "Removing temporary build files"
|
|
rm -rf ${basedir}
|