Difference between revisions of "Custom Linux Kernel Development"
m (minor edit) |
(added table of source structure) |
||
Line 22: | Line 22: | ||
=== Kernel Source Structure === | === Kernel Source Structure === | ||
− | Within the source | + | Within the kernel source tree that was downloaded, you will see several directories. Table 1 gives a brief description of each of these directories. |
+ | {| class="wikitable mw-collapsible" | ||
+ | |- | ||
+ | ! Directory name !! Description | ||
+ | |- | ||
+ | | <code>arch</code> || Architecture-specific kernel code with subdirectories for each architecture | ||
+ | |- | ||
+ | | <code>include</code> || Include (header) files required to build the kernel code | ||
+ | |- | ||
+ | | <code>init</code> || Kernel initialization code | ||
+ | |- | ||
+ | | <code>mm</code> || Memory management code | ||
+ | |- | ||
+ | | <code>drivers</code> || Device driver code, with a subdirectory structure for each device type | ||
+ | |- | ||
+ | | <code>ipc</code> || Interprocess communications code | ||
+ | |- | ||
+ | | <code>fs</code> || File systems code | ||
+ | |- | ||
+ | | <code>kernel</code> || Main internal kernel code | ||
+ | |- | ||
+ | | <code>net</code> || Kernel networking code | ||
+ | |- | ||
+ | | <code>lib</code> || Library code | ||
+ | |- | ||
+ | | <code>scripts</code> || Various scripts used for the configuration and build process as well as standalone utility scripts | ||
+ | |- | ||
+ | | <code>block</code> || Block device driver code | ||
+ | |- | ||
+ | | <code>firmware</code> || Code for building firmware required to communicate with devices | ||
+ | |- | ||
+ | | <code>samples</code> || Code examples and drivers that have not been fully developed | ||
+ | |- | ||
+ | | <code>virt</code> || Virtualization support code | ||
+ | |- | ||
+ | | <code>sound</code> || Sound and audio driver code | ||
+ | |- | ||
+ | | <code>crypto</code> || Encryption support algorithms | ||
+ | |- | ||
+ | | <code>security</code> || Kernel security support | ||
+ | |- | ||
+ | | <code>usr</code> || Code used during kernel image creation | ||
+ | |- | ||
+ | | <code>Documentation</code> || Text documentation files on the kernel and APIs | ||
+ | |- | ||
+ | |} | ||
+ | |||
== Configuration == | == Configuration == | ||
Line 37: | Line 83: | ||
Basic info on driver structure here. | Basic info on driver structure here. | ||
+ | |||
+ | == Licensing == | ||
Revision as of 18:34, 29 December 2013
The ability to easily customize and expand any portion of the kernel is a feature of Linux that makes it very well suited for embedded systems development. In the embedded environment, specialized hardware, protocols, and systems may require a look into the kernel internals, custom configuration, feature additions, or driver development. This article aims to provide information on the most common kernel development tasks for EMAC OE Linux systems. In addition, the reader is pointed to additional sources for kernel development resources.
Before continuing, make sure that git tools are installed on your development machine, and review the Building the Linux Kernel document.
Contents
The Kernel Source
Source code for EMAC kernels is provided through our Git server. Refer to the documentation for your system to determine the correct source to use.
For this guide, the 2.6.30-at91 kernel tree will be used, which currently covers many of EMAC's SoM-based ARM products. |
Clone the Git Repository
To clone the git repository over anonymous HTTP, run the following commands:
developer@ldc:~$ git clone http://git.emacinc.com/public/source/linux-2.6.30-at91.git
Once the command has completed, the entire source should be contained in the linux-2.6.30-at91
directory. The master branch will be checked out automatically. Because EMAC uses the master branch for all releases, this is the correct branch to use, but other branches or tags may be checked out if directed or required.
Kernel Source Structure
Within the kernel source tree that was downloaded, you will see several directories. Table 1 gives a brief description of each of these directories.
Directory name | Description |
---|---|
arch |
Architecture-specific kernel code with subdirectories for each architecture |
include |
Include (header) files required to build the kernel code |
init |
Kernel initialization code |
mm |
Memory management code |
drivers |
Device driver code, with a subdirectory structure for each device type |
ipc |
Interprocess communications code |
fs |
File systems code |
kernel |
Main internal kernel code |
net |
Kernel networking code |
lib |
Library code |
scripts |
Various scripts used for the configuration and build process as well as standalone utility scripts |
block |
Block device driver code |
firmware |
Code for building firmware required to communicate with devices |
samples |
Code examples and drivers that have not been fully developed |
virt |
Virtualization support code |
sound |
Sound and audio driver code |
crypto |
Encryption support algorithms |
security |
Kernel security support |
usr |
Code used during kernel image creation |
Documentation |
Text documentation files on the kernel and APIs |
Configuration
Refer to configuration section in the kernel building document. Show how to add / remove options in the config.
Adding Support for a new Carrier Board
Show how to add a carrier board in the 2.6.30 "emac-carrier" structure.
Driver Development
Basic info on driver structure here.
Licensing
Where to go for Additional Information
LDD3, mailing list, EMAC support.