rk3128 手动挂载 U 盘
2019-04-16
关键字: RK 、 挂载、U盘、Hub挂载U盘
问题现象
在确保了硬件电路、dts 配置、驱动加载以及 USB 模式都没有问题的情况下,给开发板插入 U 盘,串口上也能识别到发现 U 盘设备的内核打印。但是不能自动挂载,且在常规的 dev 目录下也没有发现有 sd* 的设备文件节点出现。
解决过程
在插入 U 盘设备后,可以发现有如下打印信息
shell@rk312x:/dev/block #
shell@rk312x:/dev/block # [ 1127.769007] dwc_otg_hcd_handle_port_intr: hcd->state = , hcd->flags =
[ 1127.775872] .usb resume, HPRT0:0x21401
[ 1127.905831] Indeed it is in host mode hprt0 =
[ 1128.082717] usb -: new high-speed USB device number using usb20_otg
[ 1128.083395] Indeed it is in host mode hprt0 =
[ 1128.282860] usb -: New USB device found, idVendor=0bda, idProduct=
[ 1128.283004] usb -: New USB device strings: Mfr=, Product=, SerialNumber=
[ 1128.283088] usb -: Product: USB2.-CRW
[ 1128.283152] usb -: Manufacturer: Generic
[ 1128.283216] usb -: SerialNumber:
[ 1128.297475] usb-storage -:1.0: USB Mass Storage device detected
[ 1128.298382] scsi2 : usb-storage -:1.0
[ 1129.284565] scsi :::: Direct-Access Generic- SD/MMC 1.00 PQ: ANSI: CCS
[ 1129.288155] sd :::: Attached scsi generic sg0 type
[ 1129.989467] sd :::: [sda] -byte logical blocks: (1.01 GB/ MiB)
[ 1129.990407] sd :::: [sda] Write Protect is off
[ 1129.991351] sd :::: [sda] No Caching mode page found
[ 1129.991430] sd :::: [sda] Assuming drive cache: write through
[ 1129.997344] sd :::: [sda] No Caching mode page found
[ 1129.997433] sd :::: [sda] Assuming drive cache: write through
[ 1129.999700] sda: sda1
[ 1130.007541] sd :::: [sda] No Caching mode page found
[ 1130.007584] sd :::: [sda] Assuming drive cache: write through
[ 1130.007619] sd :::: [sda] Attached SCSI removable disk
[ 1130.130219] FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 1130.167493] init: no such service 'fuse_usb_storage' shell@rk312x:/dev/block #
看到了这个信息,就说明至少板子是正确识别到了我们的 U 盘设备,甚至连我的 U 盘的容量都正确读取出来了。
对于成熟一点的 rk3128 开发板来说,外部存储设备都会被自动挂载到 /mnt 目录下面。如果在这个目录下面看不到我们 U 盘里面的文件,那可以全局搜索一下。搜索也无果的话,就只能手动去挂载了。
一般来说,外部存储设备都会被挂载到 /dev 目录下的 sd* 文件上。如果在这个目录下面发现了有,则可以手动挂载
mount /dev/sda1 /mnt/usb_storage
但是很遗憾,笔者手里这块 rk3128 就是没在 dev 目录下发现这些设备节点。
我们知道至少系统是成功识别到 U 盘设备的,可能只是我们不知道它被映射在了哪个目录下而已。这个时候,就只能靠 find 命令了。
我们注意到在刚插入 U 盘时,内核打印有一句
[ 1127.775872] .usb resume, HPRT0:0x21401
这个 10180000.usb 即是我们的 U 盘设备标识符。我们 find 一下它。
shell@rk312x: # busybox find / -name "10180000*"
find: /mnt/shell/emulated: Transport endpoint is not connected
/sys/bus/platform/devices/.usb
/sys/bus/platform/drivers/usb20_otg/.usb
/sys/devices/.usb
/sys/devices/.usb/udc/.usb
/sys/class/udc/.usb
/dev/block/platform/.usb
注意到结果最后一行有个 /dev/block/platform/10180000.usb 。我们进去看看。
|shell@rk312x: # ll /dev/block/platform/.usb
drwxr-xr-x root root -- : by-num
lrwxrwxrwx root root -- : sda -> /dev/block/sda
lrwxrwxrwx root root -- : sda1 -> /dev/block/sda1
shell@rk312x: #
原来 sda 设备节点被映射到了 /dev/block/ 目录下面!下面的结果为了减少篇幅,省略了一些无关紧要的记录。
shell@rk312x: # ll /dev/block/ brw------- root root , -- : sda
brw------- root root , -- : sda1 shell@rk312x: #
这下可终于让我们给找到 sda 节点的真实映射目录了。可以手动来挂载我们的 U 盘了。
mount -t vfat /dev/block/sda1 /mnt/usb_storage
命令执行以后就可以在 /mnt/usb_storage 目录下面看到我们 U 盘中的内容了。
rk3128 的板子比较奇怪,不加 -t 参数就不能成功挂载!而且笔者试了几个 U 盘,发现只能挂上 FAT 格式的 U 盘,至于原因尚未可知。
如果想要让系统实现自动挂载的功能,则可以修改
./device/rockchip/rk312x/fstab.rk30board.bootmode.emmc
或
./device/rockchip/rk312x/fstab.rk30board.bootmode.unknow
在这个文件中添加这个 U 盘的识别码记录即可
...
/devices/101c0000.usb /mnt/usb_storage vfat defaults voldmanaged=usb_storage:auto
...
番外:Hub芯片适配与USB设备挂载
有些开发板会通过Hub芯片来扩展USB接口的数量。
对于这种经过了 Hub 芯片的USB接口适配来说,首先要适配Hub芯片的驱动。关于硬件设备驱动程序的适配一般不复杂,本文就再赘述了。这里主要记录一下当硬件与Hub驱动都正常工作的情况下如何来适配USB接口。
正常而言,一个U盘在插进USB接口以后,系统会自动将它“认上来”,我们可以直接在文件管理器中读取到这个U盘里面的文件内容。 这一功能包含了:
1、U盘硬件识别;
2、U盘设备映射成文件;
3、将U盘设备文件挂载成存储盘。
在用户眼里这一“自动”过程其实是由系统帮我们实现了这一系列的流程而已。
如果我们的U盘在插入以后,不能被认上来,那么可以在以上几个步骤中找找原因。
首先我们来看看前两步。
当我们适配好Hub的驱动程序后,插入U盘,可以看到如下内核打印信息:
[ 10.339544] android_work: sent uevent USB_STATE=CONFIGURED
[ 490.101898] usb -1.1: new high-speed USB device number using rockchip_ehci1_host
[ 490.212642] usb -1.1: New USB device found, idVendor=14cd, idProduct=
[ 490.212850] usb -1.1: New USB device strings: Mfr=, Product=, SerialNumber=
[ 490.212973] usb -1.1: Product: Mass Storage Device
[ 490.213077] usb -1.1: Manufacturer: Generic
[ 490.213156] usb -1.1: SerialNumber:
[ 490.220365] usb-storage -1.1:1.0: USB Mass Storage device detected
[ 490.223720] scsi0 : usb-storage -1.1:1.0
[ 490.230439] rockchip-rt5631 rockchip-rt5631.: ASoC: CODEC (null) not registered
[ 490.230497] rockchip_rt5631_audio_probe() register card failed:-
[ 490.230541] platform rockchip-rt5631.: Driver rockchip-rt5631 requests probe deferral
[ 490.231179] rockchip-rt3261 rockchip-rt3224.: ASoC: CODEC (null) not registered
[ 490.231223] rockchip_rt3261_audio_probe() register card failed:-
[ 490.231262] platform rockchip-rt3224.: Driver rockchip-rt3261 requests probe deferral
[ 490.231756] rockchip-es8388 rockchip-es8388.: ASoC: CODEC (null) not registered
[ 490.231800] rockchip_es8388_audio_probe() register card failed:-
[ 490.231830] platform rockchip-es8388.: Driver rockchip-es8388 requests probe deferral
[ 491.205814] scsi :::: Direct-Access Mass Storage Device 1.00 PQ: ANSI: CCS
[ 491.215685] rockchip-rt5631 rockchip-rt5631.: ASoC: CODEC (null) not registered
[ 491.215993] rockchip_rt5631_audio_probe() register card failed:-
[ 491.216187] platform rockchip-rt5631.: Driver rockchip-rt5631 requests probe deferral
[ 491.217087] sd :::: Attached scsi generic sg0 type
[ 491.218948] rockchip-rt3261 rockchip-rt3224.: ASoC: CODEC (null) not registered
[ 491.219190] rockchip_rt3261_audio_probe() register card failed:-
[ 491.219379] platform rockchip-rt3224.: Driver rockchip-rt3261 requests probe deferral
[ 491.221518] rockchip-es8388 rockchip-es8388.: ASoC: CODEC (null) not registered
[ 491.221747] rockchip_es8388_audio_probe() register card failed:-
[ 491.221907] platform rockchip-es8388.: Driver rockchip-es8388 requests probe deferral
[ 491.457689] sd :::: [sda] -byte logical blocks: (8.02 GB/7.47 GiB)
[ 491.459200] sd :::: [sda] Write Protect is off
[ 491.460781] sd :::: [sda] No Caching mode page found
[ 491.460875] sd :::: [sda] Assuming drive cache: write through
[ 491.471083] sd :::: [sda] No Caching mode page found
[ 491.471199] sd :::: [sda] Assuming drive cache: write through
[ 491.473791] sda: sda1
[ 491.488854] sd :::: [sda] No Caching mode page found
[ 491.488934] sd :::: [sda] Assuming drive cache: write through
[ 491.488999] sd :::: [sda] Attached SCSI removable disk
[ 492.564591] FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
最主要的信息就是前面的 usb 1-1.1 了。只要能看到这个信息,就表明上面三个步骤中的前两步都是没问题的。那问题就只能出现最后一步映射上了。
这个映射,靠的是一个叫 fstab 的文件:文件系统映射表。
不同的系统这一文件的名称与位置可能不一样。笔者的Android系统中,这一文件为:
./device/rockchip/rk3288/fstab.rk30board.bootmode.emmc
前面我们在插入U盘以后看到的那串内核打印里有个前缀“usb 1-1.1”,这后面的 ".1" 就代表这个U口在Hub中的序号。我们把同一个U盘往不同的口插,可以看到这个序号是不一样的。这个需要记住。
其次,我们还要知道Hub芯片是接在CPU的哪一个USB资源口上,我们需要知道这一usb资源的地址。
例如,笔者手里的板子就是接到 usb4 上的,它的地址如下:
知道了上面这些信息以后,就可以在 fstab 文件中添加或修改自动挂载信息了。如下图所示:
第一列就是Hub上每一个U口的信息。第二列就是在Android系统中的挂载点。这两部分的信息需要根据自己的实际情况来填写,其余部分照抄就行了。
要注意,如果挂载点还有其它设备在使用着,应视情况删去其它挂载信息或更改挂载点。总之,我们要保证被挂载点是唯一的。
如此,再次编译系统镜像,验证就可以解决Hub式的USB接口不能认到U盘等设备的问题了。
rk3128 手动挂载 U 盘的更多相关文章
- 银河麒麟操作系统U盘手动挂载,出现乱码
使用银河麒麟操作系统,U盘手动挂载,U盘中中文字符显示为乱码?? 对于银河麒麟操作系统的这一问题,可能是因为字符集的原因,需要在mount后加参数: sudo mount –o iochar ...
- linux挂载U盘(转载)
一.Linux挂载U盘:1.插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1.2.在mnt目录下先建立一个usb的目录(如:[root@lo ...
- [Openwrt 扩展上篇]USB挂载&U盘启动&Samba共享
最近偷懒,没学习,反想起自己的路由刷了Openwrt,正好闲置了一个硬盘想拿来做个网络硬盘,于是开始了折腾....这里将不谈论如何刷Openwrt,如何ssh,如何添加PPOE,如何添加相对应服务的包 ...
- linux系统无法挂载U盘
插上U盘 [ 2407.650440] usb 1-3.3: new high speed USB device number 7 using s5p-ehci [ 2407.887332] usb ...
- linux 挂载数据盘
完整的阿里云挂载数据盘方法如下: 1.入手阿里云后查看有几块硬盘:(只显示概况,不显示分区情况) fdisk -l|grep Disk 2.查看硬盘分区 fdisk -l 如果有提示:disk /de ...
- mint17.3挂载u盘出现错误:mount:unknown filesystem type 'exfat'
mint17.3挂载u盘出现错误:mount:unknown filesystem type 'exfat' 安装exfat-fuse: sudo apt-get install exfat-fuse
- centos6.4 挂载新盘并移动mysql数据目录
1 centos 挂载新盘并格式化 以vmware workstation12 中安装的centos6. 虚拟机为例进行演示 关机,添加硬盘 开机,格式化硬盘,并挂载 通过命令查看硬盘 fdisk – ...
- Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
(八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在Vue实例外面操纵 ...
- centos7 挂载数据盘
centos 挂载数据盘1.运行 fdisk -l 命令查看数据盘.注意:在没有分区和格式化数据盘之前,使用 df -h 命令是无法看到数据盘的. 如果执行了 fdisk -l 命令后,没有发现 /d ...
随机推荐
- 表单数据验证方法(一)—— 使用validate.js实现表单数据验证
摘要:使用validate.js在前端实现表单数据提交前的验证 好久没写博客了,真的是罪过,以后不能这样了,只学习不思考,学的都是白搭,希望在博客园能记录下自己学习的点滴,虽然记录的都是些浅显的技术, ...
- .NET Core: 在.NET Core中进行单元测试
单元测试能够帮助开发人员确保所开发的模块.类以及类中的方法等的正确性,在项目开发过程中,及时进行单元测试能够避免不必要的BUG以及提高测试效率. 在本文中,我们会分别来学习如何使用MSTest.xUn ...
- tomcat,httpd 日志格式说明
tomcat 日志说明 配置文件server.xml 默认日志格式为 pattern="%h %l %u %t "%r" %s %b" 推荐使用 pattern ...
- C# E店宝格格家接口对接
一.实现图片 二.实现通用方法 /// <summary> /// 调用通用方法 /// </summary> /// <param name="strURL& ...
- php中读取中文文件夹及文件报错
php读取时出现中文乱码 一般php输出中出现中文乱码我们可用 header ('content:text/html;charset="utf-8"'); php中读取中文文件夹及 ...
- Hacking Bsides Vancouver 2018 walkthrough
概述: Name: BSides Vancouver: 2018 (Workshop) Date release: 21 Mar 2018 Author: abatchy Series: BSides ...
- Android为TV端助力:自定义view之太阳
先看效果图 package com.hhzt.iptv.lvb_w8.view; import android.content.Context;import android.graphics.Canv ...
- 数据结构java(一)数组链表
链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储. 相比c语言需要的结构体,在java中由于有了面向对象编程,将指针‘藏’了起来,不需要分配内存. 所以只需要创建一个对象 ...
- 在项目管理中如何保持专注,分享一个轻量的时间管理工具【Flow Mac版 - 追踪你在Mac上的时间消耗】
在项目管理和团队作业中,经常面临的问题就是时间管理和优先级管理发生问题,项目被delay,团队工作延后,无法达到预期目标. 这个仿佛是每个人都会遇到的问题,特别是现在这么多的内容软件来分散我们的注意力 ...
- python学习笔记3_抽象
这一步的学习四个知识点,如何将语句组织成函数,参数,作用域(scope),和递归 一.函数 1.抽象和结构 抽象可以节省很多的工作量,实际上它的作用更大,它是使得计算机程序让人读懂的关键(这也是最基本 ...