OpenIPC / msposd

OpenIPC implementation of MSP Displayport OSD for INAV/Betaflight/ArduPilot
https://openipc.org
GNU General Public License v3.0
15 stars 12 forks source link

Can't launch msposd on Groud stattion NVR Hi3536dv100 #18

Open Warfull opened 3 weeks ago

Warfull commented 3 weeks ago

It seems the msposd file in the release folder is not supported by the hardware because even if the file is present in the /usr/bin folder the system answer "file not found".

tipoman9 commented 3 weeks ago

Font file location has been changes to /usr/share/fonts/ Post the full log please. I kind of don't get the idea of running msposd on the ground on NVR

lida2003 commented 3 weeks ago

@tipoman9 We use Radax/Hi3536DV100 as a Rx module for OpenIPC.

I have a 3536DV100 also. @Warfull Please let me know if there released file work on Hi3536DV100.

Warfull commented 2 weeks ago

Ok, I'm dumb : msposd is not needed on the ground station. But the result is a bit weird : IMG_20241106_144453

root@openipc-hi3516ev300:~# msposd --osd --ahi 2 -r 20 Ver: 20241019_230909 MSP to OSD mode!Majestic width:1280,height:720 Loading /usr/share/fonts/font_hd.png for 720p mode Font file res 96:9216 pages:4 Glyph size:24:36 on a 53:20 matrix. Overlay 1272:720 Listening on /dev/ttyAMA0... $M<Flight Controller detected: ARDU

lida2003 commented 2 weeks ago

msposd is not needed on the ground station.

That depends on you requirement.

Airunit can do the OSD stuff, you can take a look at this https://github.com/OpenIPC/msposd/issues/13 for ardupilot

Warfull commented 2 weeks ago

It's working now. Issue was, I guess, a bad parameter passed to the proc in the telemetry file.

tipoman9 commented 2 weeks ago

Could you share your ArduPilot settings to make it work? Several users reported ardupilot latest version working with Betaflight fonts with these settings:

OSD_TYPE=5
SERIALx_PROTOCOL=42 
MSP_OPTIONS=6
Warfull commented 2 weeks ago

OSD_TYPE=5 SERIALx_PROTOCOL=42 MSP_OPTIONS=4

I use Betaflight fonts. same result with MS_OPTIONS=6

Warfull commented 2 weeks ago

But no way to get the AHI working, it is not drawn.

tipoman9 commented 2 weeks ago

AHI is not supported currently camera side on Hisilicon/goke. Not hard to port, if someone is willing to change the code a little and test it, a PR is welcomed

Warfull commented 2 weeks ago

I'de like to try to change the code but the big issue for me is cross-compilation. I've tried to do it by the way of Buildroot and OpenIPC firmware, adding package to my board in buildroot but the compilation stop because of "BR_COMPILER_PARANOID_USAFE_PATH" ; ie "Error : Unsafe Path/Library used in cross-compilation : -I/usr/include". I don't know how to manually do the cross-compilation.

lida2003 commented 2 weeks ago

@Warfull Right now, I'm stucked at arduRover https://github.com/OpenIPC/msposd/issues/17 , and I think I might do the job if I get ArduRover done.

I have 3536DV100 also, having sata harddisk connected for DVR recording.

tipoman9 commented 2 weeks ago

I'de like to try to change the code but the big issue for me is cross-compilation. I've tried to do it by the way of Buildroot and OpenIPC firmware, adding package to my board in buildroot but the compilation stop because of "BR_COMPILER_PARANOID_USAFE_PATH" ; ie "Error : Unsafe Path/Library used in cross-compilation : -I/usr/include". I don't know how to manually do the cross-compilation. @Warfull This is a known issue at the moment, the latest code does not compile, you may try with older version of msposd till we fix it. https://github.com/OpenIPC/firmware/commit/b3ab67b772b66c7367e7e645f1a97ae85cd9b241

Or try a standalone install, it should download the toolchain required and do the crosscompilation. .\build.sh goke

Warfull commented 2 weeks ago

@tipoman9 Thank you, I've just tried and it compile. Right now I'm working on the camera case and a pcb to connect everything together. But I will dig into the code as soon as I can.

lida2003 commented 5 days ago

