<p>My new project is targeting an embedded ARM processor.  I have a build system that uses a cross-compiler running on an Ubuntu linux box.  I like to use unit testing as much as possible, but I'm a little bit confused about how to proceed with this setup.</p>

<p>I can't see how to run unit tests on the ARM device itself (somebody correct me if I'm wrong).  I think that my best option is to compile the code on the build machine using its own native compiler for the unit tests.  Is this approach fundamentally flawed?  Is unit testing on a different platform a waste of time?</p>

<p>I'm planning to use CppUnit on the build machine using the native compiler for the unit tests.  Then I'll cross compile the code for the ARM processor and do integration and system testing on the target device itself.  How would you structure the source code and the test code to keep this from turning into a tangled mess?</p>

With embedded device it depends on what interfaces (hardware) you have.
For example the motion control cards I deal with uses a command line interface. The IDE they ship uses it as it primary method of interacting with the cards. It works the same way regardless if I am using PCI, IDE, Serial, or Ethernet.
The DLL they ship for programming give access to the command line interface. So I can send a string, and read back the response. So what I do for my unit tests is have a physical card hooked (or in) my development machine. I send it commands after uploading the software, read the response and if they are correct it passes the test.
I also have extra hardware, a black box if you will, that simulates a machine that motion control card is normally hooked up too. It helps with the automated sets but there is a manual phase as I have to set switches to simulate different setups on the machine.
I have achieved a greater degree of automation by taking a digital I/O card and using it outputs to feed into the inputs of the motion control card and the same in reverse.
I found that for most hardware you have to have some type of simulator hardware.
The exception being the rare package that comes with a software simulator.
I know this isn't probably ideal as not every developer can have one of these on their desk. My hardware simulator so I can give it to whoever it working on the motion control software at the time. If it can't be portable then having a dedicated testing or hardware development computer would be in order.
Finally it boils down on the specifics of your hardware and what support the manufacturer gives in terms of software and simulators. To help you more you will need to post more specifics.