Trying to read the badblock list / Using MTD devices
Visti Andresen
talpa at galnet.dk
Sat Aug 4 13:45:52 CEST 2007
Hi I'm trying to create an application that reads Out Of Band information
from the flash chip.
The goal being to create an application that can display/backup the
badblock information from the flash.
I have had some problems reading correct CRC type values
(getting illegal values like -1)
Anso I didn't find any badblocks at all.
I then discovered that my problems ran deeper that fist expected.
If I open /dev/mtd0 and close it again the entire flash filesystem returns
"Input/output error"
Took some time to discover this as I was scp'ing to /tmp and things inside the
disk cache can still be read/executed.
Below is a small test program that can cause the crash, I compile it using:
./build/tmp/cross/arm-linux/bin/gcc -Wall -o mtd_test mtd_test.c
Any one know why I get the "Input/output error" after I have executed the
program on the Neo?
Btw. the O_NONBLOCK option was something I picked up a some web page
claiming that otherwise the result would not be as expected.
Removing it gives the same behaviour.
The output of the program is:
root at fic-gta01:~$ ./mtd_test
Opened MTD device /dev/mtd0 OK
Closed MTD device /dev/mtd0 OK
=====
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char verbose_ = 1;
void test(char *mtdDevice);
int main()
{
test("/dev/mtd0");
return 0;
}
void test(char *mtdDevice)
{
int device;
device = open(mtdDevice, O_RDONLY|O_NONBLOCK);
if (device < 0) {
fprintf(stderr, "Unable to open MTD device %s: %s\n", mtdDevice, strerror(errno));
return;
}
else {
printf("Opened MTD device %s OK\n", mtdDevice);
}
if (0!=close(device)){
printf("Failed to close MTD device %s: %s\n", mtdDevice, strerror(errno));
}
else {
printf("Closed MTD device %s OK\n", mtdDevice);
}
}
More information about the openmoko-devel
mailing list