Browse Source

recovery build

Signed-off-by: Michel-FK <michel.stempin@funkey-project.com>
Michel-FK 3 years ago
parent
commit
4d8b81a40e
69 changed files with 3075 additions and 38 deletions
  1. 2 2
      .gitignore
  2. 0 3
      FunKey/board/funkey/post-build.sh
  3. 1 4
      FunKey/configs/funkey_defconfig
  4. 75 0
      Makefile
  5. 1 0
      Recovery/Config.in
  6. 1183 0
      Recovery/board/funkey/busybox.config
  7. 0 0
      Recovery/board/funkey/device_table.txt
  8. 173 0
      Recovery/board/funkey/linux.config
  9. 14 0
      Recovery/board/funkey/post-build.sh
  10. 76 0
      Recovery/board/funkey/readme.txt
  11. 1 0
      Recovery/board/funkey/rootfs-overlay/etc/current_battery_percentage
  12. 1 0
      Recovery/board/funkey/rootfs-overlay/etc/current_brightness
  13. 3 0
      Recovery/board/funkey/rootfs-overlay/etc/default/dropbear
  14. 10 0
      Recovery/board/funkey/rootfs-overlay/etc/fstab
  15. 40 0
      Recovery/board/funkey/rootfs-overlay/etc/fw_env.config
  16. 21 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S03rclocal
  17. 47 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S04modules
  18. 28 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S10share
  19. 36 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S12low-bat-check
  20. 36 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S13system-stats
  21. 51 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S20urandom
  22. 30 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S40network
  23. 48 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S41dhcpcd
  24. 62 0
      Recovery/board/funkey/rootfs-overlay/etc/init.d/S50dropbear
  25. 41 0
      Recovery/board/funkey/rootfs-overlay/etc/inittab
  26. 10 0
      Recovery/board/funkey/rootfs-overlay/etc/issue
  27. 12 0
      Recovery/board/funkey/rootfs-overlay/etc/os-release
  28. 21 0
      Recovery/board/funkey/rootfs-overlay/etc/profile
  29. 14 0
      Recovery/board/funkey/rootfs-overlay/etc/rc.local
  30. 1 0
      Recovery/board/funkey/rootfs-overlay/etc/sysconfig/modules
  31. 15 0
      Recovery/board/funkey/rootfs-overlay/etc/u-boot.env
  32. 34 0
      Recovery/board/funkey/rootfs-overlay/lib/lsb/init-functions
  33. 41 0
      Recovery/board/funkey/rootfs-overlay/root/.profile
  34. 20 0
      Recovery/board/funkey/rootfs-overlay/usr/local/lib/utils
  35. 24 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_get
  36. 13 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_get_sysfs
  37. 28 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_set
  38. 21 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_set_sysfs
  39. 5 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/display_notif_system_stats
  40. 2 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/get_sid
  41. 20 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/is_usb_data_connected
  42. 124 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/low_bat_check
  43. 8 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_clear
  44. 38 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_disp
  45. 36 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_set
  46. 137 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/share
  47. 22 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/shutdown_funkey
  48. 12 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/start_gpio_manager
  49. 38 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/system_stats
  50. 21 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/test-led
  51. 24 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/test-speaker
  52. 8 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/toggle_boot
  53. 169 0
      Recovery/board/funkey/rootfs-overlay/usr/local/sbin/usb_gadget
  54. 29 0
      Recovery/board/funkey/uboot.config
  55. 0 0
      Recovery/board/funkey/users_table.txt
  56. 67 0
      Recovery/configs/recovery_defconfig
  57. 2 0
      Recovery/external.desc
  58. 1 0
      Recovery/external.mk
  59. 5 0
      Recovery/package/FunKey-GPIO-Mapping/Config.in
  60. 31 0
      Recovery/package/FunKey-GPIO-Mapping/FunKey-GPIO-Mapping.mk
  61. 36 0
      Recovery/package/FunKey-GPIO-Mapping/etc/init.d/S11funkey-gpio-management
  62. 0 0
      docker/Dockerfile
  63. 0 0
      docker/README_FR
  64. 0 0
      docker/apt-sources.list
  65. 0 0
      docker/config
  66. 0 0
      docker/known_hosts
  67. 0 8
      fel-boot.sh
  68. 6 6
      genimage.cfg
  69. 0 15
      pcba

+ 2 - 2
.gitignore

