728x90
반응형
5 Kernel space optimizations
5.1 Adding quiet
Kernel 시간을 절반 정도 줄이려면, Kernel bootargs에 quiet 인수를 추가한다. 이는 Linux 시작 시퀀스 중에 일부 메세지를 표시하지 않는다.
spl export 커맨드를 사용하여, 새로운 bootargs로 디바이스 트리를 다시 생성해야 한다.
- 기본 부팅 모드로 재부팅한다.
- <yocto_build_dir>/tmp/work/imx8mn_lpddr4_evk-poky-linux/u-boot-imx/<specified_git_folder>/git/include/configs/imx8mn_evk.h에서 CONFIG_SPL_OS_BOOT의 정의를 주석 처리한다.
- 20단계(4.3 참조)에서와 같이 부트로더를 다시 컴파일하고 다시 저장한다.
- U-Boot로 진입하고 quiet를 추가하여 bootargs 파라미터를 편집한다.
u-boot=> edit bootargs
edit: console=ttymxc1,115200 root=/dev/mmcblk1p2 rootwait rw quiet
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
5.2 Removing unnecessary drivers and file systems
사용 용도에 따라 불필요한 드라이버와 파일 시스템을 제거하여 Kernel을 줄일 수 있다. 초기화 중에 커널에서 발생하는 일을 그래프로 표시할 수 있는 커널 기능인 bootgraph를 사용하여 부팅 중에 커널 기능을 분석할 수 있다.
bootgraph를 생성하려면 다음 단계를 수행한다.
- Kernel bootargs에 initcall_debug를 추가한다.
- 1단계(4.3 참조)와 같이 기본 부팅 모드로 재부팅한다.
- U-Boot로 진입하고 initcall_debug를 추가하여 bootargs 파라미터를 편집한다.
u-boot=> edit bootargs
edit: console=ttymxc1,115200 root=/dev/mmcblk1p2 rootwait rw quiet initcall_debug
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
- 18단계(4.3 참조)에서와 같이 디바이스 트리를 다시 생성하고 SDHC에 로드한다.
- 19단계, 20단계(4.3 참조)를 수행하여 Falcon 모드로 다시 진입한다.
- 보드를 부팅하고 Kernel 로그를 가져온다.
root@imx8mn-lpddr4-evk:~# dmesg > boot.log
- 호스트로 돌아가서 다음 커맨드를 사용하여 그래프를 생성한다.
$ cd <yocto_build_dir>/tmp/work-shared/imx8mn-lpddr4-evk/kernel-source/scripts
$ ./bootgraph.pl boot.log > boot.svg
아래와 같은 것을 얻을 수 있으며, Kernel 부팅 시간이 어떻게 사용되는지 분석할 수 있다.
- 드라이버 기능을 비활성화하려면, Kernel 구성을 업데이트해야 한다.
예를 들어 Kernel(이미지 크기를 줄임)과 UBI 파일 시스템에서 디버그를 비활성화했다.
- sources/meta-imx/meta-bsp/recipies-kernel/linux/files에서 다음 라인을 포함하는 조각 구성 파일 frag.cfg를 만든다.
# CONFIG_UBIFS_FS is not set
# CONFIG_DEBUG_KERNEL is not set
- 이것을 기본 구성 파일과 병합하려면, 새로운 레시피를 추가해야 한다. sources/meta-imx/meta-bsp/recipies-kernel/linux에 linux-imx_5.10.bbappend를 생성하고 다음 라인을 추가한다.
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://frag.cfg \
"
DELTA_KERNEL_DEFCONFIG = "frag.cfg"
- 새로운 구성으로 Kernel을 다시 컴파일하고, mkimage로 uImage를 변환하여 SD에 저장한다.
$ bitbake -c cleansstate virtual/kernel
$ bitbake -f -c compile virtual/kernel
- 17단계(4.3 참조)와 같이 커널 이미지를 uImage로 변환한다.
- uImage Kernel을 SD 카드에 저장한다.
참고:
저장 장치의 위치는 다를 수 있다. SD 카드 위치를 가리키려면 of 파라미터를 조정한다.
dd if=uImage of=/dev/sdb bs=512 seek=50000100 conv=fsync
728x90
반응형
'NXP i.MX SoC Family > Linux Boot Time Optimizations for i.MX8M' 카테고리의 다른 글
AN13709 - Results (0) | 2023.05.23 |
---|---|
AN13709 - User space optimizations (0) | 2023.05.23 |
AN13709 - Bootloader optimizations (0) | 2023.05.16 |
AN13709 - Measurements (0) | 2023.05.16 |
AN13709 - General description (0) | 2023.05.15 |