Thank you sir!

Good references.

Ok, the ABI is the standard interface at the machine code level, as opposed 
to API.

Yeah, you often see the name ABI/EABI with cross compilers for embedded 
systems.  I've seen that enough times that I should have looked there.  
Will forward this post onto my colleague..

Cheers,

Jeff



On Thursday, December 6, 2018 at 3:40:33 PM UTC-6, Charles Steinkuehler 
wrote:
>
> On 12/6/2018 1:59 PM, Jeff Andich wrote: 
> > Hi, 
> > 
> > General question.   
> > 
> > Is it valid to cross compile an out of tree driver with a different 
> version 
> > of the cross compiler/toolchain than the kernel was compiled with? If 
> not, 
> > where do you draw the line? 
> > 
> > Recently we re-compiled an out of tree WiFi driver for the BBB on a PC 
> host 
> > machine, pointing it at the kernel source tree with all of the build 
> > products/generated files in it. The kernel was built with the 6.4.x 
> Linaro 
> > toolchain, however the developer built the WiFi driver with the Linaro 
> 5.4 
> > toolchain.  The developer was able to deploy the WiFi driver to the 
> target, 
> > and it worked just fine. 
> > 
> > I mentioned to the developer that, in general, it's probably safer to 
> use 
> > the same brand and version of the cross toolchain to build the driver 
> and 
> > kernel, but now I'm so sure that this has to be the case.  For instance, 
> If 
> > the function call interface is standard for all versions of the Linaro 
> > toolchain, then maybe this doesn't matter.  However, if version 4.x uses 
> > one set of registers to pass function parameters to a driver, for 
> instance, 
> > and the driver is compiled with a different version of the compiler 
> which 
> > expects the parameters to be passed in a different set of registers, 
> then 
> > there would be an issue. 
> > 
> > What's the rule of thumb here or what's a good reference to better 
> > understand the interfaces? 
>
> What you mentioned (register use and parameter passing) is known as 
> calling conventions, which are part of the full ABI (Application 
> Binary Interface) which specifies those and other details of the 
> target platform: 
>
> https://en.wikipedia.org/wiki/Application_binary_interface 
>
> As long as the ABI is compatible, you should be able to compile kernel 
> modules using whatever compiler you want. 
>
> There are lots of different ABIs for the ARM platform because there 
> are a wide range of CPUs with different features (eg: hard floating 
> point, NEON support, thumb instructions, etc).  That's why you wind up 
> with long lists of cross-compiler tool chain variants, eg: 
>
> https://releases.linaro.org/components/toolchain/binaries/latest-7/ 
>
> -- 
> Charles Steinkuehler 
> [email protected] <javascript:> 
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/a7a6494d-207c-4664-9e43-cf977f061c37%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to