#!/bin/bash { #//////////////////////////////////// # DietPi # #//////////////////////////////////// # Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com #//////////////////////////////////// # # Info: # - Generates /DietPi/dietpi/.hw_model # - Called from /DietPi/dietpi/boot # # In DietPi-Software: # MAX_G_HW_MODEL=64 #This needs to match highest G_HW_MODEL value in dietpi-obtain_hw_model # MAX_G_HW_ARCH=10 #This needs to match highest G_HW_ARCH value in dietpi-obtain_hw_model # # - Line1 - # G_HW_MODEL 71 Beagle Bone Black # G_HW_MODEL 70 Sparky SBC # G_HW_MODEL 66 NanoPi M1 Plus # G_HW_MODEL 65 NanoPi NEO 2 # G_HW_MODEL 64 NanoPi NEO Air # G_HW_MODEL 63 NanoPi M1/T1 # G_HW_MODEL 62 NanoPi M3/T3 # G_HW_MODEL 61 NanoPi M2/T2 # G_HW_MODEL 60 NanoPi Neo # G_HW_MODEL 52 Asus Tinker Board # G_HW_MODEL 51 BananaPi Pro (Lemaker) # G_HW_MODEL 50 BananaPi M2+ (sinovoip) # G_HW_MODEL 43 Rock64 # G_HW_MODEL 40 Pine A64 # G_HW_MODEL 38 OrangePi PC 2 # G_HW_MODEL 37 OrangePi Prime # G_HW_MODEL 36 OrangePi Win # G_HW_MODEL 35 OrangePi Zero Plus 2 (H3/H5) # G_HW_MODEL 34 OrangePi Plus # G_HW_MODEL 33 OrangePi Lite # G_HW_MODEL 32 OrangePi Zero (H2+) # G_HW_MODEL 31 OrangePi One # G_HW_MODEL 30 OrangePi PC # G_HW_MODEL 22 Generic device (eg: unknown to DietPi) # G_HW_MODEL 21 x86_64 native (PC) # G_HW_MODEL 20 VM x64 (VMware VirtualBox) # G_HW_MODEL 13 oDroid U3 # G_HW_MODEL 12 oDroid C2 # G_HW_MODEL 11 oDroid XU3/XU4/HC1 # G_HW_MODEL 10 oDroid C1 # G_HW_MODEL 3 Raspberry Pi 3 # G_HW_MODEL 2 Raspberry Pi 2 # G_HW_MODEL 1 Raspberry Pi 1/Zero (512mb) # G_HW_MODEL 0 Raspberry Pi 1 (256mb) # - Line2 - # G_HW_MODEL_DESCRIPTION # - Line3 - # G_DISTRO 0 unknown # G_DISTRO 1 Debian Wheezy (No longer supported, http://dietpi.com/phpbb/viewtopic.php?f=9&t=432#p1898) # G_DISTRO 2 Ubuntu 14.04 (No longer supported, left in for user message during update) # G_DISTRO 3 Jessie # G_DISTRO 4 Stretch, pulled a muscle! # G_DISTRO 5 Buster # - Line4 - # RootFS device path (eg: /dev/mmc01) # - Line5 - # UUID # - Line 6 - # G_HW_ARCH 10 x86_64 (VM) # G_HW_ARCH 3 armv8/arm64 # G_HW_ARCH 2 armv7 # G_HW_ARCH 1 armv6 # G_HW_ARCH 0 unknown # - Line 7 - # G_HW_ARCH_DESCRIPTION # - Line 8 - # IMAGE_ADDITIONAL_CREDITS (eg: ARMbian, Meveric) # - Line 9 - Group CPU's # G_HW_CPUID 0 Not set # G_HW_CPUID 1 H3 # G_HW_CPUID 2 H5 # - Line 10 - Onboard WiFi/BT Index # HW_ONBOARD_WIFI 0 Not set # HW_ONBOARD_WIFI 1 RPi3/ZeroW (BCM43438) # - Line 11 - (RPi only) # HW_REVISION_CODE # - Line 12 - (RPi only) # HW_RELEASE_DATE # - Line 13 - (RPi only) # HW_PCB_REVISION_CODE # - Line 14 - (RPi only) # HW_MEMORY_SIZE # - Line 15 - (RPi only) # HW_MANUFACTURER_NAME #//////////////////////////////////// #Import DietPi-Globals --------------------------------------------------------------- #. /DietPi/dietpi/func/dietpi-globals #Import DietPi-Globals --------------------------------------------------------------- #Force en_GB Locale for whole script. Prevents incorrect parsing with non-english locales. LANG=en_GB.UTF-8 #Ensure we are in users home dir: https://github.com/Fourdee/DietPi/issues/905#issuecomment-298223705 cd "$HOME" #///////////////////////////////////////////////////////////////////////////////////// #Obtain Hardware Model index #///////////////////////////////////////////////////////////////////////////////////// G_HW_MODEL=0 G_HW_MODEL_DESCRIPTION='Unknown Device' FP_G_HW_MODEL_INDENTIFIER='/etc/.dietpi_hw_model_identifier' G_DISTRO=0 HW_UUID=0 G_HW_ARCH=0 G_HW_ARCH_DESCRIPTION='unknown' IMAGE_ADDITIONAL_CREDITS='' G_HW_CPUID=0 HW_ONBOARD_WIFI=0 ROOTFS_DEVICE_PATH=$(df | grep -m1 '/$' | awk '{print $1}') # RPi Extras HW_REVISION_CODE=0 HW_RELEASE_DATE='Unknown' HW_PCB_REVISION_CODE='Unknown' HW_MEMORY_SIZE=0 HW_MANUFACTURER_NAME='Unknown' RPi_BoardInfo(){ #----------------------------------------------------------------------------------- #Obtain device info by revision number # *" because 10000002 then it indicates that your Raspberry Pi has been over-volted HW_REVISION_CODE=$(cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}') G_HW_MODEL_DESCRIPTION='RPi ' if [[ "$HW_REVISION_CODE" = *"Beta" ]]; then HW_RELEASE_DATE='Q1 2012' G_HW_MODEL_DESCRIPTION+='Beta' HW_PCB_REVISION_CODE='Unknown' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Unknown' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0002" ]]; then HW_RELEASE_DATE='Q1 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Unknown' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0003" ]]; then HW_RELEASE_DATE='Q3 2012' G_HW_MODEL_DESCRIPTION+='B (ECN0001)' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Unknown' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0004" ]]; then HW_RELEASE_DATE='Q3 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0005" ]]; then HW_RELEASE_DATE='Q4 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Qisda' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0006" ]]; then HW_RELEASE_DATE='Q4 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Egoman' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0007" ]]; then HW_RELEASE_DATE='Q1 2013' G_HW_MODEL_DESCRIPTION+='A' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Egoman' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0008" ]]; then HW_RELEASE_DATE='Q1 2013' G_HW_MODEL_DESCRIPTION+='A' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0009" ]]; then HW_RELEASE_DATE='Q1 2013' G_HW_MODEL_DESCRIPTION+='A' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Qisda' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"000d" ]]; then HW_RELEASE_DATE='Q4 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Egoman' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"000e" ]]; then HW_RELEASE_DATE='Q4 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"000f" ]]; then HW_RELEASE_DATE='Q4 2012' G_HW_MODEL_DESCRIPTION+='B' HW_PCB_REVISION_CODE='2.0' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Qisda' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"0010" ]]; then HW_RELEASE_DATE='Q3 2014' G_HW_MODEL_DESCRIPTION+='B+' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"0011" ]]; then HW_RELEASE_DATE='Q2 2014' G_HW_MODEL_DESCRIPTION+='CM' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"0012" ]]; then HW_RELEASE_DATE='Q4 2014' G_HW_MODEL_DESCRIPTION+='A+' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=256 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=0 elif [[ "$HW_REVISION_CODE" = *"0013" ]]; then HW_RELEASE_DATE='Q1 2015' G_HW_MODEL_DESCRIPTION+='B+' HW_PCB_REVISION_CODE='1.2' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Unknown' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"a01041" ]]; then HW_RELEASE_DATE='Q1 2015' G_HW_MODEL_DESCRIPTION+='2 Model B' HW_PCB_REVISION_CODE='1.1' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=2 elif [[ "$HW_REVISION_CODE" = *"a020a0" ]]; then HW_RELEASE_DATE='Q1 2017' G_HW_MODEL_DESCRIPTION+='CM 3' HW_PCB_REVISION_CODE='1.0' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=3 HW_ONBOARD_WIFI=1 elif [[ "$HW_REVISION_CODE" = *"a21041" ]]; then HW_RELEASE_DATE='Q1 2015' G_HW_MODEL_DESCRIPTION+='2 Model B' HW_PCB_REVISION_CODE='1.1' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Embest, China' G_HW_MODEL=2 elif [[ "$HW_REVISION_CODE" = *"a02082" ]]; then HW_RELEASE_DATE='Q1 2016' G_HW_MODEL_DESCRIPTION+='3 Model B' HW_PCB_REVISION_CODE='1.2' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=3 HW_ONBOARD_WIFI=1 elif [[ "$HW_REVISION_CODE" = *"a22082" ]]; then HW_RELEASE_DATE='Q1 2016' G_HW_MODEL_DESCRIPTION+='3 Model B' HW_PCB_REVISION_CODE='1.2' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Embest, China' G_HW_MODEL=3 HW_ONBOARD_WIFI=1 elif [[ "$HW_REVISION_CODE" = *"a32082" ]]; then HW_RELEASE_DATE='Q4 2016' G_HW_MODEL_DESCRIPTION+='3 Model B' HW_PCB_REVISION_CODE='1.2' HW_MEMORY_SIZE=1024 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=3 HW_ONBOARD_WIFI=1 elif [[ "$HW_REVISION_CODE" = *"900092" ]]; then HW_RELEASE_DATE='Q4 2015' G_HW_MODEL_DESCRIPTION+='Zero' HW_PCB_REVISION_CODE='1.2' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"900093" ]]; then HW_RELEASE_DATE='Q2 2016' G_HW_MODEL_DESCRIPTION+='Zero' HW_PCB_REVISION_CODE='1.3' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 elif [[ "$HW_REVISION_CODE" = *"9000c1" ]]; then HW_RELEASE_DATE='Q1 2017' G_HW_MODEL_DESCRIPTION+='Zero W' HW_PCB_REVISION_CODE='1.1' HW_MEMORY_SIZE=512 HW_MANUFACTURER_NAME='Sony' G_HW_MODEL=1 HW_ONBOARD_WIFI=1 fi } Obtain_HW_Info(){ #Systems that use /etc/.dietpi_hw_model_identifier for G_HW_MODEL if [ -f "$FP_G_HW_MODEL_INDENTIFIER" ]; then G_HW_MODEL=$(sed -n 1p "$FP_G_HW_MODEL_INDENTIFIER") #Beagle Bone Black if (( $G_HW_MODEL == 71 )); then G_HW_MODEL_DESCRIPTION='BBB' #Sparky SBC elif (( $G_HW_MODEL == 70 )); then G_HW_MODEL_DESCRIPTION='Sparky SBC' #NanoPi M1 Plus elif (( $G_HW_MODEL == 66 )); then G_HW_MODEL_DESCRIPTION='NanoPi M1 Plus' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #NanoPi NEO 2 elif (( $G_HW_MODEL == 65 )); then G_HW_MODEL_DESCRIPTION='NanoPi NEO 2' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=2 #NanoPi NEO Air elif (( $G_HW_MODEL == 64 )); then G_HW_MODEL_DESCRIPTION='NanoPi NEO Air' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #NanoPi M1 elif (( $G_HW_MODEL == 63 )); then G_HW_MODEL_DESCRIPTION='NanoPi M1/T1' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #NanoPi M3 elif (( $G_HW_MODEL == 62 )); then G_HW_MODEL_DESCRIPTION='NanoPi M3/T3' #NanoPi M2 elif (( $G_HW_MODEL == 61 )); then G_HW_MODEL_DESCRIPTION='NanoPi M2/T2' #NanoPi Neo elif (( $G_HW_MODEL == 60 )); then G_HW_MODEL_DESCRIPTION='NanoPi Neo' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #Asus Tinker Board elif (( $G_HW_MODEL == 52 )); then G_HW_MODEL_DESCRIPTION='Asus Tinker Board' #BananaPi Pro elif (( $G_HW_MODEL == 51 )); then G_HW_MODEL_DESCRIPTION='BananaPi Pro' IMAGE_ADDITIONAL_CREDITS='ARMbian' #BananaPi M2+ elif (( $G_HW_MODEL == 50 )); then G_HW_MODEL_DESCRIPTION='BananaPi M2+' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #Rock64 elif (( $G_HW_MODEL == 43 )); then G_HW_MODEL_DESCRIPTION='Rock64' IMAGE_ADDITIONAL_CREDITS='Longsleep, Ayufan' #PineA64 elif (( $G_HW_MODEL == 40 )); then IMAGE_ADDITIONAL_CREDITS='Longsleep, Rhkean' G_HW_MODEL_DESCRIPTION='Pine A64' #OrangePi PC 2 elif (( $G_HW_MODEL == 38 )); then G_HW_MODEL_DESCRIPTION='OPi PC2' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=2 #OrangePi Prime elif (( $G_HW_MODEL == 37 )); then G_HW_MODEL_DESCRIPTION='OPi Prime' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=2 #OrangePi Win elif (( $G_HW_MODEL == 36 )); then G_HW_MODEL_DESCRIPTION='OPi Win' IMAGE_ADDITIONAL_CREDITS='ARMbian' #OrangePi Zero Plus 2 (h3/h5) elif (( $G_HW_MODEL == 35 )); then G_HW_MODEL_DESCRIPTION='OPi Zero 2 Plus' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #OrangePi Plus elif (( $G_HW_MODEL == 34 )); then G_HW_MODEL_DESCRIPTION='OrangePi Plus' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #OrangePi Lite elif (( $G_HW_MODEL == 33 )); then G_HW_MODEL_DESCRIPTION='OrangePi Lite' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #OrangePi Zero elif (( $G_HW_MODEL == 32 )); then G_HW_MODEL_DESCRIPTION='OrangePi Zero' IMAGE_ADDITIONAL_CREDITS='ARMbian' #G_HW_CPUID=1 #H2+ #OrangePi One elif (( $G_HW_MODEL == 31 )); then G_HW_MODEL_DESCRIPTION='OrangePi One' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #OrangePi Pc elif (( $G_HW_MODEL == 30 )); then G_HW_MODEL_DESCRIPTION='OrangePi PC' IMAGE_ADDITIONAL_CREDITS='ARMbian' G_HW_CPUID=1 #Generic device (eg: unknown to DietPi) elif (( $G_HW_MODEL == 22 )); then G_HW_MODEL_DESCRIPTION='Generic Device' IMAGE_ADDITIONAL_CREDITS='You!' #x86_64 native PC elif (( $G_HW_MODEL == 21 )); then G_HW_MODEL_DESCRIPTION='Native PC' #VM elif (( $G_HW_MODEL == 20 )); then G_HW_MODEL_DESCRIPTION='Virtual Machine' #oDroid U3 elif (( $G_HW_MODEL == 13 )); then G_HW_MODEL_DESCRIPTION='Odroid U3' #IMAGE_ADDITIONAL_CREDITS='Meveric' #Odroid C2 elif (( $G_HW_MODEL == 12 )); then G_HW_MODEL_DESCRIPTION='Odroid C2' IMAGE_ADDITIONAL_CREDITS='Meveric' #Odroid XU3/XU4/HC1 elif (( $G_HW_MODEL == 11 )); then G_HW_MODEL_DESCRIPTION='Odroid XU3/4' IMAGE_ADDITIONAL_CREDITS='Meveric' #Odroid C1 elif (( $G_HW_MODEL == 10 )); then G_HW_MODEL_DESCRIPTION='Odroid C1' IMAGE_ADDITIONAL_CREDITS='Meveric' fi #RPi elif (( $(grep -ci -m1 '^ID=raspbian' /etc/os-release) )); then #Grab hardware description from rpi_boardinfo RPi_BoardInfo fi #Get Distro Index if (( $( grep -ci -m1 'jessie' /etc/os-release) )); then G_DISTRO=3 elif (( $( grep -ci -m1 'stretch' /etc/os-release) )); then G_DISTRO=4 elif (( $( grep -ci -m1 'buster' /etc/os-release) )); then G_DISTRO=5 fi #Generate UUID if it does not exist if [ ! -f /DietPi/dietpi/.hw_model ]; then HW_UUID=$(cat /proc/sys/kernel/random/uuid) else HW_UUID=$(sed -n 5p /DietPi/dietpi/.hw_model) fi #Obtain hardware cpu architecture G_HW_ARCH_DESCRIPTION=$(uname -m) if [ "$G_HW_ARCH_DESCRIPTION" = "armv6l" ]; then G_HW_ARCH=1 elif [ "$G_HW_ARCH_DESCRIPTION" = "armv7l" ]; then G_HW_ARCH=2 elif [ "$G_HW_ARCH_DESCRIPTION" = "aarch64" ]; then G_HW_ARCH=3 elif [ "$G_HW_ARCH_DESCRIPTION" = "x86_64" ]; then G_HW_ARCH=10 # - Unknown arch for DietPi, inform user by adding 'unknown'. else G_HW_ARCH_DESCRIPTION+=' (Unknown)' fi # - Add HW arch to HW desc G_HW_MODEL_DESCRIPTION+=" ($G_HW_ARCH_DESCRIPTION)" #Save data cat << _EOF_ > /DietPi/dietpi/.hw_model $G_HW_MODEL $G_HW_MODEL_DESCRIPTION $G_DISTRO $ROOTFS_DEVICE_PATH $HW_UUID $G_HW_ARCH $G_HW_ARCH_DESCRIPTION $IMAGE_ADDITIONAL_CREDITS $G_HW_CPUID $HW_ONBOARD_WIFI $HW_REVISION_CODE $HW_RELEASE_DATE $HW_PCB_REVISION_CODE $HW_MEMORY_SIZE $HW_MANUFACTURER_NAME _EOF_ } #----------------------------------------------------------------------------------- #Main Obtain_HW_Info #----------------------------------------------------------------------------------- exit 0 #----------------------------------------------------------------------------------- }