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 저장소를 만들었습니다. 누구든지 이 문제를 다루고 있다면 클론해 주세요.이 저장소다음 단계를 수행합니다(이 내용은 저장소의 추가 정보에도 설명되어 있습니다).

리눅스

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 및 하드웨어 가속 비디오를 즐길 수 있습니다.

관련 정보