オペレーティングシステムはeMMCデバイスをSDカードデバイスと混同します。 udevを使用して問題を解決する方法

オペレーティングシステムはeMMCデバイスをSDカードデバイスと混同します。 udevを使用して問題を解決する方法

Busybox LinuxはNXPのARM Cortex A7プロセッサで動作します。

ボードにはSDカードスロットとeMMCストレージに使用できるチップがあります。デバイスがNORフラッシュメモリから起動しています。

奇妙なことに、SDカードを挿入するとドライブをマウントできず、eMMCパーティションの損失エラーが発生しました。再起動後、問題は消えました。 SDカードを取り外すと同じ問題が発生しますが、今回はパーティションをマウントできず、eMMCマウント失敗エラーが発生します。

したがってeMMC、インストールが失敗したときにデバイスがSDカードと混同されたと考えますeMMC

udevadm info -a -n /dev/mmcblk2失敗(例)で実行すると、mmcblk2次のようになります。eMMC

ATTRS{type}=="SD"

ただし、インストールが機能すると、次のレポートが表示されます。

ATTRS{type}=="MMC"

したがって、私たちはオペレーティングシステムがSDカードデバイスとデバイスを混同していると疑いますMMC

強制できますかATTRS{type}=="MMC"

それでは、どうすればいいですか?

それともこの問題を解決するためのより良い選択肢がありますか?

補足説明

dmesg when we can't mount eMMC partition 1
[    1.981630] mmc2: MAN_BKOPS_EN bit is not set
[    1.996222] usb 2-1: new high-speed USB device number 3 using ci_hdrc
[    2.003347] mmc2: new DDR MMC card at address 0001
[    2.004444] mmcblk2: mmc2:0001 R1J57L 13.8 GiB 
[    2.006353] mmcblk2boot0: mmc2:0001 R1J57L partition 1 16.0 MiB
[    2.006672] mmcblk2boot1: mmc2:0001 R1J57L partition 2 16.0 MiB
[    2.006912] mmcblk2rpmb: mmc2:0001 R1J57L partition 3 128 KiB
[    2.010135]  mmcblk2: p1

eMMCをマウントするときは、dmesgが有効です。

[    1.852533] mmc2: new DDR MMC card at address 0001
[    1.853202] mmcblk2: mmc2:0001 R1J57L 13.8 GiB 
[    1.853364] mmcblk2boot0: mmc2:0001 R1J57L partition 1 16.0 MiB
[    1.853544] mmcblk2boot1: mmc2:0001 R1J57L partition 2 16.0 MiB
[    1.853697] mmcblk2rpmb: mmc2:0001 R1J57L partition 3 128 KiB
[    1.856437]  mmcblk2: p1

違いは、動作しないget:mmc2:MAN_BKOPS_ENビットが設定されていないことです。 BKOPSはeMMCのパフォーマンス機能であるバックグラウンドタスクです。この質問とどのように関連しているかよくわかりません。

lsblk:

NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk2rpmb  179:32   0  128K  0 disk 
mmcblk2boot0 179:16   0   16M  1 disk 
mmcblk2boot1 179:24   0   16M  1 disk 
mmcblk0      179:0    0  3.8G  0 disk 
`-mmcblk0p1  179:1    0  3.8G  0 part 
mmcblk2      179:8    0 13.8G  0 disk 
`-mmcblk2p1  179:9    0 13.8G  0 part 

mmcblk2はeMMC、mmcblk0はSDカードです。

SDカードmmcblk0でudevadm infoを実行します。

udevadm info -a -n /dev/mmcblk0
ATTRS{type}=="SD"

関連情報