yocto wic partition

markyang92·2023년 1월 12일
0

yocto

목록 보기
50/53
post-thumbnail

wic

  • 부팅 가능한 이미지 생성을 위해 Yocto는 wic를 제공한다.
  • wic 툴은 재료로 .wks(oe 킥 스타트) 파일을 사용한다.
$ wic list images
$ wic list source-plugins
$ wic create <kickstart_file> [option]
  • [option]에 두 가지 선택 모드를 제공한다.
    • Raw 모드: wic 명령어에 킥스타트 파일이 요구하는 매개 변수를 지정해야한다.
    • Cooked 모드: 옵션을 선택하기 위해 빌드 환경 설정의 현재 MACHINE 설정을 사용한다.

Cooked 모드로 이미지 생성

  • Cooked 모드에서 wic를 이용해 이미지를 생성하기 위해서는 두 개의 매개변수만 있으면 된다.
$ wic create <kickstart_file> -e <image_target> [options]
  • <kickstart_file>: 오픈임베디드 킥 스타트 파일이다. wic와 함꼐 제공되는 킥 스타트 파일 중 하나를 사용할 수 있고 직접 제공할 수도 있다.
  • <image_target>: core-image-basecore-image-sato 또는 자신의 미지와 같은 빌드 시스템 이미지 타깃의 이름이다.
  • 일반적으로 이외의 옵션은 wic가 빌드 환경으로부터 결정한다. local.confMACHINE설정이 특히 그렇다.
  • Cooked 모드에서는 다음과 같은 추가적 옵션을 이용할 수 있다.
    • -o PATH, --outdir=PATH: 최종 이미지 위치에 대한 경로
    • -c COMPRESSOR, --compress-with=COMPRESSOR: 최종 이미지를 압축하기 위해 사용할 압축 유틸리티. wicgzip, bzip2, xz등을 COMPRESSOR로 지원한다.
    • -f IMAGE, --build-rootfs=IMAGE: 매체 이미지를 생성하기 전에 비트베이크 IMAGE를 사용해 루트 파일 시스템 이미지를 빌드한다.
    • -D, --debug: 생성 과정에 대한 상세한 디버그 정보를 보여준다.
    • -s, --skip-build-check: 빌드 설정이 올바르게 공급됐는지 확인하는 간단한 온전성 검사기로 빌드 검사 단계를 건너 뛴다.

예를 들어, 다음 명령은 부팅 가능한 매체에 직접 전송 가능한 EFI BIOS를 이용해 부팅 이미지를 생성한다.

$ wic create bootimg-efi -e core-image-base
  • 여기서 한 가지 알아둘 것은 킥 스타트 파일을 사용해 wic로 이미지를 생성할 수 있다는 것이 곧 타깃 시스템에서 이미지가 자동으로 부팅됨을 의미하지는 않는다. 타깃 시스템에 일치하는 올바른 킥 스타트 파일 선택을 확인해야 한다. 앞서 다룬 예제에서 머신 설정이 MACHINE = "beaglebone"인 경우, wic는 EFI를 위한 부트 파티션 이미지를 생성한다. 그러나 비글본이 EFI BIOS를 가지고 있지는 않으므로, 비글본 보드에서 부팅하지는 않는다.

Raw 모드로 이미지 생성

  • Raw 모드에서 wic를 사용하는 경우, 명령어에 필수 매개변수를 제공해야한다.
