WiringPi: Get model name from Device Tree if not able from cpuinfo

Signed-off-by: Yang Deokgyu <secugyu@gmail.com>
Change-Id: I0ca6497da3a9b0123b552fe7c245f08915d69a39
This commit is contained in:
Yang Deokgyu
2019-12-23 18:38:15 +09:00
parent 8ec73fe14e
commit 0e022544ef
3 changed files with 34 additions and 15 deletions

3
build
View File

@@ -77,6 +77,9 @@ configure_gpiomem() {
sudo=${WIRINGPI_SUDO-sudo}
make="make -j $(( $(nproc) + 1 ))"
hardware=$(fgrep -a Hardware /proc/cpuinfo | head -1 | awk '{ printf("%s %s %s\n", $3, $4, $5) }' | xargs)
[ "$hardware",, != *"odroid"* ] \
&& [ -f "/sys/firmware/devicetree/base/model" ] \
&& hardware=$(cat /sys/firmware/devicetree/base/model)
if [ x$1 = "xclean" ]; then
cd wiringPi

View File

@@ -10,6 +10,9 @@ case "$1" in
configure)
if [ -c "/dev/gpiomem" ] && [ "$(stat -c "%a %G" "/dev/gpiomem")" != "660"*"odroid" ]; then
hardware=$(fgrep -a Hardware /proc/cpuinfo | head -1 | awk '{ printf("%s %s %s\n", $3, $4, $5) }' | xargs)
[ "$hardware",, != *"odroid"* ] \
&& [ -f "/sys/firmware/devicetree/base/model" ] \
&& hardware=$(cat /sys/firmware/devicetree/base/model)
case "$(echo $hardware | tr [:upper:] [:lower:])" in
*xu4)
cp -f /tmp/odroid-wiringpi/rules.d/99-odroid-wiringpi-exynos.rules /etc/udev/rules.d/

View File

@@ -315,7 +315,7 @@ void setUsingGpioMem( const unsigned int value )
/*----------------------------------------------------------------------------*/
int piGpioLayout (void)
{
FILE *cpuFd ;
FILE *cpuFd, *dtFd;
char line [120] ;
char *c ;
static int gpioLayout = -1 ;
@@ -325,21 +325,34 @@ int piGpioLayout (void)
gpioLayout = 1;
if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL)
if ((cpuFd = fopen ("/proc/cpuinfo", "r")) != NULL) {
while (fgets (line, 120, cpuFd) != NULL)
if (strncmp (line, "Hardware", 8) == 0)
break ;
if (strncmp (line, "Hardware", 8) != 0)
wiringPiFailure (WPI_FATAL, "No \"Hardware\" line") ;
if (wiringPiDebug)
printf ("piGpioLayout: Hardware: %s\n", line) ;
if (!(strstr (line, "ODROID"))) {
if ((dtFd = fopen("/sys/firmware/devicetree/base/model", "r")) != NULL) {
if (fgets(line, 30, dtFd) == NULL)
wiringPiFailure (WPI_FATAL, "Unable to read /sys/firmware/devicetree/base/model");
if (wiringPiDebug)
printf ("piGpioLayout: devicetree/base/model: %s\n", line) ;
if (!(strstr (line, "Odroid")))
wiringPiFailure (WPI_FATAL, "** This board is not ODROID. **") ;
} else {
wiringPiFailure (WPI_FATAL, "Unable to open /sys/firmware/devicetree/base/model") ;
}
}
} else {
wiringPiFailure (WPI_FATAL, "Unable to open /proc/cpuinfo") ;
while (fgets (line, 120, cpuFd) != NULL)
if (strncmp (line, "Hardware", 8) == 0)
break ;
if (strncmp (line, "Hardware", 8) != 0)
wiringPiFailure (WPI_FATAL, "No \"Hardware\" line") ;
if (wiringPiDebug)
printf ("piGpioLayout: Hardware: %s\n", line) ;
if (!(strstr (line, "ODROID")))
wiringPiFailure (WPI_FATAL, "** This board is not ODROID. **") ;
}
rewind (cpuFd) ;
while (fgets (line, 120, cpuFd) != NULL)