Busybox 기반 임베디드 Linux 배포판에서는 /proc를 사용할 수 없습니다.

Busybox 기반 임베디드 Linux 배포판에서는 /proc를 사용할 수 없습니다.

저는 임베디드 Linux 배포판을 만들고 있으며 마더보드는 Raspberry Pi입니다. 내 커널 버전은 3.2.27이고 initramfs가 없으며 내 루트 파일 시스템은 다음과 같습니다.

/lib                          /* contains kernel modules */
/bin /sbin /usr/bin /usr/sbin /* contains busybox utils binaries */
/usr/lib                      /* contains cross-compiler tool chain libs */
linuxrc                       /* generated by busybox, kept in / */
/dev                          /* I have created console and ttyAM0 manually but added mode devices by udev */
/etc/init.d/rcS               /* required by busybox init */

커널이 부팅되면 콘솔이 나타납니다(비지박스 콘솔인지는 모르겠습니다). 나는 다음과 같은 질문이 있습니다

  • 사용 가능한 프로세스 정보가 없습니다(아래에 파일/폴더가 생성되지 않았습니다 /proc).
  • 제가 사용해도 ps -e아무 것도 표시되지 않습니다 .

왜 이런 예상치 못한 동작이 발생합니까?

답변1

루트 파일 시스템을 초기화하고 마운트한 후 Linux는 /sbin/init마운트를 포함하여 사용자 공간 초기화를 시작하고 수행합니다./proc

구성 rcS이나 구성 init읽기가 이 작업을 수행하지 않을 가능성이 높으므로 그렇게 하도록 지시해야 합니다.

쉘 프롬프트가 있는 경우 /proc다음 명령을 사용하여 수동으로 설치할 수 있습니다.

mount -t proc p /proc

/proc디렉토리에 무언가를 마운트하려면 먼저 디렉토리가 존재해야 합니다 . 이를 루트 이미지에 포함해야 합니다.

답변2

2) 1) - 실행 중인 프로세스에 대한 정보를 얻는 ps데 사용되기 때문일 가능성이 높습니다./proc

1) 초기화가 이 작업을 수행할 것으로 예상되지 않았거나 초기화에 실패했기 때문입니다. 분포가 무엇인지 확인하십시오.~해야 한다부팅 시 수행할 작업 - 시스템이 시작되는 방법입니다.

시도해 볼 수 있는 것:

  • mount /proc, 예: mount -t proc proc /proc- 두 번째 인수는 선택 사항입니다(마운트 소스로 나타남). 어떤 PID=1이 실행 중인지 확인하세요.

  • /proc/cmdline시작 시 커널이 수신한 매개변수를 확인하십시오 . 포함되어 있는 경우 커널이 자체적으로 실행되도록 init를 구문 분석할 수 있도록 init=...이를 변경하거나 제거해야 할 수도 있습니다 . /sbin/init이 작업은 부트로더 구성에서 수행해야 합니다(R-Pi의 경우 SD 카드 IIRC의 일부 텍스트 파일에 있음).

  • 필요한 init 실행 파일이 있는지 확인하십시오. Busybox에는 일반적으로 바이너리에 대한 많은 심볼릭 링크가 있으므로 이를 놓칠 command [args]수도 busybox command [args]있습니다.

답변3

먼저 컴퓨터에 설치하세요./etc/inittab

즉, inittab다음부터 시작해야 합니다.

::sysinit:/bin/mount -t proc proc /proc

이는 Buildroot 2017.02에서 수행됩니다.

답변4

나는 매우 조악한 Linux 컨테이너에서 이 문제에 직면했습니다. ps무엇보다도 컨테이너를 처음 시작할 때 작동하지 않는다는 사실을 발견했지만 컨테이너를 다시 시작하면 모든 것이 정상입니다.

내 컨테이너 이미지에는 빈 /proc디렉터리가 포함되어 있지 않으므로 busybox에는 proc 파일 시스템을 마운트할 장소가 없습니다. 그러나 나중에 생성됩니다(비지박스가 어느 시점에 생성한 것 같습니다). 이는 후속 재부팅 시에도 존재하며 성공적으로 마운트할 수 있음을 의미합니다.

포함할 이미지를 다시 만들었고 /proc그 이후에는 모든 것이 잘 작동했습니다.

따라서 루트 파일 시스템에는 /procbusybox를 마운트할 디렉터리가 있어야 하는 것으로 보입니다. 추가 작업(수동 설치, inittab 항목 등)은 필요하지 않은 것 같습니다(적어도 컨테이너에서는).

한 가지 불일치는 busybox가 마운트해야 하는 유사한 디렉터리를 만드는 데 만족해 보인다는 것입니다 /sys.

관련 정보