Hello all,
I was a newbie here a few years back and this forum basically helped me get to the point where I'm about to head off for a masters in operating system design so just wanted to drop a thanks before I mention a project I'm working on.
I've been working on a small ARM9 board using the LPC3130 microcontroller ($3.5 in 1000 pieces) and am designing a low cost development board for kids to play around with. I'm aiming for a sub-$20 price tag and so far it seems fine. I have a board with (I am assuming the cost of 5000 units):
* ARM9 (lpc3130, 180 MHz, single-core) = $4
* 128 MB of sdram = $4
* SD card (mass storage) = $2 (socket)
* 1MB spi boot flash = $1
* Serial output = $5 (using an usb-serial convertor)
* 4 layer PCB = $5
This simple board is coming in at the right price and has the basic features. I'm trying to introduce VGA output without too much additional cost (maybe $5 more). I might reduce the RAM to 64 MB (since it's for educational purposes anyway). The PCB size is around 2x2.5 inches at the moment and it might go a little higher. Also want to put an Ethernet connector that might jack up the price by another $5.
The reason I'm posting this here is because I am planning to write a lot of articles detailing the process of building an operating system for this board. The idea is to introduce kids to assembly/C programming, processor architectures, user manuals, development tools etc. I will be building up an OS from scratch and would love comments from this awesome community
Any suggestions on the kernel design are much appreciated. Currently, I am leaning towards a simple POSIX compliant operating system clocking in below 5-6k lines of C+asm code. More importantly, I want to show the process of evolving an operating system to create more reliability and scalability with a clean, readable design. It's a little ambitious and I am willing to put the next few years of my life into the project
Thanks!
OS Development Platform
- NickJohnson
- Member
- Posts: 1249
- Joined: Tue Mar 24, 2009 8:11 pm
- Location: Sunnyvale, California
Re: OS Development Platform
Sounds like a great project!
Just one concern. A 5-6k line limit seems a bit low, depending on how you're measuring it. If you are only counting the kernel, a microkernel can come in well below that (mine is 3.5k and feature-complete,) but the entire system will likely be a lot more than that if you want to make it POSIX-compliant. A monolithic kernel would be in some ways against the grain of "reliablity, scalability, and a clean, readable design," but would definitely reduce the total number of lines dedicated to the kernel and drivers. Considering that you are dealing with a small number of drivers, it may actually produce a cleaner design in the end, or at least a flatter, more transparent one. However, a microkernel would obviously be more modular and more representative of modern system design.
Also, I'm sort of wondering what your intended audience is. At my university, there is a class where we do development in C for the GameBoy Advance (basically an ARM7TDMI with built-in graphics), as a way of learning low-level programming. It's not quite OS development, but it's a similar concept, and the use of an embedded, uniform platform is quite useful. Is the idea to do something like this, but with hardware powerful enough for a real OS? (i.e. with a processor with an MMU and some reasonable connectivity)
Just one concern. A 5-6k line limit seems a bit low, depending on how you're measuring it. If you are only counting the kernel, a microkernel can come in well below that (mine is 3.5k and feature-complete,) but the entire system will likely be a lot more than that if you want to make it POSIX-compliant. A monolithic kernel would be in some ways against the grain of "reliablity, scalability, and a clean, readable design," but would definitely reduce the total number of lines dedicated to the kernel and drivers. Considering that you are dealing with a small number of drivers, it may actually produce a cleaner design in the end, or at least a flatter, more transparent one. However, a microkernel would obviously be more modular and more representative of modern system design.
Also, I'm sort of wondering what your intended audience is. At my university, there is a class where we do development in C for the GameBoy Advance (basically an ARM7TDMI with built-in graphics), as a way of learning low-level programming. It's not quite OS development, but it's a similar concept, and the use of an embedded, uniform platform is quite useful. Is the idea to do something like this, but with hardware powerful enough for a real OS? (i.e. with a processor with an MMU and some reasonable connectivity)
Re: OS Development Platform
Yes.berkus wrote:Any advantages over http://www.raspberrypi.org/?
1. Simplicity. The ARM926EJ-S architecture of the LPC3130 is much simpler than that of the BCM2835 application processor of the raspi (it's an ARM1176JZ-F core). The ARM926EJ-S is much easier to learn as an architecture and doesn't have the unnecessary bells and whistles.
2. Openness. There is no documentation available for the BCM2835. Not even a 1-page summary of its features. (http://www.broadcom.com/products/BCM2835). The only posts about the SoC is with relation to the raspi project. NXP on the other hand has excellent documentation for its lpc3130 (http://www.nxp.com/products/microcontro ... _3131.html). People won't get far with hacking on the device without good documentation :-/
3. Finally, does it matter? People can always buy both. At around $20 to buy one of these, I doubt many people will care over the differences. Just what can be learned from them. And as we all know, nothing is more awesome than hacking an entire system from scratch
Last edited by mvanga on Wed Nov 16, 2011 7:25 am, edited 1 time in total.
Re: OS Development Platform
Thanks!NickJohnson wrote:Sounds like a great project!
You're probably right. The line limit was just a suggestion to indicate (not very well, as you said) the point that I want to keep the code clean and simple.NickJohnson wrote:Just one concern. A 5-6k line limit seems a bit low, depending on how you're measuring it. If you are only counting the kernel, a microkernel can come in well below that (mine is 3.5k and feature-complete,) but the entire system will likely be a lot more than that if you want to make it POSIX-compliant. A monolithic kernel would be in some ways against the grain of "reliablity, scalability, and a clean, readable design," but would definitely reduce the total number of lines dedicated to the kernel and drivers. Considering that you are dealing with a small number of drivers, it may actually produce a cleaner design in the end, or at least a flatter, more transparent one. However, a microkernel would obviously be more modular and more representative of modern system design.
Yes exactly. A more "full-featured" machine, if you will. I actually want to do some tutorials on the design of the board itself as well, with explanations of the various parts of the circuit.NickJohnson wrote:Also, I'm sort of wondering what your intended audience is. At my university, there is a class where we do development in C for the GameBoy Advance (basically an ARM7TDMI with built-in graphics), as a way of learning low-level programming. It's not quite OS development, but it's a similar concept, and the use of an embedded, uniform platform is quite useful. Is the idea to do something like this, but with hardware powerful enough for a real OS? (i.e. with a processor with an MMU and some reasonable connectivity)