ODROID-COMMON: Arrange to use /dev/mem if the user grants sudo permission

This commit is contained in:
Joshua Yang
2019-06-27 15:51:50 +09:00
parent 4b08e7ff71
commit 23f3f5a4e2
5 changed files with 66 additions and 61 deletions

View File

@@ -39,7 +39,7 @@ static const int pinToGpio[64] = {
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)
-1, -1, // 16 | 17 : GPIOX.17(UART_RX_B),
-1, -1, // 18 | 19 :
-1, -1, // 18 | 19 :
-1, 101, // 20 | 21 : , GPIOX.4
100, 108, // 22 | 23 : GPIOX.3, GPIOX.11
97, -1, // 24 | 25 : GPIOX.0, ADC.AIN1
@@ -675,21 +675,22 @@ static void init_gpio_mmap (void)
int fd;
/* GPIO mmap setup */
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 {
if (geteuid () != 0)
return msg (MSG_ERR,
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
if (!getuid()) {
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
return msg (MSG_ERR,
"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
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, C1_GPIO_BASE) ;

View File

@@ -31,14 +31,14 @@
static const int pinToGpio_rev1[64] = {
// wiringPi number to native gpio number
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
234, 214, // 6 | 7 : GPIOX.6, GPIOY.3
205, 206, // 8 | 9 : GPIODV.24(I2CA_SDA), GPIODV.25(I2CA_SCL)
248, 249, // 10 | 11 : GPIOX.20, GPIOX.21
238, 237, // 12 | 13 : GPIOX.10, GPIOX.9
236, -1, // 14 | 15 : GPIOX.8,
-1, -1, // 16 | 17 :
236, -1, // 14 | 15 : GPIOX.8,
-1, -1, // 16 | 17 :
-1, -1, // 18 | 19 :
-1, 232, // 20 | 21 : , GPIOX.4
231, 239, // 22 | 23 : GPIOX.3, GPIOX.11
@@ -728,21 +728,22 @@ static void init_gpio_mmap (void)
int fd;
/* GPIO mmap setup */
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 {
if (geteuid () != 0)
return msg (MSG_ERR,
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
if (!getuid()) {
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
return msg (MSG_ERR,
"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
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, C2_GPIO_BASE) ;

View File

@@ -245,7 +245,7 @@ static void setIomuxMode (int pin, int mode)
target |= *(grf[0] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
*(grf[0] + (offset >> 2)) = target;
} else {
offset += N1_GRF_IOMUX_OFFSET;
@@ -420,7 +420,7 @@ static void _pullUpDnControl (int pin, int pud)
case PUD_OFF:
if (bank < 2) {
offset += N1_PMUGRF_PUPD_OFFSET;
target |= *(grf[0] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
target &= ~(1 << (gpioToShiftGReg(pin) * 2));
@@ -466,7 +466,7 @@ static int _digitalRead (int pin)
setClkState(pin, N1_CLK_ENABLE);
ret = *(gpio[bank] + (N1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
setClkState(pin, N1_CLK_DISABLE);
return ret;
}
@@ -631,19 +631,20 @@ static void init_gpio_mmap (void)
int fd;
/* GPIO mmap setup */
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 {
if (geteuid () != 0)
return msg (MSG_ERR,
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
if (!getuid()) {
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
return msg (MSG_ERR,
"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}

View File

@@ -558,21 +558,22 @@ static void init_gpio_mmap (void)
int fd;
/* GPIO mmap setup */
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 {
if (geteuid () != 0)
return msg (MSG_ERR,
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
if (!getuid()) {
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
return msg (MSG_ERR,
"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
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, N2_GPIO_BASE) ;

View File

@@ -649,21 +649,22 @@ static void init_gpio_mmap (void)
int fd;
/* GPIO mmap setup */
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 {
if (geteuid () != 0)
return msg (MSG_ERR,
"wiringPiSetup: Must be root. (Did you forget sudo?)\n");
if (!getuid()) {
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
return msg (MSG_ERR,
"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
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, XU3_GPX_BASE) ;