<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" data-hsystem="true"></head>
<body><style>p{margin: 0;padding: 0;}
</style>
<p>On Sun, 4 Oct 2015 19:59:31 -0500, Rick Hornsby
<richardjhornsby@gmail.com> wrote:</p>
<blockquote style="border-left: 2px solid #000000; padding-right: 0px;
padding-left: 5px; margin-left: 5px; margin-right: 0px;">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:<br><br> Linux cmu 3.0.35 #9 SMP PREEMPT Sat Oct 25 16:40:22
EDT 2014 armv7l GNU/Linux</blockquote>
<p>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.</p>
<blockquote style="border-left: 2px solid #000000; padding-right: 0px;
padding-left: 5px; margin-left: 5px; margin-right: 0px;"><br> 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.</blockquote>
<p>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.</p>
<blockquote style="border-left: 2px solid #000000; padding-right: 0px;
padding-left: 5px; margin-left: 5px; margin-right: 0px;"><br> 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.:<br><br> libjciuiaaharadio.so<br> libjciuiaamradio.so<br>
libjciuiaaudiosettings.so<br> libjciuiaauxin.so<br><br> jci = johnson
controls<br> uia = variable name that in the javascript refers to application
identifiers<br><br> That definitely does not jive with the OpenCar model, if I
need to compile a library for every app I want to create.<br><br> 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.</blockquote>
<p>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.</p>
<p> </p>
<blockquote style="border-left: 2px solid #000000; padding-right: 0px;
padding-left: 5px; margin-left: 5px; margin-right: 0px;">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?)</blockquote>
<p>Once you have a cross toolchain installed, you'll be able to use the arm
binutils objdump to read the .so files.</p>
<blockquote style="border-left: 2px solid #000000; padding-right: 0px;
padding-left: 5px; margin-left: 5px; margin-right: 0px;"><br><br> Why - well,
besides the sheer curiosity of what’s possible, I eventually want to for
example <br> * 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<br> * add a
screen that shows coolant temp, oil pressure, etc[3]<br> * add an app that goes
directly to my favorite streaming audio, without having to Bluetooth it from the
phone<br><br> 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.<br><br><br> thanks!<br><br><br> [1]
https://insidetrack.opencar.com<br> [2]
http://www.mazda3hacks.com/doku.php?id=apps:addingtocar<br> [3]
https://insidetrack.opencar.com/application/index/documentationdevelop?category=developers-guide&section=tutorials&page=working-with-vehicle-network-data-part-1<br>
_______________________________________________<br> colug-432 mailing list<br>
colug-432@colug.net<br> http://lists.colug.net/mailman/listinfo/colug-432<br>
</blockquote>
<p>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<br><br></p>
<p>Regards,</p>
<p> </p>
<p>Larry</p>
</body>
</html>