[colug-432] disassemble arm .so files

Larry Howell lhowell at speakeasy.net
Mon Oct 5 09:57:35 EDT 2015


On Sun, 4 Oct 2015 19:59:31 -0500, Rick Hornsby  wrote:

       Bought a new car a couple of months ago, and it turns out to be 
running Linux. And I can ssh into the car. uname -a:

Linux cmu 3.0.35 #9 SMP PREEMPT Sat Oct 25 16:40:22 EDT 2014 armv7l GNU/Linux

The CPU is an ARM Cortex-A variant, 32 bit, little endian, soft-float, 
and a PREEMPT kernel provides soft real-time.  Johnson Controls uses 
Freescale i.MX SoCs, so it's very likely to be an i.MX53 Cortex A8. 

Cool. From everything I can figure out, this “infotainment” system 
is based on the OpenCar SDK[1] - Javascript. So it should be open, and 
adding new apps[2] should be possible. To be fair - I’m not 100% sure 
that it isn’t possible yet, I haven’t tried to actually change 
anything in the car yet. 

You are establishing a ssh connection to the infotainment 
(radio/nav/etc) system in the car, which runs Linux.  The car is 
unlikely to have an OS, just a lot of bare-metal code running lots of 
CAN messaging.  It's probably possible to intercept a CAN bus from the 
infotainment system to access the car's systems, but that is a problem 
for another day. 

I have access to the entire filesystem (r/w, if I want) and I have the 
complete(?) next version of software (the updater file) than my car 
came with - so I have a fairly comprehensive bucket of stuff to 
examine. But there’s also large number of compiled .so library files 
for what seems like pretty much everything, i.e.:

libjciuiaaharadio.so
libjciuiaamradio.so
libjciuiaaudiosettings.so
libjciuiaauxin.so

jci = johnson controls
uia = variable name that in the javascript refers to application identifiers

That definitely does not jive with the OpenCar model, if I need to 
compile a library for every app I want to create. 

And that’s where I’m completely out of my depth. I know the system 
architecture is ARM, but I don’t know how to understand more than 
that, or what to do with it since the only computers I have are x86. I 
know of QEMU, but no idea what to do with it. 

You need a cross toolchain (x86 host, ARM target), and your distro may 
have a package that can provide such a toolchain.  If you don't find a 
pachage in the distro repo, there are several sites that have prebuilt 
binaries available.  A popular one is Linaro (www.linaro.org) which 
has builds for Linux, Mac, and Win.  In any case be sure to choose the 
" *-arm-linux-gnueabi " versions.  Avoid any with "none" which are for 
bare-metal (no OS) development, and any with "hf" which are 
hard-float.  ARM is bi-endian and can be configured as big-endian at 
boot, so also avoid any that are big-endian variants. 
 

       Specifically, I’d like to be able to decompile the .so files 
to see what they’re doing? I’m trying objdump, but that’s not 
going to work it seems since my underlying architecture is x86? If I 
can somehow emulate an ARM hardware layer and actually run the software 
that would be good (I think?)

Once you have a cross toolchain installed, you'll be able to use the 
arm binutils objdump to read the .so files. 

Why - well, besides the sheer curiosity of what’s possible, I 
eventually want to for example
* replace the painfully stupid native pandora app, which isn’t 
actually much of an app, but rather depends entirely on a tenuous 
“accessory” link to the real Pandora app running on my phone
* add a screen that shows coolant temp, oil pressure, etc[3]
* add an app that goes directly to my favorite streaming audio, without 
having to Bluetooth it from the phone

The last two I’ve more or less been able to do in the OpenCar 
simulator - so they maybe should be doable if I can figure out what’s 
up with the .so library thing. 

thanks!

[1] https://insidetrack.opencar.com
[2] http://www.mazda3hacks.com/doku.php?id=apps:addingtocar
[3] 
https://insidetrack.opencar.com/application/index/documentationdevelop?category=developers-guide&section=tutorials&page=working-with-vehicle-network-data-part-1
_______________________________________________
colug-432 mailing list
colug-432 at colug.net
http://lists.colug.net/mailman/listinfo/colug-432

I've just completed a 3-year project that used an i.MX53, so may be 
able to help with hardware/software questions as you dig deeper and run 
into issues

Regards,
 
Larry

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.colug.net/pipermail/colug-432/attachments/20151005/1bb892d0/attachment-0001.html 


More information about the colug-432 mailing list