VFS: 루트 장치 mmcblk1p1 또는 알 수 없는 블록을 열 수 없습니다(179,33)

VFS: 루트 장치 mmcblk1p1 또는 알 수 없는 블록을 열 수 없습니다(179,33)

맞춤형 Nvidia TK1 기반 보드에서 Linux를 실행하려고 합니다. SD 카드에서 보드를 부팅하려고 하면 다음 오류가 발생합니다.

VFS: Cannot open root device "mmcblk1p1" or unknown-block(179,33): error -30
Please append a correct "root=" boot option; here are the available partitions:
 b300        30539776 mmcblk0  driver: mmcblk
   b301        14680064 mmcblk0p1 7369c667-ff51-ec4a-29cd-baaba3cee346
   b302            4096 mmcblk0p2 f854c27c-e81b-8de7-765a-2e9442bfc99a
   b303           65536 mmcblk0p3 b70d3266-5831-5aa3-255d-051742ea5ed4
   b304            4096 mmcblk0p4 c6cdb2ab-b49b-1154-0e82-7441842bdc87
   b305            4096 mmcblk0p5 a13ee970-e141-67fc-3e01-7e97dcea6b96
   b306            4096 mmcblk0p6 2a5c388f-b0ec-fb3b-32af-3c554123db5c
   b307            4096 mmcblk0p7 43fe1a02-fafb-3aaa-fb29-d1e85fa37c94
   b308            2048 mmcblk0p8 61bed875-f989-bb5c-a899-0f9573eff1b3
   b309          571392 mmcblk0p9 00f7ef05-a1e9-e53a-ca0b-cbd3493164bd
 b310            4096 mmcblk0rpmb  (driver?)
 b320        15558144 mmcblk1  driver: mmcblk
   b321        15557103 mmcblk1p1 5d52e9ff-6261-41c9-9816-73affe28b267
 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,33)

나는 올바른 루트 변수가 커널에 제공되었는지 확인했습니다 root=/dev/mmcblk1p1 rw. 즉, . 또한 카드가 읽기 전용이 아닌 올바른 형식인지 확인했습니다.

커널 소스 코드를 살펴보았지만 이 오류를 반환하는 함수 정의를 error -30찾을 수 없었습니다 .sys_mount()

누군가 이런 일이 일어나는 이유를 지적할 수 있습니까? 감사해요.

답변1

이게 정말 풀 사이즈 SD 카드인가요? 카드에 "읽기 전용" 위치에 있는 RW 스위치가 있습니까?

https://kb.sandisk.com/app/answers/detail/a_id/1102/~/sd%2Fsdhc%2Fsdxc-memory-card-is-write-protected-or-locked

RW 스위치는 카드가 아닌 카드 리더에 의해 강제로 전환되므로 하드웨어(또는 드라이버?) 문제일 수도 있습니다.


mount 시스템 호출에서 반환된 오류는 값이어야 합니다 errno. 빼기 기호는 단지 관례일 뿐이라고 가정합니다.

 #define    EROFS   30  /* Read-only file system */

https://elixir.bootlin.com/linux/v4.20/source/include/uapi/asm-generic/errno-base.h#L34

sys_mount()이 오류를 반환하는 함수 정의를 찾을 수 없습니다 .

예, 고통스럽습니다. 이 정의는 다음에는 나타나지 않습니다.엘릭서 검색누구나. 시스템 호출은 매크로를 사용하여 정의됩니다.

SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
                char __user *, type, unsigned long, flags, void __user *, data)
{
        return ksys_mount(dev_name, dir_name, type, flags, data);
}

https://elixir.bootlin.com/linux/v4.20/source/fs/namespace.c#L3028

관련 정보