DREAMER

[Development Tasks Manual] 3.25 Selecting an Initialization Manager 본문

프로그래밍/YOCTO

[Development Tasks Manual] 3.25 Selecting an Initialization Manager

연소민 2023. 3. 21. 15:26
728x90
반응형

yocto 프로젝트의 initialization manager는 SysVinit, systemd가 있으며, SysVinit을 기본으로 사용한다.

systemd는 많은 배포판에서 init을 완전히 대체하여 사용되는데, services의 병렬 시작, shell 오버헤드 감소등의 기능이 있다.

 

[SysVinit]

System 내에서, SysVinit은 컴포넌트들을 service로 처리한다.

이러한 services는 /etc/init.d/ 디렉터리에 위치한 shell scripts에 의해 유지된다. Services는 각각 다른 run levels로 구성된다.

이러한 구성은 /etc/rcN.d/ 디렉터리에 해당 services의 링크파일을 위치함으로써 유지된다. (N은 "S", "0", "1", "2", "3", "4", "5" 또는 "6" 중 하나)

(예를들어 /etc/init.d/weston 서비스를 normal 부팅시에 로드하고 싶다면 /etc/rc2.d/S02weston 이라는 링크파일이 존재해야 한다.)

각 run level은 이전 run level에 종속성을 갖는다. 이러한 종속성을 통해 services가 적절히 동작할 수 있다.

[systemd]
systemd는 컴포넌트들을 unit으로 처리한다. unit을 사용하는 것은 service를 사용하는 것보다 더 넓은 개념이다.
unit은 entities의 여러가지 다른 types을 포함한다. service는 entities 한 type이다.
SysVinit의 run level이라는 개념은 systemd에서 타겟의 개념과 동일하며, 타겟은 지원되는 unit의 한 종류이기도 하다.
SysVinit 기반의 시스템에서, service는 init 시에 하나씩 순차적으로 로드하며 parallelization은 지원하지 않는다.
systemd 시스템에서는 service는 병렬로 시작하며, 당연히 시스템 startup performance에 영향을 미칠 수 있다.
yocto 프로젝트는 SysVinit이 기본이기 때문에, systemd를 사용하기위해서는 몇가지 설정이 필요하다.
 
1. Using systemd Exclusively
distribution configureation 파일을 수정한다. (custom layer의 conf/layer.conf에 추가)
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"

중복된 SysVinit scripts를 모두 제거하여 sysvinit이 자동으로 enabled 되어있는 distribution feature을 막는다.

또한, 모든 이미지에서 initscripts를 제거하기 위해 두번째 줄과 같이 해준다.

DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""

 

728x90
반응형
Comments