2018-08-31 17:06:56

by Jakov Simunic

[permalink] [raw]
Subject: Build iw for 32bit ARM

Hello,
I am working on an embedded project which uses an armv7l architecture, whic=
h is a 32bit platform, and I am trying to compile iw-4.9 for it, and I don'=
t know how to compile it for 32bit arches.
Tried adding -m32 to the CFLAGS, everything passes the build except the iw =
binary, which says:

iw.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [iw] Error 1

Could you please offer any help/advices on how to compile iw for 32bit arch=
es?
--
Lijep pozdrav / Best regards
Jakov =A9imuni=E6


2018-08-31 19:39:50

by Steve deRosier

[permalink] [raw]
Subject: Re: Build iw for 32bit ARM

Hi Jakov,

On Fri, Aug 31, 2018 at 5:59 AM Jakov Simunic
<[email protected]> wrote:
>
> Hello,
> I am working on an embedded project which uses an armv7l architecture, which is a 32bit platform, and I am trying to compile iw-4.9 for it, and I don't know how to compile it for 32bit arches.

Unless you're building your Linux system 100% from scratch, you should
leverage the build system for your platform. It will automatically do
the right thing. You're likely using Buildroot, OpenWRT, OpenEmbedded,
Yocto or some other platform that has compilers, build systems,
packages and so on. First off, most likely iw is already included. And
even if you want to build from your own modified version, theres ways
to build using the systems above to just build it in-tree. And
finally, even if not, you should use the target libraries and the
cross-compilers that are used by your platform.

Step one, if you haven't already, is to get the build system for your
platform and configure and build it. Then try building your modified
version of iw if the stock one isn't helpful for you. I'd integrate it
into the platform build system, but you could build out-of-tree by
setting up the right flags and CROSS_COMPILER to point to the
toolchain used for your platform. If I were doing that, I'd build the
platform in verbose output mode and examine the compiler commandlines
for hints.

> Tried adding -m32 to the CFLAGS, everything passes the build except the iw binary, which says:
>
> iw.o: could not read symbols: File in wrong format
> collect2: ld returned 1 exit status
> make: *** [iw] Error 1
>

Most likely your architecture flags to the linker don't match what you
gave in the compiler stage. You could always also confirm the format
of iw.o with the `file` command.

- Steve

2018-09-04 21:11:43

by Fabio Estevam

[permalink] [raw]
Subject: Re: Build iw for 32bit ARM

Hi Jakov,

On Mon, Sep 3, 2018 at 11:20 AM, Jakov Simunic
<[email protected]> wrote:
> Hi Steve,
> We are building with ptxdist, we have a compiler for arm (arm-linux-gnuea=
bihf-gcc), I am not a total novice in this, and have already written some p=
txdist rules, but haven't done it with non-autoconfizzed packages, basicall=
y the problem is that if I use the default iw.make from the ptxdist master =
branch, iw's Makefile tries to compile with the native compiler and native =
libnl, no matter what option i supply it with, I always get a x86-32 execut=
able. When I modify the iw.make rule with the correct CC (by making a custo=
m compile step), it then fails to find the correct libnl through pkg-config=
. The iw package is not modified at all. Could you suggest how to hard code=
the CC (or that it gets it normally from a CC variable supplied to the Mak=
efile) or how to avoid pkg-config and supply the options needed manually. I=
know this is a step back from multi-platform build practices, but I just n=
eed it that way.

Maybe you can try to ask for help in the ptxdist mailing list.

2018-09-03 18:41:24

by Jakov Simunic

[permalink] [raw]
Subject: RE: Build iw for 32bit ARM

SGkgU3RldmUsDQpXZSBhcmUgYnVpbGRpbmcgd2l0aCBwdHhkaXN0LCB3ZSBoYXZlIGEgY29tcGls
ZXIgZm9yIGFybSAoYXJtLWxpbnV4LWdudWVhYmloZi1nY2MpLCBJIGFtIG5vdCBhIHRvdGFsIG5v
dmljZSBpbiB0aGlzLCBhbmQgaGF2ZSBhbHJlYWR5IHdyaXR0ZW4gc29tZSBwdHhkaXN0IHJ1bGVz
LCBidXQgaGF2ZW4ndCBkb25lIGl0IHdpdGggbm9uLWF1dG9jb25maXp6ZWQgcGFja2FnZXMsIGJh
c2ljYWxseSB0aGUgcHJvYmxlbSBpcyB0aGF0IGlmIEkgdXNlIHRoZSBkZWZhdWx0IGl3Lm1ha2Ug
ZnJvbSB0aGUgcHR4ZGlzdCBtYXN0ZXIgYnJhbmNoLCBpdydzIE1ha2VmaWxlIHRyaWVzIHRvIGNv
bXBpbGUgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyIGFuZCBuYXRpdmUgbGlibmwsIG5vIG1hdHRl
ciB3aGF0IG9wdGlvbiBpIHN1cHBseSBpdCB3aXRoLCBJIGFsd2F5cyBnZXQgYSB4ODYtMzIgZXhl
Y3V0YWJsZS4gV2hlbiBJIG1vZGlmeSB0aGUgaXcubWFrZSBydWxlIHdpdGggdGhlIGNvcnJlY3Qg
Q0MgKGJ5IG1ha2luZyBhIGN1c3RvbSBjb21waWxlIHN0ZXApLCBpdCB0aGVuIGZhaWxzIHRvIGZp
bmQgdGhlIGNvcnJlY3QgbGlibmwgdGhyb3VnaCBwa2ctY29uZmlnLiBUaGUgaXcgcGFja2FnZSBp
cyBub3QgbW9kaWZpZWQgYXQgYWxsLiBDb3VsZCB5b3Ugc3VnZ2VzdCBob3cgdG8gaGFyZCBjb2Rl
IHRoZSBDQyAob3IgdGhhdCBpdCBnZXRzIGl0IG5vcm1hbGx5IGZyb20gYSBDQyB2YXJpYWJsZSBz
dXBwbGllZCB0byB0aGUgTWFrZWZpbGUpIG9yIGhvdyB0byBhdm9pZCBwa2ctY29uZmlnIGFuZCBz
dXBwbHkgdGhlIG9wdGlvbnMgbmVlZGVkIG1hbnVhbGx5LiBJIGtub3cgdGhpcyBpcyBhIHN0ZXAg
YmFjayBmcm9tIG11bHRpLXBsYXRmb3JtIGJ1aWxkIHByYWN0aWNlcywgYnV0IEkganVzdCBuZWVk
IGl0IHRoYXQgd2F5Lg0KDQotLQ0KTGlqZXAgcG96ZHJhdiAvIEJlc3QgcmVnYXJkcw0KSmFrb3Yg
xaBpbXVuacSHDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBTdGV2ZSBkZVJv
c2llciA8ZGVyb3NpZXJAZ21haWwuY29tPiANClNlbnQ6IEZyaWRheSwgQXVndXN0IDMxLCAyMDE4
IDU6MzEgUE0NClRvOiBKYWtvdiBTaW11bmljIDxqYWtvdi5zaW11bmljQGVyaWNzc29uLmNvbT4N
CkNjOiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PjsgbGludXgtd2ly
ZWxlc3MgPGxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZz4NClN1YmplY3Q6IFJlOiBCdWls
ZCBpdyBmb3IgMzJiaXQgQVJNDQoNCkhpIEpha292LA0KDQpPbiBGcmksIEF1ZyAzMSwgMjAxOCBh
dCA1OjU5IEFNIEpha292IFNpbXVuaWMgPGpha292LnNpbXVuaWNAZXJpY3Nzb24uY29tPiB3cm90
ZToNCj4NCj4gSGVsbG8sDQo+IEkgYW0gd29ya2luZyBvbiBhbiBlbWJlZGRlZCBwcm9qZWN0IHdo
aWNoIHVzZXMgYW4gYXJtdjdsIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgYSAzMmJpdCBwbGF0Zm9y
bSwgYW5kIEkgYW0gdHJ5aW5nIHRvIGNvbXBpbGUgaXctNC45IGZvciBpdCwgYW5kIEkgZG9uJ3Qg
a25vdyBob3cgdG8gY29tcGlsZSBpdCBmb3IgMzJiaXQgYXJjaGVzLg0KDQpVbmxlc3MgeW91J3Jl
IGJ1aWxkaW5nIHlvdXIgTGludXggc3lzdGVtIDEwMCUgZnJvbSBzY3JhdGNoLCB5b3Ugc2hvdWxk
IGxldmVyYWdlIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIgcGxhdGZvcm0uIEl0IHdpbGwgYXV0
b21hdGljYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcuIFlvdSdyZSBsaWtlbHkgdXNpbmcgQnVpbGRy
b290LCBPcGVuV1JULCBPcGVuRW1iZWRkZWQsIFlvY3RvIG9yIHNvbWUgb3RoZXIgcGxhdGZvcm0g
dGhhdCBoYXMgY29tcGlsZXJzLCBidWlsZCBzeXN0ZW1zLCBwYWNrYWdlcyBhbmQgc28gb24uIEZp
cnN0IG9mZiwgbW9zdCBsaWtlbHkgaXcgaXMgYWxyZWFkeSBpbmNsdWRlZC4gQW5kIGV2ZW4gaWYg
eW91IHdhbnQgdG8gYnVpbGQgZnJvbSB5b3VyIG93biBtb2RpZmllZCB2ZXJzaW9uLCB0aGVyZXMg
d2F5cyB0byBidWlsZCB1c2luZyB0aGUgc3lzdGVtcyBhYm92ZSB0byBqdXN0IGJ1aWxkIGl0IGlu
LXRyZWUuIEFuZCBmaW5hbGx5LCBldmVuIGlmIG5vdCwgeW91IHNob3VsZCB1c2UgdGhlIHRhcmdl
dCBsaWJyYXJpZXMgYW5kIHRoZSBjcm9zcy1jb21waWxlcnMgdGhhdCBhcmUgdXNlZCBieSB5b3Vy
IHBsYXRmb3JtLg0KDQpTdGVwIG9uZSwgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeSwgaXMgdG8gZ2V0
IHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIgcGxhdGZvcm0gYW5kIGNvbmZpZ3VyZSBhbmQgYnVp
bGQgaXQuIFRoZW4gdHJ5IGJ1aWxkaW5nIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdyBpZiB0
aGUgc3RvY2sgb25lIGlzbid0IGhlbHBmdWwgZm9yIHlvdS4gSSdkIGludGVncmF0ZSBpdCBpbnRv
IHRoZSBwbGF0Zm9ybSBidWlsZCBzeXN0ZW0sIGJ1dCB5b3UgY291bGQgYnVpbGQgb3V0LW9mLXRy
ZWUgYnkgc2V0dGluZyB1cCB0aGUgcmlnaHQgZmxhZ3MgYW5kIENST1NTX0NPTVBJTEVSIHRvIHBv
aW50IHRvIHRoZSB0b29sY2hhaW4gdXNlZCBmb3IgeW91ciBwbGF0Zm9ybS4gSWYgSSB3ZXJlIGRv
aW5nIHRoYXQsIEknZCBidWlsZCB0aGUgcGxhdGZvcm0gaW4gdmVyYm9zZSBvdXRwdXQgbW9kZSBh
bmQgZXhhbWluZSB0aGUgY29tcGlsZXIgY29tbWFuZGxpbmVzIGZvciBoaW50cy4NCg0KPiBUcmll
ZCBhZGRpbmcgLW0zMiB0byB0aGUgQ0ZMQUdTLCBldmVyeXRoaW5nIHBhc3NlcyB0aGUgYnVpbGQg
ZXhjZXB0IHRoZSBpdyBiaW5hcnksIHdoaWNoIHNheXM6DQo+DQo+IGl3Lm86IGNvdWxkIG5vdCBy
ZWFkIHN5bWJvbHM6IEZpbGUgaW4gd3JvbmcgZm9ybWF0DQo+IGNvbGxlY3QyOiBsZCByZXR1cm5l
ZCAxIGV4aXQgc3RhdHVzDQo+IG1ha2U6ICoqKiBbaXddIEVycm9yIDENCj4NCg0KTW9zdCBsaWtl
bHkgeW91ciBhcmNoaXRlY3R1cmUgZmxhZ3MgdG8gdGhlIGxpbmtlciBkb24ndCBtYXRjaCB3aGF0
IHlvdSBnYXZlIGluIHRoZSBjb21waWxlciBzdGFnZS4gWW91IGNvdWxkIGFsd2F5cyBhbHNvIGNv
bmZpcm0gdGhlIGZvcm1hdCBvZiBpdy5vIHdpdGggdGhlIGBmaWxlYCBjb21tYW5kLg0KDQotIFN0
ZXZlDQo=

2018-09-03 13:59:54

by Johannes Berg

[permalink] [raw]
Subject: Re: Build iw for 32bit ARM

Hi,

In addition or as an alternative to what Steve said, make sure your
LDFLAGS also contains -m32.

johannes