내 커널 명령줄은 다음과 같습니다.
root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs
첫 번째 root
항목은 메이저 및 마이너 장치 번호로 디스크를 식별하고 두 번째 항목은 이름으로 디스크를 식별합니다. rootfs
실제로 켜져 있는 것은 확인할 수 있는데 /dev/mtdblock2
어떻게 설명해야 할지 모르겠습니다 31:0
.
답변1
동일한 옵션을 여러 번 제공하면 다양한 모듈이 다르게 작동합니다. 이 말을 여러 번 하면 여러 개의 콘솔을 얻게 될 것이라는 것을 알고 있습니다 console=
(우리는 프레임 버퍼와 직렬 포트 모두에 메인 콘솔이 있는 시스템에 대해 이것을 사용합니다).
그러나 루트 파티션은 하나만 가질 수 있으므로 root=
이전에 본 값은 거의 확실히 왼쪽에서 오른쪽으로 덮어쓰여질 것입니다. init/do_mounts.c
이는 함수가 옵션에 root_dev_setup()
대한 작업을 담당 하고 매개변수 키를 변수에 저장하는 커널 소스 코드로 확인됩니다 . root=
bootparam이 root=31:0
덮어쓰기되었거나 root=/dev/mtdblock2
적어도 방금 확인한 2.6.25 소스 트리에 있습니다.
그건 그렇고, C에 능숙하다면 name_to_dev_t()
값을 구문 분석하는 동일한 파일의 함수는 root=
매우 유익합니다!
표기법 x:y
은 Unices가 장치를 식별하는 방법인 표준 Unixism "major:minor"입니다. 전통적으로,기본하드웨어 드라이버를 식별하는 8자리 숫자입니다.미성년자장치 자체를 식별하는 8자리 숫자입니다. 숫자에는 major
문자 장치와 블록 장치라는 두 가지 네임스페이스가 있습니다 . 을 입력하여 둘 다 볼 수 있으며 cat /proc/devices
, 말하여 현재 활성 콘텐츠를 볼 수 있습니다 ls -la /dev
. 예는 다음과 같습니다.
ls -la /dev/zero /dev/sda
brw-rw---- 1 root disk 8, 0 Jan 12 22:01 /dev/sda
crw-rw-rw- 1 root root 1, 5 Jan 12 22:01 /dev/zero
첫 번째 열은 드라이버 유형( b
블록의 경우, c
문자의 경우)을 식별합니다. 왼쪽의 두 열은 Jan
형식의 메이저 및 마이너 숫자입니다 major, minor
.
root=
major:minor 표기법을 사용하여 이름과 관계없이 모든 블록 장치에 이름을 지정할 수 있습니다 .
장치 번호의 전체 목록은 커널 소스 트리 아래에 있습니다 Documentation/devices.txt
. 31:0은 시스템의 첫 번째 ROM 카드인 /dev/rom0을 참조하는 것 같습니다.
답변2
root=LABEL=...
장치 이름 대신 레이블을 사용하여 파일 시스템을 마운트하려면 labels( )를 사용하십시오 .
http://www.ibm.com/developerworks/linux/library/l-boot-rootfs/index.html