ODROID-COMMON: Arrange to use /dev/mem if the user grants sudo permission
This commit is contained in:
@@ -39,7 +39,7 @@ static const int pinToGpio[64] = {
|
|||||||
107, 106, // 12 | 13 : GPIOX.10(SPI_MOSI), GPIOX.9(SPI_MISO)
|
107, 106, // 12 | 13 : GPIOX.10(SPI_MOSI), GPIOX.9(SPI_MISO)
|
||||||
105, -1, // 14 | 15 : GPIOX.8(SPI_SCLK), GPIOX.16(UART_TX_B)
|
105, -1, // 14 | 15 : GPIOX.8(SPI_SCLK), GPIOX.16(UART_TX_B)
|
||||||
-1, -1, // 16 | 17 : GPIOX.17(UART_RX_B),
|
-1, -1, // 16 | 17 : GPIOX.17(UART_RX_B),
|
||||||
-1, -1, // 18 | 19 :
|
-1, -1, // 18 | 19 :
|
||||||
-1, 101, // 20 | 21 : , GPIOX.4
|
-1, 101, // 20 | 21 : , GPIOX.4
|
||||||
100, 108, // 22 | 23 : GPIOX.3, GPIOX.11
|
100, 108, // 22 | 23 : GPIOX.3, GPIOX.11
|
||||||
97, -1, // 24 | 25 : GPIOX.0, ADC.AIN1
|
97, -1, // 24 | 25 : GPIOX.0, ADC.AIN1
|
||||||
@@ -675,21 +675,22 @@ static void init_gpio_mmap (void)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
/* GPIO mmap setup */
|
/* GPIO mmap setup */
|
||||||
if (access("/dev/gpiomem",0) == 0) {
|
if (!getuid()) {
|
||||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
|
||||||
strerror (errno)) ;
|
|
||||||
} else {
|
|
||||||
if (geteuid () != 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
|
|
||||||
|
|
||||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
return msg (MSG_ERR,
|
return msg (MSG_ERR,
|
||||||
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
||||||
strerror (errno)) ;
|
strerror (errno));
|
||||||
|
} else {
|
||||||
|
if (access("/dev/gpiomem",0) == 0) {
|
||||||
|
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
||||||
|
strerror (errno));
|
||||||
|
} else
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: /dev/gpiomem doesn't exist. Please try again with sudo.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// #define C1_GPIO_BASE 0xC1108000
|
// #define C1_GPIO_BASE 0xC1108000
|
||||||
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
||||||
MAP_SHARED, fd, C1_GPIO_BASE) ;
|
MAP_SHARED, fd, C1_GPIO_BASE) ;
|
||||||
|
|||||||
@@ -31,14 +31,14 @@
|
|||||||
static const int pinToGpio_rev1[64] = {
|
static const int pinToGpio_rev1[64] = {
|
||||||
// wiringPi number to native gpio number
|
// wiringPi number to native gpio number
|
||||||
219, 218, // 0 | 1 : GPIOY.8, GPIOY.7
|
219, 218, // 0 | 1 : GPIOY.8, GPIOY.7
|
||||||
247, -1, // 2 | 3 : GPIOX.19,
|
247, -1, // 2 | 3 : GPIOX.19,
|
||||||
235, 233, // 4 | 5 : GPIOX.7, GPIOX.5
|
235, 233, // 4 | 5 : GPIOX.7, GPIOX.5
|
||||||
234, 214, // 6 | 7 : GPIOX.6, GPIOY.3
|
234, 214, // 6 | 7 : GPIOX.6, GPIOY.3
|
||||||
205, 206, // 8 | 9 : GPIODV.24(I2CA_SDA), GPIODV.25(I2CA_SCL)
|
205, 206, // 8 | 9 : GPIODV.24(I2CA_SDA), GPIODV.25(I2CA_SCL)
|
||||||
248, 249, // 10 | 11 : GPIOX.20, GPIOX.21
|
248, 249, // 10 | 11 : GPIOX.20, GPIOX.21
|
||||||
238, 237, // 12 | 13 : GPIOX.10, GPIOX.9
|
238, 237, // 12 | 13 : GPIOX.10, GPIOX.9
|
||||||
236, -1, // 14 | 15 : GPIOX.8,
|
236, -1, // 14 | 15 : GPIOX.8,
|
||||||
-1, -1, // 16 | 17 :
|
-1, -1, // 16 | 17 :
|
||||||
-1, -1, // 18 | 19 :
|
-1, -1, // 18 | 19 :
|
||||||
-1, 232, // 20 | 21 : , GPIOX.4
|
-1, 232, // 20 | 21 : , GPIOX.4
|
||||||
231, 239, // 22 | 23 : GPIOX.3, GPIOX.11
|
231, 239, // 22 | 23 : GPIOX.3, GPIOX.11
|
||||||
@@ -728,21 +728,22 @@ static void init_gpio_mmap (void)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
/* GPIO mmap setup */
|
/* GPIO mmap setup */
|
||||||
if (access("/dev/gpiomem",0) == 0) {
|
if (!getuid()) {
|
||||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
|
||||||
strerror (errno)) ;
|
|
||||||
} else {
|
|
||||||
if (geteuid () != 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
|
|
||||||
|
|
||||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
return msg (MSG_ERR,
|
return msg (MSG_ERR,
|
||||||
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
||||||
strerror (errno)) ;
|
strerror (errno));
|
||||||
|
} else {
|
||||||
|
if (access("/dev/gpiomem",0) == 0) {
|
||||||
|
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
||||||
|
strerror (errno));
|
||||||
|
} else
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: /dev/gpiomem doesn't exist. Please try again with sudo.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define C2_GPIO_BASE 0xC8834000
|
//#define C2_GPIO_BASE 0xC8834000
|
||||||
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
||||||
MAP_SHARED, fd, C2_GPIO_BASE) ;
|
MAP_SHARED, fd, C2_GPIO_BASE) ;
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ static void setIomuxMode (int pin, int mode)
|
|||||||
target |= *(grf[0] + (offset >> 2));
|
target |= *(grf[0] + (offset >> 2));
|
||||||
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
|
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
|
||||||
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
|
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
|
||||||
|
|
||||||
*(grf[0] + (offset >> 2)) = target;
|
*(grf[0] + (offset >> 2)) = target;
|
||||||
} else {
|
} else {
|
||||||
offset += N1_GRF_IOMUX_OFFSET;
|
offset += N1_GRF_IOMUX_OFFSET;
|
||||||
@@ -420,7 +420,7 @@ static void _pullUpDnControl (int pin, int pud)
|
|||||||
case PUD_OFF:
|
case PUD_OFF:
|
||||||
if (bank < 2) {
|
if (bank < 2) {
|
||||||
offset += N1_PMUGRF_PUPD_OFFSET;
|
offset += N1_PMUGRF_PUPD_OFFSET;
|
||||||
|
|
||||||
target |= *(grf[0] + (offset >> 2));
|
target |= *(grf[0] + (offset >> 2));
|
||||||
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
|
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
|
||||||
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
|
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
|
||||||
@@ -466,7 +466,7 @@ static int _digitalRead (int pin)
|
|||||||
setClkState(pin, N1_CLK_ENABLE);
|
setClkState(pin, N1_CLK_ENABLE);
|
||||||
|
|
||||||
ret = *(gpio[bank] + (N1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
|
ret = *(gpio[bank] + (N1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
|
||||||
|
|
||||||
setClkState(pin, N1_CLK_DISABLE);
|
setClkState(pin, N1_CLK_DISABLE);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -631,19 +631,20 @@ static void init_gpio_mmap (void)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
/* GPIO mmap setup */
|
/* GPIO mmap setup */
|
||||||
if (access("/dev/gpiomem",0) == 0) {
|
if (!getuid()) {
|
||||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
|
||||||
strerror (errno)) ;
|
|
||||||
} else {
|
|
||||||
if (geteuid () != 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
|
|
||||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
return msg (MSG_ERR,
|
return msg (MSG_ERR,
|
||||||
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
||||||
strerror (errno)) ;
|
strerror (errno));
|
||||||
|
} else {
|
||||||
|
if (access("/dev/gpiomem",0) == 0) {
|
||||||
|
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
||||||
|
strerror (errno));
|
||||||
|
} else
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: /dev/gpiomem doesn't exist. Please try again with sudo.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GPIO{0, 1}
|
// GPIO{0, 1}
|
||||||
|
|||||||
@@ -558,21 +558,22 @@ static void init_gpio_mmap (void)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
/* GPIO mmap setup */
|
/* GPIO mmap setup */
|
||||||
if (access("/dev/gpiomem",0) == 0) {
|
if (!getuid()) {
|
||||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
|
||||||
strerror (errno)) ;
|
|
||||||
} else {
|
|
||||||
if (geteuid () != 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
|
|
||||||
|
|
||||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
return msg (MSG_ERR,
|
return msg (MSG_ERR,
|
||||||
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
||||||
strerror (errno)) ;
|
strerror (errno));
|
||||||
|
} else {
|
||||||
|
if (access("/dev/gpiomem",0) == 0) {
|
||||||
|
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
||||||
|
strerror (errno));
|
||||||
|
} else
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: /dev/gpiomem doesn't exist. Please try again with sudo.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define N2_GPIO_BASE 0xff634000
|
//#define N2_GPIO_BASE 0xff634000
|
||||||
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
||||||
MAP_SHARED, fd, N2_GPIO_BASE) ;
|
MAP_SHARED, fd, N2_GPIO_BASE) ;
|
||||||
|
|||||||
@@ -649,21 +649,22 @@ static void init_gpio_mmap (void)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
/* GPIO mmap setup */
|
/* GPIO mmap setup */
|
||||||
if (access("/dev/gpiomem",0) == 0) {
|
if (!getuid()) {
|
||||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
|
||||||
strerror (errno)) ;
|
|
||||||
} else {
|
|
||||||
if (geteuid () != 0)
|
|
||||||
return msg (MSG_ERR,
|
|
||||||
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
|
|
||||||
|
|
||||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
return msg (MSG_ERR,
|
return msg (MSG_ERR,
|
||||||
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
"wiringPiSetup: Unable to open /dev/mem: %s\n",
|
||||||
strerror (errno)) ;
|
strerror (errno));
|
||||||
|
} else {
|
||||||
|
if (access("/dev/gpiomem",0) == 0) {
|
||||||
|
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: Unable to open /dev/gpiomem: %s\n",
|
||||||
|
strerror (errno));
|
||||||
|
} else
|
||||||
|
return msg (MSG_ERR,
|
||||||
|
"wiringPiSetup: /dev/gpiomem doesn't exist. Please try again with sudo.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define ODROIDXU_GPX_BASE 0x13400000 // GPX0,1,2,3
|
//#define ODROIDXU_GPX_BASE 0x13400000 // GPX0,1,2,3
|
||||||
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
|
||||||
MAP_SHARED, fd, XU3_GPX_BASE) ;
|
MAP_SHARED, fd, XU3_GPX_BASE) ;
|
||||||
|
|||||||
Reference in New Issue
Block a user