@@ -1,7 +1,7 @@
-*/dl
-*/dl/*
+download
 */output/*
 *~
 br.log
 id_rsa_funkey
 id_rsa_funkey.pub
+images

+ 0 - 3
FunKey/board/funkey/post-build.sh

@@ -13,6 +13,3 @@ rm -f ${TARGET_DIR}/etc/init.d/S01syslogd ${TARGET_DIR}/etc/init.d/S02klogd
 
 # Change dropbear init sequence
 mv ${TARGET_DIR}/etc/init.d/S50dropbear ${TARGET_DIR}/etc/init.d/S42dropbear
-
-# Generate U-Boot environment
-${HOST_DIR}/bin/mkenvimage -p 0x0 -s 0x20000 -o ${BINARIES_DIR}/u-boot-env.img ${TARGET_DIR}/etc/u-boot.env

+ 1 - 4
FunKey/configs/funkey_defconfig

@@ -1,6 +1,6 @@
 BR2_arm=y
 BR2_cortex_a7=y
-BR2_DL_DIR="$(BR2_EXTERNAL_FUNKEY_PATH)/dl"
+BR2_DL_DIR="../download"
 BR2_CCACHE=y
 BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_FUNKEY_PATH)/board/funkey/patches"
 BR2_TOOLCHAIN_EXTERNAL=y
@@ -14,8 +14,6 @@ BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
 BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_FUNKEY_PATH)/board/funkey/users_table.txt"
 BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_FUNKEY_PATH)/board/funkey/rootfs-overlay"
 BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_FUNKEY_PATH)/board/funkey/post-build.sh"
-BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
-BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_FUNKEY_PATH)/board/funkey/genimage.cfg"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_GIT=y
 BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/FunKey-Project/linux"
@@ -89,6 +87,5 @@ BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
 BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
 BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin"
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
-BR2_PACKAGE_HOST_GENIMAGE=y
 BR2_PACKAGE_HOST_MTOOLS=y
 BR2_PACKAGE_HOST_UBOOT_TOOLS=y

+ 75 - 0
Makefile

@@ -0,0 +1,75 @@
+# Makefile for FunKey-OS
+#
+# Copyright (C) 2020 by Michel Stempin <michel.stempin@funkey-project.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+BRMAKE = buildroot/utils/brmake -C buildroot
+BR = make -C buildroot
+
+.PHONY: fun source image clean distclean
+
+.IGNORE: Makefile
+
+all: fun image
+
+fun: download Recovery/output/.config FunKey/output/.config
+	@echo "*** Making fun"
+	$(BRMAKE) BR2_EXTERNAL=../Recovery O=../Recovery/output
+	$(BRMAKE) BR2_EXTERNAL=../FunKey O=../FunKey/output
+
+FunKey/%: download FunKey/output/.config
+	@echo "*** Making $(notdir $@) in $(subst /,,$(dir $@))"
+	$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output $(notdir $@)
+
+Recovery/%: download Recovery/output/.config
+	@echo "*** Making $(notdir $@) in $(subst /,,$(dir $@))"
+	$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output $(notdir $@)
+
+%: download FunKey/output/.config
+	@echo "*** Making $* in FunKey"
+	$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output $*
+
+source:
+	@echo "*** Getting sources"
+	$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output source
+	$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output source
+
+image:
+	mkdir -p root tmp
+	./Recovery/output/host/bin/genimage --inputpath .
+	rm -rf root tmp
+
+clean:
+	@echo "*** Clean everything"
+	$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output distclean
+	$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output distclean
+
+distclean: clean
+	@echo "*** Really clean everything"
+	rm -rf download images
+
+download:
+	@echo "*** Making download directory"
+	mkdir -rf download
+
+FunKey/output/.config:
+	@echo "*** Configure FunKey"
+	$(BR) BR2_EXTERNAL=../FunKey O=../FunKey/output funkey_defconfig
+
+Recovery/output/.config:
+	@echo "*** Configure Recovery"
+	$(BR) BR2_EXTERNAL=../Recovery O=../Recovery/output recovery_defconfig

+ 1 - 0
Recovery/Config.in

@@ -0,0 +1 @@
+source "$BR2_EXTERNAL_RECOVERY_PATH/package/FunKey-GPIO-Mapping/Config.in"

+ 1183 - 0
Recovery/board/funkey/busybox.config

@@ -0,0 +1,1183 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.31.1
+# Tue Oct 20 22:46:50 2020
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Settings
+#
+CONFIG_DESKTOP=y
+# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_FEDORA_COMPAT is not set
+CONFIG_INCLUDE_SUSv2=y
+CONFIG_LONG_OPTS=y
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+CONFIG_LFS=y
+# CONFIG_PAM is not set
+CONFIG_FEATURE_DEVPTS=y
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+# CONFIG_FEATURE_PIDFILE is not set
+CONFIG_PID_FILE_PATH=""
+CONFIG_BUSYBOX=y
+CONFIG_FEATURE_SHOW_SCRIPT=y
+CONFIG_FEATURE_INSTALLER=y
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SYSLOG_INFO=y
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_PLATFORM_LINUX=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_CROSS_COMPILER_PREFIX=""
+CONFIG_SYSROOT=""
+CONFIG_EXTRA_CFLAGS=""
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_STACK_OPTIMIZATION_386=y
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_DEBUG_SANITIZE is not set
+# CONFIG_UNIT_TEST is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Library Tuning
+#
+# CONFIG_FEATURE_USE_BSS_TAIL is not set
+CONFIG_FLOAT_DURATION=y
+CONFIG_FEATURE_RTMINMAX=y
+CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+CONFIG_SHA3_SMALL=1
+# CONFIG_FEATURE_FAST_TOP is not set
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+# CONFIG_FEATURE_ETC_SERVICES is not set
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+CONFIG_FEATURE_EDITING_VI=y
+CONFIG_FEATURE_EDITING_HISTORY=999
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
+CONFIG_FEATURE_REVERSE_SEARCH=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+CONFIG_FEATURE_EDITING_WINCH=y
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_UNICODE_SUPPORT is not set
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=0
+CONFIG_LAST_SUPPORTED_WCHAR=0
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
+CONFIG_FEATURE_NON_POSIX_CP=y
+# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
+CONFIG_FEATURE_USE_SENDFILE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_FEATURE_SKIP_ROOTFS=y
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+CONFIG_FEATURE_HWIB=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+# CONFIG_FEATURE_SEAMLESS_XZ is not set
+# CONFIG_FEATURE_SEAMLESS_LZMA is not set
+# CONFIG_FEATURE_SEAMLESS_BZ2 is not set
+# CONFIG_FEATURE_SEAMLESS_GZ is not set
+# CONFIG_FEATURE_SEAMLESS_Z is not set
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_FEATURE_AR_CREATE=y
+# CONFIG_UNCOMPRESS is not set
+CONFIG_GUNZIP=y
+CONFIG_ZCAT=y
+CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
+CONFIG_BUNZIP2=y
+CONFIG_BZCAT=y
+CONFIG_UNLZMA=y
+CONFIG_LZCAT=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZCAT=y
+CONFIG_XZ=y
+# CONFIG_BZIP2 is not set
+CONFIG_BZIP2_SMALL=0
+CONFIG_FEATURE_BZIP2_DECOMPRESS=y
+CONFIG_CPIO=y
+# CONFIG_FEATURE_CPIO_O is not set
+# CONFIG_FEATURE_CPIO_P is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+CONFIG_GZIP=y
+# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_GZIP_FAST=0
+# CONFIG_FEATURE_GZIP_LEVELS is not set
+CONFIG_FEATURE_GZIP_DECOMPRESS=y
+# CONFIG_LZOP is not set
+CONFIG_UNLZOP=y
+CONFIG_LZOPCAT=y
+# CONFIG_LZOP_COMPR_HIGH is not set
+# CONFIG_RPM is not set
+# CONFIG_RPM2CPIO is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_FEATURE_TAR_CREATE=y
+# CONFIG_FEATURE_TAR_AUTODETECT is not set
+CONFIG_FEATURE_TAR_FROM=y
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_TO_COMMAND=y
+# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
+# CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
+# CONFIG_FEATURE_TAR_SELINUX is not set
+CONFIG_UNZIP=y
+CONFIG_FEATURE_UNZIP_CDF=y
+CONFIG_FEATURE_UNZIP_BZIP2=y
+CONFIG_FEATURE_UNZIP_LZMA=y
+CONFIG_FEATURE_UNZIP_XZ=y
+# CONFIG_FEATURE_LZMA_FAST is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+CONFIG_FEATURE_CATN=y
+CONFIG_FEATURE_CATV=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
+CONFIG_CHROOT=y
+CONFIG_CKSUM=y
+# CONFIG_COMM is not set
+CONFIG_CP=y
+# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
+# CONFIG_FEATURE_CP_REFLINK is not set
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+# CONFIG_FEATURE_DATE_NANO is not set
+CONFIG_FEATURE_DATE_COMPAT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set
+CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_FEATURE_DD_STATUS=y
+CONFIG_DF=y
+# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+# CONFIG_EXPAND is not set
+# CONFIG_UNEXPAND is not set
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FACTOR=y
+CONFIG_FALSE=y
+CONFIG_FOLD=y
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+CONFIG_HOSTID=y
+CONFIG_ID=y
+# CONFIG_GROUPS is not set
+CONFIG_INSTALL=y
+CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
+CONFIG_LINK=y
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_WIDTH=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_MD5SUM=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SHA3SUM=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+CONFIG_MKDIR=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MKTEMP=y
+CONFIG_MV=y
+CONFIG_NICE=y
+CONFIG_NL=y
+CONFIG_NOHUP=y
+CONFIG_NPROC=y
+CONFIG_OD=y
+CONFIG_PASTE=y
+CONFIG_PRINTENV=y
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+CONFIG_SHRED=y
+# CONFIG_SHUF is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set
+# CONFIG_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+# CONFIG_FEATURE_STAT_FILESYSTEM is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_FEATURE_SYNC_FANCY is not set
+# CONFIG_FSYNC is not set
+# CONFIG_TAC is not set
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TEST=y
+CONFIG_TEST1=y
+CONFIG_TEST2=y
+CONFIG_FEATURE_TEST_64=y
+# CONFIG_TIMEOUT is not set
+CONFIG_TOUCH=y
+# CONFIG_FEATURE_TOUCH_NODEREF is not set
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+CONFIG_FEATURE_TR_EQUIV=y
+CONFIG_TRUE=y
+CONFIG_TRUNCATE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNAME_OSNAME="GNU/Linux"
+CONFIG_BB_ARCH=y
+CONFIG_UNIQ=y
+CONFIG_UNLINK=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+# CONFIG_BASE64 is not set
+CONFIG_UUENCODE=y
+CONFIG_WC=y
+# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_WHO=y
+CONFIG_W=y
+# CONFIG_USERS is not set
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options
+#
+CONFIG_FEATURE_VERBOSE=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_FGCONSOLE is not set
+# CONFIG_KBD_MODE is not set
+CONFIG_LOADFONT=y
+# CONFIG_SETFONT is not set
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+
+#
+# Common options for loadfont and setfont
+#
+CONFIG_FEATURE_LOADFONT_PSF2=y
+CONFIG_FEATURE_LOADFONT_RAW=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_RESIZE=y
+CONFIG_FEATURE_RESIZE_PRINT=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+# CONFIG_SHOWKEY is not set
+
+#
+# Debian Utilities
+#
+CONFIG_PIPE_PROGRESS=y
+CONFIG_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_WHICH=y
+
+#
+# klibc-utils
+#
+# CONFIG_MINIPS is not set
+CONFIG_NUKE=y
+CONFIG_RESUME=y
+CONFIG_RUN_INIT=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_VI_UNDO=y
+CONFIG_FEATURE_VI_UNDO_QUEUE=y
+CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_EXECUTABLE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_EXEC_PLUS=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_QUIT=y
+# CONFIG_FEATURE_FIND_DELETE is not set
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+# CONFIG_FEATURE_FIND_LINKS is not set
+CONFIG_GREP=y
+CONFIG_EGREP=y
+CONFIG_FGREP=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
+CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y
+CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y
+
+#
+# Init Utilities
+#
+# CONFIG_BOOTCHARTD is not set
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+CONFIG_HALT=y
+CONFIG_POWEROFF=y
+CONFIG_REBOOT=y
+CONFIG_FEATURE_WAIT_FOR_INIT=y
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+CONFIG_INIT=y
+CONFIG_LINUXRC=y
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_KILL_REMOVED=y
+CONFIG_FEATURE_KILL_DELAY=0
+CONFIG_FEATURE_INIT_SCTTY=y
+CONFIG_FEATURE_INIT_SYSLOG=y
+CONFIG_FEATURE_INIT_QUIET=y
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+CONFIG_INIT_TERMINAL_TYPE="linux"
+CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+CONFIG_USE_BB_CRYPT=y
+CONFIG_USE_BB_CRYPT_SHA=y
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+CONFIG_ADDGROUP=y
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+CONFIG_ADDUSER=y
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_LAST_ID=60000
+CONFIG_FIRST_SYSTEM_ID=100
+CONFIG_LAST_SYSTEM_ID=999
+# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5"
+# CONFIG_CRYPTPW is not set
+CONFIG_MKPASSWD=y
+CONFIG_DELUSER=y
+CONFIG_DELGROUP=y
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
+CONFIG_GETTY=y
+CONFIG_LOGIN=y
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+CONFIG_SU=y
+CONFIG_FEATURE_SU_SYSLOG=y
+CONFIG_FEATURE_SU_CHECKS_SHELLS=y
+# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
+
+#
+# Linux Ext2 FS Progs
+#
+# CONFIG_CHATTR is not set
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+# CONFIG_TUNE2FS is not set
+
+#
+# Linux Module Utilities
+#
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_DEPMOD is not set
+CONFIG_INSMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+# CONFIG_MODINFO is not set
+CONFIG_MODPROBE=y
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_RMMOD=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+# CONFIG_BLKDISCARD is not set
+# CONFIG_BLKID is not set
+# CONFIG_FEATURE_BLKID_TYPE is not set
+# CONFIG_BLOCKDEV is not set
+# CONFIG_CAL is not set
+CONFIG_CHRT=y
+# CONFIG_DMESG is not set
+# CONFIG_FEATURE_DMESG_PRETTY is not set
+CONFIG_EJECT=y
+# CONFIG_FEATURE_EJECT_SCSI is not set
+CONFIG_FALLOCATE=y
+# CONFIG_FATATTR is not set
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+CONFIG_FDFORMAT=y
+# CONFIG_FDISK is not set
+# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
+# CONFIG_FEATURE_FDISK_WRITABLE is not set
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_GPT_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FINDFS is not set
+# CONFIG_FLOCK is not set
+CONFIG_FDFLUSH=y
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+CONFIG_FSFREEZE=y
+# CONFIG_FSTRIM is not set
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+# CONFIG_HEXDUMP is not set
+# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+# CONFIG_HD is not set
+CONFIG_XXD=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IONICE is not set
+CONFIG_IPCRM=y
+CONFIG_IPCS=y
+CONFIG_LAST=y
+# CONFIG_FEATURE_LAST_FANCY is not set
+CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+CONFIG_FEATURE_MDEV_EXEC=y
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+CONFIG_FEATURE_MDEV_DAEMON=y
+CONFIG_MESG=y
+CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+# CONFIG_MKE2FS is not set
+# CONFIG_MKFS_EXT2 is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_MKFS_REISER is not set
+# CONFIG_MKDOSFS is not set
+# CONFIG_MKFS_VFAT is not set
+# CONFIG_MKSWAP is not set
+# CONFIG_FEATURE_MKSWAP_UUID is not set
+CONFIG_MORE=y
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
+# CONFIG_FEATURE_MOUNT_LABEL is not set
+# CONFIG_FEATURE_MOUNT_NFS is not set
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_FEATURE_MOUNT_OTHERTAB=y
+CONFIG_MOUNTPOINT=y
+CONFIG_NOLOGIN=y
+CONFIG_NOLOGIN_DEPENDENCIES=y
+# CONFIG_NSENTER is not set
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_RDEV is not set
+# CONFIG_READPROFILE is not set
+# CONFIG_RENICE is not set
+# CONFIG_REV is not set
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SCRIPTREPLAY is not set
+CONFIG_SETARCH=y
+CONFIG_LINUX32=y
+CONFIG_LINUX64=y
+CONFIG_SETPRIV=y
+CONFIG_FEATURE_SETPRIV_DUMP=y
+CONFIG_FEATURE_SETPRIV_CAPABILITIES=y
+CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y
+# CONFIG_SETSID is not set
+# CONFIG_SWAPON is not set
+# CONFIG_FEATURE_SWAPON_DISCARD is not set
+# CONFIG_FEATURE_SWAPON_PRI is not set
+# CONFIG_SWAPOFF is not set
+# CONFIG_FEATURE_SWAPONOFF_LABEL is not set
+CONFIG_SWITCH_ROOT=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_UEVENT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+# CONFIG_UNSHARE is not set
+# CONFIG_WALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+# CONFIG_VOLUMEID is not set
+# CONFIG_FEATURE_VOLUMEID_BCACHE is not set
+# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_EXFAT is not set
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
+# CONFIG_FEATURE_VOLUMEID_F2FS is not set
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
+# CONFIG_FEATURE_VOLUMEID_LFS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
+# CONFIG_FEATURE_VOLUMEID_MINIX is not set
+# CONFIG_FEATURE_VOLUMEID_NILFS is not set
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
+# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
+# CONFIG_FEATURE_VOLUMEID_UBIFS is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
+CONFIG_BC=y
+CONFIG_DC=y
+CONFIG_FEATURE_DC_BIG=y
+# CONFIG_FEATURE_DC_LIBM is not set
+CONFIG_FEATURE_BC_INTERACTIVE=y
+CONFIG_FEATURE_BC_LONG_OPTIONS=y
+# CONFIG_BEEP is not set
+CONFIG_FEATURE_BEEP_FREQ=0
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
+# CONFIG_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
+# CONFIG_CONSPY is not set
+CONFIG_CROND=y
+# CONFIG_FEATURE_CROND_D is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
+CONFIG_CRONTAB=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+# CONFIG_FBSPLASH is not set
+# CONFIG_FLASH_ERASEALL is not set
+# CONFIG_FLASH_LOCK is not set
+# CONFIG_FLASH_UNLOCK is not set
+# CONFIG_FLASHCP is not set
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+CONFIG_HEXEDIT=y
+CONFIG_I2CGET=y
+CONFIG_I2CSET=y
+CONFIG_I2CDUMP=y
+CONFIG_I2CDETECT=y
+CONFIG_I2CTRANSFER=y
+# CONFIG_INOTIFYD is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_TRUNCATE=y
+# CONFIG_FEATURE_LESS_MARKS is not set
+CONFIG_FEATURE_LESS_REGEXP=y
+# CONFIG_FEATURE_LESS_WINCH is not set
+# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
+# CONFIG_FEATURE_LESS_DASHCMD is not set
+# CONFIG_FEATURE_LESS_LINENUMS is not set
+# CONFIG_FEATURE_LESS_RAW is not set
+# CONFIG_FEATURE_LESS_ENV is not set
+CONFIG_LSSCSI=y
+CONFIG_MAKEDEVS=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+# CONFIG_MAN is not set
+CONFIG_MICROCOM=y
+CONFIG_MT=y
+# CONFIG_NANDWRITE is not set
+# CONFIG_NANDDUMP is not set
+CONFIG_PARTPROBE=y
+# CONFIG_RAIDAUTORUN is not set
+# CONFIG_READAHEAD is not set
+# CONFIG_RFKILL is not set
+CONFIG_RUNLEVEL=y
+# CONFIG_RX is not set
+CONFIG_SETFATTR=y
+CONFIG_SETSERIAL=y
+CONFIG_STRINGS=y
+CONFIG_TIME=y
+CONFIG_TS=y
+# CONFIG_TTYSIZE is not set
+# CONFIG_UBIATTACH is not set
+# CONFIG_UBIDETACH is not set
+# CONFIG_UBIMKVOL is not set
+# CONFIG_UBIRMVOL is not set
+# CONFIG_UBIRSVOL is not set
+# CONFIG_UBIUPDATEVOL is not set
+CONFIG_UBIRENAME=y
+# CONFIG_VOLNAME is not set
+CONFIG_WATCHDOG=y
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_FEATURE_TLS_SHA1 is not set
+CONFIG_ARP=y
+CONFIG_ARPING=y
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW is not set
+CONFIG_DNSD=y
+CONFIG_ETHER_WAKE=y
+# CONFIG_FTPD is not set
+# CONFIG_FEATURE_FTPD_WRITE is not set
+# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
+# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+CONFIG_DNSDOMAINNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_RANGES is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY is not set
+# CONFIG_FEATURE_HTTPD_GZIP is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+CONFIG_FEATURE_IFCONFIG_SLIP=y
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUP=y
+CONFIG_IFDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+CONFIG_INETD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_IPADDR=y
+CONFIG_IPLINK=y
+CONFIG_IPROUTE=y
+CONFIG_IPTUNNEL=y
+CONFIG_IPRULE=y
+CONFIG_IPNEIGH=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
+CONFIG_FEATURE_IP_TUNNEL=y
+CONFIG_FEATURE_IP_RULE=y
+CONFIG_FEATURE_IP_NEIGH=y
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FAKEIDENTD is not set
+CONFIG_NAMEIF=y
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+# CONFIG_NBDCLIENT is not set
+# CONFIG_NC is not set
+# CONFIG_NETCAT is not set
+# CONFIG_NC_SERVER is not set
+# CONFIG_NC_EXTRA is not set
+# CONFIG_NC_110_COMPAT is not set
+CONFIG_NETSTAT=y
+# CONFIG_FEATURE_NETSTAT_WIDE is not set
+# CONFIG_FEATURE_NETSTAT_PRG is not set
+CONFIG_NSLOOKUP=y
+CONFIG_FEATURE_NSLOOKUP_BIG=y
+CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS=y
+# CONFIG_NTPD is not set
+# CONFIG_FEATURE_NTPD_SERVER is not set
+# CONFIG_FEATURE_NTPD_CONF is not set
+# CONFIG_FEATURE_NTP_AUTH is not set
+CONFIG_PING=y
+# CONFIG_PING6 is not set
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+# CONFIG_SSL_CLIENT is not set
+CONFIG_TC=y
+CONFIG_FEATURE_TC_INGRESS=y
+# CONFIG_TCPSVD is not set
+# CONFIG_UDPSVD is not set
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_FEATURE_TELNET_WIDTH=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
+CONFIG_TFTP=y
+# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
+CONFIG_FEATURE_TFTP_HPA_COMPAT=y
+# CONFIG_TFTPD is not set
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+# CONFIG_TFTP_DEBUG is not set
+# CONFIG_TLS is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_TRACEROUTE6 is not set
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+# CONFIG_TUNCTL is not set
+# CONFIG_FEATURE_TUNCTL_UG is not set
+CONFIG_VCONFIG=y
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_TIMEOUT=y
+# CONFIG_FEATURE_WGET_HTTPS is not set
+# CONFIG_FEATURE_WGET_OPENSSL is not set
+# CONFIG_WHOIS is not set
+# CONFIG_ZCIP is not set
+# CONFIG_UDHCPD is not set
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+CONFIG_DHCPD_LEASES_FILE=""
+# CONFIG_DUMPLEASES is not set
+# CONFIG_DHCPRELAY is not set
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+# CONFIG_UDHCPC6 is not set
+# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set
+# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set
+# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set
+# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set
+
+#
+# Common options for DHCP applets
+#
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=0
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+# CONFIG_FEATURE_UDHCP_RFC3397 is not set
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
+
+#
+# Mail Utilities
+#
+# CONFIG_MAKEMIME is not set
+# CONFIG_POPMAILDIR is not set
+# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
+# CONFIG_REFORMIME is not set
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
+# CONFIG_SENDMAIL is not set
+CONFIG_FEATURE_MIME_CHARSET=""
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+# CONFIG_IOSTAT is not set
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_KILLALL5=y
+CONFIG_LSOF=y
+# CONFIG_MPSTAT is not set
+# CONFIG_NMETER is not set
+# CONFIG_PGREP is not set
+# CONFIG_PKILL is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PMAP is not set
+# CONFIG_POWERTOP is not set
+# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set
+CONFIG_PS=y
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_LONG is not set
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
+# CONFIG_PSTREE is not set
+# CONFIG_PWDX is not set
+# CONFIG_SMEMCAP is not set
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_INTERACTIVE=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+# CONFIG_FEATURE_TOP_SMP_CPU is not set
+# CONFIG_FEATURE_TOP_DECIMALS is not set
+# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
+# CONFIG_FEATURE_TOPMEM is not set
+CONFIG_UPTIME=y
+# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
+CONFIG_WATCH=y
+# CONFIG_FEATURE_SHOW_THREADS is not set
+
+#
+# Runit Utilities
+#
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+# CONFIG_SV is not set
+CONFIG_SV_DEFAULT_SERVICE_DIR=""
+CONFIG_SVC=y
+CONFIG_SVOK=y
+# CONFIG_SVLOGD is not set
+# CONFIG_CHCON is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SESTATUS is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_SETSEBOOL is not set
+
+#
+# Shells
+#
+CONFIG_SH_IS_ASH=y
+# CONFIG_SH_IS_HUSH is not set
+# CONFIG_SH_IS_NONE is not set
+# CONFIG_BASH_IS_ASH is not set
+# CONFIG_BASH_IS_HUSH is not set
+CONFIG_BASH_IS_NONE=y
+CONFIG_ASH=y
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+CONFIG_ASH_INTERNAL_GLOB=y
+CONFIG_ASH_BASH_COMPAT=y
+# CONFIG_ASH_BASH_SOURCE_CURDIR is not set
+CONFIG_ASH_BASH_NOT_FOUND_HOOK=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_RANDOM_SUPPORT=y
+CONFIG_ASH_EXPAND_PRMT=y
+CONFIG_ASH_IDLE_TIMEOUT=y
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_ECHO=y
+CONFIG_ASH_PRINTF=y
+CONFIG_ASH_TEST=y
+CONFIG_ASH_HELP=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_CMDCMD=y
+# CONFIG_CTTYHACK is not set
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_LINENO_VAR is not set
+# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_HUSH_ECHO is not set
+# CONFIG_HUSH_PRINTF is not set
+# CONFIG_HUSH_TEST is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_EXPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_READONLY is not set
+# CONFIG_HUSH_KILL is not set
+# CONFIG_HUSH_WAIT is not set
+# CONFIG_HUSH_COMMAND is not set
+# CONFIG_HUSH_TRAP is not set
+# CONFIG_HUSH_TYPE is not set
+# CONFIG_HUSH_TIMES is not set
+# CONFIG_HUSH_READ is not set
+# CONFIG_HUSH_SET is not set
+# CONFIG_HUSH_UNSET is not set
+# CONFIG_HUSH_ULIMIT is not set
+# CONFIG_HUSH_UMASK is not set
+# CONFIG_HUSH_GETOPTS is not set
+# CONFIG_HUSH_MEMLEAK is not set
+
+#
+# Options common to all shells
+#
+CONFIG_FEATURE_SH_MATH=y
+CONFIG_FEATURE_SH_MATH_64=y
+CONFIG_FEATURE_SH_MATH_BASE=y
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+CONFIG_FEATURE_SH_READ_FRAC=y
+# CONFIG_FEATURE_SH_HISTFILESIZE is not set
+CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y
+
+#
+# System Logging Utilities
+#
+CONFIG_KLOGD=y
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+CONFIG_LOGGER=y
+# CONFIG_LOGREAD is not set
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
+# CONFIG_FEATURE_SYSLOGD_CFG is not set
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
+# CONFIG_FEATURE_IPC_SYSLOG is not set
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
+# CONFIG_FEATURE_KMSG_SYSLOG is not set

+ 0 - 0
Recovery/board/funkey/device_table.txt


+ 173 - 0
Recovery/board/funkey/linux.config

@@ -0,0 +1,173 @@
+CONFIG_LOCALVERSION="-funkey"
+CONFIG_KERNEL_LZO=y
+CONFIG_DEFAULT_HOSTNAME="funkey"
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=12
+CONFIG_CGROUPS=y
+CONFIG_EMBEDDED=y
+CONFIG_PERF_EVENTS=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_MSDOS_PARTITION is not set
+CONFIG_ARCH_SUNXI=y
+# CONFIG_MACH_SUN4I is not set
+# CONFIG_MACH_SUN5I is not set
+# CONFIG_MACH_SUN6I is not set
+# CONFIG_MACH_SUN7I is not set
+# CONFIG_MACH_SUN9I is not set
+CONFIG_SMP=y
+CONFIG_HAVE_ARM_ARCH_TIMER=y
+CONFIG_ARM_PSCI=y
+CONFIG_HIGHMEM=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+# CONFIG_COREDUMP is not set
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION="/dev/mmcblk0p2"
+CONFIG_PM_DEBUG=y
+CONFIG_PM_ADVANCED_DEBUG=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+CONFIG_DNS_RESOLVER=y
+# CONFIG_WIRELESS is not set
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+# CONFIG_SUNXI_RSB is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=1
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_NETDEVICES=y
+# CONFIG_ETHERNET is not set
+# CONFIG_WLAN is not set
+CONFIG_INPUT_POLLDEV=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+CONFIG_LEGACY_PTY_COUNT=4
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=8
+CONFIG_SERIAL_8250_RUNTIME_UARTS=8
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MV64XXX=y
+CONFIG_SPI=y
+CONFIG_SPI_SUN6I=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_AXP209=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_CHARGER_AXP20X=y
+CONFIG_BATTERY_AXP20X=y
+CONFIG_AXP20X_POWER=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_SUNXI_WATCHDOG=y
+CONFIG_MFD_AXP20X_I2C=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_AXP20X=y
+# CONFIG_RC_CORE is not set
+CONFIG_FB=y
+CONFIG_FB_SIMPLE=y
+CONFIG_FB_SSD1307=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_SPI is not set
+# CONFIG_SND_USB is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_SUN4I_CODEC=y
+CONFIG_SND_SUN8I_CODEC_ANALOG=y
+# CONFIG_HID is not set
+# CONFIG_USB_HID is not set
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_GADGET=y
+CONFIG_USB_MUSB_SUNXI=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_EEM=y
+CONFIG_USB_G_NCM=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_G_ACM_MS=m
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_MMC_SUNXI=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_INTF_SYSFS is not set
+# CONFIG_RTC_INTF_PROC is not set
+CONFIG_DMADEVICES=y
+CONFIG_DMA_SUN6I=y
+CONFIG_SYNC_FILE=y
+CONFIG_STAGING=y
+CONFIG_FB_TFT=y
+CONFIG_FB_TFT_ST7789V=y
+CONFIG_FB_FLEX=y
+# CONFIG_SUN8I_A23_CCU is not set
+# CONFIG_SUN8I_A33_CCU is not set
+# CONFIG_SUN8I_H3_CCU is not set
+CONFIG_SUN8I_DE2_CCU=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_IIO=y
+CONFIG_AXP20X_ADC=y
+CONFIG_PWM_SUN4I=y
+CONFIG_PHY_SUN4I_USB=y
+CONFIG_NVMEM_SUNXI_SID=y
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_USE_FOR_EXT2 is not set
+CONFIG_FANOTIFY=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_CONFIGFS_FS=y
+# CONFIG_MISC_FILESYSTEMS is not set
+# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_PRINTK_TIME=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_RCU_TRACE is not set
+# CONFIG_FTRACE is not set
+# CONFIG_ARM_UNWIND is not set
+CONFIG_KEYS=y
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
+CONFIG_CRYPTO_DEV_SUN4I_SS=y
+CONFIG_XZ_DEC=y

+ 14 - 0
Recovery/board/funkey/post-build.sh

@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Add local path to init scripts
+sed -i '3iexport PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin' ${TARGET_DIR}/etc/init.d/rcK
+sed -i '3iexport PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin' ${TARGET_DIR}/etc/init.d/rcS
+
+# Remove log daemon init scripts since they are loaded from inittab
+rm -f ${TARGET_DIR}/etc/init.d/S01syslogd ${TARGET_DIR}/etc/init.d/S02klogd
+
+# Change dropbear init sequence
+mv ${TARGET_DIR}/etc/init.d/S50dropbear ${TARGET_DIR}/etc/init.d/S42dropbear
+
+# Generate U-Boot environment
+${HOST_DIR}/bin/mkenvimage -p 0x0 -s 0x20000 -o ${BINARIES_DIR}/u-boot-env.img ${TARGET_DIR}/etc/u-boot.env

+ 76 - 0
Recovery/board/funkey/readme.txt

@@ -0,0 +1,76 @@
+# FunKey
+
+Intro
+=====
+
+This directory contains a buildroot-based external configuration for
+building the FunKey.
+
+How to get it
+===============
+
+Clone the FunKey OS repository and the required submodules from
+BitBucket:
+
+  $ git clone --recurse-submodules git@bitbucket.org:keymu2/funkey-os.git <Funkey directory>
+
+Then enter into the created directory:
+
+  $ cd <Funkey directory>
+
+How to build it
+===============
+
+Configure Buildroot
+-------------------
+
+There is only one Funkey defconfig files in Buildroot:
+
+  $ ./fun funkey_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 FunKey with:
+
+  $ ./have fun
+
+(This may take a while, consider getting yourself a coffee ;-) )
+
+Result of the build
+-------------------
+
+After building, you should obtain this tree:
+
+    FunKey/output/images/
+    +-- boot.scr
+    +-- boot.vfat
+    +-- rootfs.ext2
+    +-- rootfs.ext4 -> rootfs.ext2
+    +-- sdcard.img
+    +-- sun8i-v3s-funkey.dtb
+    +-- u-boot.bin
+    +-- u-boot-sunxi-with-spl.bin
+    `-- uImage
+
+How to write the SD card
+========================
+
+Once the build process is finished you will have an image called
+"sdcard.img" in the FunKey/output/images/ directory.
+
+Copy the bootable "sdcard.img" onto an SD card with "dd":
+
+  $ sudo dd if=<Funkey directory>/FunKey/output/images/sdcard.img of=/dev/sdX
+
+Alternatively, you can use the Etcher graphical tool to burn the image
+to the SD card safely and on any platform:
+
+https://etcher.io/
+
+Once the SD card is burned, insert it into your FunKey board, and
+power it up. Your new system should come up now and start a console on
+the UART0 serial port.

+ 1 - 0
Recovery/board/funkey/rootfs-overlay/etc/current_battery_percentage

@@ -0,0 +1 @@
+100

+ 1 - 0
Recovery/board/funkey/rootfs-overlay/etc/current_brightness

@@ -0,0 +1 @@
+100

+ 3 - 0
Recovery/board/funkey/rootfs-overlay/etc/default/dropbear

@@ -0,0 +1,3 @@
+#!/bin/sh
+
+#DROPBEAR_ARGS="-b /etc/issue.net"

+ 10 - 0
Recovery/board/funkey/rootfs-overlay/etc/fstab

@@ -0,0 +1,10 @@
+# <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
+configfs	/sys/kernel/config	configfs	rw,relatime	0	0
+/dev/mmcblk0p3	/mnt	vfat	rw,relatime,fmask=0022,dmask=0022,iocharset=iso8859-1,shortname=mixed,errors=remount-ro	0	0

+ 40 - 0
Recovery/board/funkey/rootfs-overlay/etc/fw_env.config

@@ -0,0 +1,40 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
+# Futhermore, if the Flash sector size is omitted, this value is assumed to
+# be the same as the Environment size, which is valid for NOR and SPI-dataflash
+# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.
+
+# NOR example
+# MTD device name	Device offset	Env. size	Flash sector size	Number of sectors
+#/dev/mtd1		0x0000		0x4000		0x4000
+#/dev/mtd2		0x0000		0x4000		0x4000
+
+# MTD SPI-dataflash example
+# MTD device name	Device offset	Env. size	Flash sector size	Number of sectors
+#/dev/mtd5		0x4200		0x4200
+#/dev/mtd6		0x4200		0x4200
+
+# NAND example
+#/dev/mtd0		0x4000		0x4000		0x20000			2
+
+# On a block device a negative offset is treated as a backwards offset from the
+# end of the device/partition, rather than a forwards offset from the start.
+
+# Block device example
+#/dev/mmcblk0		0xc0000		0x20000
+#/dev/mmcblk0		-0x20000	0x20000
+/dev/mmcblk0		0x88000		0x20000
+
+# VFAT example
+#/boot/uboot.env	0x0000          0x4000
+
+# UBI volume
+#/dev/ubi0_0		0x0		0x1f000		0x1f000
+#/dev/ubi0_1		0x0		0x1f000		0x1f000
+
+# UBI volume by name
+#/dev/ubi0:env		0x0		0x1f000		0x1f000
+#/dev/ubi0:env-redund	0x0		0x1f000		0x1f000
+

+ 21 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S03rclocal

@@ -0,0 +1,21 @@
+#!/bin/sh
+
+THIS=$(basename $0)
+
+case "$1" in
+    start)
+	if /etc/rc.local; then
+	    echo "Starting rc.local: OK"
+	    exit 0
+	else
+	    echo "Starting rc.local: ERROR"
+	    exit 1
+	fi
+	;;
+    stop)
+	;;
+    *)
+	echo "Usage: $0 {start|stop}" >&2
+	exit 2
+	;;
+esac

+ 47 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S04modules

@@ -0,0 +1,47 @@
+#!/bin/sh
+# Assure that the kernel has module support.
+[ -e /proc/ksyms -o -e /proc/modules ] || exit 0
+
+THIS=$(basename $0)
+
+case "${1}" in
+    start)
+
+        # Exit if there's no modules file or there are no
+        # valid entries
+        if [ -r /etc/sysconfig/modules ]; then
+            egrep -qv '^($|#)' /etc/sysconfig/modules
+	    if [ $? -ne 0 ]; then
+		exit 0
+	    fi
+	fi
+
+        # Only try to load modules if the user has actually given us
+        # some modules to load.
+        while read MODULE ARGS; do
+
+            # Ignore comments and blank lines.
+            case "$MODULE" in
+                ""|"#"*) continue ;;
+            esac
+
+            # Attempt to load the module, making
+            # sure to pass any arguments provided.
+            modprobe ${MODULE} ${ARGS} >/dev/null
+
+            # Print the module name if successful,
+            # otherwise take note.
+            if [ $? -eq 0 ]; then
+                echo "Loading module ${MODULE}: OK"
+            else
+                echo "Loading module ${MODULE}: ERROR"
+            fi
+        done < /etc/sysconfig/modules
+        ;;
+    stop)
+	;;
+    *)
+        echo "Usage: ${0} {start|stop}"
+        exit 1
+        ;;
+esac

+ 28 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S10share

@@ -0,0 +1,28 @@
+#!/bin/sh
+
+THIS=$(basename $0)
+
+case "$1" in
+    start)
+	if share init; then
+	    echo "Starting share: OK"
+	    exit 0
+	else
+	    echo "Starting share: ERROR"
+	    exit 1
+	fi
+	;;
+    stop)
+	if share stop >/dev/null 2>&1; then
+	    echo "Stopping share: OK"
+	    exit 0
+	else
+	    echo "Stopping share: ERROR"
+	    exit 2
+	fi
+	;;
+    *)
+	echo "Usage: $0 {start|stop}" >&2
+	exit 3
+	;;
+esac

+ 36 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S12low-bat-check

@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Start/stop low_bat_check
+#
+
+DAEMON=/usr/local/sbin/low_bat_check
+PIDFILE=/var/run/low_bat_check.pid
+
+case "$1" in
+  start)
+	echo -n "Starting low_bat_check: "
+	start-stop-daemon -S -x ${DAEMON} -p ${PIDFILE} -m -b -- > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  stop)
+	echo -n "Stopping low_bat_check: "
+	start-stop-daemon -K -x ${DAEMON} -p ${PIDFILE} -o > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  restart)
+	${0} stop
+	sleep 1 # Prevent race condition: ensure low_bat_check stops before start.
+	${0} start
+	;;
+  *)
+	echo "Usage: ${0} {start|stop|restart}"
+	exit 1
+esac

+ 36 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S13system-stats

@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Start/stop system_stats
+#
+
+DAEMON=/usr/local/sbin/system_stats
+PIDFILE=/var/run/system_stats.pid
+
+case "$1" in
+  start)
+	echo -n "Starting system_stats: "
+	start-stop-daemon -S -x ${DAEMON} -p ${PIDFILE} -m -b -- > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  stop)
+	echo -n "Stopping system_stats: "
+	start-stop-daemon -K -x ${DAEMON} -p ${PIDFILE} -o > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  restart)
+	${0} stop
+	sleep 1 # Prevent race condition: ensure system_stats stops before start.
+	${0} start
+	;;
+  *)
+	echo "Usage: ${0} {start|stop|restart}"
+	exit 1
+esac

+ 51 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S20urandom

@@ -0,0 +1,51 @@
+#! /bin/sh
+#
+# urandom	This script saves the random seed between reboots.
+#		It is called from the boot, halt and reboot scripts.
+#
+# Version:	@(#)urandom  1.33  22-Jun-1998  miquels@cistron.nl
+#
+
+[ -c /dev/urandom ] || exit 0
+#. /etc/default/rcS
+
+case "$1" in
+	start|"")
+		# check for read only file system
+		if ! touch /etc/random-seed 2>/dev/null
+		then
+#			echo "read-only file system detected...done"
+			exit
+		fi
+		if [ "$VERBOSE" != no ]
+		then
+			echo -n "Starting random number generator: "
+		fi
+		# Load and then save 512 bytes,
+		# which is the size of the entropy pool
+		cat /etc/random-seed >/dev/urandom
+		rm -f /etc/random-seed
+		umask 077
+		dd if=/dev/urandom of=/etc/random-seed count=1 \
+			>/dev/null 2>&1 || echo "ERROR"
+		umask 022
+		[ "$VERBOSE" != no ] && echo "OK"
+		;;
+	stop)
+		if ! touch /etc/random-seed 2>/dev/null
+		then
+			exit
+		fi
+		# Carry a random seed from shut-down to start-up;
+		# see documentation in linux/drivers/char/random.c
+		[ "$VERBOSE" != no ] && echo -n "Stopping random number generator: "
+		umask 077
+		dd if=/dev/urandom of=/etc/random-seed count=1 \
+			>/dev/null 2>&1 || echo "ERROR"
+		[ "$VERBOSE" != no ] && echo "OK"
+		;;
+	*)
+		echo "Usage: urandom {start|stop}" >&2
+		exit 1
+		;;
+esac

+ 30 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S40network

@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Start the network....
+#
+
+# Debian ifupdown needs the /run/network lock directory
+mkdir -p /run/network
+[ -f /mnt/usbnet ] || exit 0
+case "$1" in
+  start)
+	printf "Starting network: "
+	/sbin/ifup -a
+	[ $? = 0 ] && echo "OK" || echo "FAIL"
+	;;
+  stop)
+	printf "Stopping network: "
+	/sbin/ifdown -a
+	[ $? = 0 ] && echo "OK" || echo "FAIL"
+	;;
+  restart|reload)
+	"$0" stop
+	"$0" start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
+

+ 48 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S41dhcpcd

@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# Start/stop dhcpcd
+#
+
+DAEMON=/sbin/dhcpcd
+CONFIG=/etc/dhcpcd.conf
+PIDFILE=/var/run/dhcpcd.pid
+[ -f /mnt/usbnet ] || exit 0
+[ -f $CONFIG ] || exit 0
+
+case "$1" in
+  start)
+	echo -n "Starting dhcpcd: "
+	start-stop-daemon -S -x "$DAEMON" -p "$PIDFILE" -- -f "$CONFIG" > /dev/null 2>&1
+	if [ $? -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  stop)
+	echo -n "Stopping dhcpcd: "
+	start-stop-daemon -K -x "$DAEMON" -p "$PIDFILE" -o > /dev/null 2>&1
+	if [ $? -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  reload|force-reload)
+	echo -n "Reloading dhcpcd configuration: "
+	"$DAEMON" -s reload >/dev/null 2>&1
+	if [ $? -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  restart)
+	"$0" stop
+	sleep 1 # Prevent race condition: ensure dhcpcd stops before start.
+	"$0" start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart|reload|force-reload}"
+	exit 1
+esac

+ 62 - 0
Recovery/board/funkey/rootfs-overlay/etc/init.d/S50dropbear

@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+# Starts dropbear sshd.
+#
+
+[ -f /mnt/usbnet ] || exit 0
+# Allow a few customizations from a config file
+test -r /etc/default/dropbear && . /etc/default/dropbear
+
+start() {
+	DROPBEAR_ARGS="$DROPBEAR_ARGS -R"
+
+	# If /etc/dropbear is a symlink to /var/run/dropbear, and
+	#   - the filesystem is RO (i.e. we can not rm the symlink),
+	#     create the directory pointed to by the symlink.
+	#   - the filesystem is RW (i.e. we can rm the symlink),
+	#     replace the symlink with an actual directory
+	if [ -L /etc/dropbear \
+	     -a "$(readlink /etc/dropbear)" = "/var/run/dropbear" ]
+	then
+		if rm -f /etc/dropbear >/dev/null 2>&1; then
+			mkdir -p /etc/dropbear
+		else
+			echo "No persistent location to store SSH host keys. New keys will be"
+			echo "generated at each boot. Are you sure this is what you want to do?"
+			mkdir -p "$(readlink /etc/dropbear)"
+		fi
+	fi
+
+	printf "Starting dropbear sshd: "
+	umask 077
+
+	start-stop-daemon -S -q -p /var/run/dropbear.pid \
+		--exec /usr/sbin/dropbear -- $DROPBEAR_ARGS
+	[ $? = 0 ] && echo "OK" || echo "FAIL"
+}
+stop() {
+	printf "Stopping dropbear sshd: "
+	start-stop-daemon -K -q -p /var/run/dropbear.pid
+	[ $? = 0 ] && echo "OK" || echo "FAIL"
+}
+restart() {
+	stop
+	start
+}
+
+case "$1" in
+  start)
+  	start
+	;;
+  stop)
+  	stop
+	;;
+  restart|reload)
+  	restart
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?

+ 41 - 0
Recovery/board/funkey/rootfs-overlay/etc/inittab

@@ -0,0 +1,41 @@
+# /etc/inittab
+#
+# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
+#
+# Note: BusyBox init doesn't support runlevels.  The runlevels field is
+# completely ignored by BusyBox init. If you want runlevels, use
+# sysvinit.
+#
+# Format for each entry: <id>:<runlevels>:<action>:<process>
+#
+# id        == tty to run on, or empty for /dev/console
+# runlevels == ignored
+# action    == one of sysinit, respawn, askfirst, wait, and once
+# process   == program to run
+
+# Startup the system
+::sysinit:/bin/cat /etc/issue
+::sysinit:/bin/mount -t proc proc /proc
+::sysinit:/bin/mount -o remount,rw /
+::sysinit:/bin/mkdir -p /dev/pts /dev/shm
+::sysinit:/bin/mount -a
+null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd
+null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin
+null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout
+null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr
+::sysinit:/bin/hostname -F /etc/hostname
+::sysinit:/sbin/syslogd
+::sysinit:/sbin/klogd
+
+# now run any rc scripts
+::sysinit:/etc/init.d/rcS
+
+# Start an automatic root login on the console
+::respawn:-/bin/login -f root
+
+# Stuff to do for the 3-finger salute
+#::ctrlaltdel:/sbin/reboot
+
+# Stuff to do before rebooting
+::shutdown:/etc/init.d/rcK
+::shutdown:/bin/umount -a -r

+ 10 - 0
Recovery/board/funkey/rootfs-overlay/etc/issue

@@ -0,0 +1,10 @@
+
+ _______               __  __              
+|    ___|.--.--.-----.|  |/  |.-----.--.--.
+|    ___||  |  |     ||     < |  -__|  |  |
+|___|    |_____|__|__||__|\__||_____|___  |
+         FUN ON A KEYCHAIN          |_____|
+ -----------------------------------------------------
+ Version 0.6 (Recovery)
+ -----------------------------------------------------
+

+ 12 - 0
Recovery/board/funkey/rootfs-overlay/etc/os-release

@@ -0,0 +1,12 @@
+NAME="FunKey-OS Recovery"
+VERSION="0.6 (Khaki Kitten)"
+ID=funkey-recovery
+ID_LIKE=buildroot
+PRETTY_NAME="FunKey-OS Recovery 0.6"
+VERSION_ID="0.6"
+HOME_URL="https://www.funkey-project.com/"
+SUPPORT_URL="https://www.funkey-project.com/"
+BUG_REPORT_URL="https://www.funkey-project.com/"
+PRIVACY_POLICY_URL="https://www.funkey-project.com"
+VERSION_CODENAME=khaki
+UBUNTU_CODENAME=khaki

+ 21 - 0
Recovery/board/funkey/rootfs-overlay/etc/profile

@@ -0,0 +1,21 @@
+export PATH="/usr/local/games:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+
+if [ "$PS1" ]; then
+	if [ "`id -u`" -eq 0 ]; then
+		export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\# '
+	else
+		export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+	fi
+fi
+
+export PAGER='/bin/more'
+export EDITOR='/usr/bin/nano'
+export SDL_NOMOUSE=1
+
+# Source configuration files from /etc/profile.d
+for i in /etc/profile.d/*.sh ; do
+	if [ -r "$i" ]; then
+		. $i
+	fi
+done
+unset i

+ 14 - 0
Recovery/board/funkey/rootfs-overlay/etc/rc.local

@@ -0,0 +1,14 @@
+#!/bin/sh -e
+#
+# rc.local
+#
+# This script is executed at the end of each multiuser runlevel.
+# Make sure that the script will "exit 0" on success or any other
+# value on error.
+#
+# In order to enable or disable this script just change the execution
+# bits.
+#
+# By default this script does nothing.
+
+exit 0

+ 1 - 0
Recovery/board/funkey/rootfs-overlay/etc/sysconfig/modules

@@ -0,0 +1 @@
+

+ 15 - 0
Recovery/board/funkey/rootfs-overlay/etc/u-boot.env

@@ -0,0 +1,15 @@
+args_mmc=setenv bootargs console=ttyS0,115200 panic=5 rootwait fbcon=map:10 fbcon=font:VGA8x8 vt.global_cursor_default=0 root=/dev/mmcblk0p${bootpart} rootfstype=ext4 rootflags=commit=120,data=writeback,barrier=0,journal_async_commit rw quiet
+baudrate=115200
+bootcmd=run getbootpart; run args_mmc; run loadfdt; run loadimage; bootz ${loadaddr} - ${fdtaddr}
+bootdelay=0
+console=ttyS0,115200
+fdt_high=0xffffffff
+fdtaddr=0x41800000
+getbootpart=part list mmc 0 -bootable bootpart
+loadaddr=0x41000000
+loadfdt=load mmc 0:${bootpart} ${fdtaddr} /boot/sun8i-v3s-funkey.dtb
+loadimage=load mmc 0:${bootpart} ${loadaddr} /boot/zImage
+stderr=serial@01c28000
+stdin=serial@01c28000
+stdout=serial@01c28000
+verify=n

+ 34 - 0
Recovery/board/funkey/rootfs-overlay/lib/lsb/init-functions

@@ -0,0 +1,34 @@
+#!/bin/sh
+
+#set -xv
+
+if [ x"$THIS" != x ]; then
+    THIS="${THIS}: "
+fi
+log_action_msg () {
+    echo "${THIS}${@}." | tee /dev/kmsg
+}
+
+log_action_begin_msg () {
+    echo -n "${THIS}${@}: " | tee /dev/kmsg
+}
+
+log_action_cont_msg () {
+    echo "${THIS}${@}..." | tee /dev/kmsg
+}
+
+log_action_end_msg () {
+    local end
+    if [ -z "${2:-}" ]; then
+        end=""
+    else
+        end=" ($2)"
+    fi
+
+    if [ $1 -eq 0 ]; then
+        echo "${THIS}OK${end}" | tee /dev/kmsg
+    else
+        echo "${THIS}ERROR${end}" | tee /dev/kmsg
+    fi
+}
+

+ 41 - 0
Recovery/board/funkey/rootfs-overlay/root/.profile

@@ -0,0 +1,41 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+
+# Note: PS1 and umask are already set in /etc/profile. You should not
+# need this unless you want different defaults for root.
+# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
+# umask 022
+
+# You may uncomment the following lines if you want `ls' to be colorized:
+export TERM=xterm
+export LS_OPTIONS='--color=auto'
+#eval "`dircolors`"
+alias ls='ls $LS_OPTIONS'
+alias ll='ls $LS_OPTIONS -l'
+alias l='ls $LS_OPTIONS -lA'
+#
+# Some more alias to avoid making mistakes:
+# alias rm='rm -i'
+# alias cp='cp -i'
+# alias mv='mv -i'
+
+# Resize the console to the terminal dimensions
+resize() {
+    if [[ -t 0 && $# -eq 0 ]]; then
+        local IFS='[;' escape geometry x y
+        echo -ne '\e7\e[r\e[999;999H\e[6n\e8'
+        read -sd R escape geometry
+        x=${geometry##*;} y=${geometry%%;*}
+        if [[ ${COLUMNS} -eq ${x} && ${LINES} -eq ${y} ]]; then
+            echo "${TERM} ${x}x${y}"
+        else
+            echo "${COLUMNS}x${LINES} -> ${x}x${y}"
+            stty cols ${x} rows ${y}
+        fi
+    else
+        print 'Usage: resize'
+    fi
+}
+
+# Reset saved brightness
+echo "Reset saved brightness"
+brightness_set $(brightness_get) >/dev/null 2>&1

+ 20 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/lib/utils

@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Define log functions if they do not exist yet
+type -t info >/dev/null 2>&1
+if [ $? -ne 0 ]; then
+    info () {
+	echo "$SELF:" "$@" | tee /dev/kmsg
+    }
+
+    warn () {
+    	 echo "$SELF:" "$@" >&2 | tee /dev/kmsg
+    }
+
+    die () {
+    	local return_code=$1
+	shift
+	warn "$@"
+	exit $return_code
+    }
+fi

+ 24 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_get

@@ -0,0 +1,24 @@
+#!/bin/sh
+
+BRIGHTNESS_FILE=/etc/current_brightness
+BRIGHTNESS_DEFAULT_VALUE=100
+
+# Check args
+if [ ${#} -ne 0 ]; then
+    echo "Usage: $(basename ${0})"
+    exit 1
+fi
+
+# Sanity check: File does not exist
+if [ ! -f ${BRIGHTNESS_FILE} ]; then
+    echo ${BRIGHTNESS_DEFAULT_VALUE} > ${BRIGHTNESS_FILE}
+fi
+
+# Sanity check: Check if integer
+brightness=$(cat ${BRIGHTNESS_FILE})
+if ! [ ! "${brightness}" -ne "${brightness}" ] 2> /dev/null; then
+    echo ${BRIGHTNESS_DEFAULT_VALUE} > ${BRIGHTNESS_FILE}
+    brightness=${BRIGHTNESS_DEFAULT_VALUE}
+fi
+echo ${brightness}
+exit 0

+ 13 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_get_sysfs

@@ -0,0 +1,13 @@
+#!/bin/sh
+
+SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
+
+# Check args
+if [ ${#} -ne 0 ]; then
+    echo "Usage: $(basename ${0})"
+    exit 1
+fi
+
+let brightness=$(cat ${SYSTEM_BRIGHTNESS})*10-10
+echo ${brightness}
+exit 0

+ 28 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_set

@@ -0,0 +1,28 @@
+#!/bin/sh
+
+BRIGHTNESS_FILE=/etc/current_brightness
+SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
+
+# Check args
+if [ ${#} -ne 1 ]; then
+    echo "Usage: $(basename ${0}) new_brightness_percentage"
+    exit 1
+fi
+
+# Check value's range
+if [ ${1} -gt 100 ]; then
+    echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
+    exit 1
+fi
+brightness_percentage=${1}
+
+# Set new brightness percentage
+let value=${1}+10
+let value/=10
+echo ${value} > ${SYSTEM_BRIGHTNESS}
+
+# Set new brightness value in brightness file
+if [ ${?} -eq 0 ]; then
+    echo ${brightness_percentage} > ${BRIGHTNESS_FILE}
+fi
+exit 0

+ 21 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/brightness_set_sysfs

@@ -0,0 +1,21 @@
+#!/bin/sh
+
+SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
+
+# Check args
+if [ ${#} -ne 1 ]; then
+    echo "Usage: $(basename ${0}) new_brightness_percentage"
+    exit 1
+fi
+
+# Check value's range
+if [ ${1} -gt 100 ]; then
+    echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
+    exit 1
+fi
+
+# Set new brightness percentage
+let value=${1}+10
+let value/=10
+echo ${value} > ${SYSTEM_BRIGHTNESS}
+exit 0

+ 5 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/display_notif_system_stats

@@ -0,0 +1,5 @@
+#!/bin/sh
+
+notif_set 0 "Getting system stats..."
+killall -s USR1 system_stats
+exit 0

+ 2 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/get_sid

@@ -0,0 +1,2 @@
+#!/bin/sh
+echo $(for i in 0 4 8 c; do devmem 0x01c2380$i 32; done) | sed 's/ \?0x//g'

+ 20 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/is_usb_data_connected

@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Uncomment the following line to get debug info
+#set -x
+
+# Get USB state
+usb_present=$(cat /sys/class/power_supply/axp20x-usb/present)
+
+# Get udc state
+udc_state=$(cat /sys/class/udc/musb-hdrc.1.auto/state)
+
+if [[ x"$udc_state" == "xconfigured" -a "$usb_present" == "1" ]]; then
+
+    # Connected succesfully to a host
+    echo "yes"
+    exit 0
+else
+    echo "no"
+    exit 1
+fi

+ 124 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/low_bat_check

@@ -0,0 +1,124 @@
+#!/bin/sh
+
+# General constants declaration
+THRESHOLD_PERCENT_LOW_BAT=5
+THRESHOLD_PERCENT_EXTREMELY_LOW_BAT=2
+MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN=5
+SLEEP_SECS=2
+RESCALE_MAX_PERCENTAGE=120
+
+# Blink Low bat constants declaration
+BLINK_ICON=0
+LOW_BAT_SECS_DISPLAYED=5
+LOW_BAT_SECS_NOT_DISPLAYED=5
+
+# Files and commands declaration
+USB_PRESENT_FILE=/sys/class/power_supply/axp20x-usb/present
+#USB_PRESENT_FILE=/sys/class/power_supply/axp20x-ac/present # Cheat for no USB present simulation when debugging
+BAT_PRESENT_FILE=/sys/class/power_supply/axp20x-battery/present
+BAT_PERCENT_FILE=/sys/class/power_supply/axp20x-battery/capacity
+BAT_PERCENT_RESCALED_FILE=/etc/current_battery_percentage
+LOW_BAT_ICON=/sys/class/graphics/fb0/low_battery
+SCHEDULE_SHUTDOWN_CMD=sched_shutdown
+SIGNAL_URS1_TO_EMULATORS_CMD=signal_usr1_to_emulators
+
+# Variables declaration
+low_bat_status=0
+low_bat_displayed=0
+cur_secs_disp=0
+cur_nb_extremely_low_bat_before_shutdown=0
+
+# Default: Hide Low Bat Icon
+echo 0 > ${LOW_BAT_ICON}
+
+# Check low bat #
+while true; do
+    #echo "Bat present: $(cat ${BAT_PRESENT_FILE})"
+    #echo "USB present: $(cat ${USB_PRESENT_FILE})"
+    #echo "Bat percentage: $(cat ${BAT_PERCENT_FILE})"
+
+    # Get current bat percentage here once
+    cur_bat_percent=$(cat ${BAT_PERCENT_FILE})
+    #echo "cur_bat_percent = ${cur_bat_percent}"
+
+    # Rescale bat percentage between 0 and RESCALE_MAX_PERCENTAGE
+    bat_percent_rescaled=$(printf "%.f" $(echo $cur_bat_percent $RESCALE_MAX_PERCENTAGE | awk '{print $1*$2/100}'))
+    #echo "bat_percent_rescaled = ${bat_percent_rescaled}"
+
+    # Re-maximize to 100%
+    bat_percent_rescaled_maxed=$(( bat_percent_rescaled < 100 ? bat_percent_rescaled : 100 ))
+    #echo "bat_percent_rescaled_maxed = ${bat_percent_rescaled_maxed}"
+
+    # Save in file
+    echo ${bat_percent_rescaled_maxed} > ${BAT_PERCENT_RESCALED_FILE}
+
+    # Low bat status detection
+    if [ "$(cat ${USB_PRESENT_FILE})" -eq "0" ]; then
+			
+		# Value of 0 means wrong i2c reading
+		if [ "${cur_bat_percent}" -ne "0" ]; then
+
+		    # Check if we must change state
+		    if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 0 ]; then
+
+				# Set Low Bat status
+				low_bat_status=1
+				low_bat_displayed=1
+				cur_secs_disp=0
+				echo 1 > ${LOW_BAT_ICON}
+
+		    elif [ ${cur_bat_percent} -gt ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 1 ]; then
+
+				# Reset status
+				low_bat_status=0
+				cur_nb_extremely_low_bat_before_shutdown=0
+				echo 0 > ${LOW_BAT_ICON}
+		    fi
+		fi
+    else
+		if [ ${low_bat_status} -eq 1 ]; then
+
+		    # Reset status
+		    low_bat_status=0
+		    cur_nb_extremely_low_bat_before_shutdown=0
+		    echo 0 > ${LOW_BAT_ICON}
+		fi
+    fi
+
+    # Low bat processing
+    if [ ${low_bat_status} -eq 1 ]; then
+
+		# Check extremely low bat for clean shutdown
+		if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_EXTREMELY_LOW_BAT} ]; then
+		    let cur_nb_extremely_low_bat_before_shutdown++
+		    echo "cur_nb_extremely_low_bat_before_shutdown = ${cur_nb_extremely_low_bat_before_shutdown}"
+
+		    # Clean shutdown
+		    if [ ${cur_nb_extremely_low_bat_before_shutdown} -ge  ${MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN} ]; then
+				echo "Battery extremely low, shutting down now..."
+				sched_shutdown 1 & signal_usr1_to_emulators
+				exit 0
+		    fi
+		fi
+
+		# Blinking process
+		if [ ${BLINK_ICON} -eq 1 ]; then
+		    if [ ${low_bat_displayed} -eq 1 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_DISPLAYED} ]; then
+				low_bat_displayed=0
+				cur_secs_disp=0
+				echo 0 > ${LOW_BAT_ICON}
+		    elif [ ${low_bat_displayed} -eq 0 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_NOT_DISPLAYED} ]; then
+				low_bat_displayed=1
+				cur_secs_disp=0
+				echo 1 > ${LOW_BAT_ICON}
+		    fi
+		fi
+    fi
+
+    # Sleep before next check
+    sleep ${SLEEP_SECS}
+
+    # Increase vars
+    let cur_secs_disp+=${SLEEP_SECS}
+done
+exit 0

+ 8 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_clear

@@ -0,0 +1,8 @@
+#!/bin/sh
+# Clear all current notifications
+
+NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
+
+printf "clear" > ${NOTIFICATION_DISPLAY}
+
+exit 0

+ 38 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_disp

@@ -0,0 +1,38 @@
+#!/bin/sh
+# Display notification for a certain amount of time
+# Special char: ^ to add a new line
+# Set seconds to 0 to display indefinitely (until the next notif)
+
+NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
+
+display_usage() { 
+    echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n" 
+} 
+ 
+# If less than two arguments supplied, display usage 
+if [  ${#} -le 1 ]; then 
+    echo "Display notification for a certain amount of time"
+    display_usage
+    exit 1
+fi 
+
+# Get number of seconds to display notif
+nb_secs=${1}
+if ! [ ! "${nb_secs}" -ne "${nb_secs}" ] 2> /dev/null; then
+    echo "error: ${nb_secs} is not a number" >&2
+    exit 1
+fi
+
+# Print notif
+printf "${*:2}" > ${NOTIFICATION_DISPLAY}
+
+# Clear notif if NB_SECS is not 0, otherwise never clear
+if [ ${nb_secs} -ne 0 ]; then
+
+    # Wait time before clearing notif
+    sleep ${nb_secs}
+
+    # Clear notif
+    printf "clear" > ${NOTIFICATION_DISPLAY}
+fi
+exit 0

+ 36 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/notif_set

@@ -0,0 +1,36 @@
+#!/bin/sh
+# Erase previous notif and display new one in background process for a certain amount of seconds
+# Special char: ^ to add a new line
+# Set seconds to 0 to display indefinitely (until the next notif_set)
+
+NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
+
+display_usage() { 
+    echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n" 
+} 
+ 
+# If less than two arguments supplied, display usage 
+if [  ${#} -le 1 ]; then 
+    echo "Erase previous notif and display new one in background process for a certain amount of time"
+    echo "Special char: ^ to add a new line"
+    echo "Set seconds to 0 to display indefinitely (until the next $(basename ${0}))"
+    display_usage
+    exit 1
+fi
+
+# Get number of seconds to display notif
+nb_secs=${1}
+if ! [ ! "${nb_secs}" -ne "${nb_secs}" ]; then
+     echo "error: ${nb_secs} is not a number" >&2
+     exit 1
+fi
+
+# Kill previous notif_disp process
+pkill notif_disp 2> /dev/null
+
+## Clear previous notif
+#printf "clear" > ${NOTIFICATION_DISPLAY}
+
+# Print new notif
+notif_disp "$@" &
+exit 0

+ 137 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/share

@@ -0,0 +1,137 @@
+#!/bin/sh
+
+# Uncomment the following line to get debug info
+#set -x
+
+SELF=${SELF:-$(basename $0)}
+LOCK_FILE=/var/lock/share.lock
+
+source /usr/local/lib/utils
+source usb_gadget
+
+# The USB network interface file
+USB_IF=/etc/network/interfaces.d/usb0
+
+# The USB mass storage backing store file or partition
+BACKING_STORE_FILE=/sys/kernel/config/usb_gadget/FunKey/functions/mass_storage.mmcblk0p3/lun.0/file
+
+# Unmount a local share
+unmount_share () {
+
+    umount /mnt || die 1 "cannot unmount the backing store partition"
+    return 0
+}
+
+# Mount a share locally
+mount_share () {
+
+    mount | grep -q /dev/mmcblk0p3
+    if [ $? -ne 0 ]; then
+
+	# Check if the FAT32 partition has been unmounted cleanly
+	fsck.fat -n /dev/mmcblk0p3 2>/dev/null | egrep -q "Dirty bit"
+	if [ $? -eq 0 ]; then
+
+	    # The FAT32 partition was not cleanly unmounted, try to
+	    # clean it
+	    warn "the backing store partition was not properly unmounted"
+	    #warn "the backing store partition was not properly
+	    #unmounted, clean it"
+    	    # fsck.fat -a -t -w /dev/loop0 >/dev/null 2>&1
+	    # if [ $? -gt 1 ]; then
+	    #     die 3 "cannot clean backing store file"
+	    # fi
+	fi
+
+	# Mount the backing store file locally
+	mount /mnt/ || die 4 "cannot mount backing store partition"
+    fi
+
+    # Create the directory structure if required
+    (cd /mnt; mkdir -p "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan")
+    return 0
+}
+
+# Initialize the backing store if needed and mount it locally
+init_share () {
+    if [ -f ${LOCK_FILE} ]; then
+	return 0
+    fi
+    touch ${LOCK_FILE}
+
+    # Initialize the USB gadget
+    init_usb_gadget
+
+    # Mount the backing store partition locally
+    mount_share
+    return 0
+}
+
+# Stop sharing the backing store partition
+stop_share () {
+
+    # Stop sharing the backing store partition
+    echo > $BACKING_STORE_FILE || die 11 "the backing store partition is still mounted on host"
+
+    # 3) Mount the backing store partition locally
+    mount_share
+
+    info "stopped sharing the backing store partition"
+
+    return 0
+}
+
+# Start sharing the backing store partition
+start_share () {
+
+    # 1) Check if the backing store partition is already shared
+    cat $BACKING_STORE_FILE | egrep -q ^/dev/mmcblk0p3 && die 12 "the backing store partition is already shared"
+
+    # 2) Check if USB data is connected
+    is_usb_data_connected > /dev/null 2>&1 || die 13 "USB sharing impossible, not connected to a host"
+
+    # 3) Unmount the backing store partition if it is locally mounted
+    unmount_share
+
+    # 4) Everything is now clear to start sharing the backing store partition
+    info "start sharing the backing store partition"
+    echo /dev/mmcblk0p3 > $BACKING_STORE_FILE || die 14 "cannot share the backing store partition"
+}
+
+# Return if currently sharing
+is_share_started () {
+
+    cat $BACKING_STORE_FILE | egrep -q ^/dev/mmcblk0p3
+    local res=$?
+    if [ "$res" == "0" ]; then
+        echo "yes"
+    else
+        echo "no"
+    fi
+    return $res
+}
+
+case "$1" in
+
+    init)
+	init_share
+	;;
+
+    start)
+	start_share
+	;;
+    
+    stop)
+	stop_share
+	;;
+
+    is_sharing)
+        is_share_started
+        ;;
+
+
+    *)
+	die 15 "Usage $0 {init|start|stop|is_sharing}"
+	;;
+esac
+exit $?

+ 22 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/shutdown_funkey

@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Notif fullscreen "Shutting down"
+notif_set 0 "^^^^^^^^      SHUTTING DOWN...^^^^^^^^"
+
+# Kill Emulators
+#kill_emulators >/dev/null 2>&1
+
+# Kill Retrofe
+#pkill retrofe
+
+# Sync filesystems (useful in case poweroff could not finish)
+sync
+
+# Unmount Roms partition
+umount /mnt
+
+# Shutdown amp
+start_audio_amp 0 >/dev/null 2>&1
+
+# Poweroff
+poweroff

+ 12 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/start_gpio_manager

@@ -0,0 +1,12 @@
+#!/bin/sh
+
+LOCK_FILE=/var/lock/gpio_manager.lock
+
+if [ -f ${LOCK_FILE} ]; then
+    echo "${LOCK_FILE} already exists"
+    exit 1
+fi
+touch ${LOCK_FILE}
+funkey_gpio_management
+rm "${LOCK_FILE}"
+exit 0

+ 38 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/system_stats

@@ -0,0 +1,38 @@
+#!/bin/sh
+
+UPDATE_PERIOD=2 #seconds
+
+notif_dirty=0
+perform=0
+
+# USR1 callback
+function toggle_perform()
+{
+    let perform=1-${perform}
+    if [ ${perform} -eq 0 ]; then
+    	notif_clear
+        notif_dirty=1
+    fi
+}
+trap toggle_perform SIGUSR1
+
+while true; do
+    if [ ${perform} -eq 1 ]; then
+
+	# Compute stats
+	cpu=$(printf "%.1f\n" $(mpstat -P ALL $UPDATE_PERIOD 1 | tail -1 | awk '{print 100-$12}'))
+	ram_mem=$(printf "%.1f\n" $(free | grep Mem | awk '{print $3/$2 * 100.0}'))
+	ram_swap=$(printf "%.1f\n" $(free | grep Swap | awk '{print $3/$2 * 100.0}'))
+
+	# Notif
+	if [ ${notif_dirty} -eq 1 ]; then
+	    notif_clear
+	    notif_dirty=0
+	else
+	    notif_set 0 "CPU:${cpu}%% RAM:${ram_mem}%% SWAP:${ram_swap}%%"
+	fi
+    else
+	sleep ${UPDATE_PERIOD}
+    fi
+done
+exit 0

+ 21 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/test-led

@@ -0,0 +1,21 @@
+#!/bin/sh
+
+if [ $# -ne 1 ];then
+    echo "ERROR LED ARGS"
+    exit;
+fi
+case ${1} in
+    0) value=0x0a;;
+    1) value=0x3a;;
+    *) echo "ERROR LED VALUE"; exit 1;;
+esac
+
+# Turn on/off the LED
+i2cset -f -y 0 0x34 0x32 ${value}
+if [ $? -ne 0 ]; then
+    #echo "ERROR LED I2C"
+    exit 1
+else
+    #echo "OK"
+    exit 0
+fi

+ 24 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/test-speaker

@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Turn on Power Amplifier
+gpioset $(gpiofind "PA")=1
+if [ $? -ne 0 ]; then
+    echo "ERROR SPEAKER ON"
+else
+
+    # Play 1kHz sine wave
+    speaker-test -t sine -s 1 -f 1000 >/dev/null 2>&1
+    if [ $? -ne 0 ]; then
+	echo "ERROR SPEAKER SINE"
+	gpioset $(gpiofind "PA")=0
+    else
+
+	# Turn off Power Amplifier
+	gpioset $(gpiofind "PA")=0
+	if [ $? -ne 0 ]; then
+	    echo "ERROR SPEAKER OFF"
+	else
+	    echo "OK"
+	fi
+    fi
+fi

+ 8 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/toggle_boot

@@ -0,0 +1,8 @@
+#!/bin/sh
+sgdisk -A 1:toggle:2 -A 2:toggle:2 /dev/mmcblk0 >/dev/null 2>&1
+recovery=$(sgdisk -A 1:get:2 /dev/mmcblk0 | cut -d : -f3)
+if [ ${recovery} -eq 1 ]; then
+    echo "Next boot will be in recovery mode"
+else
+    echo "Next boot will be in normal mode"
+fi

+ 169 - 0
Recovery/board/funkey/rootfs-overlay/usr/local/sbin/usb_gadget

@@ -0,0 +1,169 @@
+#!/bin/sh
+
+#set -xv
+
+SELF=${SELF:-$(basename $0)}
+
+source /usr/local/lib/utils
+
+# The composite gadget directory
+GADGET=/sys/kernel/config/usb_gadget/FunKey
+
+# Check if Ethernet over USB network is requested
+[ ! -f /mnt/usbnet ]
+USBNET=${?}
+
+# USB VID for Linux Foundation
+ID_VENDOR="0x1d6b"
+
+# USB PID for Multifunction Composite Gadget
+ID_PRODUCT="0x0104"
+
+# Get the CPU serial number
+SERIAL="$(grep Serial /proc/cpuinfo | sed 's/Serial\s*: \(\w*\)/\1/')"
+
+# Build a MAC address from it
+MAC="$(echo ${SERIAL} | sed 's/\(\w\w\)/:\1/g' | cut -b 2-)"
+
+# Derive host and device MAC addresses
+MAC_HOST="12$(echo ${MAC} | cut -b 3-)"
+MAC_DEV="02$(echo ${MAC} | cut -b 3-)"
+
+# Initialize the USB gadget
+init_usb_gadget() {
+
+    # Don't proceed if existing gadget is present
+    if [ -e ${GADGET} ]; then
+	return 0
+    fi
+
+    # Get the legacy drivers out of the way
+    modprobe -r g_ether
+    modprobe -r g_mass_storage
+
+    # Load the libcomposite USB driver
+    modprobe libcomposite
+
+    # USB Device Controller Driver
+    local udc_driver=$(ls /sys/class/udc | cut -f1 | head -n 1)
+
+    # Create our gadget directory
+    mkdir ${GADGET}
+    mkdir ${GADGET}/strings/0x409
+    mkdir ${GADGET}/configs/FunKey.1
+    mkdir ${GADGET}/configs/FunKey.1/strings/0x409
+    test ${USBNET} -eq 1 && mkdir ${GADGET}/functions/rndis.usb0
+    mkdir ${GADGET}/functions/mass_storage.mmcblk0p3
+
+    # USB2
+    echo "0x0200" > ${GADGET}/bcdUSB
+
+    # Communication Device Class
+    if [ ${USBNET} -eq 1 ]; then
+	echo "0x02" > ${GADGET}/bDeviceClass
+	echo "0x00" > ${GADGET}/bDeviceSubClass
+    fi
+
+    # USB VID and PID
+    echo ${ID_VENDOR} > ${GADGET}/idVendor
+    echo ${ID_PRODUCT} > ${GADGET}/idProduct
+
+    # Device Release Number
+    echo "0x0100" > ${GADGET}/bcdDevice
+
+    # Device String Descriptiors
+    echo "FunKey" > ${GADGET}/strings/0x409/manufacturer
+    echo "FunKey S" > ${GADGET}/strings/0x409/product
+    echo ${SERIAL} > ${GADGET}/strings/0x409/serialnumber
+
+    # Turn on "OS Descriptors" support for RNDIS
+    if [ ${USBNET} -eq 1 ]; then
+	echo 1 > ${GADGET}/os_desc/use
+	echo "0xcd" > ${GADGET}/os_desc/b_vendor_code
+	echo "MSFT100" > ${GADGET}/os_desc/qw_sign
+    fi
+
+    # Configuration
+
+    # Maximum power is 500 mA
+    echo 500 > ${GADGET}/configs/FunKey.1/MaxPower
+
+    # Configuration String Descriptors
+    if [ ${USBNET} -eq 1 ]; then
+	echo "Mass Storage + RNDIS" > ${GADGET}/configs/FunKey.1/strings/0x409/configuration
+    else
+	echo "Mass Storage" > ${GADGET}/configs/FunKey.1/strings/0x409/configuration
+    fi
+
+    if [ ${USBNET} -eq 1 ]; then
+
+	# Make the FunKey.1 configuration the one associated with OS Descriptors
+	ln -s ${GADGET}/configs/FunKey.1 ${GADGET}/os_desc
+
+	# RNDIS Function
+
+	# Host & Device MAC Addresses
+	echo ${MAC_HOST} > ${GADGET}/functions/rndis.usb0/host_addr
+	echo ${MAC_DEV} > ${GADGET}/functions/rndis.usb0/dev_addr
+
+	# Compatible ID & Sub-Compatible ID
+	echo "RNDIS" > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/compatible_id
+	echo "5162001" > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
+
+	# Add the "Icons" Extended Property
+	mkdir ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Icons
+	echo 2 > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Icons/type
+	echo "%SystemRoot%\\system32\\shell32.dll,-233" > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Icons/data
+
+	# Add the "Label" Extended Property
+	mkdir ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Label
+	echo 1 > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Label/type
+	echo "FunKey S Device" > ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Label/data
+    fi
+
+    # Mass Storage Function
+
+    # Backing Store file
+    #echo "/dev/mmcblk0p3" > ${GADGET}/functions/mass_storage.mmcblk0p3/lun.0/file
+
+    # Gadget is not allowed to halt bulk endpoints
+    echo 0 > ${GADGET}/functions/mass_storage.mmcblk0p3/stall
+
+    # Do not simulate a CDROM
+    echo 0 > ${GADGET}/functions/mass_storage.mmcblk0p3/lun.0/cdrom
+
+    # No SCSI Force Unit Access (FUA) to work in synchronous mode ?!?
+    echo 0 > ${GADGET}/functions/mass_storage.mmcblk0p3/lun.0/nofua
+
+    # LUN is removable
+    echo 1 > ${GADGET}/functions/mass_storage.mmcblk0p3/lun.0/removable
+
+    # Inquiry String
+    echo "FunKey S Shared Disk" > ${GADGET}/functions/mass_storage.mmcblk0p3/lun.0/inquiry_string
+
+    if [ ${USBNET} -eq 1 ]; then
+
+	# Add the RNDIS function to the FunKey.1 configuration
+	ln -s ${GADGET}/functions/rndis.usb0 ${GADGET}/configs/FunKey.1
+
+	# Bind the USB Gadget as RNDIS device
+	echo ${udc_driver} > ${GADGET}/UDC
+	sleep 5
+
+	# Start network services
+	systemctl start networking ntp dropbear > /dev/null 2>&1
+
+	# Unbind the device
+	echo > ${GADGET}/UDC
+    fi
+
+    # Add the Mass Storage function to the FunKey.1 configuration
+    ln -s ${GADGET}/functions/mass_storage.mmcblk0p3 ${GADGET}/configs/FunKey.1
+
+    # Each interface specifies its own class code
+    echo "0x00" > ${GADGET}/bDeviceClass
+
+    # Bind the USB Gadget as a Mass Storage device
+    echo ${udc_driver} > ${GADGET}/UDC
+    return 0
+}

+ 29 - 0
Recovery/board/funkey/uboot.config

@@ -0,0 +1,29 @@
+CONFIG_ARM=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_SPL=y
+CONFIG_IDENT_STRING=" FunKey"
+CONFIG_MACH_SUN8I_V3S=y
+CONFIG_DRAM_CLK=360
+# CONFIG_ARMV7_NONSEC is not set
+CONFIG_DEFAULT_DEVICE_TREE="sun8i-v3s-funkey"
+CONFIG_LOCALVERSION="-funkey"
+# CONFIG_DISTRO_DEFAULTS is not set
+# CONFIG_FIT is not set
+CONFIG_BOOTDELAY=0
+# CONFIG_PRE_CONSOLE_BUFFER is not set
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_SYS_STDIO_DEREGISTER=y
+# CONFIG_DISPLAY_CPUINFO is not set
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+# CONFIG_ENV_IS_IN_FAT is not set
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_USE_DEFAULT_ENV_FILE=y
+CONFIG_DEFAULT_ENV_FILE="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/rootfs-overlay/etc/u-boot.env"
+# CONFIG_NET is not set

+ 0 - 0
Recovery/board/funkey/users_table.txt


+ 67 - 0
Recovery/configs/recovery_defconfig

@@ -0,0 +1,67 @@
+BR2_arm=y
+BR2_cortex_a7=y
+BR2_DL_DIR="../download"
+BR2_CCACHE=y
+BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/patches"
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
+BR2_TARGET_GENERIC_HOSTNAME="FunKey"
+BR2_TARGET_GENERIC_ISSUE="Welcome to Recovery Buildroot for the FunKey"
+BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/device_table.txt"
+BR2_TARGET_GENERIC_ROOT_PASSWD="funkey"
+BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
+BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
+BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/users_table.txt"
+BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/rootfs-overlay"
+BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/post-build.sh"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/FunKey-Project/linux"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="932bc41a1a2ce477855240d39edbf7a9af5b7490"
+BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/linux.config"
+BR2_LINUX_KERNEL_LZO=y
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-v3s-funkey"
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/busybox.config"
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_DOSFSTOOLS=y
+BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
+BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
+BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
+BR2_PACKAGE_E2FSPROGS=y
+# BR2_PACKAGE_E2FSPROGS_FSCK is not set
+BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
+BR2_PACKAGE_GPTFDISK=y
+BR2_PACKAGE_GPTFDISK_GDISK=y
+BR2_PACKAGE_GPTFDISK_SGDISK=y
+BR2_PACKAGE_PARTED=y
+BR2_PACKAGE_SYSSTAT=y
+BR2_PACKAGE_UBOOT_TOOLS=y
+BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y
+BR2_PACKAGE_LIBNL=y
+BR2_PACKAGE_DHCPCD=y
+BR2_PACKAGE_DROPBEAR=y
+BR2_PACKAGE_PROCPS_NG=y
+BR2_PACKAGE_UTIL_LINUX_BINARIES=y
+BR2_PACKAGE_NANO=y
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="100M"
+# BR2_TARGET_ROOTFS_TAR is not set
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_GIT=y
+BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/FunKey-Project/u-boot"
+BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="02e613eaddaacaf0ac0f0b941b90d9645be29f56"
+BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECOVERY_PATH)/board/funkey/uboot.config"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin"
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS=y

+ 2 - 0
Recovery/external.desc

@@ -0,0 +1,2 @@
+name: RECOVERY
+desc: FunKey Recovery packages

+ 1 - 0
Recovery/external.mk

@@ -0,0 +1 @@
+include $(sort $(wildcard $(BR2_EXTERNAL_RECOVERY_PATH)/package/*/*.mk))

