U盘和移动硬盘挂载系列问题解决

前几天已经把U盘成功挂载到板子上了,今天测试一下移动硬盘。

  为了心里对硬盘的情况有个底,我先把移动硬盘插在我的电脑上试了一下,看了一下大小,分区情况,文件系统格式以及硬盘的VID和PID。然后打开板子电源,linux自启动,手动加载了gpio的驱动之后,板子就可以支持USB存储设备了,因为我已经把对USB storage的支持编译进内核了,连之前还要加载ohci-hcd.ko现在也可以省了。我把移动硬盘的一根线接到了一个USB口上,超级终端没反应,拔了再插,还是一样,移动硬盘倒是有点反应,灯亮了,但也改变不了它没被识别的事实,一点转动的迹象都没有。我取下硬盘,左看右看,看起来不像是不知名厂商生产的啊,怎么会识别不了呢,难道要修改unusual_devs.h这个usb产品登记表不成,不管先打开这个文件看看,结果我傻眼了,要填那么多信息我哪知道哦,而且MS里面的信息包罗万象,我所知道的一些厂商都被列了出来。看来这条路有点行不通,应该不可能没被包括的,我看好这个移动硬盘厂家的实力。突然不知道怎么来了灵感,我把移动硬盘的另一根线也插了上去,天啊,感动得要哭,超级终端立马有反应了,打印出了一行行识别硬盘的信息,这表示驱动程序很正常的工作了,也不存在我之前关于产品登记表中没有其信息的猜想。虽然这样被识别了,但是还是有点气氛,居然是这种问题,于是我去查了一下关于这两根线的作用:一根是数据线,一根是辅助供电线,很显然,当它插在我们板子上的时候,单使用数据线供电不足,显然不能工作,必须插上另外一根线进行辅助供电。

  好了,解决了识别的问题,接下来就要挂载了。挂载的方法很简单,mount一下就行了,结合识别时打印出的信息,我使用了如下命令:mount -t ntfs /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/usb,看来真是好事多磨,问题又来了,说是找不到该设备文件,我就奇怪了,设备文件明明就在这个目录下怎么就找不到呢,突然想到linux2.6内核默认是不支持ntfs的文件格式的,我打开.config文件看了一下,果然#CONFIG_NTFS_FS is not set,修改为CONFIG_NTFS_FS=y,重新编译内核,挂载,ok,搞定。可以看见硬盘里的资料了,不过还是有问题,由于不能支持中文,硬盘里的不少以中文命名的文件显示不出来,记得之前在我的电脑上识别移动硬盘时也出现过这个问题,解决的办法很简单,只需要在mount时加上参数-o iocharset=cp936就可以了。可是今天就像见鬼了似的,又说参数不正确,不能识别cp936,iocharset cp936找不到什么的,具体错误信息如下:

  Unable to load NLS Charset cp936
  FAT:IO charset cp936 not found

  有了之前那个ntfs的经验后,结合网上搜的一些资料,猜想可能是内核里也有对应的一个选项是用来支持cp936的,打开.config文件,果然不出所料,赫然写着#CONFIG_NLS_CODEPAGE_936 is not set,将其改为#CONFIG_NLS_CODEPAGE_936 = y,再次重新编译内核,然后mount带-o参数时就不会报错了。这样,中文不被支持的问题也得到了解决。

  到目前为止,U盘和移动硬盘都已经可以很好地挂载到板子上了。不过有一点不够完美的是,每次挂载的时候,对于设备文件都有一个那么长的路径,很麻烦,完全不像在电脑上的时候,mount一下/dev/sda就可以了,而且奇怪的是在dev目录下根本找不到sda以及sdb这些设备文件,很奇怪,我以为是海思对内核进行了修改,将生成设备文件的代码改了,后来通过比较海思的代码和标准2.6的代码,证实了我这个想法的错误,/dev/scsi/host0/bus0/target0/lun0这种表示方法是从2.6开始采用的,是一种统一的表示方法,可以层次分明地表示出usb挂载的top关系。现在该怎么办呢,百度+google吧,网上有资料说在制作文件系统的时候对设备文件的建立可以自由选择,那么我们的/dev目录下不存在sda以及sdb设备结点,估计就是文件系统为了保持简单没有包含吧,该怎么添加呢,难不成要重做个文件系统不成,显然不用,那样就显然有点杀鸡用牛刀了,一个命令mknod就可以搞定嘛,建立sda结点mknod sda 8 0 1,建立sdb以及sda1结点等同理,建立之后马上去/dev下看了看,果然多出了一个sda,然后挂载/dev/sda,居然没出错,意思就是挂载成功了,为了不至于每次都要敲mknod命令,我将他们写入了一个初始化的脚本/etc/init.d/rcS里,这样每次系统启动时就会自动建立这些设备结点了。今天在网上搜资料的时候也发现了一个现象,对于嵌入式开发板来说,好像大家都是在使用这种比较长的路径下的设备文件在挂载设备,我想出现这种现象的原因很可能是大家的文件系统没有把sda以及sdb这些设备结点建立起来吧,这样即使USB驱动升序识别到了你的U盘为sda或者sdb,它也找不到sda以及sdb设备文件来与之对应。

  调试过程中的一点点小发现都是那么令人兴奋,感觉真好,以此记今天的调试过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值