Saturday, May 30, 2009

Where we are with Dingoo Linux: WTF is a kernel?

Someone a few posts down asked: what is a kernel? There’s nothing here that a quick Google and lots of hours spent immersed in the jargon of software architecture won’t also yield, and better, but in an attempt to save you the trouble, here I go (just don’t expect to actually learn too much!). 

A picture says a thousand words.  Our friend Wikipedia has this stuff on it:

In computing, the kernel is the central component of most computer operating systems. Its responsibilities include managing the system's resources (the communication between hardware and software components).[1] As a basic component of an operating system, a kernel provides the lowest-level abstraction layer for the resources (especially memory, processors and I/O devices) that application software must control to perform its function. It typically makes these facilities available to application processes through inter-process communication mechanisms and system calls.
So, a kernel connects the application software to the hardware of a computer:
image

A typical vision of a computer architecture as a series of abstraction layers: hardware, firmware, assembler, kernel, operating system and applications:
image

The kernel's primary purpose is to manage the computer's resources and allow other programs to run and use these resources.

Typically, the resources consist of:

  • The Central Processing Unit (CPU, the processor). This is the most central part of a computer system, responsible for running or executing programs on it. The kernel takes responsibility for deciding at any time which of the many running programs should be allocated to the processor or processors (each of which can usually run only one program at a time)
  • The computer's memory. Memory is used to store both program instructions and data. Typically, both need to be present in memory in order for a program to execute. Often multiple programs will want access to memory, frequently demanding more memory than the computer has available. The kernel is responsible for deciding which memory each process can use, and determining what to do when not enough is available.
  • Any Input/Output (I/O) devices present in the computer, such as keyboard, mouse, disk drives, printers, displays, etc. The kernel allocates requests from applications to perform I/O to an appropriate device (or subsection of a device, in the case of files on a disk or windows on a display) and provides convenient methods for using the device (typically abstracted to the point where the application does not need to know implementation details of the device).

The Linux kernel is of course very mature, can work an lots of hardware, and appears to live here. But obviously, you can’t just download it, stuff it onto your Dingoo and have it go. Booboo’s main challenges when building the Dingoo kernel (I seem to recall from previous posts) were getting the LCD screen, GPIO, and sound working. (Clarification welcome!).

What goes into getting Linux kernel working on specific hardware like the Dingoo? I’m really not sure, but one can a sense of what’s involved in rebuilding the Linux kernel – and getting it to work with specific hardware -  here.  If your appetite has been wetted and you’re keen to make Linux for your toaster or something, you might find the Linux from Scratch project interesting. Or download and read the book.

The above is nothing more than a cursory glance at the concept of a kernel. It does emphasise how fortunate the non-tech among us of the Dingoo community is that as of today, we can simply click here to get a working Dingoo Linux kernel.

1 comment :