Freescale / libimxdmabuffer

Library for allocating and managing physically contiguous memory ("DMA memory" or "DMA buffers") on i.MX devices
GNU Lesser General Public License v2.1
19 stars 12 forks source link

Build failed with --imx-linux-headers-path #2

Closed JoeSandom closed 5 years ago

JoeSandom commented 5 years ago

Hi, I'm working with an iMX8m from SolidRun;

https://www.solid-run.com/product/SRMX8QDW00D03GE008V20C0/

When following the specified configuration instructions;

./waf configure --prefix=PREFIX

Errors relating to not having a specified kernel headers path appear. So I added the following kernel headers path in the configuration;

./waf configure --prefix=PREFIX --imx-linux-headers-path=/usr/src/linux-headers-4.14.104-imx8-sr/include/

This seemed to get us a little closer, now being able to include <linux/mxcfb.h>. Soon after a load of include errors were cropping up relating to "asm" includes. In the kernel header source files, there is only an "asm-generic", so I thought I created a symlink for asm to see if this would progress things a little further. The following errors appeared in the build config log; (snippet below)

Would you be able to shed a little light on this issue?


In file included from /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/cmpxchg.h:93:0, from /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:18, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/atomic.h:5, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/kgdb.h:18, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/fb.h:5, from /usr/src/linux-headers-4.14.104-imx8-sr/include/uapi/linux/mxcfb.h:31, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/mxcfb.h:24, from ../test.c:1: /usr/src/linux-headers-4.14.104-imx8-sr/include/asm-generic/cmpxchg-local.h: In function ‘wrong_size_cmpxchg’: /usr/src/linux-headers-4.14.104-imx8-sr/include/asm-generic/cmpxchg-local.h:9:2: error: expected declaration specifiers before ‘noreturn’ noreturn; ^~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm-generic/cmpxchg-local.h:17:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm-generic/cmpxchg-local.h:56:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { ^ In file included from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/atomic.h:5:0, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/kgdb.h:18, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/fb.h:5, from /usr/src/linux-headers-4.14.104-imx8-sr/include/uapi/linux/mxcfb.h:31, from /usr/src/linux-headers-4.14.104-imx8-sr/include/linux/mxcfb.h:24, from ../test.c:1: /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:92:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:120:1: note: in expansion of macro ‘ATOMIC_OP_RETURN’ ATOMIC_OP_RETURN(add, +) ^~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:92:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:124:1: note: in expansion of macro ‘ATOMIC_OP_RETURN’ ATOMIC_OP_RETURN(sub, -) ^~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:105:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:128:1: note: in expansion of macro ‘ATOMIC_FETCH_OP’ ATOMIC_FETCH_OP(add, +) ^~~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:105:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:132:1: note: in expansion of macro ‘ATOMIC_FETCH_OP’ ATOMIC_FETCH_OP(sub, -) ^~~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:105:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:136:1: note: in expansion of macro ‘ATOMIC_FETCH_OP’ ATOMIC_FETCH_OP(and, &) ^~~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:105:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:140:1: note: in expansion of macro ‘ATOMIC_FETCH_OP’ ATOMIC_FETCH_OP(or, |) ^~~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:105:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:144:1: note: in expansion of macro ‘ATOMIC_FETCH_OP’ ATOMIC_FETCH_OP(xor, ^) ^~~~~~~ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:82:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token { \ ^ /usr/src/linux-headers-4.14.104-imx8-sr/include/asm/atomic.h:148:1: note: in expansion of macro ‘ATOMIC_OP’ ATOMIC_OP(and, &)`

dv1 commented 5 years ago

Unfortunately, I do not understand what is going on. I'll try to contact the SR devs.

dv1 commented 5 years ago

So, I have tried to build libimxdmabuffer with the FSL BSP that contains a 4.14 kernel, and it built just fine. Please contact SolidRun for more, since this seems to be either a problem with your setup or a SolidRun specific issue. Closing for now, but please feel free to reopen if it turns out to be a libimxdmabuffer bug after all.

JustBenj commented 4 years ago

I am having a very similar issue on a Nitrogen8m board from Boundary, using their provided Ubuntu 18.04 image. My suspicion is that the "asm" headers are targeting the wrong architecture. I can't seem to find asm headers for aarch64

Edit: I feel like this trouble would be circumvented if I could figure out how to build my own image using Yocto, but I don't know where to begin with that.

JustBenj commented 4 years ago

@JoeSandom did you ever find a solution to this?

JoeSandom commented 4 years ago

Hi @JustBenj, In the end I used Yocto to build a custom distribution with gstreamer-imx included + all dependencies. Worked perfectly this way! Nitrogen8m board has Yocto support already so I would suggest trying to build the Yocto image. I feel that Yocto can be a bit overwhelming but once you get stuck in it's not too difficult :). Just follow the steps below to get the initial build done and then when including gstreamer-imx you'll have to modify a couple of recipes to get the "v2" branch as opposed to master. I can help you with this if you need.

https://boundarydevices.com/yocto-release-for-i-mx8mq/