MycroftOS: Initial setup for rpi3

This commit is contained in:
Peter Steenbergen 2018-10-26 19:51:01 +02:00
parent a6afd572f6
commit b68a2beb9e
28 changed files with 2203 additions and 1 deletions

View File

@ -0,0 +1,32 @@
image boot.vfat {
vfat {
files = {
"bcm2708-rpi-b.dtb",
"bcm2708-rpi-b-plus.dtb",
"bcm2708-rpi-cm.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,30 @@
image boot.vfat {
vfat {
files = {
"bcm2708-rpi-b-plus.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,31 @@
image boot.vfat {
vfat {
files = {
"bcm2708-rpi-0-w.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"rpi-firmware/overlays",
"zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,30 @@
image boot.vfat {
vfat {
files = {
"bcm2709-rpi-2-b.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,31 @@
image boot.vfat {
vfat {
files = {
"bcm2710-rpi-3-b.dtb",
"bcm2837-rpi-3-b.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"Image"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,33 @@
image boot.vfat {
vfat {
files = {
"bcm2710-rpi-3-b.dtb",
"bcm2710-rpi-3-b-plus.dtb",
"bcm2710-rpi-cm3.dtb",
"rpi-firmware/bootcode.bin",
"rpi-firmware/cmdline.txt",
"rpi-firmware/config.txt",
"rpi-firmware/fixup.dat",
"rpi-firmware/start.elf",
"rpi-firmware/overlays",
"zImage"
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@ -0,0 +1,11 @@
#!/bin/sh
set -u
set -e
# Add a console on tty1
if [ -e ${TARGET_DIR}/etc/inittab ]; then
grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \
sed -i '/GENERIC_SERIAL/a\
tty1::respawn:/sbin/getty -L tty1 0 vt100 # HDMI console' ${TARGET_DIR}/etc/inittab
fi

View File

@ -0,0 +1,61 @@
#!/bin/bash
set -e
BOARD_DIR="$(dirname $0)"
BOARD_NAME="$(basename ${BOARD_DIR})"
GENIMAGE_CFG="${BOARD_DIR}/genimage-${BOARD_NAME}.cfg"
GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
for arg in "$@"
do
case "${arg}" in
--add-pi3-miniuart-bt-overlay)
if ! grep -qE '^dtoverlay=' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
echo "Adding 'dtoverlay=pi3-miniuart-bt' to config.txt (fixes ttyAMA0 serial console)."
cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
# fixes rpi3 ttyAMA0 serial console
dtoverlay=pi3-miniuart-bt
__EOF__
fi
;;
--aarch64)
# Run a 64bits kernel (armv8)
sed -e '/^kernel=/s,=.*,=Image,' -i "${BINARIES_DIR}/rpi-firmware/config.txt"
if ! grep -qE '^arm_control=0x200' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
# enable 64bits support
arm_control=0x200
__EOF__
fi
# Enable uart console
if ! grep -qE '^enable_uart=1' "${BINARIES_DIR}/rpi-firmware/config.txt"; then
cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt"
# enable rpi3 ttyS0 serial console
enable_uart=1
__EOF__
fi
;;
--gpu_mem_256=*|--gpu_mem_512=*|--gpu_mem_1024=*)
# Set GPU memory
gpu_mem="${arg:2}"
sed -e "/^${gpu_mem%=*}=/s,=.*,=${gpu_mem##*=}," -i "${BINARIES_DIR}/rpi-firmware/config.txt"
;;
esac
done
rm -rf "${GENIMAGE_TMP}"
genimage \
--rootpath "${TARGET_DIR}" \
--tmppath "${GENIMAGE_TMP}" \
--inputpath "${BINARIES_DIR}" \
--outputpath "${BINARIES_DIR}" \
--config "${GENIMAGE_CFG}"
exit $?

View File

@ -0,0 +1,93 @@
Raspberry Pi
Intro
=====
These instructions apply to all models of the Raspberry Pi:
- the original models A and B,
- the "enhanced" models A+ and B+,
- the model B2 (aka Raspberry Pi 2)
- the model B3 (aka Raspberry Pi 3).
How to build it
===============
Configure Buildroot
-------------------
There are two RaspberryPi defconfig files in Buildroot, one for each
major variant, which you should base your work on:
For models A, B, A+ or B+:
$ make raspberrypi_defconfig
For model Zero (model A+ in smaller form factor):
$ make raspberrypi0_defconfig
For model 2 B:
$ make raspberrypi2_defconfig
For model 3 B and B+:
$ make raspberrypi3_defconfig
Build the rootfs
----------------
Note: you will need to have access to the network, since Buildroot will
download the packages' sources.
You may now build your rootfs with:
$ make
(This may take a while, consider getting yourself a coffee ;-) )
Result of the build
-------------------
After building, you should obtain this tree:
output/images/
+-- bcm2708-rpi-b.dtb [1]
+-- bcm2708-rpi-b-plus.dtb [1]
+-- bcm2709-rpi-2-b.dtb [1]
+-- bcm2710-rpi-3-b.dtb [1]
+-- bcm2710-rpi-3-b-plus.dtb [1]
+-- boot.vfat
+-- rootfs.ext4
+-- rpi-firmware/
| +-- bootcode.bin
| +-- cmdline.txt
| +-- config.txt
| +-- fixup.dat
| +-- start.elf
| `-- overlays/ [2]
+-- sdcard.img
`-- zImage
[1] Not all of them will be present, depending on the RaspberryPi
model you are using.
[2] Only for the Raspberry Pi 3 Model (overlay pi3-miniuart-bt is needed
to enable the RPi3 serial console otherwise occupied by the bluetooth
chip). Alternative would be to disable the serial console in cmdline.txt
and /etc/inittab.
How to write the SD card
========================
Once the build process is finished you will have an image called "sdcard.img"
in the output/images/ directory.
Copy the bootable "sdcard.img" onto an SD card with "dd":
$ sudo dd if=output/images/sdcard.img of=/dev/sdX
Insert the SDcard into your Raspberry Pi, and power it up. Your new system
should come up now and start two consoles: one on the serial port on
the P1 header, one on the HDMI output where you can login using a USB
keyboard.

View File

@ -0,0 +1 @@
raspberrypi

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,183 @@
BR2_arm=y
BR2_cortex_a53=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_DL_DIR="../downloads"
BR2_CCACHE=y
BR2_CCACHE_DIR="../ccache"
BR2_OPTIMIZE_FAST=y
BR2_GLOBAL_PATCH_DIR="../buildroot-patches"
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TARGET_GENERIC_HOSTNAME="MycroftOS"
BR2_TARGET_GENERIC_ISSUE="Welcome to MycroftOS"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_TARGET_GENERIC_ROOT_PASSWD="mycroft"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_SYSTEM_DHCP="eth0"
# BR2_ENABLE_LOCALE_PURGE is not set
BR2_GENERATE_LOCALE="en_US en_US.UTF-8"
BR2_TARGET_TZ_INFO=y
BR2_ROOTFS_OVERLAY="../buildroot-external/rootfs-overlay"
BR2_ROOTFS_POST_BUILD_SCRIPT="../buildroot-external/board/raspberrypi3/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="../buildroot-external/board/raspberrypi3/post-image.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="--add-pi3-miniuart-bt-overlay"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/raspberrypi/linux.git"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="7c063ed121b219110602993d09d021fbf82628b6"
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b bcm2710-rpi-3-b-plus bcm2710-rpi-cm3"
BR2_PACKAGE_BUSYBOX_CONFIG="../buildroot-external/busybox.config"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_ALSACONF=y
BR2_PACKAGE_ALSA_UTILS_ACONNECT=y
BR2_PACKAGE_ALSA_UTILS_ALSALOOP=y
BR2_PACKAGE_ALSA_UTILS_ALSAUCM=y
BR2_PACKAGE_ALSA_UTILS_ALSATPLG=y
BR2_PACKAGE_ALSA_UTILS_AMIDI=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_APLAYMIDI=y
BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI=y
BR2_PACKAGE_ALSA_UTILS_ASEQDUMP=y
BR2_PACKAGE_ALSA_UTILS_ASEQNET=y
BR2_PACKAGE_ALSA_UTILS_BAT=y
BR2_PACKAGE_ALSA_UTILS_IECSET=y
BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
BR2_PACKAGE_BLUEZ_ALSA=y
BR2_PACKAGE_ESPEAK=y
BR2_PACKAGE_ESPEAK_AUDIO_BACKEND_ALSA=y
BR2_PACKAGE_FFMPEG_GPL=y
BR2_PACKAGE_FFMPEG_NONFREE=y
BR2_PACKAGE_FLAC=y
BR2_PACKAGE_MIMIC=y
BR2_PACKAGE_MIMIC_AUDIO_BACKEND_ALSA=y
BR2_PACKAGE_MPG123=y
BR2_PACKAGE_MPV=y
BR2_PACKAGE_PULSEAUDIO=y
BR2_PACKAGE_PULSEAUDIO_DAEMON=y
BR2_PACKAGE_VLC=y
BR2_PACKAGE_GZIP=y
BR2_PACKAGE_LZ4=y
BR2_PACKAGE_P7ZIP=y
BR2_PACKAGE_UNRAR=y
BR2_PACKAGE_UNZIP=y
BR2_PACKAGE_BINUTILS=y
BR2_PACKAGE_BINUTILS_TARGET=y
BR2_PACKAGE_CHECK=y
BR2_PACKAGE_DIFFUTILS=y
BR2_PACKAGE_FINDUTILS=y
BR2_PACKAGE_GIT=y
BR2_PACKAGE_GREP=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_MAKE=y
BR2_PACKAGE_PKGCONF=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_RPI_BT_FIRMWARE=y
BR2_PACKAGE_RPI_FIRMWARE=y
BR2_PACKAGE_RPI_FIRMWARE_X=y
BR2_PACKAGE_RPI_WIFI_FIRMWARE=y
BR2_PACKAGE_DBUS_PYTHON=y
BR2_PACKAGE_KBD=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_RPI_USERLAND=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_ONLY=y
BR2_PACKAGE_PYTHON3_BZIP2=y
BR2_PACKAGE_PYTHON3_CODECSCJK=y
BR2_PACKAGE_PYTHON3_CURSES=y
BR2_PACKAGE_PYTHON3_DECIMAL=y
BR2_PACKAGE_PYTHON3_OSSAUDIODEV=y
BR2_PACKAGE_PYTHON3_SQLITE=y
BR2_PACKAGE_PYTHON3_XZ=y
BR2_PACKAGE_PYTHON_ALSAAUDIO=y
BR2_PACKAGE_PYTHON_ARROW=y
BR2_PACKAGE_PYTHON_BEAUTIFULSOUP4=y
BR2_PACKAGE_PYTHON_CFFI=y
BR2_PACKAGE_PYTHON_CONFIGSHELL_FB=y
BR2_PACKAGE_PYTHON_DAEMONIZE=y
BR2_PACKAGE_PYTHON_GOBJECT=y
BR2_PACKAGE_PYTHON_LXML=y
BR2_PACKAGE_PYTHON_NETADDR=y
BR2_PACKAGE_PYTHON_NETIFACES=y
BR2_PACKAGE_PYTHON_OAUTHLIB=y
BR2_PACKAGE_PYTHON_PILLOW=y
BR2_PACKAGE_PYTHON_PSUTIL=y
BR2_PACKAGE_PYTHON_PYCLI=y
BR2_PACKAGE_PYTHON_PYCRYPTO=y
BR2_PACKAGE_PYTHON_PYTZ=y
BR2_PACKAGE_PYTHON_PYYAML=y
BR2_PACKAGE_PYTHON_SERIAL=y
BR2_PACKAGE_PYTHON_TEXTTABLE=y
BR2_PACKAGE_PYTHON_TORNADO=y
BR2_PACKAGE_PYTHON_WEBSOCKET_CLIENT=y
BR2_PACKAGE_AUDIOFILE=y
BR2_PACKAGE_PORTAUDIO_OSS=y
BR2_PACKAGE_SPEEXDSP=y
BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING=y
BR2_PACKAGE_LIBARCHIVE=y
BR2_PACKAGE_LIBARCHIVE_BSDTAR=y
BR2_PACKAGE_LIBARCHIVE_BSDCPIO=y
BR2_PACKAGE_LIBARCHIVE_BSDCAT=y
BR2_PACKAGE_LIBZIP=y
BR2_PACKAGE_LZO=y
BR2_PACKAGE_SNAPPY=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_LIBCONFIG=y
BR2_PACKAGE_LIBNFS=y
BR2_PACKAGE_JPEG=y
BR2_PACKAGE_LIBPNG=y
BR2_PACKAGE_BCM2835=y
BR2_PACKAGE_WIRINGPI=y
BR2_PACKAGE_LIBMPEG2=y
BR2_PACKAGE_LIBMPEG2_BINS=y
BR2_PACKAGE_LIBOPENH264=y
BR2_PACKAGE_LIBTHEORA=y
BR2_PACKAGE_LIBCURL=y
BR2_PACKAGE_CURL=y
BR2_PACKAGE_LIBFRIBIDI=y
BR2_PACKAGE_LIBUNISTRING=y
BR2_PACKAGE_NCURSES_WCHAR=y
BR2_PACKAGE_NCURSES_TARGET_PROGS=y
BR2_PACKAGE_PCRE_16=y
BR2_PACKAGE_PCRE_32=y
BR2_PACKAGE_CONNMAN=y
BR2_PACKAGE_CONNMAN_WIFI=y
BR2_PACKAGE_CONNMAN_BLUETOOTH=y
BR2_PACKAGE_DROPBEAR=y
BR2_PACKAGE_IW=y
BR2_PACKAGE_NTP=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_WGET=y
BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y
BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y
BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
BR2_PACKAGE_BASH_COMPLETION=y
BR2_PACKAGE_FILE=y
BR2_PACKAGE_SCREEN=y
BR2_PACKAGE_TIME=y
BR2_PACKAGE_WHICH=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_START_STOP_DAEMON=y
BR2_PACKAGE_TAR=y
BR2_PACKAGE_UTIL_LINUX_FSCK=y
BR2_PACKAGE_UTIL_LINUX_HWCLOCK=y
BR2_PACKAGE_UTIL_LINUX_KILL=y
BR2_PACKAGE_UTIL_LINUX_MORE=y
BR2_PACKAGE_UTIL_LINUX_MOUNT=y
BR2_PACKAGE_NANO=y
BR2_PACKAGE_VIM=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="768M"
# BR2_TARGET_ROOTFS_TAR is not set
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y

View File

@ -1,2 +1,2 @@
name: MycroftOS
name: MYCROFTOS
desc: MycroftOS Buildroot tree

View File

@ -0,0 +1,19 @@
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
pcm.!default {
type plug
slave.pcm "master"
}
ctl.!default {
type hw card 0
}
pcm.master {
type softvol
slave.pcm "plughw:0"
control.name "Master"
control.card 0
}

View File

@ -0,0 +1,11 @@
# <file system> <mount pt> <type> <options> <dump> <pass>
/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0
tmpfs /dev/shm tmpfs mode=0777 0 0
tmpfs /tmp tmpfs mode=1777 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /ramdisk tmpfs rw,nodev,nosuid,size=20M 0 0

View File

@ -0,0 +1,23 @@
#!/bin/sh
#
# Auto resize root partition at first boot after init_resize
#
start() {
printf "Starting resize2fs_once: "
ROOT_DEV=$(findmnt / -o source -n) &&
resize2fs $ROOT_DEV &&
rm /etc/init.d/S00resizefs_once &&
echo "OK"
}
case "$1" in
start)
start
;;
*)
echo "Usage: $0 {start}"
exit 1
esac
exit $?

View File

@ -0,0 +1,2 @@
modprobe snd-bcm2835
#modprobe snd-usb-audio

View File

@ -0,0 +1,4 @@
alsactl init
amixer cset numid=3 1
amixer sset PCM 95%

View File

@ -0,0 +1,31 @@
#!/bin/sh
#
# Prepare Mycroft software stack.
#
start() {
# set the right locale / language settings
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
# Check if Mycroft log folders are present and if not
# create those logging folders
if [[ ! -w /var/log/mycroft/ ]] ; then
# Creating needed folders
printf "Creating /var/log/mycroft/ directory"
if [[ ! -d /var/log/mycroft/ ]] ; then
mkdir /var/log/mycroft/
fi
fi
}
case "$1" in
start)
start
;;
*)
echo "Usage: $0 {start}"
exit 1
esac
exit $?

View File

@ -0,0 +1,37 @@
#!/bin/sh
#
# Starts Mycroft services.
#
start() {
printf "Starting Mycroft services: "
umask 077
bash /usr/bin/start-mycroft.sh all
echo "OK"
}
stop() {
printf "Stopping Mycroft services: "
bash /usr/bin/stop-mycroft.sh all
echo "OK"
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?

View File

@ -0,0 +1,31 @@
#!/bin/bash
set -e
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t tmpfs tmp /run
mount /boot
mount / -o remount,rw
sed -i 's| init=/etc/init.d/init_resize.sh||' /boot/cmdline.txt
sync
DEVICE="/dev/mmcblk0"
PARTNR="p2"
CURRENTSIZEB=`fdisk -l $DEVICE$PARTNR | grep "Disk $DEVICE$PARTNR" | cut -d' ' -f5`
CURRENTSIZE=`expr $CURRENTSIZEB / 1024 / 1024`
MAXSIZEMB=`printf %s\\n 'unit MB print list' | parted | grep "Disk ${DEVICE}" | cut -d' ' -f3 | tr -d MB`
echo "[ok] applying resize operation.."
parted ${DEVICE} resizepart ${PARTNR} ${MAXSIZEMB}
echo "[done]"
partprobe $DEVICE
umount /boot
mount / -o remount,ro
sync
reboot

View File

@ -0,0 +1,7 @@
{
"play_wav_cmdline": "aplay -Dhw:0,0 %1",
"play_mp3_cmdline": "mpg123 -a hw:0,0 %1",
"ipc_path": "/ramdisk/mycroft/ipc/",
"ignore_logs": ["enclosure.mouth.viseme", "enclosure.mouth.display"],
"log_level": "INFO"
}

View File

@ -0,0 +1,57 @@
#!/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 in system
# mode.
### Automatically load driver modules depending on the hardware available
.ifexists module-detect.so
### Use the static hardware detection module (for systems that lack udev/hal support)
load-module module-detect
.endif
### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix
### Automatically restore the volume of streams and devices
load-module module-stream-restore
load-module module-device-restore
### 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
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle
### Enable positioned event sounds
load-module module-position-event-sounds
#allow localhost connections
load-module module-native-protocol-tcp auth-anonymous=true

View File

@ -0,0 +1 @@
../.mycroft

View File

@ -0,0 +1,161 @@
#!/usr/bin/env bash
# Copyright 2017 Mycroft AI Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
SOURCE="${BASH_SOURCE[0]}"
script=${0}
script=${script##*/}
cd -P "$( dirname "$SOURCE" )"
DIR="$( pwd )"
function help() {
echo "${script}: Mycroft command/service launcher"
echo "usage: ${script} [command] [params]"
echo
echo "Services:"
echo " all runs core services: bus, audio, skills, voice"
echo " debug runs core services, then starts the CLI"
echo
echo "Services:"
echo " audio the audio playback service"
echo " bus the messagebus service"
echo " skills the skill service"
echo " voice voice capture service"
echo " enclosure mark_1 enclosure service"
echo
echo "Tools:"
echo " cli the Command Line Interface"
echo " unittest run mycroft-core unit tests (requires pytest)"
echo " skillstest run the skill autotests for all skills (requires pytest)"
echo
echo "Utils:"
echo " audiotest attempt simple audio validation"
echo " audioaccuracytest more complex audio validation"
echo " sdkdoc generate sdk documentation"
echo
echo "Examples:"
echo " ${script} all"
echo " ${script} cli"
echo " ${script} unittest"
exit 1
}
_module=""
function name-to-script-path() {
case ${1} in
"bus") _module="mycroft.messagebus.service" ;;
"skills") _module="mycroft.skills" ;;
"audio") _module="mycroft.audio" ;;
"voice") _module="mycroft.client.speech" ;;
"cli") _module="mycroft.client.text" ;;
"audiotest") _module="mycroft.util.audio_test" ;;
"audioaccuracytest") _module="mycroft.audio-accuracy-test" ;;
"enclosure") _module="mycroft.client.enclosure" ;;
*)
echo "Error: Unknown name '${1}'"
exit 1
esac
}
function launch-process() {
name-to-script-path ${1}
# Launch process in foreground
echo "Starting $1"
python3 -m ${_module} $_params
}
function launch-background() {
# Check if given module is running and start (or restart if running)
name-to-script-path ${1}
if pgrep -f "python3 -m ${_module}" > /dev/null ; then
echo "Restarting: ${1}"
"${DIR}/stop-mycroft.sh" ${1}
else
echo "Starting background service $1"
fi
# Security warning/reminder for the user
if [[ "${1}" == "bus" ]] ; then
echo "CAUTION: The Mycroft bus is an open websocket with no built-in security"
echo " measures. You are responsible for protecting the local port"
echo " 8181 with a firewall as appropriate."
fi
# Launch process in background, sending logs to standard location
python3 -m ${_module} $_params >> /var/log/mycroft/${1}.log 2>&1 &
}
function launch-all() {
echo "Starting all mycroft-core services"
launch-background bus
launch-background skills
launch-background audio
launch-background voice
# Determine platform type
if [[ -r /etc/mycroft/mycroft.conf ]] ; then
mycroft_platform=$( jq -r ".enclosure.platform" < /etc/mycroft/mycroft.conf )
if [[ $mycroft_platform = "mycroft_mark_1" ]] ; then
# running on a Mark 1, start enclosure service
launch-background enclosure
fi
fi
}
_opt=$1
shift
_params=$@
case ${_opt} in
"all")
launch-all
;;
"bus")
launch-background ${_opt}
;;
"audio")
launch-background ${_opt}
;;
"skills")
launch-background ${_opt}
;;
"voice")
launch-background ${_opt}
;;
"debug")
launch-all
launch-process cli
;;
"cli")
launch-process ${_opt}
;;
"audiotest")
launch-process ${_opt}
;;
"audioaccuracytest")
launch-process ${_opt}
;;
"enclosure")
launch-background ${_opt}
;;
*)
help
;;
esac

