mirror of
https://github.com/clockworkpi/WiringPi.git
synced 2026-03-21 19:32:40 +01:00
Fixed the requirement for -lm
Updated the gpio program to be device tree aware.
This commit is contained in:
20
gpio/gpio.1
20
gpio/gpio.1
@@ -1,4 +1,4 @@
|
||||
.TH gpio 1 "January 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO"
|
||||
.TH GPIO 1 "September 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO"
|
||||
|
||||
.SH NAME
|
||||
gpio \- Command-line access to Raspberry Pi's GPIO
|
||||
@@ -251,12 +251,9 @@ on the associated /dev/ entries so that the current user has access to
|
||||
them. Optionally it will set the I2C baudrate to that supplied in Kb/sec
|
||||
(or as close as the Pi can manage) The default speed is 100Kb/sec.
|
||||
|
||||
Note that on a Pi with a recent 3.18 kernel with the device-tree structure
|
||||
enable, the load may fail until you add:
|
||||
|
||||
.I dtparam=i2c=on
|
||||
|
||||
into \fB/boot/config.txt\fR to allow user use of the I2C bus.
|
||||
Note: On recent kernels with the device tree enabled you should use the
|
||||
raspi-config program to load/unload the I2C device at boot time.
|
||||
(or disable the device tree to continue to use this method)
|
||||
|
||||
.TP
|
||||
.B load spi
|
||||
@@ -269,12 +266,9 @@ this has fixed the buffer size. The way to change it now is to edit
|
||||
the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to
|
||||
e.g. 8192 bytes then reboot.
|
||||
|
||||
Note that on a Pi with a recent 3.18 kernel with the device-tree structure
|
||||
enable, the load may fail until you add:
|
||||
|
||||
.I dtparam=spi=on
|
||||
|
||||
into \fB/boot/config.txt\fR to allow user use of the I2C bus.
|
||||
Note: On recent kernels with the device tree enabled you should use the
|
||||
raspi-config program to load/unload the SPI device at boot time.
|
||||
(or disable the device tree to continue to use this method)
|
||||
|
||||
.TP
|
||||
.B gbr
|
||||
|
||||
38
gpio/gpio.c
38
gpio/gpio.c
@@ -116,7 +116,7 @@ static void changeOwner (char *cmd, char *file)
|
||||
if (chown (file, uid, gid) != 0)
|
||||
{
|
||||
if (errno == ENOENT) // Warn that it's not there
|
||||
fprintf (stderr, "%s: Warning (not an error): File not present: %s\n", cmd, file) ;
|
||||
fprintf (stderr, "%s: Warning (not an error, do not report): File not present: %s\n", cmd, file) ;
|
||||
else
|
||||
fprintf (stderr, "%s: Warning (not an error): Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ;
|
||||
}
|
||||
@@ -163,6 +163,22 @@ static int moduleLoaded (char *modName)
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
static void checkDevTree (char *argv [])
|
||||
{
|
||||
struct stat statBuf ;
|
||||
|
||||
if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ...
|
||||
{
|
||||
fprintf (stderr,
|
||||
"%s: Unable to load/unload modules as this Pi has the device tree enabled.\n"
|
||||
" You need to run the raspi-config program (as root) and select the\n"
|
||||
" modules (SPI or I2C) that you wish to load/unload there and reboot.\n"
|
||||
" There is more information here:\n"
|
||||
" https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
}
|
||||
|
||||
static void _doLoadUsage (char *argv [])
|
||||
{
|
||||
fprintf (stderr, "Usage: %s load <spi/i2c> [I2C baudrate in Kb/sec]\n", argv [0]) ;
|
||||
@@ -176,6 +192,8 @@ static void doLoad (int argc, char *argv [])
|
||||
char *file1, *file2 ;
|
||||
char args1 [32], args2 [32] ;
|
||||
|
||||
checkDevTree (argv) ;
|
||||
|
||||
if (argc < 3)
|
||||
_doLoadUsage (argv) ;
|
||||
|
||||
@@ -251,6 +269,8 @@ static void doUnLoad (int argc, char *argv [])
|
||||
char *module1, *module2 ;
|
||||
char cmd [80] ;
|
||||
|
||||
checkDevTree (argv) ;
|
||||
|
||||
if (argc != 3)
|
||||
_doUnLoadUsage (argv) ;
|
||||
|
||||
@@ -1138,6 +1158,8 @@ int main (int argc, char *argv [])
|
||||
{
|
||||
int i ;
|
||||
int model, rev, mem, maker, overVolted ;
|
||||
struct stat statBuf ;
|
||||
|
||||
|
||||
if (getenv ("WIRINGPI_DEBUG") != NULL)
|
||||
{
|
||||
@@ -1195,15 +1217,15 @@ int main (int argc, char *argv [])
|
||||
printf (" Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n",
|
||||
piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker], overVolted ? "[OV]" : "") ;
|
||||
|
||||
// Quick check for /dev/gpiomem
|
||||
// Check for device tree
|
||||
|
||||
if ((i = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) >= 0)
|
||||
printf (" This Raspberry Pi supports user-level GPIO access via /dev/gpiomem.\n") ;
|
||||
if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ...
|
||||
printf (" Device tree is enabled.\n") ;
|
||||
|
||||
if (stat ("/dev/gpiomem", &statBuf) == 0) // User level GPIO is GO
|
||||
printf (" This Raspberry Pi supports user-level GPIO access.\n") ;
|
||||
else
|
||||
{
|
||||
printf (" You need to run your programs as root for GPIO access\n") ;
|
||||
printf (" (Old /dev/mem method - consider upgrading)\n") ;
|
||||
}
|
||||
printf (" * Root or sudo required for GPIO access.\n") ;
|
||||
|
||||
}
|
||||
return 0 ;
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define VERSION "2.27"
|
||||
#define VERSION "2.28"
|
||||
|
||||
Reference in New Issue
Block a user