OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / user / mtd-utils / flash_otp_dump.c
1 /*
2  * flash_otp_dump.c -- display One-Time-Programm data
3  */
4
5 #define PROGRAM_NAME "flash_otp_dump"
6
7 #include <stdio.h>
8 #include <unistd.h>
9 #include <fcntl.h>
10 #include <string.h>
11 #include <errno.h>
12 #include <sys/ioctl.h>
13
14 #include <mtd/mtd-user.h>
15
16 int main(int argc,char *argv[])
17 {
18         int fd, val, i, offset, ret;
19         unsigned char buf[16];
20
21         if (argc != 3 || (strcmp(argv[1], "-f") && strcmp(argv[1], "-u"))) {
22                 fprintf(stderr,"Usage: %s [ -f | -u ] <device>\n", PROGRAM_NAME);
23                 return EINVAL;
24         }
25
26         fd = open(argv[2], O_RDONLY);
27         if (fd < 0) {
28                 perror(argv[2]);
29                 return errno;
30         }
31
32         val = argv[1][1] == 'f' ? MTD_OTP_FACTORY : MTD_OTP_USER;
33         ret = ioctl(fd, OTPSELECT, &val);
34         if (ret < 0) {
35                 perror("OTPSELECT");
36                 return errno;
37         }
38
39         printf("OTP %s data for %s\n",
40                         argv[1][1] == 'f' ? "factory" : "user", argv[2]);
41         offset = 0;
42         while ((ret = read(fd, buf, sizeof(buf)))) {
43                 if (ret < 0) {
44                         perror("read()");
45                         return errno;
46                 }
47                 printf("0x%04x:", offset);
48                 for (i = 0; i < ret; i++)
49                         printf(" %02x", buf[i]);
50                 printf("\n");
51                 offset += ret;
52         }
53
54         close(fd);
55         return 0;
56 }