views:

144

answers:

7

I'm not sure if this is possible, but I'll give it a go.

I'm creating a device where I have to add a customized user-interface instead of the normal operating system UI. I'm thinking of installing Windows CE (or .NET MICRO) or Linux, but I'm not sure which OS would let me do this. Also, the software (UI) would load instantly and doesn't show the OS. I hope I that makes sense.

My question is: is this possible?

+2  A: 

Judging the level of customization you require, I would suggest GNU/Linux. I don't think Windows would allow you to use your own UI instead of its own.

With GNU/Linux, you can choose among several UI providers or make your own. Besides, everything is customizable in GNU/Linux, you can create your own embedded distro with your application's requirements.

Fernando
I'm familiar with .NET and Windows, so I was thinking Windows but Linux is fine! I'm new to Linux, so is there any tutorials or references?
David
That's the hard part I guess. You should learn the basics of the Linux kernel, it's boot process and such.This could be a good way to start: http://oreilly.com/catalog/9780596002220I've never worked with embedded Linux, but there are some interesting links about it in WikiPedia: http://en.wikipedia.org/wiki/Embedded_Linux
Fernando
Thanks Fernando! I can't thank you enough! :)
David
In the past we've done this with an embedded OS like vxWorks and an embedded gui, but these days I'd go with the Linux solution.
T.E.D.
Good luck with that!
Fernando
Running .NET on an embedded device is like squeezing an elephant into a breadbox. With the right technology, it's possible, but you're going to upset the elephant and ruin your breadbox. There's a reason why the vast majority of embedded devices currently run Linux. http://www.eetimes.com/electronics-news/4189669/Analyst-Linux-set-to-dominate-in-embedded-systems
Chris S
What about the .NET Micro Framework? I'm thinking that's small, and could help me.
David
I agree with Chris S. Linux is the definitive winner in embedded. Check out Android maybe, you'll have much more freedom (both in the philosophical and practical way) with embedded Linux than with .NET.
Fernando
Thanks Fernando and Chris, I'll stick with Linux and learning another OS is a good thing too!
David
Have any of you guys used .Net Micro Framework?
Matthew Whited
@Fernando: Why is Linux the "definitive answer"? Becasue you know Linux? That hardly a good criteria to cover everyone. I don't mind that you have a Linux bias, but to say as a blamket statement that CE and .NET is not going to work is a statement borne of the fact you've never used them and therefore don't actually know what you can or can't do with them. Someone familiar with largely Windows programming and Windows APIs is probably going to get to market faster and at a much lower cost and risk with a CE device.
ctacke
@Matthew: Yes, I've used the Micro Framework. It's a good solution for a specific set of features/target hardware though I'm not certain it has much advantage over CE in most application. The BOM cost savings is pretty minimal over something that will run CE, and CE gives so much more capability out of the box.
ctacke
@ctacke FYI I've developed in .NET, and I'm not looking to start a flamewar. I just said in this context (embedded systems) I think Linux is a much better option than Windows and that you get more freedom with it than .NET.
Fernando
@Fernando: I'm not trying to start oone either. I'm pointing out that Windows CE provides a whole lot of freedom for embedded projects as well and dismissing it for everyone out-of-hand simply because you like Linux is a disservice. To say that a shop with lots of Windows experience, tools and code assets is going to be more successful with Linux than CE could lead to project failure. For the same reason I wouldn't suggest a shop with Linux devs, experience and assets go with CE. The reality is that most projects have customers and they don't care what technology you use just that it works.
ctacke
A: 

This is done all the time with embedded systems. What ever you write IS the OS essentially.

Are you developing a hardware embedded device?

Some example systems.

PARADIGM C++ PROFESSIONAL IDE. Borland C++ 4.5 with a bunch of embedded extensions. I've used it.

PocketPC and Windows CE could be candidates.

There is also Windows Embedded.


Edit: For clarity below was for an X-Ray Generator where all the code I created was the OS. It was not Win-Embedded and not a pink cell phone.

If you have the storage (Compact Flash card, SD card, or just enough memory, etc) create and save all your UI elements as bitmaps. I used GIMP to create the graphic elements and HEXWorkshop to convert them to a binary format the device "understood."

