저는 Linux에 관심이 있어서 한동안 연구해 왔습니다. 방금 소스에서 Linux 커널을 컴파일하고 커널 쉘을 제공하는 Grub을 사용하여 부팅하는 방법을 배웠습니다.
이제 커널이 메모리에 로드되면 init
이를 로드하기 위해 검색합니다. 내 계획은 쉘을 시작하는 것입니다(예: 일반 사용자가 사용할 수 있음 bash
).
그럼 그걸 어떻게 가져오나요?
Bash 쉘을 로드하려면 init를 구성해야 합니까, 아니면 제가 할 수 있는 일이 있습니까?
나는 나만의 배포판을 만들고 있는데 배포판에 쉘(bash)만 있고 다른 것은 필요하지 않습니다.
답변1
잘. 구현하기가 복잡하지는 않지만 매우 복잡합니다. :)
간단히 알렉산더의 조언( )을 따르면 init=/bin/bash
괜찮을 것입니다.
init 프로세스는 커널에 의해 호출되어 시작됩니다.모두귀하의 사용자 공간. 로그인 터미널을 포함합니다. 초기화가 bash 터미널을 생성한다면 괜찮습니다. 그러나 터미널이 충돌하거나 종료되면 init가 정리되어야 합니다. 터미널에서 시작한 프로세스 중 일부가 종료되면 이를 정리해야 합니다. 만약 그들이 죽으면, 그럼그들의자식에게는 초기화가 될 새로운 부모 프로세스가 필요합니다.
10분만 시간을 내어 이 기사를 읽어 보시기 바랍니다. 다음 내용에 대한 매우 친숙한 개요가 제공됩니다 init
.
http://tilde.town/~elly/userland.txt
그런 다음 자신만의 init를 실행하는 데 필요한 사항에 대해 자세히 알아봅니다.
링크의 관련 부분은 다음과 같습니다.
우리가 해야 할 일은 단 한 가지입니다. /sbin/init, /etc/init, /bin/init 또는 /bin/sh 경로 중 하나에서 시작할 초기 바이너리를 제공하는 것입니다. 프로세스(init)는 pid 1로 실행됩니다.
init 프로세스는 다음 두 가지 작업을 수행해야 합니다.
종료하지 마십시오(init가 종료되면 커널이 패닉 상태가 됩니다).
좀비 프로세스 수확
나머지 텍스트에서는 간단한 초기화를 구현합니다.
답변2
"터미널"(물리적 컴퓨터)과 "bash"(셸)는 완전히 다릅니다. 당신이 무엇을 요구하는지 완전히 확신할 수는 없지만 init=/bin/bash
커널 명령줄에 추가하여 bash로 직접 부팅할 수 있습니다.
답변3
bash
터미널이 아니라 쉘입니다.
init
이 프로세스는 부팅 프로세스가 완료되고 시스템이 일반 텍스트 런레벨(X Windows 없음)에서 실행되면 궁극적으로 getty
호출 됩니다 login
. 이는 로그인 프롬프트를 표시하고 사용자가 로그인할 수 있도록 하는 프로세스입니다. 이는 모든 Linux 배포판에서 발생합니다.
당신이 원하는 것은 bash
사용자에 대한 기본 로그인 셸을 정의하는 것뿐입니다(다중 사용자 환경을 원한다고 가정).