how to bring Linux to a WindowsCE device
There is a navi-like device that has very interesting specs at an interesting price. The problem is that it only runs Windows CE while we absolutely need the Linux operating system for a project.
We find it pretty hard to find a comparable device (all-in-one touchscreen PC with GPS and GPRS and extended temperature range at a reasonable price) so I'm currently investigating the possibility to port Linux to this device.
While I have some experience with various embedded Linux devices (AXIS ETRAX/CRIS, Trimble Nomad, FOX G20, MOXA, PC/104 devices, ...) I've never brought Linux to a device that never had it running before. However, cross compiling a whole Linux system isn't new to me.
I guess the biggest problem would be replacing Windows CE at all.
The device has a 400 MHz ARM 926EJ processor with 2 GB flash, 64 MB RAM, SD slot and USB/RS232 ports. The full specs can be found here.
- how hard could it be to convert this to a Linux device / what are the hardest parts or eventually problems I couldn't solve at all?
- or are there companies / people that are specialized to such tasks? Note we don't even know who is the original manufacturer. The vendor however said that there is no Linux support.
- or alternatively, do you know any similar devices that already come with Linux (I wo开发者_开发技巧uld prefer this instead of hacking a device)?
Ideally you will need access to the processor's JTAG pins for both programming and debugging, then you will need a JTAG debugger that supports the device and programming the Flash memory used.
Once you have all that you have complete access to the processor and memory and can re-program it with any firmware you choose. The usefulness of that however will depend on your having enough technical information to develop or acquire suitable drivers for the display, and any other application specific hardware, as well as the on-chip peripherals.
Knowing that it is an ARM926EJ only tells you about the core. It tells you nothing about the on-chip peripherals including hardware such as the SDRAM controller and PLL clock generator, and interrupt controller, all of which will need to be initialised before you can get the system running - these are device specific and you Linux will need to be specifically adapted to the hardware. You cannot just load Linux as you would on a PC which is a known and standardised hardware platform.
The documentation reveals it to be a Samsung S3C2416X processor. Get the user manual and data sheet for that from Samsung Semiconductor's website. You may find a Linux port already available for the processor at least, but you will still need to adapt for the off-chip peripherals and I/O. The documentation also shows JTAG in the block diagram, so that may have left the connector on the board for you.
Useful steps along the way are:
- Find out how the boot firmware works, and whether it can boot a Linux kernel. If not, you'll need to port uBoot or another Linux compatible boot loader to the hardware. This may require soldering to reprogram the primary boot flash.
- Find a Linux kernel for an evaluation board for the same Samsung processor.
- Each board has quirks, such as the exact wiring of the I/O lines that interface to battery control, display brightness, front panel buttons. Without documentation from the manufacturer these can be painful to figure out. To reverse engineer it you'll need to open it up and find the part numbers of the minor components, then analyse how they're connected. On the positive side there's often an evaluation board from the chip vendor that uses the same parts, and does have full documentation. Hardware engineers like to copy and paste from these reference designs.
This is possible, but probably only worthwhile if your time is cheap or you plan to buy a lot of them. There are freelancers who do ARM kernel porting; I've done it myself. Normally I'd do this for people who've designed their own hardware so there's very little reverse engineering.
精彩评论