$ wic create <kickstart_file> [option]
  • 여기서 <kickstart_file>은 오픈임베디드 킥스타트 파일이고, wic 또는 자체적으로 생성해 제공하는 킥스타트 파일 중 하나가 된다.
  • 옵션은 아래와 같다.
    • -r ROOTFSDIR, --rootfs-dir=ROOTFSDIR: 개발 호스트 타깃을 위한 루트 파일 시스템 경로
    • -b BOOTIMGDIR, --bootimg-dir=BOOTIMGDIR: EFI나 syslinux 디렉토리 또는 U-Boot 파일 같은 부트로더 결과물(artifacts)이 있는 경로
    • -k KERNELDIR, --kernel-dir=KERNEL_DIR: 리눅스 커널 경로
    • -n NATIVE_SYSROOT, --native-sysroot=NATIVE_SYSROOT: parted나 DOS 파일 시스템 도구 등과 같은 기본적인 도구에 대한 경로. 오픈임베디드 빌드 시스템에 의해 빌드된 도구가 될 수도 있고 개발 호스트에 의해 제공된 도구가 될 수도 있다.
    • -o PATH, --outdir=PATH: 최종 이미지 위치에 대한 경로
    • -c COMPRESSOR, --compress-with=COMPRESSOR: 최종 이미지를 압축하기 위한 압축 유틸리티. wicgzip, bzip2, xz등을 COMPRESSOR로 지원한다.
    • -f IMAGE, --build-rootfs=IMAGE: 매체 이미지를 생성하기 전에 비트베이크 IMAGE를 사용해 루트 파일시스템을 빌드한다.
    • -D, --debug: 생성 과정에 대한 상세 디버그 정보를 보여준다. 정확한 명령 순서를 보여주고 문제 해결에 도움을 준다.

  • 가장 간단한 형태로, 다음과 같이 Raw 모드에서 wic를 호출해야한다.
$ wic create bootimg-efi -r <ROOTFSDIR> -b <BOOTIMGDIR> -k <KERNELDIR>
  • 예제는 개발 호스트에 파일 시스템 도구가 설치되어 있다고 가정한다.
  • -e <image_target> 옵션을 통해 Cooked 모드를 사용하는 경우, wic는 자동으로 bitbake -e <image_target>을 실행함으로써 빌드 환경의 여러 옵션을 결정한다.
    • -r, --rootfs-dir: IMAGE_ROOTS
    • -k, --kernel-dir: STAGING_KERNEL_DIR
    • -n, --native-sysroot: STAGING_DIR_NATIVE
    • -b, --boting-dir: 비어있음. 여러 부트로더를 위한 소스 플러그인이 이것을 결정할 필요가 있다.
    • -f (--build-rootfs): 옵션을 사용하지 않는 경우, Raw모드에 빌드 환경을 제공하지 않아도 된다.

킥스타트 파일

  • 다음의 명령은 이용가능한 킥스타트 파일 목록을 제공한다.
$ wic list images
  • 실제 킥스타트 파일은 poky/scripts/lib/wic/canned-wks에 위치해 있다.
  • 아래 킥스타트파일은 vfat 부트 파티션과 비글본에 적합한 SD카드의 ext4루트 파일시스템 파티션으로 이미지를 생성하기 위한 킥스타트 파일을 보여준다.
part /boot --source bootimg-partition --ondisk mmcblk --fstype=vfat --label boot --active --align 4 --size 16
part / --source rootfs --ondisk mmcblk --fstype=ext4 --label root --align 4

part 지시자

part [mntpoint] [option]
  • part는 파티션을 생성하기 위해 wic로 전달
  • mntpoint: 파티션의 마운트 부분이다.
    • /boot: 부트 파티션
    • /: /에 마운트 (/usr, /opt같이 파티션 마운트 지점 경로를 설정해도 된다.)
    • swap : 스왑 파티션
  • source 매개변수는 파티션을 생성하는 데 사용한 소스 플러그인. 데이터 소스를 결정한다. 이 옵션을 설정하지 않으면 wic는 빈 파티션을 생성하고, 적어도 -size를 제공해야한다. wic가 파일시스템으로 파티션을 포맷하려면 -fstype을 제공해야한다.
    • bootimg-partition은 부트 파티션
    • rootfs는 루트 파일 시스템 파티션을 명시한다. wic-r (--rotfs-dir) 매개 변수를 제공해 충분한 공간에 rootfs를 위해 필요한 가능한 크게 파티션을 생성한다. 파일 시스템 타입을 결정하기 위해 -fstype도 제공하자.
  • --size: 최소 파티션 크기 MB. --source를 사용하지 않는 경우 이 매개 변수를 제공해야한다. 루트 파일 시스템의 내용으로 결정되는 것 보다 더 큰 파티션을 셋업하고 싶다면 --source 매개변수를 제공해야한다. (-extra-space-overhead-factor도 확인해야함).
  • --ondisk: 특정 장치에 파티션을 생성한다.
  • --ondrive: --ondisk와 같다.
  • --fstype: 파티션을 포맷하는 파일시스템 타입. 지원되는 파일 시스템 타입은 ext2, ext3, ext4, btrfs, squashfs, swap이다.
  • --fsoptions: /etc/fstab에 작성될 문자열 옵션. 이문자열은 따옴표로 둘러싸야한다. 매개변수를 지정하지 않으면 "defaults"로 설정된다.
  • --label: 파티션 레이블
  • --active: 파티션을 부트 파티션으로 표시한다.
  • --align: n KB 경계에서 파티션을 시작한다.
  • --no-table: 파티션에 추가 공간(MB)을 추가한다. 기본값은 10MB이다.
  • --overhead-factor: -size에 의해 제공되거나 -r (--rootfs-dir)로 명시된 루트 파일 시스템 디렉토리의 내용으로부터 결정되는 요인으로 파티션의 크기를 증가시킨다(곱한다). 이 요인은 1보다 크거나 같아야한다. 기본값은 1.3 이다.
  • --part-type: GUID 파티션 테이블(GPT)와 함께 사용할 파티션 타입을 위한 GUID(전역 고유 식별자)를 지정한다.
  • --use-uuid: 파티션을 위한 임의 리눅스 UUID를 생성한다.
  • --uuid: 파티션을 위한 리눅스 UUID를 생성한다.
  • --extra-space: wic-specific option, 파티션의 내용으로 채운 공간 이후에 추가적인 공간을 추가한다. 최종 크기는 --size 옵션에서 지정한 크기를 초과할 수 있습니다. 기본값은 10MB

