rk3128 手動掛載 U 盤


2019-04-16

關鍵字: RK 、 掛載、U盤

 


筆者手里有一塊非常原生的運行 Android 4.4 操作系統的 RK3128 開發板。原生到各種功能模塊都不能用的地步。今天就遇到一個不按常理出牌的 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 = 4, hcd->flags = 1
[ 1127.775872] 10180000.usb resume, HPRT0:0x21401
[ 1127.905831] Indeed it is in host mode hprt0 = 00021501
[ 1128.082717] usb 3-1: new high-speed USB device number 4 using usb20_otg
[ 1128.083395] Indeed it is in host mode hprt0 = 00001101
[ 1128.282860] usb 3-1: New USB device found, idVendor=0bda, idProduct=0109
[ 1128.283004] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1128.283088] usb 3-1: Product: USB2.0-CRW
[ 1128.283152] usb 3-1: Manufacturer: Generic
[ 1128.283216] usb 3-1: SerialNumber: 20090815198100000
[ 1128.297475] usb-storage 3-1:1.0: USB Mass Storage device detected
[ 1128.298382] scsi2 : usb-storage 3-1:1.0
[ 1129.284565] scsi 2:0:0:0: Direct-Access     Generic- SD/MMC           1.00 PQ: 0 ANSI: 0 CCS
[ 1129.288155] sd 2:0:0:0: Attached scsi generic sg0 type 0
[ 1129.989467] sd 2:0:0:0: [sda] 1990656 512-byte logical blocks: (1.01 GB/972 MiB)
[ 1129.990407] sd 2:0:0:0: [sda] Write Protect is off
[ 1129.991351] sd 2:0:0:0: [sda] No Caching mode page found
[ 1129.991430] sd 2:0:0:0: [sda] Assuming drive cache: write through
[ 1129.997344] sd 2:0:0:0: [sda] No Caching mode page found
[ 1129.997433] sd 2:0:0:0: [sda] Assuming drive cache: write through
[ 1129.999700]  sda: sda1
[ 1130.007541] sd 2:0:0:0: [sda] No Caching mode page found
[ 1130.007584] sd 2:0:0:0: [sda] Assuming drive cache: write through
[ 1130.007619] sd 2:0:0:0: [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] 10180000.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/10180000.usb
/sys/bus/platform/drivers/usb20_otg/10180000.usb
/sys/devices/10180000.usb
/sys/devices/10180000.usb/udc/10180000.usb
/sys/class/udc/10180000.usb
/dev/block/platform/10180000.usb

注意到結果最后一行有個 /dev/block/platform/10180000.usb  。我們進去看看。

1|shell@rk312x: # ll /dev/block/platform/10180000.usb
drwxr-xr-x root     root              2016-01-21 09:27 by-num
lrwxrwxrwx root     root              2016-01-21 09:27 sda -> /dev/block/sda
lrwxrwxrwx root     root              2016-01-21 09:27 sda1 -> /dev/block/sda1
shell@rk312x: # 

原來 sda 設備節點被映射到了 /dev/block/ 目錄下面!下面的結果為了減少篇幅,省略了一些無關緊要的記錄。

shell@rk312x: # ll /dev/block/

brw------- root     root       8,   0 2016-01-21 09:27 sda
brw------- root     root       8,   1 2016-01-21 09:27 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
...

 


 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com