![Post Post](./styles/serenity/imageset/icon_topic_latest.gif)
Re: OS with Linux Kernel Tutorial
well, you would need to map every single dependency that the server software has. Typically, this isn't much. For example, if you were setting up a webserver you might have:
Linux 2.6.33, BusyBox, Iana-Etc, zlib, e2fsprogs, perl/php5/python/falconpl/ruby, openssl, openssh, termcap, iptables, and nginx (though busybox does have an httpd in it already)
Adding to this you will have to create a root file system, get a cross compiler set up, write some boot scripts, and configure everything.
your main issue here is that open source software is mostly built on top of other open source software. the web of dependencies is vast, complex, and often the source of endless frustration. this is made especially poignant when developers either do not release all of the dependencies of a given piece of software, or when they neglect to mention a dependency and are insanely difficult to get in touch with.
Now, if the server software you use does not have ANY dependencies, you could get away with only having busybox and a kernel... You could also simply create all of the tools you need, which is where the books you bought will come in handy. Those books will also come in handy in the case that you would like to tailor the kernel, the init system, and everything else to you own liking for this server software.
Linux is structured in a somewhat odd way if you are coming from the Windows world. Basically, the boot loader puts the kernel in memory. Linux separates memory into user space and kernel space, where drivers are loaded as modules and run as user mode processes. The kernel, once loaded, looks for an init system. The init system loads services (daemons in UNIX talk). By default the kernel will look at /sbin/init which normally doesn't happen. Most distributions use either sysvinit or upstart, neither of which are simple. Init will launch getty at some point. Getty will wait for input of a username, and once that input is given it will launch login and pass the user name to login. Login will then compare that input to the password file, upon a match it will fire up a shell, upon mismatch it will die and return control to getty. If you are looking to essentially create a non-GNU/Linux you would need to write the init system, the getty program, the login program, and the shell. The shell could be a single executable with all of the commands built into it (like busybox), or it can be several small programs that are accessed through a command interpreter (like bash) (coreutils, linux-utils, asmutils all expect bash or some other command interpreter to be present). These things alone would not be enough either. You would need a way to activate and setup your network connection. This is normally done by ifconfig and dhclient/dhcpcd. Beyond that, if the server software looks for any other applications, commands, or libraries you may need to write implementations of the things that it depends upon.
Some useful sites:
http://tldp.org/HOWTO/html_single/Imple ... -2.6-i386/http://bluemaster.iu.hio.no/edu/dark/li ... calls.htmlhttp://asm.sourceforge.net/asmutils.htmlhttp://www.busybox.net/http://tldp.org/