In the UI create "hotspots" (regions/rects) that act as buttons, or whatever, that can trigger events that mimic OnClick, etc. Hopefully, that should get you started. Look up Win32 "OwnerDraw" buttons. It will show you a good methodology for this, especially if you end up in Windows Embedded.

If you are interested in Linux go here: http://www.linux.org/dist/ they have some tiny linux distro's made for embedded systems.

HTH

JustBoo
Yes, I'm creating an OS essentially on a embedded device; as Fernando said, Linux would be a perfect candidate. If I could create a UI similar to this http://www.youtube.com/watch?v=vwQmQs5AvBM for Windows Embedded than that would be great!
David
True. Unless you have other specialized needs that require an embedded OS though, today I'd prefer to go w/ a Linux install, and just remove the parts you don't need.
T.E.D.
See new edit above.
JustBoo
+2  A: 

If you want to make your own UI, you should probably Linux or something in that matter. You could maybe do it with Windows too, although I doubt it would be easy/easier than with Linux.

If your device is more of a mobile device (something like a mobile phone, or a tablet), you might also want to take a look at Android, which is Linux based and it is very customizable for developers.

For other devices you might want to take an open-source distro of Linux, and redesign it to fit your needs. You would then still have the advantages you want from that distro, but could customize it too.

EDIT: I know some netbooks (like the EeePC, I think) uses a light Linux distro as a "super-fast" and "super-easy" operating system. The case might also be the same with Android, since it is a light Linux distro too, but I am not totally sure.

Frxstrem
Thanks Frxstrem! I'm looking at the Android source now. Is there any tutorials or other references on re-designing a distro?
David
I am not aware of any tutorials or references, but if you might find something on Google etc.
Frxstrem
A: 

How do you mean "load instantly"? If you use any OS that already exists, it going to need to load up like it normally does. I doubt you want to write your own OS from scratch, so I'd recommend using something cheap/free and lightweight so it loads fast(linux). Then, just configure the OS to run a program as soon as it loads, and have that program render your own UI on either a GTK+ canvas, or if it needs to be really out of the ordinary, a web canvas element.

I've heard some system can modify the boot process to not display anything, but I've never done it. If anything would let you do this, it's Linux.

LoveMeSomeCode
+1  A: 

The .Net Micro Framework is very flexible with the UI... so much so that you you can render anything you want on the LCD. Now if you need a realtime OS I would suggest you look for such. But if you want simple development on an embedded platform I would highly recomend the .Net Micro Framework.

Oh, and someone was working on tiny version of WPF for the .Net Micro Framework... that is what I used as my starting point for my UI. Here's another link

Matthew Whited
Thanks for the links; I was thinking of using the .NET Micro Framework, as I'm familiar with the .NET framework. I'll find out more! Thanks Matthew!
David
It's a great platform as long as you don't need a realtime OS. And the main issue there is the fact that most of the current development boards only have a single shared SPI bus for external communication. (At least of when I was using the framework last year.)
Matthew Whited
+2  A: 

Contrary to the evident misperception, you certainly CAN create your own UI under Windows CE. The source for the default shell ships with Platform Builder (even the eval version), so does a bare minimum shell, but you're certainly free to create any shell you want or modify what Microsoft ships to meet your own needs. This is a pretty common requirement.

CE is not like desktop Windows. You can also decide exactly which pieces go into the OS, so you can select which drivers and OS components meet your requirements and go in the OS, and you can add security to allow only your applications to run.

The tools to get your OS up and going are not really easy on either side, but Platform Builder is a bit easier to get a functional OS out of than the Linux tools if you're not already experienced with Linux tools in general.

EDIT

This question may be worth looking at as well.

ctacke
A: 

GNU/Linux is the best choice. Very flexible, it is widely used in various stuff from embedded systems to handheld devices. It's wouldn't take too much even to make new desktop envronment(okay, depending on it's complexity, of course). I would also suggest Android, it's open source branch, as there are lots of custom UI have been created by today. Windows have nothing to do with this (imho). And, what's important, Windows licence for device production isn't free, right?

creitve