Odroid C2でマルチメディアをモジュールとして使用してLinuxカーネルをコンパイルする方法

Odroid C2でマルチメディアをモジュールとして使用してLinuxカーネルをコンパイルする方法

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とハードウェアアクセラレーションビデオを楽しむことができます。

おすすめ記事