2183
Comment:
|
6593
|
Deletions are marked like this. | Additions are marked like this. |
Line 9: | Line 9: |
Tip: You may want to pin the terminal app for easy access by hitting the Windows logo key, moving your mouse over the terminal icon on the left vertical menu, right clicking, and chosing "Lock to Launcher". You can make the menu go away by hitting the escape key. | Tip: You may want to pin the terminal app for easy access. Do that by hitting the Windows logo key, moving your mouse over the terminal icon on the left vertical menu, right clicking, and chosing "Lock to Launcher". You can make the menu go away by hitting the escape key. |
Line 18: | Line 18: |
Once that finishes, run these three commands: | Once that finishes, run these two commands: |
Line 20: | Line 20: |
mkdir git mkdir git/kernels |
mkdir -p git/kernels |
Line 24: | Line 23: |
Tip: mkdir creates directories, and cd changes the current working directory to a different directory. You can learn more about any command by reading the manual pages. Simply prefixing the command with the word "man", e.g. {{{man mkdir}}}. | Tip: mkdir creates directories, and cd changes the current working directory to a different directory. You can learn more about any command by reading the manual pages. Simply prefixing the command with the word "man", e.g. {{{man mkdir}}}. |
Line 31: | Line 30: |
== Optional suggestions for Ubuntu == | That's going to take a while. Why don't you read up on [http://lwn.net/Kernel/LDD3/ Linux Device Drivers] in the meantime? The first couple of chapters, especially the ones on kernel modules will be useful. |
Line 33: | Line 32: |
You might want to change some Ubuntu default settings. By default, after the system is idle, the screen blanks and you'll have to re-enter your password when you start using it. You can turn off the screen lock on resume by hitting the Windows key, clicking the wrench icon ("System Settings") in the left vertical menu. Then click the "Brightness and Lock" icon, and hit the Lock toggle button to make it read OFF. You probably still want to require your password when waking from suspend, but it's up to you. | Next, change into the linux directory: |
Line 35: | Line 34: |
You can close an app at any time by hitting the X button on the top left of the window, or if the window is maximized, moving your mouse cursor to the top left, and clicking the X button that's revealed. Do not close the terminal in this way. It's safer to close it by hitting CTRL+d, because it will prompt you if you still have programs running in the background. | {{{ cd linux}}} Now you need to compile the kernel. The first step is setting up your kernel configuration. = Setting up your kernel configuration = Many kernel drivers can be turned on or off, or built as modules. The .config file in the kernel source directory determines which drivers are built. When you download the source tree, it doesn't come with a .config file. You have several options on generating a .config file. The easiest is to duplicate your current config. == Duplicating your current config == If you're trying to see if a bug is fixed, you probably want to duplicate the configuration on your running kernel. That config file is stored somewhere in /boot/. There might be several files that start with config, so you want the one associated with your running kernel. You can find that by running `uname -a` and finding the config file that ends with your kernel version number. Copy that file into the source directory as .config. Or just run this command: {{{ cp /boot/config-`uname -r`* .config }}} == Changing your config == If you need to make any changes to your configuration, you can run one of the following commands. These require the curses tools to be installed. {{{ make menuconfig}}} = Building the kernel = Run {{{ make}}} Or, if you have a multi-core processor, run {{{ make -jX }}} Where X is a number like 2 or 4. If you have a dual core, 2 or 3 might be good. Quad core, 4 or 6. Do not run with really big numbers unless you want your machine to be dog-slow! Let that compile, and maybe read some more of the [http://lwn.net/Kernel/LDD3/ Linux Device Drivers] book. Note: when you run make with a .config file that was copied from a different kernel than the one you were building, you may be prompted to make choices about which new kernel features to enable. When in doubt, just choose the default choice. You can do that by hitting enter. A faster way to simply chose all the defaults is to run {{{make menuconfig}}}. == Installing the kernel == To install a kernel, you will need to either manually update your GRUB configuration file, or have an installkernel script. This script installs the kernel to /boot/, installs modules to /lib/modules/X.Y.Z/ (where X.Y.Z is something like 3.1.5), and updates file /boot/grub/grub.conf. Fortunately, Ubuntu provides an installkernel script in /sbin/installkernel. The grubby RPM provides it for RPM based systems. If you have an installkernel script, you can just run {{{ sudo make modules_install install }}} Or if you don't have sudo installed, run {{{ su -c "make modules_install install" }}} == Running your kernel == Linux stores both old and new kernel versions, so you can boot into your old kernel if you run into issues with your new kernel. The bootloader program called grub lets you chose which kernel you want to boot into. The grub bootloader usually presents users with a choice of kernels and you can reboot into a known good kernel if your new compile doesn't work. Some distros (like Ubuntu) use a default grub configuration that hides that menu. You can usually get the menu to appear by mashing the ESC key during boot after the BIOS display disappears. To make the grub boot menu always appear under Ubuntu, run {{{ sudo vim /etc/default/grub }}} Then delete these two lines: {{{ GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true }}} This next line controls how long grub shows the menu before it choses the kernel at the top of the list (which is usually the most recent kernel): {{{ GRUB_TIMEOUT=10 }}} You may want to increase the GRUB_DEFAULT timeout from 10 seconds to 30 seconds or more. I set it to 60 seconds. After you've finished editing the grub file, you need to tell grub that you made a change, so that can re-write some automatically generated files. Run this command: {{{ sudo update-grub2 }}} You will (usually) need to reboot into your new kernel. = Email software = To send patches, you will need to be able to have a mail transport client installed: {{{ sudo apt-get install esmtp}}} Now you will be able to send email through git-send-email. However, we also recommend having a mail client installed that can handle plain text patch format. Our recommendation is a text-based email client called mutt: {{{ sudo apt-get install mutt}}} = Optional tools = {{{sudo apt-get install gitk }}} In the {{{git/kernels/linux/}}} directory, run {{{make tags }}} That will make ctags for the source code. When you start editing code in vim from the base directory ({{{git/kernels/linux/}}}), you can use the CTRL+[ to look up the definition of a function. See the [http://vim.wikia.com/wiki/Browsing_programs_with_tags ctags entry] in the vim tips wiki for more info. = Done! = Yay, you're done setting up your kernel development environment! Now go back to the [:OPWfirstpatch:OPW first patch] page to get more instructions for how to modify the Linux kernel and send your first patch. |
Developing on a native Linux platform
These instructions assume you're running a varient of Ubuntu (like 12.04 LTS).
Install some packages
First, open a terminal. Click the ubuntu logo at the top left corner and type "terminal". Click the terminal screen icon.
- Tip: You may want to pin the terminal app for easy access. Do that by hitting the Windows logo key, moving your mouse over the terminal icon on the left vertical menu, right clicking, and chosing "Lock to Launcher". You can make the menu go away by hitting the escape key.
Next, run this command:
sudo apt-get install vim libncurses5-dev gcc make git exuberant-ctags
Setup your Linux kernel code repository
Once that finishes, run these two commands:
mkdir -p git/kernels cd git/kernels
Tip: mkdir creates directories, and cd changes the current working directory to a different directory. You can learn more about any command by reading the manual pages. Simply prefixing the command with the word "man", e.g. man mkdir.
Then use the revision control system called [http://git-scm.com/ git] to clone Linus Torvalds' repository:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
That's going to take a while. Why don't you read up on [http://lwn.net/Kernel/LDD3/ Linux Device Drivers] in the meantime? The first couple of chapters, especially the ones on kernel modules will be useful.
Next, change into the linux directory:
cd linux
Now you need to compile the kernel. The first step is setting up your kernel configuration.
Setting up your kernel configuration
Many kernel drivers can be turned on or off, or built as modules. The .config file in the kernel source directory determines which drivers are built. When you download the source tree, it doesn't come with a .config file. You have several options on generating a .config file. The easiest is to duplicate your current config.
Duplicating your current config
If you're trying to see if a bug is fixed, you probably want to duplicate the configuration on your running kernel. That config file is stored somewhere in /boot/. There might be several files that start with config, so you want the one associated with your running kernel. You can find that by running uname -a and finding the config file that ends with your kernel version number. Copy that file into the source directory as .config. Or just run this command:
cp /boot/config-`uname -r`* .config
Changing your config
If you need to make any changes to your configuration, you can run one of the following commands. These require the curses tools to be installed.
make menuconfig
Building the kernel
Run
make
Or, if you have a multi-core processor, run
make -jX
Where X is a number like 2 or 4. If you have a dual core, 2 or 3 might be good. Quad core, 4 or 6. Do not run with really big numbers unless you want your machine to be dog-slow!
Let that compile, and maybe read some more of the [http://lwn.net/Kernel/LDD3/ Linux Device Drivers] book.
Note: when you run make with a .config file that was copied from a different kernel than the one you were building, you may be prompted to make choices about which new kernel features to enable. When in doubt, just choose the default choice. You can do that by hitting enter. A faster way to simply chose all the defaults is to run make menuconfig.
Installing the kernel
To install a kernel, you will need to either manually update your GRUB configuration file, or have an installkernel script. This script installs the kernel to /boot/, installs modules to /lib/modules/X.Y.Z/ (where X.Y.Z is something like 3.1.5), and updates file /boot/grub/grub.conf. Fortunately, Ubuntu provides an installkernel script in /sbin/installkernel. The grubby RPM provides it for RPM based systems.
If you have an installkernel script, you can just run
sudo make modules_install install
Or if you don't have sudo installed, run
su -c "make modules_install install"
Running your kernel
Linux stores both old and new kernel versions, so you can boot into your old kernel if you run into issues with your new kernel. The bootloader program called grub lets you chose which kernel you want to boot into.
The grub bootloader usually presents users with a choice of kernels and you can reboot into a known good kernel if your new compile doesn't work. Some distros (like Ubuntu) use a default grub configuration that hides that menu. You can usually get the menu to appear by mashing the ESC key during boot after the BIOS display disappears.
To make the grub boot menu always appear under Ubuntu, run
sudo vim /etc/default/grub
Then delete these two lines:
GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true
This next line controls how long grub shows the menu before it choses the kernel at the top of the list (which is usually the most recent kernel):
GRUB_TIMEOUT=10
You may want to increase the GRUB_DEFAULT timeout from 10 seconds to 30 seconds or more. I set it to 60 seconds.
After you've finished editing the grub file, you need to tell grub that you made a change, so that can re-write some automatically generated files. Run this command:
sudo update-grub2
You will (usually) need to reboot into your new kernel.
Email software
To send patches, you will need to be able to have a mail transport client installed:
sudo apt-get install esmtp
Now you will be able to send email through git-send-email. However, we also recommend having a mail client installed that can handle plain text patch format. Our recommendation is a text-based email client called mutt:
sudo apt-get install mutt
Optional tools
{{{sudo apt-get install gitk }}}
In the git/kernels/linux/ directory, run {{{make tags }}}
That will make ctags for the source code. When you start editing code in vim from the base directory (git/kernels/linux/), you can use the CTRL+[ to look up the definition of a function. See the [http://vim.wikia.com/wiki/Browsing_programs_with_tags ctags entry] in the vim tips wiki for more info.
Done!
Yay, you're done setting up your kernel development environment! Now go back to the [:OPWfirstpatch:OPW first patch] page to get more instructions for how to modify the Linux kernel and send your first patch.