From: Mike Frysinger Date: Thu, 2 May 2013 19:44:42 +0000 (-0400) Subject: test: add mtd/ubi test helpers X-Git-Tag: v4.8~54 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48d3159d67e5786c94c3e51ce9d2a45cb4470e1a;p=strace test: add mtd/ubi test helpers I used these to develop the mtd/ubi ioctl decoders. * test/.gitignore: Add mtd/ubi. * test/Makefile: Declare all tests in a PROGS var. Declare build targets .PHONY. (all): Depend on $(PROGS) instead of hardcoded list. (clean): Remove $(PROGS) instead of hardcoded list. * test/mtd.c: New file. * test/ubi.c: Likewise. --- diff --git a/test/.gitignore b/test/.gitignore index 7d2cd1e7..ce242fd3 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -8,3 +8,5 @@ childthread sigkill_rain wait_must_be_interruptible threaded_execve +mtd +ubi diff --git a/test/Makefile b/test/Makefile index 781e1f68..97ae746e 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,14 +1,17 @@ CFLAGS += -Wall -all: \ +PROGS = \ vfork fork sig skodic clone leaderkill childthread \ - sigkill_rain wait_must_be_interruptible threaded_execve + sigkill_rain wait_must_be_interruptible threaded_execve \ + mtd ubi + +all: $(PROGS) leaderkill: LDFLAGS += -pthread childthread: LDFLAGS += -pthread clean distclean: - rm -f *.o core \ - vfork fork sig skodic clone leaderkill childthread \ - sigkill_rain wait_must_be_interruptible threaded_execve + rm -f *.o core $(PROGS) *.gdb + +.PHONY: all clean distclean diff --git a/test/mtd.c b/test/mtd.c new file mode 100644 index 00000000..b9fc6957 --- /dev/null +++ b/test/mtd.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include +#include +#include + +int main() { + int fd = open("/dev/null", 0); + struct mtd_info_user minfo; + struct erase_info_user einfo; + struct erase_info_user64 einfo64; + struct mtd_oob_buf mbuf; + struct mtd_oob_buf64 mbuf64; + struct region_info_user rinfo; + /* struct otp_info oinfo; */ + struct mtd_ecc_stats estat; + struct mtd_write_req mreq; + struct nand_oobinfo ninfo; + struct nand_ecclayout_user nlay; + off_t f = 333; + + memset(&einfo, 0, sizeof(einfo)); + memset(&einfo64, 0xff, sizeof(einfo64)); + + ioctl(fd, MEMGETINFO, &minfo); + + ioctl(fd, MEMERASE, &einfo); + ioctl(fd, MEMERASE64, &einfo64); + + ioctl(fd, MEMGETBADBLOCK, &f); + int i = 0; + ioctl(fd, OTPSELECT, &i); + ioctl(fd, MEMSETBADBLOCK, &f); + + ioctl(fd, MEMREADOOB, &mbuf); + ioctl(fd, MEMREADOOB64, &mbuf64); + + ioctl(fd, MEMGETREGIONINFO, &rinfo); + + ioctl(fd, ECCGETSTATS, &estat); + ioctl(fd, MEMWRITE, &mreq); + + ioctl(fd, MEMGETOOBSEL, &ninfo); + ioctl(fd, ECCGETLAYOUT, &nlay); + + return 0; +} diff --git a/test/ubi.c b/test/ubi.c new file mode 100644 index 00000000..5062c836 --- /dev/null +++ b/test/ubi.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define zero(x) memset(&x, 0, sizeof(x)) + +int main() { + int fd = open("/dev/null", 0); + struct ubi_mkvol_req mkvol = { + .vol_id = 3, + .alignment = 124, + .bytes = 1125899906842624ULL, + .vol_type = 3, + .name_len = 7, + .name = "foobar", + }; + struct ubi_rsvol_req rsvol = { + .bytes = 1125899906842624ULL, + .vol_id = -3, + }; + struct ubi_rnvol_req rnvol = { + .count = 300, + }; + struct ubi_attach_req attach; + struct ubi_map_req map; + struct ubi_set_vol_prop_req prop = { + .property = 1, + .value = 1125899906842624ULL, + }; + uint64_t bytes = ((uint64_t)1 << 50) | 0x123; + + ioctl(fd, UBI_IOCMKVOL, &mkvol); + ioctl(fd, UBI_IOCRSVOL, &rsvol); + ioctl(fd, UBI_IOCRNVOL, &rnvol); + ioctl(fd, UBI_IOCATT, &attach); + ioctl(fd, UBI_IOCVOLUP, &bytes); + ioctl(fd, UBI_IOCEBMAP, &map); + ioctl(fd, UBI_IOCSETVOLPROP, &prop); + zero(prop); + ioctl(fd, UBI_IOCSETVOLPROP, &prop); + ioctl(fd, UBI_IOCRMVOL, 1); + ioctl(fd, UBI_IOCDET, 2); + ioctl(fd, UBI_IOCEBER, 3); + ioctl(fd, UBI_IOCEBCH, 4); + ioctl(fd, UBI_IOCEBUNMAP, 5); + ioctl(fd, UBI_IOCEBISMAP, 6); + + return 0; +}