【Yocto】VLCでRTP/RTSP受信(Live555)
YoctoビルドしたLinuxのVLCメディアプレイヤーでネットワークカメラ映像をRTSPで受信しようとしたところ、
satip stream error: Failed to setup RTSP session
というエラーで表示できませんでした。
VLCのRTP/RTSPはLIVE555を使います。
vlcのレシピファイルではデフォルトのビルドオプションで
--enable-live555
が指定されるので、RTP/RTSPが使えるはずなのですが...。
vlcのconfig.logを調べたところ、下記エラーがあり、LIVE555を組み込めていませんでした。
configure:30522: checking for main in -lliveMedia (省略) (.text+0x5dc45): undefined reference to `SSL_write' (省略) configure:30554: result: no
ネットで調べたところ下記情報がありました。
この中の下記パッチを適用することで、LIVE555を組み込んでビルドでき、ネットワークカメラ映像をRTP/RTSPで受信、表示できました。
【iPhone】USBメモリーのファイルシステム
iPhoneで写真や動画をたくさん撮って、ストレージの空き容量が少なくなって困ってる方は多数いらっしゃると思います。
そんなときUSBメモリーへ移す方法があります。
iPhoneとUSBメモリーの接続にはアダプター(コネクター変換ケーブル)が必要です。
どららも私の環境で動作確認済です。
- iPhone 14シリーズ以前用
- iPhone 15シリーズ
USBメモリーへ移すまたはコピーする際、サイズの大きい動画は注意が必要です。
USBメモリーの購入時のファイルシステムはほとんどFATです。FATはその仕組み上、一ファイルの最大サイズは約4GBです。
なので、このサイズを超える動画をコピーしようとすると、「操作を完了できませんでした」というエラーが表示されコピーできません。
この対処として、USBメモリーのファイルシステムを変更する必要があります。
それにはPCが必要です。Windows機ならexFATでフォーマットします。
iPhoneが対応しているファイルシステムはAPFS、APFS(暗号化)、macOS拡張(HFS+)、exFAT(FAT64)、FAT32、またはFATです。
動画サイズの確認方法ですが、写真アプリで対象の動画を選択して画面下の情報ボタン(iマーク)をタップすれば表示されます。
【Linux】NXP QorIQプロセッサ向けLinuxでのSGMIIリンク設定
NXPのQorIQシリーズT1014/T1024プロセッサーにてMACとイーサネットPHYをSGMII接続する際、プロセッサーのレジスター SGMII IF Mode (MDIO_SGMII_IF_MODE) でのリンク(MAC-PHY間のリンクです。PHYと対向機(例えばイーサネットスイッチやPC)とのリンクではありません)設定が必要な場合があります。
MACのリンク設定とPHYのリンク(PCS(Physical Coding Sublayer)リンク)設定が同じ(例えばどちらもオートネゴシエーション有効)ならいいのですが、違う場合リンクされません。
PHYのリンク設定ですが、例えばMICROCHIP社製VSC8562
https://www.microchip.com/en-us/product/vsc8562/
の場合、MAC SerDes PCS Controlレジスター(アドレス 16E3)のビット7 MAC SerDes autonegotiation enable でします(このビットはスティッキー(sticky bit)なので、ソフトリセットしても値が保持されます)。
プロセッサーのMDIO_SGMII_IF_MODEレジスター設定はLinux
GitHub - nxp-qoriq/linux at LSDK-19.09-update-311219-V4.14
だとドライバーdrivers/net/ethernet/freescale/fman/fman_memac.cのsetup_sgmii_internal_phy()でします。
デバイスツリーで実PHYを定義している場合、522行目でオートネゴシエーション有効に設定されます。
PHYのPCSリンクをオートネゴシエーション無効にしても、MDIO_SGMII_IF_MODEでオートネゴ有効になるのでリンク確立しません。
そこで、MDIO_SGMII_IF_MODEのリンク設定を選択できるよう、デバイスツリーにプロパティーを新たに設け、ドライバーを改造しました。
- デバイスツリーのプロパティ
- プロパティ名:
fsl,pcs-link-speed - 値:100=100Mbps全二重、1000=1000Mbps全二重
- プロパティ未定義時はオートネゴシエーション有効
- 定義例
- プロパティ名:
&enet0 {
fsl,pcs-link-speed = <100>; /* 100M Full */
};
または
ethernet@e0000 {
cell-index = <0>;
compatible = "fsl,fman-memac";
reg = <0xe0000 0x1000>;
fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>;
ptp-timer = <&ptp_timer0>;
pcsphy-handle = <&pcsphy0>;
fsl,pcs-link-speed = <100>; /* 100M Full */
};
- ドライバー改造
diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c index a847b9c..2eb9942 100644 --- a/drivers/net/ethernet/freescale/fman/mac.c +++ b/drivers/net/ethernet/freescale/fman/mac.c @@ -836,6 +836,19 @@ static int mac_probe(struct platform_device *_of_dev) priv->fixed_link->asym_pause = phy->asym_pause; put_device(&phy->mdio.dev); + } else if (mac_dev->phy_node && !of_property_read_u32(mac_node, "fsl,pcs-link-speed", &val)) { + priv->fixed_link = kzalloc(sizeof(*priv->fixed_link), + GFP_KERNEL); + if (!priv->fixed_link) { + err = -ENOMEM; + goto _return_of_get_parent; + } + + priv->fixed_link->link = 1; + priv->fixed_link->speed = (int)val; + priv->fixed_link->duplex = DUPLEX_FULL; + priv->fixed_link->pause = 0; + priv->fixed_link->asym_pause = 0; } err = mac_dev->init(mac_dev);
【Yocto】Intel 64ビットプロセッサー向けLinuxビルド(meta-intel)
はじめに
Intel 64ビットプロセッサー(x64)向けLinuxをYoctoでビルドする方法です。 meta-intel を使います。
環境構築
$ mkdir path/to/prj $ mkdir sources $ cd sources $ git clone git://git.yoctoproject.org/poky -b kirkstone $ git clone git://git.openembedded.org/meta-openembedded -b kirkstone $ git clone git://git.yoctoproject.org/meta-intel -b kirkstone $ cd .. $ . ./sources/poky/oe-init-build-env build
設定
build/conf/local.conf
MACHINEの設定
MACHINE = "intel-corei7-64"
- インストーラーイメージの設定(
sources/meta-intel/README参考)
WKS_FILE = "image-installer.wks.in" IMAGE_FSTYPES:append = " ext4" IMAGE_TYPEDEP_wic = "ext4" INITRD_IMAGE_LIVE = "core-image-minimal-initramfs" do_image_wic[depends] += "${INITRD_IMAGE_LIVE}:do_image_complete" do_image_wic[recrdeptask] += "do_image_ext4" do_rootfs[depends] += "virtual/kernel:do_deploy" IMAGE_BOOT_FILES:append = " \ ${KERNEL_IMAGETYPE} \ microcode.cpio \ ${IMGDEPLOYDIR}/${IMAGE_BASENAME}-${MACHINE}.ext4;rootfs.img \ ${@bb.utils.contains('EFI_PROVIDER', 'grub-efi', 'grub-efi-bootx64.efi;EFI/BOOT/bootx64.efi', '', d)} \ ${@bb.utils.contains('EFI_PROVIDER', 'grub-efi', '${IMAGE_ROOTFS}/boot/EFI/BOOT/grub.cfg;EFI/BOOT/grub.cfg', '', d)} \ ${@bb.utils.contains('EFI_PROVIDER', 'systemd-boot', 'systemd-bootx64.efi;EFI/BOOT/bootx64.efi', '', d)} \ ${@bb.utils.contains('EFI_PROVIDER', 'systemd-boot', '${IMAGE_ROOTFS}/boot/loader/loader.conf;loader/loader.conf ', '', d)} \ ${@bb.utils.contains('EFI_PROVIDER', 'systemd-boot', '${IMAGE_ROOTFS}/boot/loader/entries/boot.conf;loader/entries/boot.conf', '', d)} \ "
build/conf/bblayers.conf
- レシピパスの設定
BBLAYERS ?= " \
${TOPDIR}/../sources/poky/meta \
${TOPDIR}/../sources/poky/meta-poky \
${TOPDIR}/../sources/poky/meta-yocto-bsp \
${TOPDIR}/../sources/meta-openembedded/meta-oe \
${TOPDIR}/../sources/meta-openembedded/meta-networking \
${TOPDIR}/../sources/meta-openembedded/meta-python \
${TOPDIR}/../sources/meta-openembedded/meta-filesystems \
${TOPDIR}/../sources/meta-openembedded/meta-multimedia \
${TOPDIR}/../sources/meta-intel \
"
ビルド
- X11 の最小イメージ
$ bitbake core-image-x11
- SATO デスクトップイメージ
$ bitbake core-image-sato
インストールUSBメモリーの作成
- X11 の最小イメージ
$ sudo dd if=tmp/deploy/images/intel-corei7-64/core-image-x11-intel-corei7-64.wic of=/dev/sdx status=progress
- SATO デスクトップイメージ
$ sudo dd if=tmp/deploy/images/intel-corei7-64/core-image-sato-intel-corei7-64.wic of=/dev/sdx status=progress
sdx は環境に合わせて変更ください。
[例]sdc
ターゲット機のBIOS(UEFI)でブートデバイス順序の第1をUSBにして、このUSBメモリーをターゲット機に挿して起動すればインストール開始します。
カスタマイズ
インストール開始までの待ち(タイムアウト)時間変更
デフォルトだと、インストール開始まで5秒待たされます。この待ち時間はsources/meta-intel/wic/image-installer.wks.inで変更できます。
[例]1秒
bootloader --ptable gpt --timeout=1 --append=" rootwait "
インストール処理の変更
インストール処理はsources/poky/meta/recipes-core/initrdscripts/files/init-install-efi.shに記述されています。
インストール処理を変更したい場合はこのファイルを編集ください。
- [例]インストール先指定に待ち時間を設定
--- sources/poky/meta/recipes-core/initrdscripts/files/init-install-efi.sh.orig 2023-12-26 13:21:42.493604948 +0900 +++ sources/poky/meta/recipes-core/initrdscripts/files/init-install-efi.sh 2023-12-07 09:14:09.962019853 +0900 @@ -101,12 +101,16 @@ # Get user choice while true; do - echo "Please select an install target or press n to exit ($hdnamelist ): " - read answer + echo "Please select an install target or press n to exit ($hdnamelist ), waiting for 5 secs ...: " + read -t 5 answer || true if [ "$answer" = "n" ]; then echo "Installation manually aborted." exit 1 fi + if [ -z "$answer" ]; then + echo "Default target (sda) selected." + answer=sda + fi for hdname in $hdnamelist; do if [ "$answer" = "$hdname" ]; then TARGET_DEVICE_NAME=$answer
- [例]インストール先の強制フォーマット
@@ -208,7 +212,7 @@ mkfs.vfat $bootfs echo "Formatting $rootfs to ext4..." -mkfs.ext4 $rootfs +mkfs.ext4 -F $rootfs echo "Formatting swap partition...($swap)" mkswap $swap
- [例]ブートオプションの変更
@@ -274,7 +278,7 @@ # delete any root= strings sed -i "s/ root=[^ ]*/ /" $SYSTEMDBOOT_CFGS # add the root= and other standard boot options - sed -i "s@options *@options root=PARTUUID=$rootuuid rw $rootwait quiet @" $SYSTEMDBOOT_CFGS + sed -i "s@options *@options root=PARTUUID=$rootuuid rw $rootwait @" $SYSTEMDBOOT_CFGS fi umount /tgt_root
Linuxブートまでの待ち(タイムアウト)時間変更
デフォルトだと、Linuxブートまで10秒待たされます。この待ち時間はbuild/conf/local.confに下記追加で変更できます。
[例]1秒
SYSTEMD_BOOT_TIMEOUT = "1"
【TRACE32】Infineon製SPIフラッシュS25FLxのレジスター設定
Infineon製SPIフラッシュS25FLxをQSPIで使うにはレジスターでクアッドモードに設定する必要があります。
an889.hatenablog.com
このレジスター設定をローターバッファ社製デバッガーソフトウェアTRACE32でするお話です。
TRACE32でSPIフラッシュを扱う場合、付属のフラッシュプログラムを使います。
プロセッサーがZynqMP(XILINX製プロセッサーZynq™ UltraScale+™ MPSoC)の場合です。
FLASHFILE.TARGET 0xFFFC1000++0x2FFF E:0xFFFC4000++0x27FF ./spiw4b64_zynqultra.bin /KEEP /STACKSIZE 0x400 /DUALPORT
FLASHFILE.TARGET 0xFFFC1000++0x2FFF E:0xFFFC4000++0x27FF ./spi4b64_zynqultra.bin /KEEP /STACKSIZE 0x400 /DUALPORT
レジスター設定方法です。
- デュアルパラレル接続
FLASHFILE.SPI.CMD 0x06 0x06 ; Write Enable
FLASHFILE.SPI.CMD 0x01 0x01 0x00 0x00 0x02 0x02 ; Write <SR1> <SR1> <CR1> <CR1>
FLASHFILE.SPI.CMD 0x04 0x04 ; Write Disable
- デュアルスタックまたはシングル接続
FLASHFILE.SPI.CMD 0x06 ; Write Enable
FLASHFILE.SPI.CMD 0x01 0x00 0x02 ; Write <SR1> <CR1>
FLASHFILE.SPI.CMD 0x04 ; Write Disable
設定できたかどうかレジスター読出しで確認できます。
- デュアルパラレル接続
FLASHFILE.SPI.CMD 0x35 0x35 /READ 0x2
- デュアルスタックまたはシングル接続
FLASHFILE.SPI.CMD 0x35 /READ 0x1
FLASHFILE.SPI.CMDの書式です。
- デュアルパラレル接続
FLASHFILE.SPI.CMD <cmd for flash_bottom> <cmd for flash_top> <data[0] for flash_bottom> <data[0] for flash_top> <data[1] for flash_bottom> <data[1] for flash_top> ...
- デュアルスタックまたはシングル接続
デュアルスタックで上位デバイスの設定はできません。
FLASHFILE.SPI.CMD <cmd> <data[0]> <data[1]> ...
その他注意事項です。
FLASHFILE.unlockはCR1(Configuration register 1)を初期化するので、使わないでください。