我这边使用的是AM335X EVM platform ,操作系统是 ubuntu 10.04。
我参考了http://processors.wiki.ti.com/index.php/MTD_Utilities去编译mtd utilities,结果却出现了跟下面这位网友完全一样的问题:http://e2e.ti.com/support/embedded/linux/f/354/p/249979/878759.aspx。然后我很好奇的是:在编译mtd-utils时,mtd-utils-d37fcc0目录下面的Makefile,为什么添加上的是CROSS=arm-none-linux-gnueabi-,而不是CROSS=arm-arago-linux-gnueabi-?
Lee Jiejia:
想问一下TI的FAQ,有没有可以直接使用在am335x平台上的mkfs.jffs2工具可以下载?这个有点急。。。我想在SPI FLASH上面跑起来文件系统,不知道除了默认的jffs2格式外,还能不能用其他的格式?
Lee Jiejia:
回复 Lee Jiejia:
我后来换了一个mtd-utils版本,然后就可以通过了。但是编译出来的mkfs.jffs2却不能使用。我使用如下命令去制作镜像文件:
~/mtd/install/sbin$ sudo ./mkfs.jffs2 -lqn -e 64 -r fs -o 12.jffs2./mkfs.jffs2: 1: Syntax error: word unexpected (expecting ")")
为什么会出现这样的提示错误,难道是还没安装成功吗?
~/mtd/install/sbin$ file mkfs.jffs2 mkfs.jffs2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Jian Zhou:
回复 Lee Jiejia:
看起来您是想在嵌入式系统中使用交叉编译好的MTD 工具,其实你完全可以在宿主机Ubuntu下编译和使用MTD工具来制作JFFS2文件系统,并烧写到SPI FALSH中去。
Lee Jiejia:
回复 Jian Zhou:
我是已经按照你的说法,在ubuntu下编译和使用mtd-utils,来生成mkfs.jffs2工具。我生成jffs2文件系统的命令是:sudo mkfs.jffs2 -lqn –e 64 -r target -o fs.jffs2,另外我使用的spi flash是winbond的W25Q64,block size:64kB。 当我把生成的文件系统烧写到flash上面后,内核不断的打印如下信息:[ 9.039459] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043000: 0xbc30 instead[ 9.048797] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043004: 0x961c instead[ 9.058074] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043008: 0x515d instead[ 9.067321] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0004300c: 0x9e45 instead[ 9.076599] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043010: 0x643d instead[ 9.085845] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043014: 0x059f instead[ 9.095092] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043018: 0x7d32 instead[ 9.104339] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0004301c: 0x071f instead[ 9.113586] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043020: 0xe89f instead[ 9.122863] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00043024: 0x9fa4 instead[ 9.132110] Further such events for this erase block will not be printed[ 9.141326] Node at 0x000438f0 with length 0x00000b30 would run over the end of the erase block[ 9.150421] Perhaps the file system was created with the wrong erase size?[ 9.157989] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00044000: 0x4e7e instead
我后来从SD卡启动,然后查看Flash erase size,竟然erase size是4KB:
root@am335x:/usr# cat /proc/mtddev: size erasesize namemtd0: 00020000 00001000 "SPL"mtd1: 00040000 00001000 "U-Boot"mtd2: 00002000 00001000 "U-Boot Env"mtd3: 00380000 00001000 "Kernel"mtd4: 003c0000 00001000 "File System"mtd5: 0005d000 00001000 "FPGA File"mtd6: 00001000 00001000 "Parameter"
但是,当我制作文件系统时,sudo mkfs.jffs2 -lqn –e 4 -r target -o fs.jffs2,电脑却提示: Erase size 0x1000 to small. Increasing to 8 KiB minimum。我这一下子就晕了,难道我不应该用w25q64这款flash。如果是这样的话,那我想请问下,从SPI FLASH启动,应该选用那款flash比较合适?
Lee Jiejia:
回复 Jian Zhou:
能说得具体一点怎么改吗?我应该修改spi driver,还是说换一款spi flash?如果是修改spi driver,能具体说一下吗?
Lee Jiejia:
回复 Jian Zhou:
你好,我按照你说的,改了erase block为64K,把生成的镜像的erase size也设置成64K,该jffs2镜像可以被成功挂载。但是,成功挂载后,只要往里面写入点东西,下次再启动的时候,该jffs2文件系统就不能再被正常识别了。请问下为什么会这样?
Lee Jiejia:
回复 Jian Zhou:
这个是已经修改成64KB对齐的了,因为整个系统和应用程序都可以正常运行。我使用的是windbond的W25Q128,我在m25p80.c这个驱动文件里面的m25p_ids[]这个数组里添加了如下一句话:{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, 0) },最后的flags改为0,系统将会认为该flash的erasesize为64*1024。 但是,当我从SPI FLASH启动,再往跟文件系统里面写点东西,下次再启动,就会出现如下错误:
[ 5.281023] JFFS2 error: (1) jffs2_link_node_ref: Adding new ref cfa8a730 at (0x00920000-0x0092052c) not immediately after previous (0x00920000-0x00920000)[ 5.295638] ————[ cut here ]————[ 5.300463] kernel BUG at fs/jffs2/nodelist.c:644![ 5.305466] Internal error: Oops – undefined instruction: 0 [#1][ 5.311730] Modules linked in:[ 5.314923] CPU: 0 Not tainted (3.2.0 #78)[ 5.319572] PC is at jffs2_link_node_ref+0x1a8/0x1b4[ 5.324764] LR is at console_unlock+0x170/0x1f8[ 5.329492] pc : [<c0149c90>] lr : [<c003cf14>] psr: 60000013[ 5.329499] sp : cf81db78 ip : cf81da70 fp : cf81dbac[ 5.341475] r10: 00000000 r9 : 00000000 r8 : cf914000[ 5.346937] r7 : 00010000 r6 : 0000fff4 r5 : cfa8a730 r4 : cf911da8[ 5.353750] r3 : c04a5c88 r2 : c04a5c88 r1 : 00000000 r0 : 000000a5[ 5.360566] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel[ 5.368194] Control: 10c5387d Table: 80004019 DAC: 00000015[ 5.374194] Process swapper (pid: 1, stack limit = 0xcf81c2f0)[ 5.380280] Stack: (0xcf81db78 to 0xcf81e000)[ 5.384833] db60: 00920000 0092052c[ 5.393378] db80: 00920000 00920000 cf911da8 0000052c cf911da8 00000000 cfa49000 0000000c
TI中文支持网