Difference between revisions of "Kernel Reconfiguration"
Ashcharles (Talk | contribs) |
Ashcharles (Talk | contribs) |
||
(9 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
+ | [http://www.yoctoproject.org/docs/1.6.1/kernel-dev/kernel-dev.html This] provides the most complete documentation for kernel development in a Yocto environment. | ||
+ | |||
[[Category:How_to_-_linux]] | [[Category:How_to_-_linux]] | ||
[[Category:How_to_-_general]] | [[Category:How_to_-_general]] | ||
Line 5: | Line 7: | ||
[[http://bec-systems.com/site/521/best-practices-for-kernel-development-with-openembedded Using kernel tools]] | [[http://bec-systems.com/site/521/best-practices-for-kernel-development-with-openembedded Using kernel tools]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Overo== | ==Overo== | ||
− | These instructions assume you are using the default gumstix-oe kernel | + | These instructions assume you are using the default gumstix-oe kernel which is declared here |
$ cd $OVEROTOP | $ cd $OVEROTOP | ||
Line 60: | Line 21: | ||
linux-omap3 0:2.6.32-r51 | linux-omap3 0:2.6.32-r51 | ||
− | So the rest of the example will assume linux-omap3-2.6.32 revision 51. | + | So the rest of the example will assume linux-omap3-2.6.32 revision 51. This is the kernel that will be built when we use the reference 'virtual/kernel' in bitbake commands. |
Substitute the kernel version and revision your system is using in the following steps. | Substitute the kernel version and revision your system is using in the following steps. | ||
Line 69: | Line 30: | ||
If not run this command | If not run this command | ||
− | $ bitbake | + | $ bitbake virtual/kernel |
This will create a source directory in the ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi directory. | This will create a source directory in the ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi directory. | ||
Line 78: | Line 39: | ||
To modify the kernel configuration, run menuconfig via bitbake. Make your changes and save the configuration. | To modify the kernel configuration, run menuconfig via bitbake. Make your changes and save the configuration. | ||
− | + | $ bitbake -c menuconfig virtual/kernel | |
− | $ bitbake -c menuconfig | + | |
The new kernel configuration file you created can be found here. | The new kernel configuration file you created can be found here. | ||
Line 89: | Line 49: | ||
$ cp ${OVEROTOP}/tmp/work/overo-angstrom-linux/gnueabi/linux-omap3-2.6.32-r51/git/.config \ | $ cp ${OVEROTOP}/tmp/work/overo-angstrom-linux/gnueabi/linux-omap3-2.6.32-r51/git/.config \ | ||
${OVEROTOP}/org.openembedded.dev/recipes/linux/linux-omap3-2.6.32/overo/defconfig | ${OVEROTOP}/org.openembedded.dev/recipes/linux/linux-omap3-2.6.32/overo/defconfig | ||
+ | |||
+ | For 2.6.39 I used: | ||
+ | |||
+ | $ cp ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-2.6.39-r101/git/.config \ | ||
+ | ${OVEROTOP}/org.openembedded.dev/recipes/linux/linux-omap3/overo/defconfig | ||
Then rebuild the kernel. | Then rebuild the kernel. | ||
− | $ bitbake -c clean | + | $ bitbake -c clean virtual/kernel |
− | $ bitbake | + | $ bitbake virtual/kernel |
Then rebuild the rootfs to get the modules installed correctly. | Then rebuild the rootfs to get the modules installed correctly. | ||
− | Substitute the image you are using, the example | + | Substitute the image you are using, the example if you are using the omap3-console-image. |
$ bitbake omap3-console-image | $ bitbake omap3-console-image | ||
Line 104: | Line 69: | ||
[http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Creating-a-bootable-microSD-card/111.html microSD card] | [http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Creating-a-bootable-microSD-card/111.html microSD card] | ||
or by copying to [http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Writing-images-to-onboard-nand/111.html onboard nand]. | or by copying to [http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Writing-images-to-onboard-nand/111.html onboard nand]. | ||
+ | |||
+ | ==Verdex== | ||
+ | |||
+ | To reconfigure the kernel with the current state of Gumstix's OE things, you will need ''gnome-terminal''. Run this command: '''bitbake gumstix-kernel -c menuconfig''' | ||
+ | |||
+ | NOTE: You have to have ncurses and ncurses-dev installed in order for the MENUCONFIG to actually work.<br> | ||
+ | NOTE: If a screen flashes infront of you and dissapears edit $OE_HOME/org.openembedded.snapshot/conf/bitbake.conf to the following <br> | ||
+ | <code><pre> | ||
+ | -GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLRCCMD}' | ||
+ | +GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLCMDS}' | ||
+ | </pre></code> | ||
+ | |||
+ | NOTE: If you don't have gnome-terminal installed and wish to use xterm instead, use: | ||
+ | <code><pre> | ||
+ | -GNOME_TERMCMD = 'gnome-terminal --disable-factory -t "$TERMWINDOWTITLE"' | ||
+ | -GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLRCCMD}' | ||
+ | +GNOME_TERMCMD = 'xterm -title "$TERMWINDOWTITLE"' | ||
+ | +GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -e ${SHELLCMDS}' | ||
+ | </pre></code> | ||
+ | |||
+ | The kernel config information is kept in<br> | ||
+ | ''$OE_HOME/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.XX/gumstix-custom-YYYYY/defconfig''<br> | ||
+ | where XX is the current default kernel version for your bitbake environment. That nugget is set in the | ||
+ | ''$OE_HOME/com.gumstix.collection/conf/machine/include/gumstix.inc'' file, under the PREFERRED_VERSION_gumstix-kernel | ||
+ | and YYYYY is usually one of connex/basix/verdex. That nugget comes from<br> | ||
+ | ''$OE_HOME/build/conf/auto.conf'' | ||
+ | |||
+ | After running menuconfig, running "bitbake -c rebuild gumstix-kernel" will blow away the customizations just made. There is probably a better way to do this, but in order to preserve the customizations, you can copy the new config file and replace the default config. For example, to preserve a verdex board's config, do: | ||
+ | |||
+ | <code><pre> | ||
+ | cp \ | ||
+ | $OE_HOME/tmp/work/gumstix-custom-verdex-angstrom-linux-gnueabi/gumstix-kernel-2.6.21-r1/linux-2.6.21/.config \ | ||
+ | $OE_HOME/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig | ||
+ | </pre></code> | ||
+ | |||
+ | Now that you have replaced the default config, the following commands will rebuild and repackage the new kernel and create new images for you: | ||
+ | |||
+ | <code><pre> | ||
+ | bitbake -c rebuild gumstix-kernel | ||
+ | bitbake -c rebuild task-base-gumstix | ||
+ | bitbake gumstix-basic-image | ||
+ | </pre></code> | ||
+ | |||
==Other notes== | ==Other notes== |
Latest revision as of 15:42, 1 April 2016
This provides the most complete documentation for kernel development in a Yocto environment. There are several possible work flows for modifying the kernel: [Using bitbake] [Using kernel tools]
Overo
These instructions assume you are using the default gumstix-oe kernel which is declared here
$ cd $OVEROTOP $ grep linux org.openembedded/conf/machine/overo.conf PREFERRED_PROVIDER_virtual/kernel = "linux-omap3"
And the current revision as defined here
$ bitbake --show-versions | grep linux-omap3 linux-omap3 0:2.6.32-r51
So the rest of the example will assume linux-omap3-2.6.32 revision 51. This is the kernel that will be built when we use the reference 'virtual/kernel' in bitbake commands.
Substitute the kernel version and revision your system is using in the following steps.
First build the kernel normally with bitbake. If you have built an image, then it's already done.
If not run this command
$ bitbake virtual/kernel
This will create a source directory in the ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi directory. In this case it will be
${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-2.6.32-r51
To modify the kernel configuration, run menuconfig via bitbake. Make your changes and save the configuration.
$ bitbake -c menuconfig virtual/kernel
The new kernel configuration file you created can be found here.
${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-2.6.32-r51/git/.config
Copy that file to where the bitbake recipe for the kernel will use it.
$ cp ${OVEROTOP}/tmp/work/overo-angstrom-linux/gnueabi/linux-omap3-2.6.32-r51/git/.config \ ${OVEROTOP}/org.openembedded.dev/recipes/linux/linux-omap3-2.6.32/overo/defconfig
For 2.6.39 I used:
$ cp ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-2.6.39-r101/git/.config \ ${OVEROTOP}/org.openembedded.dev/recipes/linux/linux-omap3/overo/defconfig
Then rebuild the kernel.
$ bitbake -c clean virtual/kernel $ bitbake virtual/kernel
Then rebuild the rootfs to get the modules installed correctly.
Substitute the image you are using, the example if you are using the omap3-console-image.
$ bitbake omap3-console-image
Finally, install the new kernel and rootfs the way you normally would using either a microSD card or by copying to onboard nand.
Verdex
To reconfigure the kernel with the current state of Gumstix's OE things, you will need gnome-terminal. Run this command: bitbake gumstix-kernel -c menuconfig
NOTE: You have to have ncurses and ncurses-dev installed in order for the MENUCONFIG to actually work.
NOTE: If a screen flashes infront of you and dissapears edit $OE_HOME/org.openembedded.snapshot/conf/bitbake.conf to the following
-GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLRCCMD}'
+GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLCMDS}'
NOTE: If you don't have gnome-terminal installed and wish to use xterm instead, use:
-GNOME_TERMCMD = 'gnome-terminal --disable-factory -t "$TERMWINDOWTITLE"'
-GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -x ${SHELLRCCMD}'
+GNOME_TERMCMD = 'xterm -title "$TERMWINDOWTITLE"'
+GNOME_TERMCMDRUN = '${GNOME_TERMCMD} -e ${SHELLCMDS}'
The kernel config information is kept in
$OE_HOME/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.XX/gumstix-custom-YYYYY/defconfig
where XX is the current default kernel version for your bitbake environment. That nugget is set in the
$OE_HOME/com.gumstix.collection/conf/machine/include/gumstix.inc file, under the PREFERRED_VERSION_gumstix-kernel
and YYYYY is usually one of connex/basix/verdex. That nugget comes from
$OE_HOME/build/conf/auto.conf
After running menuconfig, running "bitbake -c rebuild gumstix-kernel" will blow away the customizations just made. There is probably a better way to do this, but in order to preserve the customizations, you can copy the new config file and replace the default config. For example, to preserve a verdex board's config, do:
cp \
$OE_HOME/tmp/work/gumstix-custom-verdex-angstrom-linux-gnueabi/gumstix-kernel-2.6.21-r1/linux-2.6.21/.config \
$OE_HOME/com.gumstix.collection/packages/linux/gumstix-kernel-2.6.21/gumstix-custom-verdex/defconfig
Now that you have replaced the default config, the following commands will rebuild and repackage the new kernel and create new images for you:
bitbake -c rebuild gumstix-kernel
bitbake -c rebuild task-base-gumstix
bitbake gumstix-basic-image
Other notes
Totally lost inside of menuconfig? Press '/' to search for appropriate options.
Want to know more about the kernel? I found the 'Linux Kernel in a Nutshell' book (not to be confused with the 'Linux in a Nutshell' book) quite helpful. The book is freely available online here (http://www.kroah.com/lkn/); Chapter 4 (Configuring and Building) and Chapter 6 (Upgrading a Kernel) as well as the first bit of Chapter 7 (Customizing a Kernel) and the last bit of Chapter 8 (Kernel Configuration: Kernel Debugging) have useful notes about kernel configuration.
Your kernel is now larger than the 1MB originally specified so do_sizecheck() fails? You'll probably want to edit the ~/verdex-oe/org.openembedded.dev/conf/machine/include and change the maximum image size to, say, 2MB, i.e. KERNEL_IMAGE_MAXSIZE = "2097153". Actually, you should really do this in the user.collections directory to keep the original source tree clean.