/dev/mmcsd0 Operation not permitted

orbit <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <Lh6wBUiJ89YmqM6YVhAZcM9pdb4DyzwVdrkU8jNgFccUrW2yfDQXGEAhjU-5zncbdsWUDXz1sIH2j7mPMozDogxEVuKJxN18JIVh_hHJdqk=@proton.me>
Hi,

I'm currently running FreeBSD 14.0-RELEASE in Raspberry Pi 3 installed in a SanDisk 32GB microSD card (/dev/mmcsd0) and I've observed that it gets an error of "Operation not permitted" when using O_RDWR or O_WRONLY flags in the open() function which I use it in my little C program (open_device.c).

root@sandisk:~ # cat open_device.c
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
int error = 0; char *devfile = "/dev/mmcsd0";
int fd = open(devfile, O_RDWR);

if (fd == -1) {
printf("Error opening %s device file in read/write!\n", devfile);
err(error, NULL, NULL);
exit(1);
} else {
printf("Device file %s opened sucessfully!\n", devfile);
}
return 0;
}

Here's the error.

root@sandisk:~ # ./open_device
Error opening /dev/mmcsd0 device file in read/write!
open_device2: Operation not permitted

With O_RDONLY flag there's no problem.

I also installed mmc-utils (https://www.freshports.org/sysutils/mmc-utils/) and the same error encountered.

root@sandisk:~ # /usr/local/sbin/mmc gen_cmd read /dev/mmcsd0
device open failed: Operation not permitted

I downloaded mmc-utils source code and compile .

root@sandisk:~/mmc-utils-master # ./mmc gen_cmd read /dev/mmcsd0
device open failed: Operation not permitted

Digging up the mmc_cmds.c source in do_general_cmd_read() routine, having the flag O_RDWR in the line dev_fd = open(device, O_RDWR) will get the "device open failed: Operation not permitted" error.

int do_general_cmd_read(int nargs, char **argv)
{
int dev_fd;
char *device;
char *endptr;
__u8 buf[512];
__u32 arg = 0x01;
int ret = -EINVAL, i;
struct mmc_ioc_cmd idata;

if (nargs != 2 && nargs != 3) {
fprintf(stderr, "Usage: gen_cmd read </path/to/mmcblkX> [arg]\n");
exit(1);
}

device = argv[1];
dev_fd = open(device, O_RDWR);
if (dev_fd < 0) {
perror("device open failed");
exit(1);
} ...
}

But changing it to dev_fd = open(device, O_RDONLY) is successful as you can see below.

root@sandisk:~/mmc-utils-master # ./mmc gen_cmd read /dev/mmcsd0
Data:
44 53 32 31 30 34 31 35 1 1 1 1f 0 0 5 1
1 0 39 3 0 0 0 1 0 0 a9 0 1 2 1 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 53 61 6e 44 69 73 6b 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 43 31 66 33 30 70 20 20 20 20 20
20 3 53 44 53 41 30 38 47 80 57 67 5e f1 1 54
f5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Any idea of the issue?

BR,
orbit
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.