Skip to content

Instantly share code, notes, and snippets.

@dholt
Created June 11, 2015 01:17
Show Gist options
  • Save dholt/86afdb2492ff188e17f8 to your computer and use it in GitHub Desktop.
Save dholt/86afdb2492ff188e17f8 to your computer and use it in GitHub Desktop.
set -e
# fw_type will always be developer for Mario.
# Alex and ZGB need the developer BIOS installed though.
fw_type="`crossystem mainfw_type`"
if [ ! "$fw_type" = "developer" ]
then
echo -e "\nYou're Chromebook is not running a developer BIOS!"
echo -e "You need to run:"
echo -e ""
echo -e "sudo chromeos-firmwareupdate --mode=todev"
echo -e ""
echo -e "and then re-run this script."
exit
fi
powerd_status="`initctl status powerd`"
if [ ! "$powerd_status" = "powerd stop/waiting" ]
then
echo -e "Stopping powerd to keep display from timing out..."
initctl stop powerd
fi
setterm -blank 0
if [ "$3" != "" ]; then
target_disk=$3
echo "Got ${target_disk} as target drive"
echo ""
echo "WARNING! All data on this device will be wiped out! Continue at your own risk!"
echo ""
read -p "Press [Enter] to install ChrUbuntu on ${target_disk} or CTRL+C to quit"
ext_size="`blockdev --getsz ${target_disk}`"
aroot_size=$((ext_size - 65600 - 33))
parted --script ${target_disk} "mktable gpt"
cgpt create ${target_disk}
cgpt add -i 6 -b 64 -s 32768 -S 1 -P 5 -l KERN-A -t "kernel" ${target_disk}
cgpt add -i 7 -b 65600 -s $aroot_size -l ROOT-A -t "rootfs" ${target_disk}
sync
blockdev --rereadpt ${target_disk}
partprobe ${target_disk}
crossystem dev_boot_usb=1
else
target_disk="`rootdev -d -s`"
# Do partitioning (if we haven't already)
ckern_size="`cgpt show -i 6 -n -s -q ${target_disk}`"
croot_size="`cgpt show -i 7 -n -s -q ${target_disk}`"
state_size="`cgpt show -i 1 -n -s -q ${target_disk}`"
max_ubuntu_size=$(($state_size/1024/1024/2))
rec_ubuntu_size=$(($max_ubuntu_size - 1))
# If KERN-C and ROOT-C are one, we partition, otherwise assume they're what they need to be...
if [ "$ckern_size" = "1" -o "$croot_size" = "1" ]
then
while :
do
read -p "Enter the size in gigabytes you want to reserve for Ubuntu. Acceptable range is 5 to $max_ubuntu_size but $rec_ubuntu_size is the recommended maximum: " ubuntu_size
if [ ! $ubuntu_size -ne 0 2>/dev/null ]
then
echo -e "\n\nNumbers only please...\n\n"
continue
fi
if [ $ubuntu_size -lt 5 -o $ubuntu_size -gt $max_ubuntu_size ]
then
echo -e "\n\nThat number is out of range. Enter a number 5 through $max_ubuntu_size\n\n"
continue
fi
break
done
# We've got our size in GB for ROOT-C so do the math...
#calculate sector size for rootc
rootc_size=$(($ubuntu_size*1024*1024*2))
#kernc is always 16mb
kernc_size=32768
#new stateful size with rootc and kernc subtracted from original
stateful_size=$(($state_size - $rootc_size - $kernc_size))
#start stateful at the same spot it currently starts at
stateful_start="`cgpt show -i 1 -n -b -q ${target_disk}`"
#start kernc at stateful start plus stateful size
kernc_start=$(($stateful_start + $stateful_size))
#start rootc at kernc start plus kernc size
rootc_start=$(($kernc_start + $kernc_size))
#Do the real work
echo -e "\n\nModifying partition table to make room for Ubuntu."
echo -e "Your Chromebook will reboot, wipe your data and then"
echo -e "you should re-run this script..."
umount -f /mnt/stateful_partition
# stateful first
cgpt add -i 1 -b $stateful_start -s $stateful_size -l STATE ${target_disk}
# now kernc
cgpt add -i 6 -b $kernc_start -s $kernc_size -l KERN-C ${target_disk}
# finally rootc
cgpt add -i 7 -b $rootc_start -s $rootc_size -l ROOT-C ${target_disk}
reboot
exit
fi
fi
# hwid lets us know if this is a Mario (Cr-48), Alex (Samsung Series 5), ZGB (Acer), etc
hwid="`crossystem hwid`"
chromebook_arch="`uname -m`"
ubuntu_metapackage=${1:-default}
latest_ubuntu=`wget --quiet -O - http://changelogs.ubuntu.com/meta-release | grep "^Version: " | tail -1 | sed -r 's/^Version: ([^ ]+)( LTS)?$/\1/'`
ubuntu_version=${2:-$latest_ubuntu}
if [ "$ubuntu_version" = "lts" ]
then
ubuntu_version=`wget --quiet -O - http://changelogs.ubuntu.com/meta-release | grep "^Version:" | grep "LTS" | tail -1 | sed -r 's/^Version: ([^ ]+)( LTS)?$/\1/'`
elif [ "$ubuntu_version" = "latest" ]
then
ubuntu_version=$latest_ubuntu
fi
if [ "$chromebook_arch" = "x86_64" ]
then
ubuntu_arch="amd64"
if [ "$ubuntu_metapackage" = "default" ]
then
ubuntu_metapackage="ubuntu-desktop"
fi
elif [ "$chromebook_arch" = "i686" ]
then
ubuntu_arch="i386"
if [ "$ubuntu_metapackage" = "default" ]
then
ubuntu_metapackage="ubuntu-desktop"
fi
elif [ "$chromebook_arch" = "armv7l" ]
then
ubuntu_arch="armhf"
if [ "$ubuntu_metapackage" = "default" ]
then
ubuntu_metapackage="xubuntu-desktop"
fi
else
echo -e "Error: This script doesn't know how to install ChrUbuntu on $chromebook_arch"
exit
fi
echo -e "\nChrome device model is: $hwid\n"
echo -e "Installing Ubuntu ${ubuntu_version} with metapackage ${ubuntu_metapackage}\n"
echo -e "Kernel Arch is: $chromebook_arch Installing Ubuntu Arch: $ubuntu_arch\n"
read -p "Press [Enter] to continue..."
if [ ! -d /mnt/stateful_partition/ubuntu ]
then
mkdir /mnt/stateful_partition/ubuntu
fi
cd /mnt/stateful_partition/ubuntu
if [[ "${target_disk}" =~ "mmcblk" ]]
then
target_rootfs="${target_disk}p7"
target_kern="${target_disk}p6"
else
target_rootfs="${target_disk}7"
target_kern="${target_disk}6"
fi
echo "Target Kernel Partition: $target_kern Target Root FS: ${target_rootfs}"
if mount|grep ${target_rootfs}
then
echo "Refusing to continue since ${target_rootfs} is formatted and mounted. Try rebooting"
exit
fi
mkfs.ext4 ${target_rootfs}
if [ ! -d /tmp/urfs ]
then
mkdir /tmp/urfs
fi
mount -t ext4 ${target_rootfs} /tmp/urfs
tar_file="http://cdimage.ubuntu.com/ubuntu-core/releases/$ubuntu_version/release/ubuntu-core-$ubuntu_version-core-$ubuntu_arch.tar.gz"
if [ $ubuntu_version = "dev" ]
then
ubuntu_animal=`wget --quiet -O - http://changelogs.ubuntu.com/meta-release-development | grep "^Dist: " | tail -1 | sed -r 's/^Dist: (.*)$/\1/'`
tar_file="http://cdimage.ubuntu.com/ubuntu-core/daily/current/$ubuntu_animal-core-$ubuntu_arch.tar.gz"
fi
wget -O - $tar_file | tar xzvvp -C /tmp/urfs/
mount -o bind /proc /tmp/urfs/proc
mount -o bind /dev /tmp/urfs/dev
mount -o bind /dev/pts /tmp/urfs/dev/pts
mount -o bind /sys /tmp/urfs/sys
if [ -f /usr/bin/old_bins/cgpt ]
then
cp /usr/bin/old_bins/cgpt /tmp/urfs/usr/bin/
else
cp /usr/bin/cgpt /tmp/urfs/usr/bin/
fi
chmod a+rx /tmp/urfs/usr/bin/cgpt
if [ ! -d /tmp/urfs/run/resolvconf/ ]
then
mkdir /tmp/urfs/run/resolvconf/
fi
cp /etc/resolv.conf /tmp/urfs/run/resolvconf/
ln -s -f /run/resolvconf/resolv.conf /tmp/urfs/etc/resolv.conf
echo chrubuntu > /tmp/urfs/etc/hostname
#echo -e "127.0.0.1 localhost
echo -e "\n127.0.1.1 chrubuntu" >> /tmp/urfs/etc/hosts
# The following lines are desirable for IPv6 capable hosts
#::1 localhost ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters" > /tmp/urfs/etc/hosts
cr_install="wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
add-apt-repository \"deb http://dl.google.com/linux/chrome/deb/ stable main\"
apt-get update
apt-get -y install google-chrome-stable"
if [ $ubuntu_arch = 'armhf' ]
then
cr_install='apt-get -y install chromium-browser'
fi
add_apt_repository_package='software-properties-common'
ubuntu_major_version=${ubuntu_version:0:2}
ubuntu_minor_version=${ubuntu_version:3:2}
if [ $ubuntu_major_version -le 12 ] && [ $ubuntu_minor_version -lt 10 ]
then
add_apt_repository_package='python-software-properties'
fi
echo -e "apt-get -y update
apt-get -y dist-upgrade
apt-get -y install ubuntu-minimal
apt-get -y install wget
apt-get -y install $add_apt_repository_package
add-apt-repository main
add-apt-repository universe
add-apt-repository restricted
add-apt-repository multiverse
apt-get update
apt-get -y install $ubuntu_metapackage
$cr_install
if [ -f /usr/lib/lightdm/lightdm-set-defaults ]
then
/usr/lib/lightdm/lightdm-set-defaults --autologin user
fi
useradd -m user -s /bin/bash
echo user | echo user:user | chpasswd
adduser user adm
adduser user sudo
update-alternatives --set x-www-browser /usr/bin/chromium-browser
locale-gen en_US en_US.UTF-8
echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 dpkg-reconfigure locales" > /tmp/urfs/install-ubuntu.sh
chmod a+x /tmp/urfs/install-ubuntu.sh
chroot /tmp/urfs /bin/bash -c /install-ubuntu.sh
rm /tmp/urfs/install-ubuntu.sh
KERN_VER=`uname -r`
mkdir -p /tmp/urfs/lib/modules/$KERN_VER/
cp -ar /lib/modules/$KERN_VER/* /tmp/urfs/lib/modules/$KERN_VER/
if [ ! -d /tmp/urfs/lib/firmware/ ]
then
mkdir /tmp/urfs/lib/firmware/
fi
cp -ar /lib/firmware/* /tmp/urfs/lib/firmware/
# copy adobe flash player plugin
cp /opt/google/chrome/pepper/libpepflashplayer.so /tmp/urfs/usr/lib/chromium-browser
# tell chromium-browser where to find flash plugin
echo -e 'CHROMIUM_FLAGS="${CHROMIUM_FLAGS} --ppapi-flash-path=/usr/lib/chromium-browser/libpepflashplayer.so"' >> /tmp/urfs/etc/chromium-browser/default
# flash plugin requires a new version of libstdc++6 from test repository
cat > /tmp/urfs/install-flash.sh <<EOF
add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install -y libstdc++6
EOF
chmod a+x /tmp/urfs/install-flash.sh
chroot /tmp/urfs /bin/bash -c /install-flash.sh
rm /tmp/urfs/install-flash.sh
# BIG specific files here
cp /etc/X11/xorg.conf.d/tegra.conf /tmp/urfs/usr/share/X11/xorg.conf.d/
l4tdir=`mktemp -d`
l4t=Tegra124_Linux_R19.3.0_armhf.tbz2
wget -P ${l4tdir} https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/${l4t}
cd ${l4tdir}
tar xvpf ${l4t}
cd Linux_for_Tegra/rootfs/
tar xvpf ../nv_tegra/nvidia_drivers.tbz2
tar cf - usr/lib | ( cd /tmp/urfs ; tar xvf -)
# cuda symlinks
ln -s libcuda.so.1 /tmp/urfs/usr/lib/arm-linux-gnueabihf/libcuda.so
ln -s tegra/libcuda.so.1 /tmp/urfs/usr/lib/arm-linux-gnueabihf/libcuda.so.1
ln -s tegra/libcuda.so.1.1 /tmp/urfs/usr/lib/arm-linux-gnueabihf/libcuda.so.1.1
echo "/usr/lib/arm-linux-gnueabihf/tegra" > /tmp/urfs/etc/ld.so.conf.d/nvidia-tegra.conf
echo "/usr/lib/arm-linux-gnueabihf/tegra-egl" > /tmp/urfs/usr/lib/arm-linux-gnueabihf/tegra-egl/ld.so.conf
echo "/usr/lib/arm-linux-gnueabihf/tegra" > /tmp/urfs/usr/lib/arm-linux-gnueabihf/tegra/ld.so.conf
cat >/tmp/urfs/etc/udev/rules.d/99-tegra-lid-switch.rules <<EOF
ACTION=="remove", GOTO="tegra_lid_switch_end"
SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="platform", KERNELS=="gpio-keys.4", TAG+="power-switch"
LABEL="tegra_lid_switch_end"
EOF
# nvidia device node permissions
cat > /tmp/urfs/lib/udev/rules.d/51-nvrm.rules <<EOF
KERNEL=="knvmap", GROUP="video", MODE="0660"
KERNEL=="nvhdcp1", GROUP="video", MODE="0660"
KERNEL=="nvhost-as-gpu", GROUP="video", MODE="0660"
KERNEL=="nvhost-ctrl", GROUP="video", MODE="0660"
KERNEL=="nvhost-ctrl-gpu", GROUP="video", MODE="0660"
KERNEL=="nvhost-dbg-gpu", GROUP="video", MODE="0660"
KERNEL=="nvhost-gpu", GROUP="video", MODE="0660"
KERNEL=="nvhost-msenc", GROUP="video", MODE=0660"
KERNEL=="nvhost-prof-gpu", GROUP="video", MODE=0660"
KERNEL=="nvhost-tsec", GROUP="video", MODE="0660"
KERNEL=="nvhost-vic", GROUP="video", MODE="0660"
KERNEL=="nvmap", GROUP="video", MODE="0660"
KERNEL=="tegra_dc_0", GROUP="video", MODE="0660"
KERNEL=="tegra_dc_1", GROUP="video", MODE="0660"
KERNEL=="tegra_dc_ctrl", GROUP="video", MODE="0660"
EOF
# alsa mixer settings to enable internal speakers
cat > /tmp/urfs/var/lib/alsa/asound.state <<EOF
state.HDATegra {
control.1 {
iface CARD
name 'HDMI/DP,pcm=3 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.2 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.3 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.4 {
iface MIXER
name 'IEC958 Playback Default'
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.5 {
iface MIXER
name 'IEC958 Playback Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface PCM
device 3
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.7 {
iface PCM
device 3
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
}
state.Venice2 {
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 26
value.1 26
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -6700
dbmax 300
dbvalue.0 0
dbvalue.1 0
}
}
control.54 {
iface MIXER
name 'Speaker Volume'
value.0 20
value.1 20
comment {
access 'read write'
type INTEGER
count 2
range '0 - 39'
dbmin -4800
dbmax 1400
dbvalue.0 0
dbvalue.1 0
}
}
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 'HP Right Out Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.68 {
iface MIXER
name 'HP Left Out Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.69 {
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.70 {
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.71 {
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.72 {
iface MIXER
name 'Right Receiver Mixer Left DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.73 {
iface MIXER
name 'Right Receiver Mixer Right DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.74 {
iface MIXER
name 'Right Receiver Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.75 {
iface MIXER
name 'Right Receiver Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.76 {
iface MIXER
name 'Right Receiver Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.77 {
iface MIXER
name 'Right Receiver Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.78 {
iface MIXER
name 'Left Receiver Mixer Left DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.79 {
iface MIXER
name 'Left Receiver Mixer Right DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.80 {
iface MIXER
name 'Left Receiver Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.81 {
iface MIXER
name 'Left Receiver Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.82 {
iface MIXER
name 'Left Receiver Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.83 {
iface MIXER
name 'Left Receiver Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.84 {
iface MIXER
name 'Right Speaker Mixer Left DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.85 {
iface MIXER
name 'Right Speaker Mixer Right DAC Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.86 {
iface MIXER
name 'Right Speaker Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.87 {
iface MIXER
name 'Right Speaker Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.88 {
iface MIXER
name 'Right Speaker Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.89 {
iface MIXER
name 'Right Speaker Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.90 {
iface MIXER
name 'Left Speaker Mixer Left DAC Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.91 {
iface MIXER
name 'Left Speaker Mixer Right DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.92 {
iface MIXER
name 'Left Speaker Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.93 {
iface MIXER
name 'Left Speaker Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.94 {
iface MIXER
name 'Left Speaker Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.95 {
iface MIXER
name 'Left Speaker Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.96 {
iface MIXER
name 'Right Headphone Mixer Left DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.97 {
iface MIXER
name 'Right Headphone Mixer Right DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.98 {
iface MIXER
name 'Right Headphone Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.99 {
iface MIXER
name 'Right Headphone Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.100 {
iface MIXER
name 'Right Headphone Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.101 {
iface MIXER
name 'Right Headphone Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.102 {
iface MIXER
name 'Left Headphone Mixer Left DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.103 {
iface MIXER
name 'Left Headphone Mixer Right DAC Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.104 {
iface MIXER
name 'Left Headphone Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.105 {
iface MIXER
name 'Left Headphone Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.106 {
iface MIXER
name 'Left Headphone Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.107 {
iface MIXER
name 'Left Headphone Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.108 {
iface MIXER
name 'STENR Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 'Sidetone Right'
}
}
control.109 {
iface MIXER
name 'STENL Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 'Sidetone Left'
}
}
control.110 {
iface MIXER
name 'LTENR Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 Loopthrough
}
}
control.111 {
iface MIXER
name 'LTENL Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 Loopthrough
}
}
control.112 {
iface MIXER
name 'LBENR Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 Loopback
}
}
control.113 {
iface MIXER
name 'LBENL Mux'
value Normal
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Normal
item.1 Loopback
}
}
control.114 {
iface MIXER
name 'Right ADC Mixer IN12 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.115 {
iface MIXER
name 'Right ADC Mixer IN34 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.116 {
iface MIXER
name 'Right ADC Mixer IN56 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.117 {
iface MIXER
name 'Right ADC Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.118 {
iface MIXER
name 'Right ADC Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.119 {
iface MIXER
name 'Right ADC Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.120 {
iface MIXER
name 'Right ADC Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.121 {
iface MIXER
name 'Left ADC Mixer IN12 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.122 {
iface MIXER
name 'Left ADC Mixer IN34 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.123 {
iface MIXER
name 'Left ADC Mixer IN56 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.124 {
iface MIXER
name 'Left ADC Mixer LINEA Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.125 {
iface MIXER
name 'Left ADC Mixer LINEB Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.126 {
iface MIXER
name 'Left ADC Mixer MIC1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.127 {
iface MIXER
name 'Left ADC Mixer MIC2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.128 {
iface MIXER
name 'LINEB Mixer IN2 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.129 {
iface MIXER
name 'LINEB Mixer IN4 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.130 {
iface MIXER
name 'LINEB Mixer IN6 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.131 {
iface MIXER
name 'LINEB Mixer IN56 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.132 {
iface MIXER
name 'LINEA Mixer IN1 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.133 {
iface MIXER
name 'LINEA Mixer IN3 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.134 {
iface MIXER
name 'LINEA Mixer IN5 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.135 {
iface MIXER
name 'LINEA Mixer IN34 Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.136 {
iface MIXER
name 'DMIC Mux'
value ADC
comment {
access 'read write'
type ENUMERATED
count 1
item.0 ADC
item.1 DMIC
}
}
control.137 {
iface MIXER
name 'MIC2 Mux'
value IN34
comment {
access 'read write'
type ENUMERATED
count 1
item.0 IN34
item.1 IN56
}
}
control.138 {
iface MIXER
name 'MIC1 Mux'
value IN12
comment {
access 'read write'
type ENUMERATED
count 1
item.0 IN12
item.1 IN56
}
}
control.139 {
iface MIXER
name 'Speakers Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.140 {
iface MIXER
name 'Headphone Jack Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.141 {
iface MIXER
name 'Mic Jack Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.142 {
iface MIXER
name 'Int Mic Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
}
EOF
cat > /tmp/urfs/install-tegra.sh <<EOF
update-alternatives --install /etc/ld.so.conf.d/arm-linux-gnueabihf_EGL.conf arm-linux-gnueabihf_egl_conf /usr/lib/arm-linux-gnueabihf/tegra-egl/ld.so.conf 1000
update-alternatives --install /etc/ld.so.conf.d/arm-linux-gnueabihf_GL.conf arm-linux-gnueabihf_gl_conf /usr/lib/arm-linux-gnueabihf/tegra/ld.so.conf 1000
ldconfig
adduser user video
EOF
#su user -c "xdg-settings set default-web-browser chromium.desktop"
chmod a+x /tmp/urfs/install-tegra.sh
chroot /tmp/urfs /bin/bash -c /install-tegra.sh
rm /tmp/urfs/install-tegra.sh
echo "console=tty1 debug verbose root=${target_rootfs} rootwait rw lsm.module_locking=0" > kernel-config
vbutil_arch="x86"
if [ $ubuntu_arch = "armhf" ]
then
vbutil_arch="arm"
fi
current_rootfs="`rootdev -s`"
current_kernfs_num=$((${current_rootfs: -1:1}-1))
current_kernfs=${current_rootfs: 0:-1}$current_kernfs_num
vbutil_kernel --repack ${target_kern} \
--oldblob $current_kernfs \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--version 1 \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config kernel-config \
--arch $vbutil_arch
#Set Ubuntu kernel partition as top priority for next boot (and next boot only)
cgpt add -i 6 -P 5 -T 1 ${target_disk}
echo -e "
Installation seems to be complete. If ChrUbuntu fails when you reboot,
power off your Chrome OS device and then turn it back on. You'll be back
in Chrome OS. If you're happy with ChrUbuntu when you reboot be sure to run:
sudo cgpt add -i 6 -P 5 -S 1 ${target_disk}
To make it the default boot option. The ChrUbuntu login is:
Username: user
Password: user
We're now ready to start ChrUbuntu!
"
read -p "Press [Enter] to reboot..."
reboot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment