您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 指令预取 >

yaffs2中mount mtd block设备后insmod就死掉了

发布时间:2019-06-15 20:29 来源:未知 编辑:admin

  4 /mnt/usb_msc 后,自动挂载成yaff2文件系统之后,再去任何一个ko,都会死掉,而且还是没有任何输出信息的,连kernel的oops,对应ko里面第一行打印,都没有。

  1.后来经过测试,发现,对于pagesize是2K的nand flash来说(此处由于特殊需要(硬件HW ECC占用太多),所以需要进制yaffs2的tag ecc(以节省空间存放HW ECC)),都是可以正常工作的,但是对于4K Pagesize的nand,就工作不正常。而之前已经用mtd test的一系列工具验证了,2K和4K的nand的驱动,都是可以正常工作的。

  3.其他的,找不到原因了,所以,推断是yaffs2与MTD的兼容等方面的问题。

  挂载成fat分区,然后这样,就可以避开yaffs2,只是和mtd层有关系,结果测试下来,

  数据读写,都还是对的,但是还是先mount,后面再执行其他的,涉及到内核数据结果的操作,就还是死掉

  insmod ***.ko 或者其他的loadkmap 等等涉及内核的操作的程序,都会导致内核死掉,而且此处的死掉,

  死掉后,去用rvds连接板子,发现pc始终在0xFFFF000C,对应的就是ARM 的预取指中止异常:

  指令预取中止处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常。

  数据中止处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。

  也就是说明,最后出错的预取指中止,就是去本来应该存储对应的指令(代码)的地方,去读取指令,

  kmalloc去申请的空间,就是2048bytes了,这样,对于2K pagesize的nand,肯定是工作正常的,但是对于4K pagesize的,如果上层,比如yaffs2,通过mtd去读取数据,一个page的数据就是4K了,然后会放到这个buffer里面,结果后面2048的系统数据,就被冲掉了,如果系统之后用到这部分的数据或指令,就会有问题。而此处出现的预取指中止异常,那就是说明,后面这2048字节,里面很可能包含了某些系统相关的指令(和其他数据),结果系统执行到这里,取指不正常,所以挂掉了。

http://mytkt.net/zhilingyuqu/53.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有