S3C2410开发板上使用flash_eraseall,为什么找不到MTD信息!
急!大虾帮帮小弟。最近我要用到flash_eraseall工具,好擦除flash,往NAND上写yaffs文件系统。参考网上的做法下载了mtd-utils-1.0.0.tar 和 zlib-1.2.3.tar 。我的环境是centOS5.0 交叉编译器3.4.3下面是我的操作步骤,帮我看看有没有错误<br />首先交叉编译zlib。做法如下<br />make clean <br />CC=arm-linux-gcc LDSHARED="arm-linux-ld -shared" ./configure --shared<br />make <br />make prefix=/usr/local/arm/v5t_le/rootfs install<br />这样在rootfs下有三个目录 include lib share在include目录里就有zlib.h我就把include里的头文件拷到了usr/include中。lib中有我们下一步用到的库文件<br />接着交叉编译mtd-util<br />修改Makefile<br />SBINDIR=/usr/sbin<br />MANDIR=/usr/man <br />INCLUDEDIR=/usr/include<br />上面几句不知道什么意思,就没改<br />LDFLAGS := -L /usr/local/arm/v5t_le/rootfs/lib 添了这句,就是前面交叉编译出来的库<br />CROSS=arm-linux-<br />CC := $(CROSS)gcc<br /><br />make就出现了下面的错误arm-linux-gcc -I./include -O2 -Wall -g -c -o mkfs.jffs2.o mkfs.jffs2.c -g -Wp,-MD,.mkfs.jffs2.c.dep<br />mkfs.jffs2.c:68:18: zlib.h: No such file or directory<br />make: *** Error 1<br />rm ftl_check.o mkfs.jffs.o flash_erase.o ftl_format.o nanddump.o doc_loadbios.o<br />把编译器换成3.3.2,步骤一样zlib.h找到了,链接又有错误<br />/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: ERROR: /usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/libgcc.a(_modsi3.oS) is compiled for EABI version 0, whereas mkfs.jffs2 is compiled for version 4<br />File format not recognized: failed to merge target specific data of file /usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/libgcc.a(_modsi3.oS)<br />mtd换成mtd-snapshot-20040730.tar也是找不到zlib.h<br />我都快急疯了,搞了一整天都没有结果!是不是zlib和mtd的版本不配套呢?真是搞不明白了!偶之前的一个笔记,希望对你有参考作用
交叉编译mtd-utils-1.0.0 <br /><br />https://bbs.21ic.com/club/bbs/list.asp?boardid=40&t=2514289&tp=mkfs.jfss2%u4EA4%u53C9%u7F16%u8BD1%u7684%u95EE%u9898%3F%3F%3F<br /><br /> andante 发表于 2007-5-23 06:19 LINUX|编程 ←返回版面 <br /><br />2楼: 交叉编译mtd-utils-1.0.0 <br /><br />假设mtd-utils-1.0.0.tar.gz解压目录为mtd-utils-1.0.0<br />#cd mtd-utils-1.0.0<br /><br />1) 修改Makefile<br />CROSS=arm-linux-<br />并确认以下两项都有加 -lz(链接zlib)<br />mkfs.jffs2: crc32.o compr_rtime.o mkfs.jffs2.o compr_zlib.o compr.o<br /> $(CC) $(LDFLAGS) -o $@ $^ -lz<br /><br />jffs2reader: jffs2reader.o<br /> $(CC) $(LDFLAGS) -o $@ $^ -lz<br /><br />2) 复制zlib头文件及库<br />交叉编译zlib生成三个文件夹如下:include lib share(假设为home目录下)<br /> cp /home/include/* -> mtd-utils-1.0.0/include 下<br /> cp -ar /home/lib/* -> /usr/local/arm/3.4.4/arm-linux/lib(根据所使用交叉编译器,进行修改。<br /><br />3) make ( 用file命令查看,如 file mkfs.jffs2 )<br />#file mkfs.jffs2<br />mkfs.jffs2: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped<br />可知:交叉编译成功。<br /><br />注:最近也整这个,所以把笔记整理了下。(走了不少弯路。。)<br /> <br /> <br />呵呵 搞定了!
呵呵 谢谢!是我交叉编译zlib的时候错了。<br />编译zlib的时修改配置选项<br />./configure –prefix=/usr/local/arm/3.3.2/arm-linux/ --shared<br />注意这里配置选项指向了 /usr/local/arm/3.3.2/arm-linux/目录,编译时会自动安装 /usr/local/arm/3.3.2/arm-linux/目录,一定不要安装错了,不然后面会找不到zlib.h<br /> make <br /> make install<br />然后交叉编译mtd-utils,顺利通过,编译出了flash_erase和flash_eraseall,问题又来了,我把它下载到目标板上,zlib库也拷进去了,可是执行<br />flash_eraseall /dev/mtdblock/3<br />提示找不到MTD设备信息, 提示unable to get MTD device info<br />执行<br />flash_erase /dev/mtdblock/3<br />也不能擦除提示 Erase Total 1 Units<br />有没有人遇到过这种情况<br />我用的是dev/mtdblock3
flash_eraseall /dev/mtd3
flash_eraseall /dev/mtdblock/3<br />提示找不到MTD设备信息, 提示unable to get MTD device info<br /><br />感觉,这可能与nand flash的擦除方式有关<br /><br />flash_eraseall /dev/mtdx,这样能正常擦除(当做字符设备),写入的时候,则当块设备看待。可以查阅下datasheet。偶印象中,应该是这样谢谢
我现在用着cramfs暂时没有用yaffs,有空再试试,说不定就是这个原因还是不行啊!
dev/mtdblock3 dev/mtd3都试了还是不行啊!<br />擦的时候是当成字符设备来擦,可我的dev下面没有mtd设备啊,只有mtdblock设备。直接设节点是不行的,怎么才能让他出现mtd字符设备呢?下面是我的mtd信息。<br /># cat /proc/mtd<br />dev: size erasesize name<br />mtd0: 00100000 00004000 "bootloader"<br />mtd1: 00300000 00004000 "kernel"<br />mtd2: 02800000 00004000 "root"<br />mtd3: 00f00000 00004000 "user"<br /># flash_eraseall: /dev/mtd3 <br />flash_eraseall:: No such file or directory<br /># flash_eraseall /dev/mtdblock/3<br />flash_eraseall: /dev/mtdblock/3: unable to get MTD device info非
的啊 7# youcanh 7# youcanh您的问题现在解决了吗?我也是最近出现这个问题。
页:
[1]