GitKernelBuild
Size: 5347
Comment:
|
Size: 4567
Comment: Added information about --revision and --append-to-version options of make-kpkg.
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;"><<TableOfContents>>|| Also refer to https://help.ubuntu.com/community/Kernel/Compile for building Ubuntu kernels. |
|
Line 3: | Line 7: |
The following document should help users build their own kernel from the upstream mainline kernel to help verify if a bug still exists or not. If a bug is still present in the upstream kernel, it is encouraged that the bug be reported to http://bugzilla.kernel.org . The bug submission process for http://bugzilla.kernel.org will be outlined at the end of the document. Please note that the following steps are targeted towards Ubuntu users and will focus on building the mainline kernel from the git repository at http://git.kernel.org . | The following document should help users build their own kernel from the upstream mainline kernel to help verify if a bug still exists or not. If a bug is still present in the upstream kernel, it is encouraged that the bug be reported to http://bugzilla.kernel.org . The bug submission process for http://bugzilla.kernel.org is outlined at the end of the document. Please note that the following steps are targeted towards Ubuntu users and focuses on building the mainline kernel from the git repository at http://git.kernel.org . |
Line 7: | Line 11: |
There are a few tools that are necessary in order to build your own kernel(s). The 'git-core' package provides the git revision control system which will be used to clone the mainline git repository. The 'kernel-package' provides the make-kpkg utility which automatically build your kernel and generate the linux-image and linux-header .deb files which will get installed. Please install both of these packages. | There are a few tools that are necessary in order to build your own kernel(s). The 'git-core' package provides the git revision control system which will be used to clone the mainline git repository. The 'kernel-package' provides the make-kpkg utility which automatically build your kernel and generate the linux-image and linux-header .deb files which can be installed. You will need to install both of these packages. |
Line 10: | Line 14: |
sudo apt-get install git-core kernel-package | sudo apt-get install git-core kernel-package fakeroot build-essential ncurses-dev |
Line 14: | Line 18: |
1. Change to the directory where you want to clone the git tree. In this example we will use /usr/src {{{ cd /usr/src |
1. Change to the directory where you want to clone the git tree. In this example we will use /home/ubuntu {{{ cd /home/ubuntu |
Line 18: | Line 23: |
{{{ sudo git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git | {{{ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git |
Line 21: | Line 27: |
{{{ cd linux-2.6 | {{{ cd linux-2.6 |
Line 24: | Line 31: |
{{{ sudo cp /boot/config-`uname -r`.config . | {{{ cp /boot/config-`uname -r` .config |
Line 27: | Line 35: |
{{{ sudo make oldconfig | {{{ make oldconfig |
Line 30: | Line 39: |
{{{ sudo make menuconfig | {{{ make menuconfig |
Line 32: | Line 42: |
Note that Ubuntu kernels build with debugging information on, which makes the resulting kernel modules (*.ko files) much larger than they would otherwise be (linux-image*.deb will be 200-300 MB instead of 20-30 MB). To turn this off, go into "Kernel hacking"; then, under "Kernel debugging", turn OFF "Compile the kernel with debug info". Cf. [[https://bugs.launchpad.net/ubuntu/+source/kernel-package/+bug/90283|bug 90283]] | |
Line 33: | Line 44: |
{{{ sudo make-kpkg clean | {{{ make-kpkg clean |
Line 35: | Line 47: |
1. Build the linux-image and linux-header .deb files. {{{ sudo fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers |
1. Build the linux-image and linux-header .deb files (CONCURRENCY_LEVEL can also be set manually to how many CPUs/cores to use to build the kernel). {{{ CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers |
Line 38: | Line 51: |
With this command the package names will be something like linux-image-2.6.24-rc5-custom and linux-headers-2.6.24-rc5-custom, and in that case the version will be 2.6.24-rc5-custom-10.00.Custom. You may change the string custom into something else by changing the `--append-to-version` option. You may also change the default 10.00.Custom into something else by using the `--revision` option. | |
Line 39: | Line 53: |
{{{ cd .. | {{{ cd .. |
Line 41: | Line 56: |
1. Now install the .deb files. In this example the files are linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb and linux-headers-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb and {{{ sudo dpkg -i linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb |
1. Now install the .deb files. In this example, the files are linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb and linux-headers-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb. You may receive warnings about '/lib/firmware/2.6.24-rc5-custom/' - this is expected and will only be problematic if the driver you are trying to test requires firmware. {{{ sudo dpkg -i linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb |
Line 45: | Line 61: |
1. You are now ready to boot into your new kernel. Just to make sure you select the new kernel when you boot. {{{ sudo reboot |
1. You are now ready to boot into your new kernel. Just make sure you select the new kernel when you boot. {{{ sudo reboot |
Line 50: | Line 67: |
Unfortunately it is sometimes the case that bugs can still exist in the mainline kernel. The mainline kernel has their own bugtracking system at http://bugzilla.kernel.org . It would be helpful if you would also report your bug there. It is often the case that once a bug is escalated upstream there is a quick resolution through the help and support of the mainline kernel community. Bug reports in Launchpad can also be set up to monitor bugs reported in other bugtracking systems. The following steps should help you report your bug upstream and monitor it in Launchpad: 1. Go to http://bugzilla.kernel.org 1. Verify your bug does not already exist in the upstream bugtracking system. i. If it does exist, please add any useful information that may be lacking in the current report. * Link your Launchpad report to the upstream kernel bug report (see step 5). i. If your bug does not exist, proceed to the next step. 1. Enter your bug report at http://bugzilla.kernel.org/enter_bug.cgi . Follow the instructions on that page. 1. When creating your bug report be sure to _attach_ any relevant information. This will usually include: i. the version of the kernel you are running (uname -r) i. dmesg output. i. lspci -vvnn output. i. If the bug is about interrupts, then /proc/interrupts is also helpful. i. If a BIOS issue is suspected, dmidecode output is also helpful. i. If the bug is regarding memory oddities, /proc/mtrr info is also helpful. i. Most importantly, if this is a regression, the best information you can provide the kernel developers is the information from doing a git bisect. This will hopefully narrow down the exact patch that is causing the regression. * http://www.reactivated.net/weblog/archives/2006/01/using-git-bisect-to-find-buggy-kernel-patches/ 1. After you've reported your bug to the kernel bugzilla, remember to set up your Launchpad bug report to monitor the upstream bugzilla report. i. On your Launchpad bug report page, look in the "Actions" area on the left hand side of the page. i. Click the "Also affects project" link. i. Enter the URL of your bugzilla report. i. Click the "Add to Bug Report" button. i. Your Launchpad report is not monitoring your upstream bugzilla report. |
<<Include(KernelTeam/KernelTeamBugPolicies, , from="== Reporting Bugs Upstream ==$", to="==")>> |
Also refer to https://help.ubuntu.com/community/Kernel/Compile for building Ubuntu kernels.
Many times patches for bugs are committed upstream but have yet to make their way down to the Ubuntu kernel. It is often helpful if users are able to verify if the upstream patches do indeed resolve the issue they are witnessing. Likewise, in the opposite situation, it is useful to know if a bug may still exist upstream.
The following document should help users build their own kernel from the upstream mainline kernel to help verify if a bug still exists or not. If a bug is still present in the upstream kernel, it is encouraged that the bug be reported to http://bugzilla.kernel.org . The bug submission process for http://bugzilla.kernel.org is outlined at the end of the document. Please note that the following steps are targeted towards Ubuntu users and focuses on building the mainline kernel from the git repository at http://git.kernel.org .
Prerequisites
There are a few tools that are necessary in order to build your own kernel(s). The 'git-core' package provides the git revision control system which will be used to clone the mainline git repository. The 'kernel-package' provides the make-kpkg utility which automatically build your kernel and generate the linux-image and linux-header .deb files which can be installed. You will need to install both of these packages.
sudo apt-get install git-core kernel-package fakeroot build-essential ncurses-dev
Kernel Build and Installation
- Change to the directory where you want to clone the git tree. In this example we will use /home/ubuntu
cd /home/ubuntu
- Clone the mainline kernel git tree.
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
- Change to linux-2.6 directory.
cd linux-2.6
- Copy the kernel config file from your existing system to the kernel tree.
cp /boot/config-`uname -r` .config
- Bring the config file up to date. (Answer any questions that get prompted).
make oldconfig
- (optional) If you need to make any kernel config changes, do the following and save your changes when prompted:
make menuconfig
Note that Ubuntu kernels build with debugging information on, which makes the resulting kernel modules (*.ko files) much larger than they would otherwise be (linux-image*.deb will be 200-300 MB instead of 20-30 MB). To turn this off, go into "Kernel hacking"; then, under "Kernel debugging", turn OFF "Compile the kernel with debug info". Cf. bug 90283
- Clean the kernel source directory.
make-kpkg clean
- Build the linux-image and linux-header .deb files (CONCURRENCY_LEVEL can also be set manually to how many CPUs/cores to use to build the kernel).
CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
With this command the package names will be something like linux-image-2.6.24-rc5-custom and linux-headers-2.6.24-rc5-custom, and in that case the version will be 2.6.24-rc5-custom-10.00.Custom. You may change the string custom into something else by changing the --append-to-version option. You may also change the default 10.00.Custom into something else by using the --revision option.
- Change to one directory level up (this is where the linux-image and linux-header .deb files were put)
cd ..
- Now install the .deb files. In this example, the files are linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb and linux-headers-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb. You may receive warnings about '/lib/firmware/2.6.24-rc5-custom/' - this is expected and will only be problematic if the driver you are trying to test requires firmware.
sudo dpkg -i linux-image-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb sudo dpkg -i linux-headers-2.6.24-rc5-custom_2.6.24-rc5-custom-10.00.Custom_i386.deb
- You are now ready to boot into your new kernel. Just make sure you select the new kernel when you boot.
sudo reboot
Reporting Bugs Upstream
Include: Nothing found for "== Reporting Bugs Upstream ==$"!
Contents |
Filing downstream kernel bug reports
In order to automatically gather and attach necessary system information to a bug report, the preferred method for reporting a Ubuntu kernel bug is run the following command from a terminal window (Applications->Accessories->Terminal):
ubuntu-bug linux
The submitter should provide as much information as possible in the bug description:
- The majority of kernel bug are hardware specific so be sure to note what hardware/device is being used.
- Document any known steps to reproduce the bug.
- Also note whether the bug exists in previous kernel versions of Ubuntu or if it's a regression from previous kernel versions.
Finally, it's critical to also make sure to test the latest development Ubuntu kernel version as well as the latest upstream mainline kernel.
If there are any questions about what information to provide, please contact a developer in the #ubuntu-kernel channel on the IRC server for help on how to file a bug.
KernelTeam/GitKernelBuild (last edited 2025-01-31 23:23:40 by tim-richardson)