View File

@ -0,0 +1,131 @@
#!/usr/bin/env bash
# Copyright 2017 Mycroft AI Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
SOURCE="${BASH_SOURCE[0]}"
script=${0}
script=${script##*/}
cd -P "$( dirname "$SOURCE" )"
function help() {
echo "${script}: Mycroft service stopper"
echo "usage: ${script} [service]"
echo
echo "Service:"
echo " all ends core services: bus, audio, skills, voice"
echo " (none) same as \"all\""
echo " bus stop the Mycroft messagebus service"
echo " audio stop the audio playback service"
echo " skills stop the skill service"
echo " voice stop voice capture service"
echo " enclosure stop mark_1 enclosure service"
echo
echo "Examples:"
echo " ${script}"
echo " ${script} audio"
exit 0
}
function process-running() {
if [[ $( pgrep -f "python3 -m mycroft.*${1}" ) ]] ; then
return 0
else
return 1
fi
}
function end-process() {
if process-running $1 ; then
echo -n "Stopping $1..."
pid=$( pgrep -f "python3 -m mycroft.*${1}" )
kill -SIGINT ${pid}
# Wait up to 5 seconds (50 * 0.1) for process to stop
c=1
while [ $c -le 50 ] ; do
if process-running $1 ; then
sleep 0.1
(( c++ ))
else
c=999 # end loop
fi
done
if process-running $1 ; then
echo "failed to stop."
echo -n " Killing $1..."
kill -9 ${pid}
echo "killed."
result=120
else
echo "stopped."
if [ $result -eq 0 ] ; then
result=100
fi
fi
fi
}
result=0 # default, no change
OPT=$1
shift
case ${OPT} in
"all")
;&
"")
echo "Stopping all mycroft-core services"
end-process messagebus.service
end-process skills
end-process audio
end-process speech
# determine platform type
if [[ -r /etc/mycroft/mycroft.conf ]] ; then
mycroft_platform=$( jq -r ".enclosure.platform" < /etc/mycroft/mycroft.conf )
if [[ $mycroft_platform == "mycroft_mark_1" ]] ; then
# running on a Mark 1, stop enclosure service
end-process enclosure
fi
fi
;;
"bus")
end-process messagebus.service
;;
"audio")
end-process audio
;;
"skills")
end-process skills
;;
"voice")
end-process speech
;;
"enclosure")
end-process enclosure
;;
*)
help
;;
esac
# Exit codes:
# 0 if nothing changed (e.g. --help or no process was running)
# 100 at least one process was stopped
# 120 if any process had to be killed
exit $result