맞춤형 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 스위치가 있습니까?
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