Odroid C2でLinuxカーネルをコンパイルし、次のようにDVB-Tドライバをインストールしようとしています。メディアの構築。私は公式に説明されたステップに従った。ウィキペディアそして法廷。フォーラムによると、Device Drivers -> Amlogic Device Drivers -> Multimedia Support
バックポートされたmedia_build DVB-Tドライバを使用するには、それをモジュールにコンパイルする必要があります。
まず、Linuxソースコードを入手しました。
git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidc2-3.14.y
その後、Odroid C2の構成を設定しました。
make odroidc2_defconfig
最後に、次の手順でカーネルをコンパイルし、V4Lの依存関係を無効にしました。
$make menuconfig
Device Drivers
Amlogic Device Drivers
ION Support
ION memory management support = no
Amlogic ion video support
videobuf2-ion video device support = no
Amlogic ion video devic support = no
V4L2 Video Support
Amlogic v4l video device support = no
Amlogic v4l video2 device support = no
Amlogic Camera Support
Amlogic Platform Capture Driver = no
Multimedia support = m
この設定はエラーなしでコンパイルされ、media_buildドライバをコンパイルしてインストールできます。問題は、この構成では、Odroid C2がハードウェアデコードを介してKodiでビデオファイルを再生できないことです。私の印象は、amlogicハードウェアデコードに必要な依存関係を無効にしたことです。設定を変更し、以前にモジュールで無効にしたすべての依存関係を表示してみました。残念ながら、この構成ではカーネルをコンパイルできず、次のエラーが原因でコンパイルが失敗します。
drivers/built-in.o: In function `v4l2_device_release':
odroid-battery.c:(.text+0x1731c0): undefined reference to
`media_device_unregister_entity'
odroid-battery.c:(.text+0x1731c0): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_device_unregister_entity'
drivers/built-in.o: In function `__video_register_device':
odroid-battery.c:(.text+0x173c4c): undefined reference to
`media_device_register_entity'
odroid-battery.c:(.text+0x173c4c): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_device_register_entity'
drivers/built-in.o: In function `v4l2_device_register_subdev':
odroid-battery.c:(.text+0x1797b0): undefined reference to
`media_device_register_entity'
odroid-battery.c:(.text+0x1797b0): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_device_register_entity'
drivers/built-in.o: In function `v4l2_device_unregister_subdev':
odroid-battery.c:(.text+0x179a58): undefined reference to
`media_entity_remove_links'
odroid-battery.c:(.text+0x179a58): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_entity_remove_links'
odroid-battery.c:(.text+0x179a60): undefined reference to
`media_device_unregister_entity'
odroid-battery.c:(.text+0x179a60): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_device_unregister_entity'
drivers/built-in.o: In function `subdev_close':
odroid-battery.c:(.text+0x180c10): undefined reference to `media_entity_put'
odroid-battery.c:(.text+0x180c10): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_entity_put'
drivers/built-in.o: In function `subdev_open':
odroid-battery.c:(.text+0x1814f4): undefined reference to `media_entity_get'
odroid-battery.c:(.text+0x1814f4): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_entity_get'
odroid-battery.c:(.text+0x181540): undefined reference to `media_entity_put'
odroid-battery.c:(.text+0x181540): relocation truncated to fit:
R_AARCH64_CALL26 against undefined symbol `media_entity_put'
Makefile:831: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
マルチメディアサポートを含むカーネルをモジュールにコンパイルし、ビデオファイルのハードウェアデコードを引き続き使用するにはどうすればよいですか?
ベストアンサー1
ついに働くようになりました。スクリプト、パッチ、および指示を含むgitリポジトリを作成しました。誰でもこの問題を扱っている場合はクローンしてください。このリポジトリ次の手順を実行します(これはリポジトリの追加情報にも記載されています)。
Linux
Hardkernel Linuxストレージの複製
git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidc2-3.14.y
cd linux
AMLビデオドライバをモジュールにコンパイルできるパッチを適用します(私はLibreELEC media_build バージョン)
patch -p1 < ../odroidC2-kernel/allow_amlvideodri_as_module.patch
基本的なOdroid C2構成の適用
make odroidc2_defconfig
ここで設定を修正してください。
make menuconfig
次の値を設定します(選択するにはYを押し、削除するにはNを、モジュールとして選択するにはMを押します)。
Device Drivers
Amlogic Device Drivers
ION Support
ION memory management support = Yes
Amlogic ion video support
videobuf2-ion video device support = M
Amlogic ion video devic support = no
V4L2 Video Support
Amlogic v4l video device support = M
Amlogic v4l video2 device support = no
Amlogic Camera Support
Amlogic Platform Capture Driver = no
Multimedia support = M
カーネルのコンパイル
make -j5 LOCALVERSION=""
LOCALVERSIONパラメーターは、カーネル名に「+」記号を避けるためのものです。コンパイルが成功したら、モジュール、カーネルをインストールし、システムを再起動します。
sudo make modules_install
sudo cp -f arch/arm64/boot/Image arch/arm64/boot/dts/meson64_odroidc2.dtb /media/boot/
sudo sync
sudo reboot
メディアの構築
media_buildリポジトリを複製してビルドしてみてください。
git clone https://git.linuxtv.org/media_build.git
cd media_build
./build
ビルドコマンドが失敗する可能性があります。このエラーを無視して次の手順に進みます。次のスクリプトも以下からインスピレーションを受けました。LibreELEC media_build バージョンメディアモジュールにはビデオドライバのみが含まれています。
../odroidC2-kernel/add_video_driver_module.sh
潜在的なコンパイルの問題を回避するには、リモートコントローラのサポートと不要なUSBアダプタを無効にしてみてください。以下を実行してみてください。
make menuconfig
次のようなエラーが発生する可能性があります。
./Kconfig:694: syntax error
./Kconfig:693: unknown option "Enable"
./Kconfig:694: unknown option "which"
ファイルを編集しv4l/Kconfig
、エラーに印刷された行をスペースに合わせる必要があります。この行は前の行と一致する必要があります。その後、もう一度実行してくださいmake menuconfig
。この手順を複数回実行する必要があります。
エラーの代わりにメニューが表示された場合は、次のように設定を変更できます。
Remote Controller support = no
Multimedia support
Media USB Adapters
## Disable all driver you don't need ##
次のパッチを適用してください
patch -p1 < ../odroidC2-kernel/warning.patch
エラーを防ぎ、カーネルをコンパイルするには、次のように変更します。
sed -i 's/#define NEED_PM_RUNTIME_GET 1/\/\/#define NEED_PM_RUNTIME_GET 1/g' v4l/config-compat.h
make -j5
おそらく成功するには、前のステップ(sedとmake)を複数回実行する必要があります。
コンパイルが完了したら、モジュールをインストールしてシステムを再起動します。
sudo make install
sudo reboot
最後のステップは、起動時にロードされるようにamlvideodri
モジュールを追加することです。/etc/modules
sudo echo "amlvideodri" >> /etc/modules
それはすべてです。これで、KodiでDVB-T TVとハードウェアアクセラレーションビデオを楽しむことができます。