bootloader 지시자

  • bootloader 지시자는 부트로더를 위한 설정을 제공한다.
bootloader --timeout=<timeout_in_seconds> --append="<kernel_parameters>
  • --timeout: 부트로더가 기본 옵션을 부팅하기 전에 대기하는 초 단위 시간. 이 매개 변수는 부트옵션 목록을 사용자에게 보여주는 부트로더와 사용된다.
  • --append: 리눅스 커널에 전달되는 따옵표로 둘러싸인 매개변수 문자열

IMAGE_FSTYPES

  • 현재 사용중인 IMAGE 구성방법
$ bitbake -e | gerp "^IMAGE_FSTYPES="
IMAGE_FSTYPES="wic.bmap wic.bz2 tar.bz2"
  • wic.bmap: bmap은 XML로 bmaptool을 사용하여 write, dd 가능
  • wic.bz2로 wic로 구성되고 압축된다.

WKS_FILE

  • meta-raspberrypi 사용시
$ bitbake -e | grep ^WKS_FILE=    // 현재 사용중인 WKS FILE 검색 
WKS_FILE="imx-uboot-bootpart.wks.in"
  • wks: kickstart file$ wic list images를 하면 각 wksshort-description 정보를 확인가능
  • wks.in: 내부에서 사용되는 파일로 아래와 같이 kickstart file로 보여지지 않는다.

레거시 PC BIOS 킥스타트 파일

# pcbios 다이렉트 디스크 이미지 생성
part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
bootloader --timeout=0 --append="rootwait rootfstype=ext4 video=vesafb vga=0x318 console=tty0"
  • 이 예제에서 부트 파티션은 bootimg-pcbios 소스 플러그인을 사용해 SYSLINUX 부트 파티션을 생성한다.
  • bootloader 지시자는 즉각(--timeout=0) 커널을 부팅하고 리눅스 커널에 append를 해서 매개변수를 전달하도록 SYSLINUX에 전한다.

아래 리스트는 EFI BIOS로 시스템 부팅 이미지를 생성하기 위한 킥스타트 파일 예제를 보여준다.

# EFI 디스크 이미지 생성
part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label msdos --active --align 1024
part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024
part swap --ondisk sda --size 44 --label swap1 --fstype=swap
bootloader --timeout=10 --append="rootwait rootfstype=ext4 console=ttyPCH0,115200 console=tty0 vmalloc=256MB snd-hda-intel.enable_msi=0"
  • 이 예제에서 부트 파티션은 EFI GRUB 부트로더를 사용하는 bootimg-efi 소스 플러그인을 사용해 생성된다. 부트와 루트 파일시스템 파티션뿐만 아니라 스왑 파티션이 생성된다. 부트로더 지시자는 리눅스 커널이 부팅하기 전 10초(timeout=10) 동안 기달고 리눅스 커널에 append를 해서 매개변수를 전달하도록 GRUB에 전한다.

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글