@tipoman9 latest goke version got segfault: `

# ./msposd_goke --master 127.0.0.1:14560 --osd -r 50 --ahi 1 --matrix 11
Segmentation fault

I also ported a 3536 version which uses same gcc as rootfs, still got segfault. detailed 3536 branch info: https://github.com/SnapDragonfly/msposd/tree/porting_hi3536

EDIT: Hi3536DV100 NVR

tipoman9 commented 5 days ago

@lida2003 Fixed it

lida2003 commented 3 days ago

@tipoman9 I'm NOT sure what happened, it seem gcc version mis-match??? I'm using cortex_a7-gcc13-glibc-4_9 from hi3536dv100_fpv_defconfig

root@openipc-hi3536dv100:~# ls
font.png         font_hd.png      gs-lida2003.key  majestic.yaml    vtxmenu.ini
root@openipc-hi3536dv100:~# scp daniel@192.168.78.101:/home/daniel/Work/msposd/release/hisi/msposd msposd_hisi
daniel@192.168.78.101's password:
msposd                                                                                                                                100%  119KB 119.4KB/s   00:00
root@openipc-hi3536dv100:~# scp daniel@192.168.78.101:/home/daniel/Work/msposd/release/goke/msposd msposd_goke
daniel@192.168.78.101's password:
msposd                                                                                                                                100%  119KB 119.4KB/s   00:01
root@openipc-hi3536dv100:~# ls
font.png         font_hd.png      gs-lida2003.key  majestic.yaml    msposd_goke      msposd_hisi      vtxmenu.ini
root@openipc-hi3536dv100:~# ls -al msposd*
-rwxr-xr-x    1 root     root        122280 Nov 23 03:58 msposd_goke
-rwxr-xr-x    1 root     root        122280 Nov 23 03:57 msposd_hisi
root@openipc-hi3536dv100:~# ./msposd_hisi --master 127.0.0.1:14560  --osd -r 50 --ahi 1 --matrix 11 -v
-sh: ./msposd_hisi: not found
root@openipc-hi3536dv100:~# ./msposd_hisi_goke --master 127.0.0.1:14560  --osd -r 50 --ahi 1 --matrix 11 -v
-sh: ./msposd_hisi_goke: not found
root@openipc-hi3536dv100:~# file --version
-sh: file: not found

nothing added to commit but untracked files present (use "git add" to track) daniel@daniel-nvidia:~/Work/msposd/release$ file hisi/msposd hisi/msposd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-arm.so.1, stripped daniel@daniel-nvidia:~/Work/msposd/release$ file goke/msposd goke/msposd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-arm.so.1, stripped

lida2003 commented 3 days ago

Here is a simple cortex_a7-gcc13-glibc-4_9 substitue cortex_a7_thumb2-gcc13-musl-4_9 log:

tipoman9 commented 2 days ago

Seems OpenIPC had their toolchain url changed. Updated the build.sh

lida2003 commented 1 day ago

Yes, OpenIPC/firmware change toolchain naming rule:

    @$(PWD)/general/scripts/show_toolchains.sh $(CONFIG)
    @echo br-sdk-$(BR2_OPENIPC_SOC_VENDOR)-$(BR2_OPENIPC_SOC_FAMILY)

And I didn't see 3536 support here (https://github.com/OpenIPC/msposd/commit/8a82c6584c6c68214f49217c74878aa9b7308e43), right?

Previously:

br-ext-chip-hisilicon/configs/hi3536dv100_fpv_defconfig cortex_a7-gcc13-glibc-4_9

tipoman9 commented 1 day ago

Well, no idea about 3536 support, maybe add an issue in OpenIPC/firmware ?

lida2003 commented 1 day ago

It has toolchain.hisilicon-hi3536dv100.tgz. I can try it tomorrow. Hope it will work as a gs OSD.

EDIT1: It might some thing to do with libmpi.so. where does this file come from???? It seems symbol in our sdk/hi3536dv100/include can't be found in /usr/lib/libmpi.so

root@openipc-hi3536dv100:~# ldd msposd_hi3536
        ldd (0x7f603000)
        libdnvqe.so => /usr/lib/libdnvqe.so (0xb6dd5000)
        libmpi.so => /usr/lib/libmpi.so (0xb6d52000)
        libupvqe.so => /usr/lib/libupvqe.so (0xb6d3c000)
        libVoiceEngine.so => /usr/lib/libVoiceEngine.so (0xb6d23000)
        libevent_core-2.2.so.1 => /usr/lib/libevent_core-2.2.so.1 (0xb6d07000)
        libc.so => ldd (0x7f603000)
Error relocating /usr/lib/libmpi.so: jpeg_read_scanlines: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_SetBufInfo: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_GetJpegInfo: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_SetYCbCr420spFlag: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_mem_src: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_abort_decompress: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_start_decompress: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_SetOutDesc: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_destroy_decompress: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_std_error: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_CreateDecompress: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_GetLuPixSum: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_read_header: symbol not found
Error relocating /usr/lib/libmpi.so: jpeg_finish_decompress: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_SetStreamPhyMem: symbol not found
Error relocating /usr/lib/libmpi.so: HI_JPEG_SetLuPixSumFlag: symbol not found
Error relocating msposd_hi3536: MI_RGN_UpdateCanvas: symbol not found
Error relocating msposd_hi3536: unsupported relocation type 3
Error relocating msposd_hi3536: unsupported relocation type 3
Error relocating msposd_hi3536: unsupported relocation type 3
Error relocating msposd_hi3536: unsupported relocation type 3

EDIT2: I think, msposd are supporting hi3536 target before. I'm NOT sure why it's removed, or maybe never worked.

https://github.com/OpenIPC/msposd/blob/cabc6b8ade29112f63a5a8a5621e02240d0c3a13/.github/workflows/firmware.yml#L25-L26