+ 5 - 0
Recovery/package/FunKey-GPIO-Mapping/Config.in

@@ -0,0 +1,5 @@
+config BR2_PACKAGE_FUNKEY_GPIO_MAPPING
+	bool "FunKey GPIO Mapping"
+	default y
+	help
+	  The FunKey GPIO mapping utility.

+ 31 - 0
Recovery/package/FunKey-GPIO-Mapping/FunKey-GPIO-Mapping.mk

@@ -0,0 +1,31 @@
+################################################################################
+#
+# FunKey-GPIO-mapping
+#
+################################################################################
+
+FUNKEY_GPIO_MAPPING_VERSION = cd412528079a59eab66e7d426e28d9966c2d731c
+FUNKEY_GPIO_MAPPING_SITE_METHOD = git
+#FUNKEY_GPIO_MAPPING_SITE = ssh://git@github.com/FunKey-Project/FunKey-GPIO-Mapping.git
+FUNKEY_GPIO_MAPPING_SITE = ssh://git@fk/FunKey-Project/FunKey-GPIO-Mapping.git
+FUNKEY_GPIO_MAPPING_SITE_LICENSE = GPL-2.1+
+FUNKEY_GPIO_MAPPING_SITE_LICENSE_FILES = COPYING
+
+define FUNKEY_GPIO_MAPPING_BUILD_CMDS
+	$(TARGET_MAKE_ENV) CROSS_COMPILE=$(TARGET_CROSS) \
+		CC="$(TARGET_CC)" \
+		$(MAKE) -C $(@D) \
+		CFLAGS="$(TARGET_CFLAGS)" $(FUNKEY_GPIO_MAPPING_BUILD_TARGET)
+endef
+
+define FUNKEY_GPIO_MAPPING_INSTALL_TARGET_CMDS
+	$(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/local/sbin
+	$(INSTALL) -m 0755 $(@D)/funkey_gpio_management $(TARGET_DIR)/usr/local/sbin/funkey_gpio_management
+	$(INSTALL) -m 0755 $(@D)/termfix $(TARGET_DIR)/usr/local/sbin/termfix
+	$(INSTALL) -d -m 0755 $(TARGET_DIR)/etc
+	$(INSTALL) -m 0644 $(@D)/funkey_gpio_mapping.conf $(TARGET_DIR)/etc/funkey_gpio_mapping.conf
+	$(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/init.d
+	$(INSTALL) -m 0755 $(FUNKEY_GPIO_MAPPING_PKGDIR)etc/init.d/S11funkey-gpio-management $(TARGET_DIR)/etc/init.d/S11funkey-gpio-management
+endef
+
+$(eval $(generic-package))

+ 36 - 0
Recovery/package/FunKey-GPIO-Mapping/etc/init.d/S11funkey-gpio-management

@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Start/stop funkey_gpio_management
+#
+
+DAEMON=/usr/local/sbin/funkey_gpio_management
+PIDFILE=/var/run/funkey_gpio_management.pid
+
+case "$1" in
+  start)
+	echo -n "Starting funkey_gpio_management: "
+	start-stop-daemon -S -x ${DAEMON} -p ${PIDFILE} -m -b -- > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  stop)
+	echo -n "Stopping funkey_gpio_management: "
+	start-stop-daemon -K -x ${DAEMON} -p ${PIDFILE} -o > /dev/null 2>&1
+	if [ ${?} -eq 0 ]; then
+	  echo "OK"
+	else
+	  echo "ERROR"
+	fi
+	;;
+  restart)
+	${0} stop
+	sleep 1 # Prevent race condition: ensure funkey_gpio_management stops before start.
+	${0} start
+	;;
+  *)
+	echo "Usage: ${0} {start|stop|restart}"
+	exit 1
+esac

