I have found that there is no hardware line name soc info in /proc/cpuinfo
Severals programs like Retropie and others script custom builds or show info soc are looking from /proc/cpuinfo “hardware” line for others raspberry’s boards
Is there any plan to implement info in /proc/cpuinfo in the future release?
It would help a lot to control of builds optimized for Tegra-$name for case in hardware has return $name=Tegra-tx1/Tegra-tx2/tegra-xavier/tegratx1-nano As an example
function get_platform() {
local architecture="$(uname --machine)"
if [[ -z "$__platform" ]]; then
case "$(sed -n '/^Hardware/s/^.*: \(.*\)//p' < /proc/cpuinfo)" in
Seems search hardware : name soc from /proc/cpuinfo
For example in Odroid has these info
So are found name “Odroid-xu3 or Odroid-xu4” name and build specific for ODROID-XU.
ODROID-XU[34])
__platform=“odroid-xu”
;;
and some function
function platform_odroid-xu() {
__default_cflags="-O2 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
# required for mali-fbdev headers to define GL functions
__default_cflags+=" -DGL_GLEXT_PROTOTYPES"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon mali gles"
}
I want to do the same but for all the Nvidia jestson boards
Also others programs return in the GUI menu in the info cpu column Unknown as PPSSPP due to the lack of information in /proc/cpuinfo.
I just checked the script. It seems the faster way to resolve this problem is modifying your script.
Even if we provide something like “Tegra-Nano” in the cpuinfo as a hardware field(maybe in next release), you still need your script to support this platform too.
Yes. It seems that it looks for the same method it looks for the “Hardware” line but doesn’t finds it and it is empty it returns an Unknown for the part name of the CPU.
std::string GetCPUString() {
std::string cpu_string;
std::fstream file;
if (File::OpenCPPFile(file, procfile, std::ios::in)) {
std::string line, marker = "Hardware\t: ";
while (std::getline(file, line)) {
if (line.find(marker) != std::string::npos) {
cpu_string = line.substr(marker.length());
}
}
}
if (cpu_string.empty())
cpu_string = "Unknown";
else if (cpu_string.back() == '\n')
cpu_string.pop_back(); // Drop the new-line character
return cpu_string;
}
Hello I’ve found a perfect way that works, I’m using grep based/model for now
from scriptmodules/system.sh
add in *) if grep "name from /sys/firmware/devicetree/base/model/ define __platform for the fuction after;
if grep -q "NVIDIA Jetson Nano Developer Kit" /sys/firmware/devicetree/base/model 2>/dev/null ; then
__platform="jetson-nano"
and function for nvidia jetson nano use for now optimitzations armv8 , aarch64 , x11 and gl (prefered opengl desktop instean opengl es 3.2 working better/compatibility in some cases) .
#!/usr/bin/env bash
# This file is part of The RetroPie Project
#
# The RetroPie Project is the legal property of its developers, whose names are
# too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
#
# See the LICENSE.md file at the top-level directory of this distribution and
# at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
#
function setup_env() {
__ERRMSGS=()
__INFMSGS=()
# if no apt-get we need to fail
[[ -z "$(which apt-get)" ]] && fatalError "Unsupported OS - No apt-get command found"
__memory_phys=$(free -m | awk '/^Mem:/{print $2}')
__memory_total=$(free -m -t | awk '/^Total:/{print $2}')
__has_binaries=0
get_platform
get_os_version
get_retropie_depends
__gcc_version=$(gcc -dumpversion)
# workaround for GCC ABI incompatibility with threaded armv7+ C++ apps built
# on Raspbian's armv6 userland https://github.com/raspberrypi/firmware/issues/491
if [[ "$__os_id" == "Raspbian" ]] && compareVersions $__gcc_version lt 5.0.0; then
__default_cxxflags+=" -U__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2"
fi
# set location of binary downloads
__binary_host="files.retropie.org.uk"
[[ "$__has_binaries" -eq 1 ]] && __binary_url="https://$__binary_host/binaries/$__os_codename/$__platform"
__archive_url="https://files.retropie.org.uk/archives"
# -pipe is faster but will use more memory - so let's only add it if we have more thans 256M free ram.
[[ $__memory_phys -ge 512 ]] && __default_cflags+=" -pipe"
[[ -z "${CFLAGS}" ]] && export CFLAGS="${__default_cflags}"
[[ -z "${CXXFLAGS}" ]] && export CXXFLAGS="${__default_cxxflags}"
[[ -z "${ASFLAGS}" ]] && export ASFLAGS="${__default_asflags}"
[[ -z "${MAKEFLAGS}" ]] && export MAKEFLAGS="${__default_makeflags}"
# test if we are in a chroot
if [[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]]; then
[[ -z "$QEMU_CPU" && -n "$__qemu_cpu" ]] && export QEMU_CPU=$__qemu_cpu
__chroot=1
else
__chroot=0
fi
if [[ -z "$__nodialog" ]]; then
__nodialog=0
fi
}
function get_os_version() {
# make sure lsb_release is installed
getDepends lsb-release
# get os distributor id, description, release number and codename
local os
mapfile -t os < <(lsb_release -sidrc)
__os_id="${os[0]}"
__os_desc="${os[1]}"
__os_release="${os[2]}"
__os_codename="${os[3]}"
local error=""
case "$__os_id" in
Raspbian|Debian)
# get major version (8 instead of 8.0 etc)
__os_debian_ver="${__os_release%%.*}"
# Debian unstable is not officially supported though
if [[ "$__os_release" == "unstable" ]]; then
__os_debian_ver=11
fi
# we still allow Raspbian 8 (jessie) to work (We show an popup in the setup module)
if compareVersions "$__os_debian_ver" lt 8; then
error="You need Raspbian/Debian Stretch or newer"
fi
# set a platform flag for osmc
if grep -q "ID=osmc" /etc/os-release; then
__platform_flags+=" osmc"
fi
# and for xbian
if grep -q "NAME=XBian" /etc/os-release; then
__platform_flags+=" xbian"
fi
# we provide binaries for RPI on Raspbian 9 only
if isPlatform "rpi" && compareVersions "$__os_debian_ver" gt 8 && compareVersions "$__os_debian_ver" lt 10; then
__has_binaries=1
fi
;;
Devuan)
if isPlatform "rpi"; then
error="We do not support Devuan on the Raspberry Pi. We recommend you use Raspbian to run RetroPie."
fi
# devuan lsb-release version numbers don't match jessie
case "$__os_codename" in
jessie)
__os_debian_ver="8"
;;
ascii)
__os_debian_ver="9"
;;
beowolf)
__os_debian_ver="10"
;;
ceres)
__os_debian_ver="11"
;;
esac
;;
LinuxMint)
if [[ "$__os_desc" != LMDE* ]]; then
if compareVersions "$__os_release" lt 18; then
error="You need Linux Mint 18 or newer"
elif compareVersions "$__os_release" lt 19; then
__os_ubuntu_ver="16.04"
__os_debian_ver="9"
else
__os_ubuntu_ver="18.04"
__os_debian_ver="10"
fi
fi
;;
Ubuntu|neon)
if compareVersions "$__os_release" lt 16.04; then
error="You need Ubuntu 16.04 or newer"
# although ubuntu 16.10 reports as being based on stretch it is before some
# packages were changed - we map to version 8 to avoid issues (eg libpng-dev name)
elif compareVersions "$__os_release" eq 16.10; then
__os_debian_ver="8"
elif compareVersions "$__os_release" lt 18.04; then
__os_debian_ver="9"
else
__os_debian_ver="10"
fi
__os_ubuntu_ver="$__os_release"
;;
Zorin)
if compareVersions "$__os_release" lt 14; then
error="You need Zorin OS 14 or newer"
elif compareVersions "$__os_release" lt 14; then
__os_debian_ver="8"
else
__os_debian_ver="9"
fi
__os_ubuntu_ver="$__os_release"
;;
Deepin)
if compareVersions "$__os_release" lt 15.5; then
error="You need Deepin OS 15.5 or newer"
fi
__os_debian_ver="9"
;;
elementary)
if compareVersions "$__os_release" lt 0.4; then
error="You need Elementary OS 0.4 or newer"
elif compareVersions "$__os_release" eq 0.4; then
__os_ubuntu_ver="16.04"
__os_debian_ver="8"
else
__os_ubuntu_ver="18.04"
__os_debian_ver="10"
fi
;;
*)
error="Unsupported OS"
;;
esac
[[ -n "$error" ]] && fatalError "$error\n\n$(lsb_release -idrc)"
# add 32bit/64bit to platform flags
__platform_flags+=" $(getconf LONG_BIT)bit"
# configure Raspberry Pi graphics stack
isPlatform "rpi" && get_rpi_video
}
function get_retropie_depends() {
local depends=(git dialog wget gcc g++ build-essential unzip xmlstarlet python-pyudev ca-certificates)
if ! getDepends "${depends[@]}"; then
fatalError "Unable to install packages required by $0 - ${md_ret_errors[@]}"
fi
# make sure we don't have xserver-xorg-legacy installed as it breaks launching x11 apps from ES
if ! isPlatform "x11" && hasPackage "xserver-xorg-legacy"; then
aptRemove xserver-xorg-legacy
fi
}
function get_rpi_video() {
local pkgconfig="/opt/vc/lib/pkgconfig"
# detect driver via inserted module / platform driver setup
if [[ -d "/sys/module/vc4" ]]; then
__platform_flags+=" mesa kms"
[[ "$(ls -A /sys/bus/platform/drivers/vc4_firmware_kms/*.firmwarekms 2>/dev/null)" ]] && __platform_flags+=" dispmanx"
else
__platform_flags+=" videocore dispmanx"
fi
# use our supplied fallback pkgconfig if necessary
[[ ! -d "$pkgconfig" ]] && pkgconfig="$scriptdir/pkgconfig"
# set pkgconfig path for vendor libraries
export PKG_CONFIG_PATH="$pkgconfig"
}
function get_platform() {
local architecture="$(uname --machine)"
if [[ -z "$__platform" ]]; then
case "$(sed -n '/^Hardware/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo)" in
BCM*)
# calculated based on information from https://github.com/AndrewFromMelbourne/raspberry_pi_revision
local rev="0x$(sed -n '/^Revision/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo)"
# if bit 23 is not set, we are on a rpi1 (bit 23 means the revision is a bitfield)
if [[ $((($rev >> 23) & 1)) -eq 0 ]]; then
__platform="rpi1"
else
# if bit 23 is set, get the cpu from bits 12-15
local cpu=$((($rev >> 12) & 15))
case $cpu in
0)
__platform="rpi1"
;;
1)
__platform="rpi2"
;;
2)
__platform="rpi3"
;;
esac
fi
;;
ODROIDC)
__platform="odroid-c1"
;;
ODROID-C2)
__platform="odroid-c2"
;;
"Freescale i.MX6 Quad/DualLite (Device Tree)")
__platform="imx6"
;;
ODROID-XU[34])
__platform="odroid-xu"
;;
"Rockchip (Device Tree)")
__platform="tinker"
;;
Vero4K|Vero4KPlus)
__platform="vero4k"
;;
"Allwinner sun8i Family")
__platform="armv7-mali"
;;
*) #For now nvidia jetson nano no have Hardware name string by /proc/cpuinfo you can info by base/model
if grep -q "NVIDIA Jetson Nano Developer Kit" /sys/firmware/devicetree/base/model 2>/dev/null; then
__platform="jetson-nano"
else
case $architecture in
i686|x86_64|amd64)
__platform="x86"
;;
esac
fi
;;
esac
fi
if ! fnExists "platform_${__platform}"; then
fatalError "Unknown platform - please manually set the __platform variable to one of the following: $(compgen -A function platform_ | cut -b10- | paste -s -d' ')"
fi
platform_${__platform}
[[ -z "$__default_cxxflags" ]] && __default_cxxflags="$__default_cflags"
}
function platform_rpi1() {
# values to be used for configure/make
__default_cflags="-O2 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"
__default_asflags=""
__default_makeflags=""
__platform_flags="arm armv6 rpi gles"
# if building in a chroot, what cpu should be set by qemu
# make chroot identify as arm6l
__qemu_cpu=arm1176
}
function platform_rpi2() {
__default_cflags="-O2 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon rpi gles"
__qemu_cpu=cortex-a7
}
# note the rpi3 currently uses the rpi2 binaries - for ease of maintenance - rebuilding from source
# could improve performance with the compiler options below but needs further testing
function platform_rpi3() {
__default_cflags="-O2 -march=armv8-a+crc -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv8 neon rpi gles"
}
function platform_odroid-c1() {
__default_cflags="-O2 -mcpu=cortex-a5 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon mali gles"
__qemu_cpu=cortex-a9
}
function platform_odroid-c2() {
if [[ "$(getconf LONG_BIT)" -eq 32 ]]; then
__default_cflags="-O2 -march=armv8-a+crc -mtune=cortex-a53 -mfpu=neon-fp-armv8"
__platform_flags="arm armv8 neon mali gles"
else
__default_cflags="-O2 -march=native"
__platform_flags="aarch64 mali gles"
fi
__default_cflags+=" -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
}
function platform_jetson-nano() {
__default_cflags="-O2 -march=armv8-a+crc -mcpu=cortex-a57 -mtune=cortex-a57"
__platform_flags="aarch64 x11 gl"
__default_cflags+=" -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
}
function platform_odroid-xu() {
__default_cflags="-O2 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
# required for mali-fbdev headers to define GL functions
__default_cflags+=" -DGL_GLEXT_PROTOTYPES"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon mali gles"
}
function platform_tinker() {
__default_cflags="-O2 -marm -march=armv7-a -mtune=cortex-a17 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
# required for mali headers to define GL functions
__default_cflags+=" -DGL_GLEXT_PROTOTYPES"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon kms gles"
}
function platform_x86() {
__default_cflags="-O2 -march=native"
__default_asflags=""
__default_makeflags="-j$(nproc)"
__platform_flags="x11 gl"
}
function platform_generic-x11() {
__default_cflags="-O2"
__default_asflags=""
__default_makeflags="-j$(nproc)"
__platform_flags="x11 gl"
}
function platform_armv7-mali() {
__default_cflags="-O2 -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j$(nproc)"
__platform_flags="arm armv7 neon mali gles"
}
function platform_imx6() {
__default_cflags="-O2 -march=armv7-a -mfpu=neon -mtune=cortex-a9 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j2"
__platform_flags="arm armv7 neon"
}
function platform_vero4k() {
__default_cflags="-I/opt/vero3/include -L/opt/vero3/lib -O2 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations"
__default_asflags=""
__default_makeflags="-j4"
__platform_flags="arm armv7 neon vero4k gles"
}