wic
wic
를 제공한다.wic
툴은 재료로 .wks
(oe 킥 스타트) 파일을 사용한다.$ wic list images
$ wic list source-plugins
$ wic create <kickstart_file> [option]
[option]
에 두 가지 선택 모드를 제공한다.wic
명령어에 킥스타트 파일이 요구하는 매개 변수를 지정해야한다.MACHINE
설정을 사용한다.Cooked
모드로 이미지 생성wic
를 이용해 이미지를 생성하기 위해서는 두 개의 매개변수만 있으면 된다.$ wic create <kickstart_file> -e <image_target> [options]
<kickstart_file>
: 오픈임베디드 킥 스타트 파일이다. wic
와 함꼐 제공되는 킥 스타트 파일 중 하나를 사용할 수 있고 직접 제공할 수도 있다.<image_target>
: core-image-base
나 core-image-sato
또는 자신의 미지와 같은 빌드 시스템 이미지 타깃의 이름이다.wic
가 빌드 환경으로부터 결정한다. local.conf
의 MACHINE설정이 특히 그렇다.-o PATH, --outdir=PATH
: 최종 이미지 위치에 대한 경로-c COMPRESSOR, --compress-with=COMPRESSOR
: 최종 이미지를 압축하기 위해 사용할 압축 유틸리티. wic
는 gzip
, 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
모드로 이미지 생성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
: 최종 이미지를 압축하기 위한 압축 유틸리티. wic
는 gzip
, 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
로 전달/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
옵션에서 지정한 크기를 초과할 수 있습니다. 기본값은 10MBbootloader
지시자bootloader
지시자는 부트로더를 위한 설정을 제공한다.bootloader --timeout=<timeout_in_seconds> --append="<kernel_parameters>
--timeout
: 부트로더가 기본 옵션을 부팅하기 전에 대기하는 초 단위 시간. 이 매개 변수는 부트옵션 목록을 사용자에게 보여주는 부트로더와 사용된다.--append
: 리눅스 커널에 전달되는 따옵표로 둘러싸인 매개변수 문자열IMAGE_FSTYPES
$ 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
$ bitbake -e | grep ^WKS_FILE= // 현재 사용중인 WKS FILE 검색
WKS_FILE="imx-uboot-bootpart.wks.in"
wks
: kickstart file
로 $ wic list images
를 하면 각 wks
의 short-description
정보를 확인가능wks.in
: 내부에서 사용되는 파일로 아래와 같이 kickstart file
로 보여지지 않는다.# 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"
bootimg-efi
소스 플러그인을 사용해 생성된다. 부트와 루트 파일시스템 파티션뿐만 아니라 스왑 파티션이 생성된다. 부트로더 지시자는 리눅스 커널이 부팅하기 전 10초(timeout=10
) 동안 기달고 리눅스 커널에 append
를 해서 매개변수를 전달하도록 GRUB에 전한다.