+ 0 - 0
FunKey-OS-docker/Dockerfile → docker/Dockerfile


+ 0 - 0
FunKey-OS-docker/README_FR → docker/README_FR


+ 0 - 0
FunKey-OS-docker/apt-sources.list → docker/apt-sources.list


+ 0 - 0
FunKey-OS-docker/config → docker/config


+ 0 - 0
FunKey-OS-docker/known_hosts → docker/known_hosts


+ 0 - 8
fel-boot.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-cd PCBA/output/images
-sudo ~/sunxi-tools/sunxi-fel -v -p uboot u-boot-sunxi-with-spl.bin \
-     multi 3 \
-     0x41000000 zImage \
-     0x41800000 sun8i-v3s-funkey.dtb \
-     0x41900000 boot.scr
-cd -

+ 6 - 6
FunKey/board/funkey/genimage.cfg → genimage.cfg

@@ -12,7 +12,7 @@ image sdcard.img {
 
 	partition u-boot {
 		in-partition-table = "no"
-		image = "u-boot-sunxi-with-spl.bin"
+		image = "Recovery/output/images/u-boot-sunxi-with-spl.bin"
 		offset = 8K
 		size = 536K # 544KB - 8KB
 	}
@@ -21,7 +21,7 @@ image sdcard.img {
 		in-partition-table = "no"
 		offset = 544K
 		size = 128K
-		image = "u-boot-env.img"
+		image = "FunKey/output/images/u-boot-env.img"
 	}
 
 #	partition gpt-table {
@@ -30,18 +30,18 @@ image sdcard.img {
 #		size = 16K
 #	}
 
-	partition rootfs_alt {
+	partition Recovery {
 		offset = 1M
 		partition-type = 0x83
-		image = "rootfs.ext4"
+		image = "Recovery/output/images/rootfs.ext4"
 		size = 100M
 	}
 
-	partition rootfs {
+	partition FunKey {
 		offset = 101M
 		partition-type = 0x83
 		bootable = "yes"
-		image = "rootfs.ext4"
+		image = "FunKey/output/images/rootfs.ext4"
 		size = 100M
 	}
 

+ 0 - 15
pcba

@@ -1,15 +0,0 @@
-#!/bin/sh
-
-BR="make -C buildroot BR2_EXTERNAL=../PCBA O=../PCBA/output"
-
-case "$1" in
-    start)
-	$BR distclean funkey_defconfig
-    ;;
-    update)
-	$BR savedefconfig linux-update-defconfig uboot-update-defconfig busybox-update-config
-    ;;
-    *)
-	$BR $*
-    ;;
-esac