2016-03-03 00:45:46 +01:00
|
|
|
#!/bin/bash
|
2014-10-08 07:39:24 +02:00
|
|
|
### BEGIN INIT INFO
|
|
|
|
# Provides: armhwinfo
|
|
|
|
# Required-Start:
|
2014-10-12 09:20:35 +02:00
|
|
|
# Required-Stop: glibc
|
2014-10-12 07:27:38 +02:00
|
|
|
# Default-Start: 2 3 4 5
|
|
|
|
# Default-Stop: 0 1 6
|
2016-06-07 22:29:22 +02:00
|
|
|
# Short-Description: Armbian gathering information about hardware
|
2014-10-08 07:39:24 +02:00
|
|
|
### END INIT INFO
|
|
|
|
|
2016-02-29 20:25:50 +01:00
|
|
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
|
2016-05-31 16:07:07 +02:00
|
|
|
collect_information() {
|
2016-03-17 20:16:26 +01:00
|
|
|
ifconfig | grep -q eth0 || (ifconfig eth0 up ; sleep 2)
|
2016-03-03 00:45:46 +01:00
|
|
|
TMPFILE=$(mktemp /tmp/${0##*/}.XXXXXX)
|
|
|
|
trap "rm \"${TMPFILE}\" ; exit 0" 0 1 2 3 15
|
|
|
|
dmesg >"${TMPFILE}"
|
|
|
|
CORES=$(grep -c ^processor /proc/cpuinfo)
|
|
|
|
MEMTOTAL=$(( $(awk -F" " '/^MemTotal/ {print $2}' </proc/meminfo) / 1024 ))
|
|
|
|
ARCH=$(lscpu | awk '/Architecture/ {print $2}')
|
|
|
|
RTC=$(awk '/rtc0/ {print $(NF)}' <"${TMPFILE}")
|
|
|
|
HB_PCI=$(grep '16c3:abcd' "${TMPFILE}")
|
|
|
|
HARDWARE=$(awk '/Hardware/ {print $3}' </proc/cpuinfo)
|
2016-04-02 19:30:55 +02:00
|
|
|
[ "X${HARDWARE}" = "XAllwinner" ] && HARDWARE=$(awk '/Hardware/ {print $4}' </proc/cpuinfo)
|
2016-03-03 00:45:46 +01:00
|
|
|
GMAC=$(grep "sun6i_gmac" "${TMPFILE}")$(grep "gmac0-" "${TMPFILE}")
|
|
|
|
SUN8IPHY="$(awk -F"PHY ID " '/PHY ID / {print $2}' <"${TMPFILE}")"
|
|
|
|
LEDS=$(grep "green:ph02:led1" "${TMPFILE}")
|
|
|
|
TERMINUS=$(lsusb | grep -i "1a40:0101")
|
|
|
|
SWITCH=$(grep "BCM53125" "${TMPFILE}")
|
2016-05-31 16:07:07 +02:00
|
|
|
WIFI8189ES=$(lsmod | grep 8189es)
|
|
|
|
WIFI8189FS=$(lsmod | grep 8189fs)
|
2016-03-03 00:45:46 +01:00
|
|
|
WIFIAP6211=$(lsmod | grep ap6211)
|
2016-05-25 04:17:14 -07:00
|
|
|
SPDIF=$(lsmod | grep spdif)
|
2016-03-03 00:45:46 +01:00
|
|
|
read VERSION </proc/version
|
2016-06-07 16:31:41 +02:00
|
|
|
KERNELID=$(echo $VERSION | awk -F" " '{print $3}')
|
2016-05-31 16:07:07 +02:00
|
|
|
} # collect_information
|
2016-01-20 09:09:46 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
set_io_scheduler() {
|
|
|
|
for i in $( lsblk -idn -o NAME ); do
|
|
|
|
read ROTATE </sys/block/$i/queue/rotational
|
|
|
|
|
|
|
|
# mechanical drives
|
|
|
|
if [ "$ROTATE" = 1 ]; then echo cfq >/sys/block/$i/queue/scheduler;
|
|
|
|
echo -e "[\e[0;32m ok \x1B[0m] Setting cfg I/O scheduler for $i"
|
|
|
|
|
|
|
|
# solid state drives
|
|
|
|
elif [ "$ROTATE" = 0 ]; then echo noop >/sys/block/$i/queue/scheduler;
|
|
|
|
echo -e "[\e[0;32m ok \x1B[0m] Setting noop I/O scheduler for $i"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
} # set_io_scheduler
|
2015-12-02 20:33:32 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
do_initialisation() {
|
|
|
|
# parse /etc/armbian-boards.conf and adjust everything
|
|
|
|
:
|
|
|
|
} # do_initialisation
|
2015-12-02 20:33:32 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
detect_board() {
|
2016-06-07 22:29:22 +02:00
|
|
|
# Start soon obsolete auto detection stuff
|
2016-03-03 00:45:46 +01:00
|
|
|
if [ "$ARCH" = "armv7l" ]; then
|
|
|
|
if [ $HARDWARE = "ODROID-XU3" ]; then
|
|
|
|
ID="Odroid XU4"
|
2016-02-25 23:40:24 +01:00
|
|
|
fi
|
2016-03-03 00:45:46 +01:00
|
|
|
if [ $HARDWARE = "Marvell" ]; then
|
|
|
|
ID="Clearfog"
|
|
|
|
fi
|
|
|
|
if [ $HARDWARE = "gs705a" ]; then
|
2016-05-13 13:54:30 +02:00
|
|
|
if [ $MEMTOTAL -gt 1800 ]; then
|
2016-05-07 08:54:15 +02:00
|
|
|
ID="Roseapple Pi"
|
|
|
|
else
|
|
|
|
ID="Guitar"
|
|
|
|
fi
|
2016-02-25 15:23:02 +01:00
|
|
|
fi
|
2016-06-07 22:29:22 +02:00
|
|
|
if [ $HARDWARE = "sun4i" ]; then
|
2016-03-03 00:45:46 +01:00
|
|
|
ID="Cubieboard"
|
2016-02-28 12:36:13 +01:00
|
|
|
fi
|
2016-06-07 22:29:22 +02:00
|
|
|
if [ $HARDWARE = "sun7i" ]; then
|
2016-03-03 00:45:46 +01:00
|
|
|
if [ $MEMTOTAL -gt 1500 ]; then
|
|
|
|
ID="Cubietruck"
|
|
|
|
elif [ -n "$GMAC" ]; then
|
|
|
|
if [ "$TERMINUS" != "" ]; then
|
|
|
|
ID="Orange"
|
|
|
|
elif [ "$SWITCH" != "" ]; then
|
|
|
|
ID="Lamobo R1"
|
|
|
|
elif [ "$LEDS" != "" ]; then
|
|
|
|
ID="Lime 2"
|
|
|
|
elif [ "$WIFIAP6211" != "" ]; then
|
2016-03-12 22:33:20 +01:00
|
|
|
ID="Banana Pi Pro"
|
2016-03-03 00:45:46 +01:00
|
|
|
else
|
2016-03-12 22:33:20 +01:00
|
|
|
ID="Banana Pi"
|
2016-03-03 00:45:46 +01:00
|
|
|
fi
|
|
|
|
elif [ "$LEDS" != "" ]; then
|
|
|
|
ID="Lime"
|
|
|
|
elif [ $MEMTOTAL -lt 1500 ]; then
|
|
|
|
ID="Micro"
|
|
|
|
else
|
|
|
|
ID="Cubieboard"
|
|
|
|
fi
|
|
|
|
|
|
|
|
elif [ "$HARDWARE" = "Freescale" ]; then
|
|
|
|
if [ $MEMTOTAL -gt 1500 ]; then
|
|
|
|
ID="Cubox i4"
|
|
|
|
elif [ "$HB_PCI" != "" ]; then
|
|
|
|
ID="HB i2eX"
|
|
|
|
elif [ "$RTC" = "rtc0" ]; then
|
|
|
|
ID="Cubox i2eX"
|
|
|
|
elif [ "$CORES" = 1 ]; then
|
|
|
|
ID="HB i1"
|
|
|
|
else
|
|
|
|
ID="HB i2"
|
|
|
|
fi
|
|
|
|
[ -f /proc/asound/imxvt1613audio/id ] && ID="Udoo"
|
|
|
|
fi
|
|
|
|
|
2016-05-31 07:36:52 +02:00
|
|
|
if [ "$HARDWARE" = "sun8i" ]; then
|
2016-06-07 22:29:22 +02:00
|
|
|
ID="Orange H3"
|
2016-05-31 16:07:07 +02:00
|
|
|
if [ -f /sys/class/leds/*blue*/trigger ] ; then
|
|
|
|
ID="NanoPi M1"
|
|
|
|
elif [ "$TERMINUS" != "" ]; then
|
2016-03-03 00:45:46 +01:00
|
|
|
ID="Orange Pi+"
|
|
|
|
if [ $MEMTOTAL -gt 1500 ]; then
|
|
|
|
if [ ${CORES} -eq 4 ]; then
|
|
|
|
ID="Orange Pi+ 2"
|
|
|
|
else
|
2016-03-06 10:48:13 +01:00
|
|
|
ID="Unsupported Hardware" # Banana Pi M3
|
2016-03-03 00:45:46 +01:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
case ${SUN8IPHY} in
|
|
|
|
00441400*)
|
|
|
|
if [ "$WIFI8189ES" != "" ]; then
|
|
|
|
ID="Orange Pi 2"
|
|
|
|
else
|
|
|
|
ID="Orange Pi 2 mini"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2016-05-25 04:17:14 -07:00
|
|
|
elif [ "$SPDIF" != "" ]; then
|
|
|
|
ID="Beelink X2"
|
2016-05-31 16:07:07 +02:00
|
|
|
elif [ "$WIFI8189FS" != "" ]; then
|
|
|
|
if [ $MEMTOTAL -gt 1200 ]; then
|
|
|
|
ID="Orange Pi+ 2E"
|
|
|
|
elif [ $MEMTOTAL -gt 600 ]; then
|
|
|
|
ID="Orange Pi PC Plus"
|
|
|
|
else
|
|
|
|
ID="Orange Pi Lite"
|
|
|
|
fi
|
2016-03-03 00:45:46 +01:00
|
|
|
elif [ $MEMTOTAL -gt 600 ]; then
|
|
|
|
case ${SUN8IPHY} in
|
|
|
|
00441400*)
|
|
|
|
ID="Orange Pi PC"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
ID="Banana Pi M2+"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
ID="Orange Pi One"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
elif [ "$ARCH" = "aarch64" ]; then
|
2016-03-24 20:25:42 +01:00
|
|
|
if [ $HARDWARE = "ODROID-C2" ]; then
|
|
|
|
ID="Odroid C2"
|
|
|
|
fi
|
2016-03-03 00:45:46 +01:00
|
|
|
if [ $HARDWARE = "sun50iw1p1" ]; then
|
|
|
|
if [ $MEMTOTAL -gt 600 ]; then
|
|
|
|
ID="Pine64+"
|
|
|
|
else
|
|
|
|
ID="Pine64"
|
|
|
|
fi
|
2016-02-29 16:13:15 +01:00
|
|
|
fi
|
|
|
|
fi
|
2016-03-03 00:45:46 +01:00
|
|
|
|
|
|
|
[ -f /proc/device-tree/model ] && read MACHINE </proc/device-tree/model
|
|
|
|
|
|
|
|
if [[ $MACHINE == *LIME2 ]]; then ID="Lime 2"; fi
|
|
|
|
if [[ $MACHINE == *LIME ]]; then ID="Lime"; fi
|
|
|
|
if [[ $MACHINE == *Micro ]]; then ID="Micro"; fi
|
2016-03-12 22:33:20 +01:00
|
|
|
if [[ $MACHINE == *Banana* ]]; then ID="Banana Pi"; fi
|
2016-03-03 00:45:46 +01:00
|
|
|
if [[ $MACHINE == *Udoo* ]]; then ID="udoo"; fi
|
|
|
|
if [[ $MACHINE == *Lamobo* ]]; then ID="Lamobo R1"; fi
|
|
|
|
if [[ $MACHINE == *Neo* ]]; then ID="Udoo Neo"; fi
|
|
|
|
if [[ $MACHINE == *Cubietruck* ]]; then ID="Cubietruck"; fi
|
|
|
|
if [[ $MACHINE == *Cubieboard* ]]; then ID="Cubieboard"; fi
|
2016-03-12 22:33:20 +01:00
|
|
|
if [[ $MACHINE == *Pro* ]]; then ID="Banana Pi Pro"; fi
|
|
|
|
if [[ $MACHINE == *M2* ]]; then ID="Banana Pi M2"; fi
|
2016-04-24 09:39:41 +02:00
|
|
|
if [[ $MACHINE == *AMLOGIC* ]]; then ID="Odroid C1"; fi
|
2016-04-28 10:36:13 +02:00
|
|
|
if [[ $MACHINE == *HummingBoard2* ]]; then ID="HB 2"; fi
|
2016-06-07 22:29:22 +02:00
|
|
|
# Finish soon obsolete auto detection stuff
|
2016-06-07 16:31:41 +02:00
|
|
|
|
|
|
|
# Starting with 5.15 read in $BOARD (odroidc2), $ID ("Odroid C2") and $VERSION (5.15)
|
|
|
|
[[ -f /etc/armbian-release ]] && source /etc/armbian-release
|
2016-06-07 22:29:22 +02:00
|
|
|
|
|
|
|
# IRQ distribution based on $HARDWARE and/or $ID, probably some sort of user feedback (leds)
|
|
|
|
case ${HARDWARE} in
|
|
|
|
Freescale)
|
|
|
|
# i.MX6 boards
|
|
|
|
:
|
|
|
|
;;
|
|
|
|
gs705a)
|
2016-06-08 12:37:24 +02:00
|
|
|
# Roseapple Pi/LeMaker Guitar: send USB IRQs to cpu1/cpu2, DMA0 to cpu2 and Ethernet + SD card to cpu3
|
|
|
|
echo 2 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
echo 4 >/proc/irq/$(awk -F":" "/usb2/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
|
|
|
|
echo 4 >/proc/irq/$(awk -F":" "/usb3/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
|
|
|
|
echo 4 >/proc/irq/$(awk -F":" "/owl_dma0/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/ethernet_mac/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/sdcard/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
2016-06-07 22:29:22 +02:00
|
|
|
;;
|
|
|
|
Marvell)
|
|
|
|
# Clearfog
|
|
|
|
:
|
|
|
|
;;
|
|
|
|
ODROID-C2)
|
2016-06-08 12:37:24 +02:00
|
|
|
# ODROID-C2, IRQs might be handled by c2_init.sh
|
2016-06-07 22:29:22 +02:00
|
|
|
:
|
|
|
|
;;
|
|
|
|
ODROID-XU3)
|
|
|
|
# ODROID XU4
|
|
|
|
:
|
|
|
|
;;
|
|
|
|
sun4i|sun5i)
|
|
|
|
# only one core, nothing to do
|
|
|
|
:
|
|
|
|
;;
|
|
|
|
sun6i)
|
|
|
|
# A31/A31s boards (Banana Pi M2)
|
|
|
|
:
|
|
|
|
;;
|
|
|
|
sun7i)
|
|
|
|
# try to redistribute eth0 irq to dedicated core
|
|
|
|
echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
|
|
|
|
;;
|
|
|
|
sun8i)
|
|
|
|
# 10 or 120 sec user feedback that the board is ready after 1st login with 3.4 kernel
|
|
|
|
SwapState="$(grep swap /etc/fstab)"
|
|
|
|
if [ "X${SwapState}" != "X" ]; then
|
|
|
|
(echo heartbeat >/sys/class/leds/*green*/trigger) 2>/dev/null
|
|
|
|
[ -f "/root/.not_logged_in_yet" ] && BlinkTime=120 || BlinkTime=10
|
|
|
|
(sleep ${BlinkTime} && (echo default-on >/sys/class/leds/*green*/trigger) 2>/dev/null) &
|
|
|
|
fi
|
|
|
|
|
|
|
|
# check kernel version for IRQ/module names
|
|
|
|
case ${KERNELID} in
|
|
|
|
3*)
|
|
|
|
# BSP kernel
|
|
|
|
GbE="gmac0"; WiFi="wlan0"; USB1="usb2"; USB2="usb3"; USB3="usb4"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
# Mainline kernel
|
|
|
|
GbE="1c30000.ethernet"; WiFi="wlan0"; USB1="usb1"; USB2="usb2"; USB3="usb3"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
# Assign 1st and 2nd USB port to cpu1 and cpu2 on every sun8i board
|
|
|
|
echo 2 >/proc/irq/$(awk -F":" "/${USB1}/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
echo 4 >/proc/irq/$(awk -F":" "/${USB2}/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
case ${ID} in
|
|
|
|
"Orange Pi+"|"Orange Pi+ 2"|"Orange Pi+ 2E"|"Banana Pi M2+")
|
|
|
|
# Send GBit Ethernet IRQs to cpu3
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/${GbE}/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
;;
|
|
|
|
"NanoPi M1"|"Orange Pi PC Plus"|"Orange Pi PC +"|"Orange Pi PC")
|
|
|
|
# Send 3rd USB port's IRQs to cpu3
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/${USB3}/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
;;
|
|
|
|
"Orange Pi Lite")
|
|
|
|
# Send WiFi IRQs to cpu3
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/${WiFi}/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
2016-06-08 12:37:24 +02:00
|
|
|
sun50iw1p1) # A64/H64 based boards like Pine64
|
|
|
|
# Send IRQs for the lower real USB port (usb2) to cpu2 and for the upper (OTG/usb1) to cpu1
|
|
|
|
echo 2 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
echo 4 >/proc/irq/$(awk -F":" "/usb2/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
# Send IRQs for GBit Ethernet on Pine64+ or SD card on Pine64 to cpu3
|
|
|
|
case $ID in
|
|
|
|
"Pine64+")
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/1c30000.eth/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo 8 >/proc/irq/$(awk -F":" "/sunxi-mmc/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -n1)/smp_affinity
|
|
|
|
;;
|
|
|
|
esac
|
2016-06-07 22:29:22 +02:00
|
|
|
;;
|
|
|
|
esac
|
2016-03-03 00:45:46 +01:00
|
|
|
} # detect_board
|
2016-02-25 15:23:02 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
log_hardware_info() {
|
2016-03-03 00:58:49 +01:00
|
|
|
Log=/var/log/armhwinfo.log
|
2016-03-06 10:06:12 +01:00
|
|
|
[ -f "/etc/logrotate.d/${0##*/}" ] || \
|
2016-03-06 09:53:34 +01:00
|
|
|
echo -e "${Log} {\n rotate 12\n weekly\n compress\n missingok\n notifempty\n}" \
|
|
|
|
> "/etc/logrotate.d/${0##*/}" ; chmod 644 "/etc/logrotate.d/${0##*/}"
|
2016-03-03 00:45:46 +01:00
|
|
|
if [ -f ${Log} ]; then
|
2016-06-07 16:31:41 +02:00
|
|
|
echo -e "\n\n\n$(date) $HARDWARE $ARCH $KERNELID $MACHINE $ID $VERSION" >>${Log}
|
2016-03-03 00:45:46 +01:00
|
|
|
else
|
2016-06-07 16:31:41 +02:00
|
|
|
echo "$(date) $HARDWARE $ARCH $KERNELID $MACHINE $ID $VERSION" >>${Log}
|
2016-03-03 00:45:46 +01:00
|
|
|
chmod 755 ${Log}
|
|
|
|
fi
|
|
|
|
echo -e "\n### dmesg:\n" >>${Log}
|
|
|
|
cat "${TMPFILE}" >>${Log}
|
|
|
|
echo -e "\n### lsusb:" >>${Log}
|
2016-03-06 10:25:41 +01:00
|
|
|
[ -f /boot/.verbose ] && USBVERBOSE="-v" || echo "" >>${Log}
|
|
|
|
lsusb ${USBVERBOSE} 2>/dev/null >>${Log}
|
2016-03-03 00:45:46 +01:00
|
|
|
echo -e "\n### lscpu:\n" >>${Log}
|
|
|
|
lscpu >>${Log}
|
|
|
|
echo -e "\n### cpuinfo:\n" >>${Log}
|
|
|
|
cat /proc/cpuinfo >>${Log}
|
|
|
|
echo -e "\n### meminfo:\n" >>${Log}
|
|
|
|
cat /proc/meminfo >>${Log}
|
|
|
|
echo -e "\n### ifconfig:\n" >>${Log}
|
|
|
|
ifconfig >>${Log}
|
2016-06-07 16:31:41 +02:00
|
|
|
echo -e "### df:\n" >>${Log}
|
2016-03-03 00:45:46 +01:00
|
|
|
df -h >>${Log}
|
2016-06-07 16:31:41 +02:00
|
|
|
[[ -e /boot/script.bin ]] && echo -e "\n### /boot/script.bin --> $(readlink /boot/script.bin)" >>${Log}
|
2016-03-28 12:40:55 +00:00
|
|
|
get_flash_information >>${Log} &
|
2016-06-07 16:31:41 +02:00
|
|
|
(sleep 20 && echo -e "\n### interrupts:\n$(cat /proc/interrupts)" >>${Log}) &
|
2016-03-03 00:45:46 +01:00
|
|
|
} # log_hardware_info
|
2016-02-25 13:17:13 +01:00
|
|
|
|
2016-03-28 12:40:55 +00:00
|
|
|
get_flash_information() {
|
|
|
|
# http://www.bunniestudios.com/blog/?page_id=1022
|
|
|
|
find /sys -name oemid | while read Device ; do
|
|
|
|
DeviceNode="${Device%/*}"
|
|
|
|
DeviceName="${DeviceNode##*/}"
|
|
|
|
echo -e "\n### ${DeviceName} info:\n"
|
|
|
|
find "${DeviceNode}" -maxdepth 1 -type f | while read ; do
|
|
|
|
NodeName="${REPLY##*/}"
|
|
|
|
echo -e "$(printf "%20s" ${NodeName}): $(cat "${DeviceNode}/${NodeName}" | tr '\n' " ")"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
} # get_flash_information
|
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
show_motd_warning() {
|
|
|
|
cat > /etc/update-motd.d/90-warning <<EOT
|
|
|
|
#!/bin/bash
|
|
|
|
echo -e "\e[0;91mAttention:\x1B[0m $1\n"
|
|
|
|
rm "\$0"
|
|
|
|
EOT
|
|
|
|
chmod +x /etc/update-motd.d/90-warning
|
|
|
|
} # show_motd_warning
|
2015-12-02 20:33:32 +01:00
|
|
|
|
2016-03-28 16:13:37 +00:00
|
|
|
check_sd_card_speed() {
|
|
|
|
# function that checks on 3rd boot whether firstrun script made a quick
|
|
|
|
# benchmark when a SD card with 4GB or less capacity has been detected
|
|
|
|
# and displays a warning when random I/O is below some tresholds.
|
2016-03-31 07:30:10 +02:00
|
|
|
if [ -f /var/log/armhwinfo.log ]; then
|
|
|
|
RebootCount=$(grep -c '^### df:' /var/log/armhwinfo.log)
|
|
|
|
if [ ${RebootCount} -eq 2 ]; then
|
|
|
|
# check whether iozone data has been collected
|
|
|
|
IozoneResults="$(awk -F" " '/^### quick iozone test/ {print $10"\t"$11}' </var/log/armhwinfo.log)"
|
|
|
|
if [ "X${IozoneResults}" != "X" ]; then
|
|
|
|
set ${IozoneResults}
|
|
|
|
Readspeed=$1
|
|
|
|
Writespeed=$2
|
|
|
|
if [ ${Readspeed} -lt 800 -o ${Writespeed} -lt 400 ]; then
|
|
|
|
show_motd_warning "Your SD card seems to be very slow. Please check performance using armbianmonitor -c"
|
|
|
|
fi
|
2016-03-28 16:13:37 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
} # check_sd_card_speed
|
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
case $1 in
|
|
|
|
*start*)
|
2016-03-03 11:46:24 +01:00
|
|
|
# set optimal disk scheduler settings
|
|
|
|
set_io_scheduler &
|
2016-03-28 16:13:37 +00:00
|
|
|
|
|
|
|
# check sd card speed once
|
|
|
|
check_sd_card_speed &
|
2016-03-03 11:46:24 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
# get hardware informations
|
2016-05-31 16:07:07 +02:00
|
|
|
collect_information
|
2016-03-03 00:45:46 +01:00
|
|
|
|
|
|
|
# hardware detection
|
|
|
|
detect_board
|
|
|
|
|
|
|
|
# display message, log hardware id to file, write log
|
2016-06-07 16:31:41 +02:00
|
|
|
echo -e "[\e[0;32m ok \x1B[0m] Starting ARM hardware info: $ID (${VERSION})"
|
2016-03-28 12:40:55 +00:00
|
|
|
echo $ID >/var/run/machine.id
|
2016-03-06 09:53:34 +01:00
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
# most probably readonly fs. We'll try to warn the user.
|
|
|
|
show_motd_warning "It seems the rootfs is readonly at the moment. Please check your SD card for errors"
|
|
|
|
fi
|
2016-03-28 12:40:55 +00:00
|
|
|
# check whether auto detection override exists and if true use this for machine.id
|
|
|
|
[ -f /root/.machine.id ] && cat /root/.machine.id >/var/run/machine.id
|
2016-03-03 00:45:46 +01:00
|
|
|
log_hardware_info
|
2016-02-29 20:25:50 +01:00
|
|
|
|
2016-03-03 00:45:46 +01:00
|
|
|
# crash detection, enable verbose logging and disable it at clean shutdown
|
|
|
|
echo "$(date "+%s") $HARDWARE $ARCH $KERNELID $MACHINE $ID $VERSION" >/boot/.verbose
|
|
|
|
sync
|
|
|
|
;;
|
|
|
|
query)
|
|
|
|
# armbianmonitor mode -- only interested in hardware info
|
2016-06-07 16:31:41 +02:00
|
|
|
collect_information >/dev/null
|
2016-03-03 00:45:46 +01:00
|
|
|
detect_board >/dev/null
|
|
|
|
export HARDWARE ARCH KERNELID MACHINE ID VERSION
|
|
|
|
;;
|
|
|
|
*stop*)
|
|
|
|
# remove /boot/.verbose only if /boot/.force-verbose doesn't exist.
|
|
|
|
# If our users demand verbose messages they get them
|
2016-03-03 11:46:24 +01:00
|
|
|
if [ -f /boot/.verbose -a ! -f /boot/.force-verbose ]; then
|
2016-03-03 00:45:46 +01:00
|
|
|
rm /boot/.verbose
|
|
|
|
fi
|
2016-06-07 22:29:22 +02:00
|
|
|
collect_information
|
2016-03-17 20:16:26 +01:00
|
|
|
if [ $HARDWARE = "sun8i" ]; then
|
|
|
|
# redefine green led to blink until shutdown
|
2016-05-25 04:17:14 -07:00
|
|
|
(echo heartbeat >/sys/class/leds/*green*/trigger) 2>/dev/null
|
2016-03-17 20:16:26 +01:00
|
|
|
fi
|
2016-03-03 00:45:46 +01:00
|
|
|
;;
|
|
|
|
esac
|