machine
디렉토리만 있음raspberrypi4-64
를 local.conf에 설정하자.vc4graphics
가 있겠다.MACHINE_FEATURES | description |
---|---|
acpi | HW가 ACPI(x86/x86_64에서만)를 갖고 있다. |
alsa | HW가 ALSA 오디오 드라이버를 갖고 있다. |
apm | HW가 APM(또는 APM emulation)을 갖고 있다. |
bluetooth | HW가 통합된 블루투스를 갖고 있다. |
efi | EFI 로 부팅할 수 있게 지원한다. |
ext2 | HW가 HDD 또는 마이크로 드라이브를 갖고 있다. |
IRDA | HW가 IrDA를 지원한다. |
keyboard | HW가 키보드를 갖고 있다. |
pcbios | BIOS로 부팅 할 수 있게 지원한다. |
pci | HW가 PCI 버스를 갖고 있다. |
pcmcia | HW가 PCMCIA 또는 CompactFlash 소켓을 갖고 있다. |
phone | 모바일 폰(음성)을 지원한다. |
qvga | QVGA(320x240) 디스플레이를 지원한다. |
rtc | 리얼타임 클록을 지원한다. |
screen | HW가 화면을 갖고 있다. |
serial | HW가 시리얼(일반적으로 RS232)를 지원한다. |
touchscreen | HW가 터치스크린을 갖고있다. |
usbgadget | HW가 USB 가젯 드라이버와 호환된다. |
usbhost | HW가 USB 호스트와 호환된다. |
vfat | FAT 파일 시스템을 지원한다. |
wifi | HW가 통합된 와이파이를 갖고 있다. |
wic
도구는 Target 이미지 레이아웃을 정의하는데 도움을 준다.
wks
)를 기반으로 파티션된 이미지를 생성할 수 있다.wic
를 추가하고, WKS_FILE 변수에 .wks
파일을 명시한다.머신과 일치하는 레이아웃을 선택해야한다.
IMAGE_FSTYPES
+= "rpi-sdimg"를 사용한다.meta-raspberrypi/conf/machine/include/rpi-base.inc
local.conf
에 RPI_USE_U_BOOT = "1"
로 set할 것
meta-raspberrypi/conf/machine/raspberrypi4-64.conf
에 명시되어 있다.u-boot_%.bbappend
rpi-uboot-scr.bb
boot.cmd.in
local.conf
에 ENABLE_UART = "1"
로 set할 것
meta-raspberrypi/conf/machine/include/rpi-base.inc
core-image-base
에서 packagegroup-rpi-test
를 추가한 것packagegroup-rpi-test
core-image-sato
$ bitbake core-image-sato
local.conf
에MACHINE = "raspberrypi4-64"
DISTRO = "poky"
Variable | Description |
---|---|
IMAGE_ROOTFS_EXTRA_SPACE | 0 |
IMAGE_ROOTFS_SIZE | 65536 |
INITRAMFS_MAXSIZE | 131072 |
IMAGE_ROOTFS_ALIGNMENT | 4096 |
raspberrypi4-64.conf
local.conf
IMAGE_FSTYPES:append = " wic"
IMAGE_FEATURES:append = " debug-tweaks ssh-server-dropbear
IMAGE_INSTALL:append = " hello"
$ bitbake rpi-test-image
/boot
파티션에 uboot.env 파일이 없다.cmdline.txt
의 커널 커맨드가 저장된 후, uboot.env를 생성하고, 다시 fdt addr ${fdt_addr} && fdt getvalue bootargs /chosen bootargs
로 커널 커맨드를 읽고, fatload mmc 0:1 ${kernel_addr_r} Image
로 커널이미지 로드if test ! -e mmc 0:1 uboot.env; then saveenv; fi;
booti ${kernel_addr_r} - ${fdt_addr}
로 부트rootfs 지정
)하려면 1)uboot.env를 먼저 제거 후, 2)cmdline.txt
에서 rootfs
관련 커맨드 설정하고, 3)reboot
하면 적용된다.$ scp rpi-test-image-raspberrypi4-64.rootfs.ext3 root@<pi_ip>:/tmp
root $ cd /tmp
root $ dd if=./rpi-test-image-raspberrypi4-64.rootfs.ext3 of=/dev/mmcblk0p3 && sync
root $ rm /boot/uboot.env
root $ vi /boot/cmdline.txt
# ====== /boot/cmdline.txt ====== #
dwc_otg.lpm_enable=0 console=serial0,115200 root=/dev/mmcblk0p3 rootfstype=ext4 rootwait
# === 저장 후 종료 === #
root $ reboot
--> /dev/mmcblk0p3 로 rootfs로 되어 부팅된다.
dhyang-host at ~/workspace/poky/build/tmp ±(kirkstone) ✗ ❯ bitbake rpi-test-image -e | grep "^IMAGE"
IMAGE_BASENAME="rpi-test-image"
IMAGE_BOOT_FILES="bootfiles/* bcm2711-rpi-4-b.dtb bcm2711-rpi-400.dtb bcm2711-rpi-cm4.dtb overlay_map.dtb;overlays/overlay_map.dtb at86rf233.dtbo;overlays/at86rf233.dtbo disable-bt.dtbo;overlays/disable-bt.dtbo dwc2.dtbo;overlays/dwc2.dtbo gpio-ir.dtbo;overlays/gpio-ir.dtbo gpio-ir-tx.dtbo;overlays/gpio-ir-tx.dtbo gpio-key.dtbo;overlays/gpio-key.dtbo gpio-poweroff.dtbo;overlays/gpio-poweroff.dtbo gpio-shutdown.dtbo;overlays/gpio-shutdown.dtbo hifiberry-amp.dtbo;overlays/hifiberry-amp.dtbo hifiberry-dac.dtbo;overlays/hifiberry-dac.dtbo hifiberry-dacplus.dtbo;overlays/hifiberry-dacplus.dtbo hifiberry-digi.dtbo;overlays/hifiberry-digi.dtbo justboom-both.dtbo;overlays/justboom-both.dtbo justboom-dac.dtbo;overlays/justboom-dac.dtbo justboom-digi.dtbo;overlays/justboom-digi.dtbo i2c-gpio.dtbo;overlays/i2c-gpio.dtbo i2c-rtc.dtbo;overlays/i2c-rtc.dtbo imx219.dtbo;overlays/imx219.dtbo imx477.dtbo;overlays/imx477.dtbo iqaudio-dac.dtbo;overlays/iqaudio-dac.dtbo iqaudio-dacplus.dtbo;overlays/iqaudio-dacplus.dtbo mcp2515-can0.dtbo;overlays/mcp2515-can0.dtbo mcp2515-can1.dtbo;overlays/mcp2515-can1.dtbo mcp3008.dtbo;overlays/mcp3008.dtbo miniuart-bt.dtbo;overlays/miniuart-bt.dtbo pitft22.dtbo;overlays/pitft22.dtbo pitft28-capacitive.dtbo;overlays/pitft28-capacitive.dtbo pitft28-resistive.dtbo;overlays/pitft28-resistive.dtbo pitft35-resistive.dtbo;overlays/pitft35-resistive.dtbo pps-gpio.dtbo;overlays/pps-gpio.dtbo rpi-ft5406.dtbo;overlays/rpi-ft5406.dtbo rpi-poe.dtbo;overlays/rpi-poe.dtbo vc4-fkms-v3d.dtbo;overlays/vc4-fkms-v3d.dtbo vc4-fkms-v3d-pi4.dtbo;overlays/vc4-fkms-v3d-pi4.dtbo vc4-kms-v3d.dtbo;overlays/vc4-kms-v3d.dtbo vc4-kms-v3d-pi4.dtbo;overlays/vc4-kms-v3d-pi4.dtbo vc4-kms-dsi-7inch.dtbo;overlays/vc4-kms-dsi-7inch.dtbo w1-gpio.dtbo;overlays/w1-gpio.dtbo w1-gpio-pullup.dtbo;overlays/w1-gpio-pullup.dtbo wm8960-soundcard.dtbo;overlays/wm8960-soundcard.dtbo Image u-boot.bin;kernel8.img boot.scr "
IMAGE_CLASSES=" sdcard_image-rpi license_image"
IMAGE_CMD:cramfs="mkfs.cramfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.cramfs "
IMAGE_CMD:erofs="mkfs.erofs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.erofs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs"
IMAGE_CMD:erofs-lz4="mkfs.erofs -zlz4 /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.erofs-lz4 /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs"
IMAGE_CMD:erofs-lz4hc="mkfs.erofs -zlz4hc /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.erofs-lz4hc /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs"
IMAGE_CMD:ext2="oe_mkext234fs ext2 "
IMAGE_CMD:ext3="oe_mkext234fs ext3 "
IMAGE_CMD:ext4="oe_mkext234fs ext4 "
IMAGE_CMD:jffs2="mkfs.jffs2 --root=/home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs --faketime --output=/home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.jffs2 "
IMAGE_CMD:squashfs="mksquashfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.squashfs -noappend"
IMAGE_CMD:squashfs-lz4="mksquashfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.squashfs-lz4 -noappend -comp lz4"
IMAGE_CMD:squashfs-lzo="mksquashfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.squashfs-lzo -noappend -comp lzo"
IMAGE_CMD:squashfs-xz="mksquashfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.squashfs-xz -noappend -comp xz"
IMAGE_CMD:squashfs-zst="mksquashfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.squashfs-zst -noappend -comp zstd"
IMAGE_CMD:tar="tar --sort=name --format=posix --numeric-owner -cf /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.tar -C /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs . || [ \$? -eq 1 ]"
IMAGE_CMD:ubifs="mkfs.ubifs -r /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs -o /home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.ubifs \${MKUBIFS_ARGS}"
IMAGE_CMD:wic=" out=\"/home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614\" \
IMAGE_CMD_TAR="tar"
IMAGE_FEATURES="debug-tweaks splash"
IMAGE_FEATURES_CONFLICTS_overlayfs-etc="package-management"
IMAGE_FEATURES_REPLACES_ssh-server-openssh="ssh-server-dropbear"
IMAGE_FSTYPES=" wic"
IMAGE_FSTYPES_DEBUGFS="tar.gz"
IMAGE_GEN_DEBUGFS="0"
IMAGE_INSTALL=" packagegroup-core-boot packagegroup-base-extended packagegroup-rpi-test"
IMAGE_INSTALL_COMPLEMENTARY=""
IMAGE_INSTALL_DEBUGFS=""
IMAGE_LINGUAS="en-us en-gb"
IMAGE_LINK_NAME="rpi-test-image-raspberrypi4-64"
IMAGE_LOCALES_ARCHIVE="1"
IMAGE_MANIFEST="/home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/deploy-rpi-test-image-image-complete/rpi-test-image-raspberrypi4-64-20230116055614.rootfs.manifest"
IMAGE_NAME="rpi-test-image-raspberrypi4-64-20230116055614"
IMAGE_NAME_SUFFIX=".rootfs"
IMAGE_OVERHEAD_FACTOR="1.3"
IMAGE_PKGTYPE="ipk"
IMAGE_POSTPROCESS_COMMAND=""
IMAGE_QA_COMMANDS=" license_qa_dead_symlink"
IMAGE_ROOTFS="/home/dhyang/workspace/poky/build/tmp/work/raspberrypi4_64-poky-linux/rpi-test-image/1.0-r0/rootfs"
IMAGE_ROOTFS_ALIGNMENT="4096"
IMAGE_ROOTFS_EXTRA_SPACE="0"
IMAGE_ROOTFS_SIZE="65536"
IMAGE_TYPEDEP:rpi-sdimg="ext3"
IMAGE_TYPEDEP:ubi="ubifs"
IMAGE_TYPES=" jffs2 jffs2.sum cramfs ext2 ext2.gz ext2.bz2 ext2.lzma ext3 ext3.gz ext4 ext4.gz btrfs squashfs squashfs-xz squashfs-lzo squashfs-lz4 squashfs-zst ubi ubifs multiubi tar tar.gz tar.bz2 tar.xz tar.lz4 tar.zst cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 cpio.zst wic wic.gz wic.bz2 wic.lzma wic.zst container f2fs erofs erofs-lz4 erofs-lz4hc "
IMAGE_TYPES_MASKED=""
IMAGE_VERSION_SUFFIX="-20230116055614"
IMAGE_CMD:btrfs() {
IMAGE_CMD:cpio() {
IMAGE_CMD:f2fs() {
IMAGE_CMD:multiubi() {
IMAGE_CMD:ubi() {
IMAGE_PREPROCESS_COMMAND() {
openembedded-core/meta
에서 제공하는 gstreamer
gstreamer1.0
_1.20.4.bb
gstreamer1.0
-plugins-
base
_1.20.4.bb
: 커뮤니티에서 충분히 지원받는 플러그인의 기본 집합gstreamer1.0
-plugins-
good
_1.20.4.bb
: 커뮤니티에 지원을 받고 라이선스 문제도 없는 플러그인gstreamer1.0
-plugins-
bad
_1.20.4.bb
: 테스트가 제대로 되지 않은 플러그인gstreamer1.0
-plugins-
ugly
_1.20.4.bb
: 잘 지원되지만 대부분 리버스 엔지니어링 된 것. 배포시 신중해야한다.ugly
플러그인을 사용하려면, LICENSE_FLAGS_WHITELIST = "commercial"
이 추가되어야한다.gstreamer1.0
-meta-base.bb
gstreamer1.0
-plugins-packaging.inc
packagegroup-core-x11-sato.bb
를 보면, GSTEXAMPLES
= "gst-examples"
가 주어져있는데, core-image-sato
를 MACHINE = "raspberrypi4-64"
로 넣고 빌드해서 이미지를 올려보자.gst-examples
$ gtk-play
$ gst-inspect1.0
$ gst-instpect1.0 udpsrc
v4l2src
엘리먼트를 가지고 있지 않다.v4l2src
엘리먼트를 포함했던 패키지 그룹은 http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/ 에서 볼 수 있다.gstreamer1.0
-plugins-
good
_1.20.4.bb
를 보자.gstreamer1.0-plugins-good_1.20.4.bb
에서 직접 추가
PACKAGECONFIG += "libv4l2"
매우 비추하는 방법
gstreamer1.0-plugins-good_1.20.4.bbappend
에서 추가
PACKAGECONFIG += "libv4l2"
매우 추천
local.conf
에 추가
PACKAGECONFIG:append:pn-gstreamer1.0-plugins-good = "libv4l2"
v4l-utils
에 의존성이 있다.meta-openembedded/meta-oe
에 있다.$ gst-lunch-1.0 v4l2src device=/dev/video0 ! 'video/x-rawyuv,width=320,height240' ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink host=192.168.1.5 port=5000
gst-launch-1.0
명령을 사용해 카메라 드라이버로 주어진 인자와 함께 요청해서 구매한 센서가 지원하는 최대치를 알아야한다. 카메라가 720p는 지원하지만 1080p는 지원하지 않으면, 가로 1920 세로 1080의 요청은 할 수 없다. 그것은 간단한 에러를 주거나 일부 경우에는 드라이버 내 구현 의존성에 의해 그것 조차 없을 수 있다. 또한 스트리밍 품질을 높이기 위해 카메라가 지원하는 초당 프레임 수도 알아야한다.gst-launch-1.0
툴은 엘리먼트의 파이프라인을 실행하는데 사용될 수 있다. 앞의 파이프라인에서 본 것처럼, 모든 엘리먼트들은 감탄사 기호(!)로 분리된다.Verbosity
)는 -v
옵션을 사용한다.-vv
-vvv
v4l2src
: 비디오 캡처를 위한 소스 플러그인video/x-raw-yuv,width=320,height=240
: 입력 비디오 유형과 해상도를 설정한다.x264enc
: H.264 비디오 인코더이다. 낮은 비트레이트에서 좋은 품질을 얻기 위해 선택한다. h264가 ugly 플러그인 집합이기 때문에 사용하기를 원하지 않는다면 다른 비디오 코덱(Theora, VP8 등)을 선택할 수 있다.rtph264pay
: RTP payload를 추가하는 플러그인udpsink
: UDP 싱크 엘리먼트이다. 데이터를 수신하기를 원하는 호스트에 사용할 수 있다. 또한 여러 클라이언트가 있으면, 멀티 캐스트로도 사용할 수 있다.nodrop=1
과 함께 로드된다.서버 측면에서 gstreamer 파이프라인을 실행 했다. 이 파이프라인은 웹캠 데이터를 캡쳐, 인코딩, RPT 헤더를 적용, 클라이언트에 전송을 한다. udpsink
의 호스트 옵션에 IP를 입력했다. 이제 클라이언트에서 비디오를 재생할 수 있는 필요한 두가지 방법에 대해 알아본다.
.sdp
파일을 생성할 필요가 있다.test.sdp:
v=0
mvideo 5000 RTP/AVP 96
c=IN IP4 192.168.1.5
a=rtpmap:96 H264/90000
VLC 플레이어를 사용하여 이 파일은 열면, 서버에서 캡처된 웹캠의 결과물을 얻을 수 있어야한다. 앞에서는 서버에서 파이프라인을 실행했다. 이 파이프라인은 192.168.1.5
머신에서 5000번 포트 번호를 옵션으로 사용하여 UDP 패킷을 전송한다. VLC는 포트, IP, 다른 비디오 설정이 있는 이 SDP 파일 정보를 이용하여 비디오를 보여준다.$ gst-launch-1.0 udpsrc port=5000 ! rtph264depay ! x264dec ! autovideosink
서버에서 실행하는 파이프라인에서 udpsink
를 명시 했기 때문에 udp
엘리먼트에 IP를 명시할 필요가 없다. 다음 두 파이프라인은 선택된 인코더/디코더와 pay/depay
엘리먼트의 여러 조합을 가질 수 있다. 여기서는 h264
와 RTP만 사용한다. 다른 옵션 또한 시도할 수 있다. 특정 하드웨어를 사용하거나 비디오 디스플레이 개발을 위해 일부 수정된 엘리먼트를 사용하지 않는 한 autovideosink
에는 어떠한 수정도 하지 않는다.linux-yocto
인 욕토 프로젝트 기본 커널을 사용한 경우 멀티미디어 애플리케이션을 위해 필요한 커널 설정이 되어있지 않을 수 있다.usb 2-1: new high-speed USB device number 2 using musb-hdrc
v4l2
는 빌드에서 빠진 UVC
(USB Video Class) 드라이버를 사용한다. 문제 해결을 위해 다음 커널 설정을 활성화한다. 혹은 tmp/커널/git/.config
에 있는 .config
파일에서 그 설정을 찾을 수 있다.CONFIG_MEDIA_CONTROLLER=m
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_V4L2=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_CONTIG=m
CONFIG_VIDEOBUF2_CORE=m
CONFIG_VIDEOBUF2_MEMOPS=m
CONFIG_VIDEOBUF2_DMA_CONTIG=m
CONFIG_VIDEOBUF2_VMALLOC=m
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
이 설정을 활성화하면 웹캠은 성공적으로 탐지될 것이다. 설정을 활성화하기 위한 방법은 이외에도 여러 가지가 있다.
다음은 설정 방법이다.
다음 명령을 사용하여 menuconfig
태스크를 실행할 수 있다.
$ bitbake -c menuconfig virtual/kernel
그러면 GUI로 이 설정들을 활성화 할 수 있다.
단순히 설정 내용을 .config
파일에 복사한다.
다음은 설정한 부분을 사용하는 방법이다.
layer/recipes-kernel/linux/kernel-name_version.bbappend
에 커널을 위한 bbappend
파일을 생성한다.
test.cfg
와 같이 <name>.cfg
파일에 모든 설정 내용을 추가하고 layer/recipes-kernel/linux/files/
에 cfg
파일을 위치시킨다.
bbappend 파일에 다음 두줄을 추가한다.
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append = " test.cfg"
레퍼런스 목적으로 이 파일에 설정을 추가한다. TI 커널을 사용하면 기본적으로 이것들이 활성화될 것이다.
poky
를 수정해서 사용하자.DISTRO_FEATURES | description |
---|---|
alsa | ALSA를 지원한다(이용 가능하다면 OSS호환 커널 모듈이 설치돼 있다.) |
api-documentation | 레시피를 빌드하는 동안 API 문서를 생성한다. |
bluetooth | 블루투스를 지원한다(통합된 블루투스만 해당). |
bluz5 | 핵심 블루투스 레이어와 프로토콜 지원을 제공하는 BlueZ 버전 5를 포함한다. |
cramsfs | CramFS를 지원한다. |
directfb | DirectFB를 지원한다. |
ext2 | 파일을 저장하게 내장 하드/마이크로 드라이버를 가진 디바이스를 지원하기 위한 도구를 포함한다.(플래시만 지원하는 디바이스 대신). |
ipsec | IPSec를 지원한다. |
ipv6 | IPv6를 지원한다. |
irda | IrDA를 지원한다. |
keyboard | 키보드를 지원한다. 예를들어 keymap 이 부팅하는 동안 로딩된다. |
ldconfig | Target에서 ldconfig 와 ld.so.conf 를 지원한다. |
nfs | NFS 클라이언트를 지원한다.(디바이스에서 NFS를 마운트하기 위해) |
opengl | 2,3차원 그래픽을 렌더링하기 위해 사용되는 크로스언어, 멀티 플랫폼 애플리케이션 프로그래밍 인터페이스를 지원하는 OpenGL을 지원한다. |
pci | pci 버스를 지원한다. |
pcmcia | PCMCIA/CompactFlasg를 지원한다. |
ppp | PPP 다이얼업을 지원한다. |
ptest | 개별 레시피에서 지원하는 패키지 테스트를 빌드하게 한다. |
smbfs | SMB 네트워크 클라이언트를 지원한다. |
systemd | 서비스를 병렬로 시작하는 systemd를 사용 |
usbgadget | USB 가젯 디바이스를 지원한다(USB 네트워킹/시리얼/저장장치를 위해). |
usbhost | USB 호스트를 지원한다(외부 키보드, 마우스, 저장장치, 네트워크 등을 연결할 수 있게). |
wayland | Wayland 디스플레이 서버 프로토콜과 라이브러리를 지원한다. |
wifi | 와이파이를 지원한다(통합된 와이파이만 해당). |
x11 | X 서버와 라이브러리를 포함한다. |
usrmerge | /bin -> /usr/bin /lib -> /usr/lib 로 심볼릭링크 시킨다. |
DISTRO_FEATURES:append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
VIRTUAL-RUNTIME_syslog = ""
VIRTUAL-RUNTIME_base-utils-syslog = ""
QPA | Description |
---|---|
DirectFP(FrameBuffer) | - |
elgfs | opengl사용. HW 가속 (컴포지터 X 가능) |
LinuxFB(FrameBuffer) | 완전 SW |
VNC | |
Mir Client |
qtbase_%.bbappend
에서 뭘쓸지 선택하면 됨export QT_QPA_PLATFORM=eglfs
profile.d
내 파일을 실행하여 전역 환경변수가 먹힌다.meta-qt5/recipes-qt/examples/
cinematicexperience_1.0.bb
IMAGE_INSTALL
+= "cinetmaticexperience"
/usr/share/cinetamicexperience-1.0/QT5_CinematicExperience
경로에 파일을 생성한다.$ mkdir b2qt
$ cd b2qt
$ repo init -u git://code.qt.io/yocto/boot2qt-manifest -m v6.2.3.xml
$ repo sync
BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE')) + '/../..')}"
BBLAYERS ?= " \
${BSPDIR}/sources/poky/meta \
${BSPDIR}/sources/poky/meta-poky \
${BSPDIR}/sources/meta-raspberrypi \
${BSPDIR}/sources/meta-openembedded/meta-oe \
${BSPDIR}/sources/meta-openembedded/meta-python \
${BSPDIR}/sources/meta-openembedded/meta-networking \
${BSPDIR}/sources/meta-openembedded/meta-initramfs \
${BSPDIR}/sources/meta-openembedded/meta-multimedia \
${BSPDIR}/sources/meta-python2 \
${BSPDIR}/sources/meta-boot2qt/meta-boot2qt \
${BSPDIR}/sources/meta-boot2qt/meta-boot2qt-distro \
${BSPDIR}/sources/meta-mingw \
${BSPDIR}/sources/meta-qt6 \
"
MACHINE = "raspberrypi4-64"
MACHINE_HOSTNAME = "b2qt-${MACHINE}"
DISTRO = "b2qt"
PACKAGE_CLASSES = "package_ipk"
include conf/distro/include/${MACHINE}.pre.inc
QT_SDK_PATH = ""
LICENSE_FLAGS_WHITELIST = "commercial"
ACCEPT_FSL_EULA = "1"
INHERIT += "rm_work"
INHERIT += "buildstats buildstats-summary"
INHERIT += "internal-build"
USER_CLASSES ?= "buildstats image-mklibs"
meta-qt6
의 git branch를 qt/6.2.4
로 변경하자.$ bitbake b2qt-embedded-qt6-image
VARIABLE | VALUE |
---|---|
DISTRO_FEATURES | acl alsa argp bluetooth ext2 ipv4 ipv6 largefile usbgadget usbhost wifi xattr nfs vfat largefile opengl ptest multiarch wayland vulkan gstreamer webengine systemd pam ld-is-gold systemd pulseaudio gobject-introspection-data ldconfig |
DISTRO_FEATURES_BACKFILL | pulseaudio sysvinit gobject-introspection-data ldconfig |
DISTRO_FEATURES_BACKFILL_CONSIDERED | sysvinit |
DISTRO_FEATURES_DEFAULT | acl alsa argp bluetooth ext2 ipv4 ipv6 largefile usbgadget usbhost wifi xattr nfs vfat |
DISTRO_FEATURES_FILTER_NATIVE | api-documentation opengl |
DISTRO_FEATURES_FILTER_NATIVESDK | api-documentation opengl wayland |
DISTRO_FEATURES_NATIVE | x11 ipv6 xattr |
DISTRO_FEATURES_NATIVESDK | x11 |
IMAGE_FEATURES
VARIABLE | VALUE |
---|---|
IMAGE_FEATURES | debug-tweaks hwcodes package-management ssh-server-dropbear tools-debug tools-profile |
IMAGE_FEATURES_REPLACE_ssh-server-openssh | ssh-server-dropbear |
MACHINE_FEATURES
VARIABLE | VALUE |
---|---|
MACHINE_FEATURES | pci apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio vc4graphics pitft qemu-usermode |
MACHINE_FEATURES_BACKFILL | rtc qemu-usermode |
MACHINE_FEATURES_BACKFILL_CONSIDERED | rtc |
MACHINE_EXTRA_INSTALL | |
MACHINE_EXTRA_RDEPENDS | |
MACHINE_EXTRA_RRECOMMENDS | linux-firmware-rpidistro-bcm43455 bluez-firmware-rpidistro-bcm4345c0-hcd kernel-modules udev-rules-rpi |
MACHINE_ESSENTIAL_EXTRA_RDEPENDS | |
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS |
./conf
├── bitbake.conf
├── ccache.conf
├── distro
│ ├── b2qt.conf
│ ├── defaultsetup.conf
│ ├── include
│ │ ├── cve-extra-exclusions.inc
│ │ ├── default-distrovars.inc
│ │ ├── default-providers.inc
│ │ ├── default-versions.inc
│ │ ├── distro_alias.inc
│ │ ├── fsl.inc
│ │ ├── gcsections.inc
│ │ ├── init-manager-mdev-busybox.inc
│ │ ├── init-manager-none.inc
│ │ ├── init-manager-systemd.inc
│ │ ├── init-manager-sysvinit.inc
│ │ ├── intel.inc
│ │ ├── jetson.inc
│ │ ├── lto.inc
│ │ ├── machine-settings.inc
│ │ ├── maintainers.inc
│ │ ├── no-gpl3.inc
│ │ ├── no-static-libs.inc
│ │ ├── poky-distro-alt-test-config.inc
│ │ ├── poky-floating-revisions.inc
│ │ ├── poky-world-exclude.inc
│ │ ├── preferred-providers-mingw32.inc
│ │ ├── ptest-packagelists.inc
│ │ ├── python2-target-recipes-blacklist.inc
│ │ ├── qemu.inc
│ │ ├── raspberrypi.inc
│ │ ├── security_flags.inc
│ │ ├── tclibc-baremetal.inc
│ │ ├── tclibc-glibc.inc
│ │ ├── tclibc-musl.inc
│ │ ├── tclibc-newlib.inc
│ │ ├── tcmode-default.inc
│ │ ├── toradex.inc
│ │ ├── uninative-flags.inc
│ │ └── yocto-uninative.inc
│ ├── poky-altcfg.conf
│ ├── poky-bleeding.conf
│ ├── poky-tiny.conf
│ └── poky.conf
├── documentation.conf
├── image-uefi.conf
├── layer.conf
├── licenses.conf
├── local.conf.sample
├── local.conf.sample.extended
├── machine
│ ├── include
│ │ ├── README
│ │ ├── arm
│ │ │ ├── README
│ │ │ ├── arch-arm.inc
...
│ │ ├── riscv
│ │ │ ├── arch-riscv.inc
│ │ │ ├── qemuriscv.inc
│ │ │ └── tune-riscv.inc
│ │ ├── rpi-base.inc ←─────────────┬──────────────┐
rpi-base.inc
MACHINE_FEATURES
설정 및 vc4graphics
분기│ │ ├── rpi-default-providers.inc ←──┤ │
virtual/egl
= mesa
virgual/libgles2
= mesa
virgual/libgl
= mesa
virgual/mesa
= mesa
virgual/libgbm
= mesa
vc4graphics
사용 시, mesa
, │ │ ├── rpi-default-settings.inc ←──┤ │
│ │ ├── rpi-default-versions.inc ←──┘ │
│ │ ├── sh │
│ │ │ ├── README │
│ │ │ └── arch-sh.inc │
│ │ ├── soc-family.inc │
│ │ ├── tune-arm1136jf-s.inc │
... │
│ │ ├── tune-cortexa7.inc │
│ │ ├── tune-cortexa72.inc ←───────────────────────┤
│ │ ├── tune-cortexa73-cortexa53.inc │
│ │ ├── tune-cortexa8.inc │
│ │ ├── tune-cortexa9.inc │
... │
│ ├── raspberrypi0-wifi.conf │
│ ├── raspberrypi0.conf │
│ ├── raspberrypi2.conf │
│ ├── raspberrypi3-64.conf │
│ ├── raspberrypi3.conf │
│ ├── raspberrypi4-64.conf ─────────────────────────┘
raspberrypi4-64.conf
│ └── raspberrypi4.conf
├── machine-sdk
meta-boot2qt-distro/recipes-qt/qt6/qtbase_git.bbappend
meta-boot2qt-distro
/dynamic-layers/raspberrypi
/recipes-qt/qt6/qtbase_git.bbappend
vc4graphics
일 때, kms
!