Editing Compiling the kernel
Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
- | This document describes how a 3rd party developer can compile, modify | + | This document describes how a 3rd party developer can compile, modify and deploy the linux kernel if (s)he really wants to. First thing to consider is whether your own kernel is really needed. Most additional functionality can be provided with modules dynamically loaded into original kernel provided by Nokia. This may be easier for you and also easier for other users to install on their devices. Only if your change conflicts with original Nokia configuration or new feature cannot be compiled as a module, new kernel is needed. |
First see: http://maemo.org/maemo_release_documentation/maemo4.1.x/node12.html | First see: http://maemo.org/maemo_release_documentation/maemo4.1.x/node12.html | ||
- | If you choose to compile only additional modules | + | If you choose to compile only additional modules then use the original nokia configuration as a base and enable new functionality as modules. Make sure you use compatible compiler with the one used for original kernel (currently gcc 3.4) otherwise your modules may produce errors when inserting into the kernel. The best may be to use exactly the same one - see /proc/version on device or use the one suggested in Section 2. |
- | If you choose to make a new kernel | + | If you choose to make a new kernel Section 2 describes the compilation procedure, Section 3 the modification procedure, and Section 4 the deployment procedure. The document finishes off by a section listing issues that should be taken into account when working with the kernel and Maemo. |
=Modifying Default Kernel Configuration= | =Modifying Default Kernel Configuration= | ||
- | In order to modify the default kernel configuration, a few things | + | In order to modify the default kernel configuration, a few things needs to be done. Assuming that the kernel has been built at least once, perform the following procedure to build a modified kernel for Maemo: |
- | '''1.''' Edit ~/maemo-kernel/kernel-source-diablo-2.6.21/debian/rules so that modifications may be done | + | '''1.''' Edit ~/maemo-kernel/kernel-source-diablo-2.6.21/debian/rules so that modifications may be done |
- | Make sure the following two lines are commented | + | Make sure the following two lines are commented or removed completely: |
* build-stamp section: tar jxf /usr/src/kernel-source-$(SOURCE_VERSION).tar.bz2 | * build-stamp section: tar jxf /usr/src/kernel-source-$(SOURCE_VERSION).tar.bz2 | ||
* clean section: rm -rf kernel-source-$(SOURCE_VERSION) | * clean section: rm -rf kernel-source-$(SOURCE_VERSION) | ||
- | '''2.''' Change file permissions for default config file | + | '''2.''' Change file permissions for default config file |
$ chmod a+w ~/maemo-kernel/kernel-source-diablo-2.6.21/kernel-source/arch/arm/configs/n770_defconfig | $ chmod a+w ~/maemo-kernel/kernel-source-diablo-2.6.21/kernel-source/arch/arm/configs/n770_defconfig | ||
Line 28: | Line 28: | ||
'''3.''' Make your modifications to ~/maemo_kernel/kernel-source-diablo-2.6.21/kernel-source/arch/arm/configs/n770_defconfig | '''3.''' Make your modifications to ~/maemo_kernel/kernel-source-diablo-2.6.21/kernel-source/arch/arm/configs/n770_defconfig | ||
- | '''4.''' Recompile the kernel image | + | '''4.''' Recompile the kernel image |
$ cd | $ cd | ||
Line 47: | Line 47: | ||
+ echo '-lncurses' | + echo '-lncurses' | ||
+ exit | + exit | ||
- | + | $cc -print-file-name=libncursesw.so | grep -q / | |
- | + | if [ $? -eq 0 ]; then | |
+ | |||
+ | |||
+ | =Deploying the Kernel Onto the Device= | ||
+ | |||
+ | The kernel kernel image is deployed onto the device by issuing the following command: | ||
+ | |||
+ | # flasher -f -k /scratchbox/users/<username>/targets/MAEMO_KERNEL/usr/share/osso/kernels/zImage-su-18-<yyyyww> | ||
+ | |||
+ | This command is executed outside Scratchbox, assuming that the flasher utility is in $PATH. | ||
+ | |||
+ | Or if you want to be safe, you can test boot it with: (without actually permanently modifying the kernel) | ||
+ | |||
+ | # flasher -l -b -k /scratchbox/users/<username>/targets/MAEMO_KERNEL/usr/share/osso/kernels/zImage-su-18-<yyyyww> | ||
+ | |||
+ | instead. | ||
+ | |||
+ | If that doesn't work (hangs indefinitely while trying to find device), try: | ||
+ | mount -t usbfs none /proc/bus/usb/ | ||
=Things to Remember When Working with Linux Kernel and Maemo= | =Things to Remember When Working with Linux Kernel and Maemo= | ||
Line 54: | Line 72: | ||
Below is a list of things that should be taken into consideration when working with the Linux kernel and Maemo. | Below is a list of things that should be taken into consideration when working with the Linux kernel and Maemo. | ||
- | =Modules and | + | =Modules and initfs= |
- | Your kernel image | + | Your kernel image have to be compatible with modules in initfs image on the device. If you flash custom kernel image incompatible with modules in this initfs you may see constants reboots. This can be fixed either by making the kernel compatible (use same or very similar gcc compiler and kernel configuration) or by rebuilding initfs image with your version of modules. For a list of those essential modules see: '''/lib/modules/current''' in the initfs image or '''/mnt/initfs/lib/modules/current''' directly on the device. Also if you enabled some additional functionality as modules you may need to copy them manually to the initfs on the device (if there is free space) or better put them somewhere in the root filesystem. |
=Kernel Partition Size= | =Kernel Partition Size= | ||
Line 64: | Line 82: | ||
For example, flashing an oversized kernel image renders the device useless. In order to get the device working again, select one of the following two options. | For example, flashing an oversized kernel image renders the device useless. In order to get the device working again, select one of the following two options. | ||
- | ==Flash Kernel Image from | + | ==Flash Kernel Image from Maemo.org== |
You can install a fully working kernel image by installing the su-18-kernel image available on maemo.org. Issue the following command in Scratchbox: | You can install a fully working kernel image by installing the su-18-kernel image available on maemo.org. Issue the following command in Scratchbox: | ||
Line 70: | Line 88: | ||
After this, flash the kernel image as instructed in Section 4. | After this, flash the kernel image as instructed in Section 4. | ||
- | |||
- | |||
- | |||
- | |||
==Flash from Fiasco Image== | ==Flash from Fiasco Image== | ||
Line 97: | Line 111: | ||
4 | 4 | ||
- | There is | + | There is an other 4 Pin connector near on booth th n800 and n810. those are related to usb.(we did get some bus reset signals when playing with them) |
1 | 1 | ||
Line 105: | Line 119: | ||
Once your done with your cable, enable the R&D mode and set the serial console flag and connect via 8N1,115200. | Once your done with your cable, enable the R&D mode and set the serial console flag and connect via 8N1,115200. | ||
<pre> | <pre> | ||
- | $sudo ./flasher | + | $sudo ./flasher <del>enable-rd-mode </del>set-rd-flags=serial-console |
Password: | Password: | ||
Suitable USB device not found, waiting | Suitable USB device not found, waiting | ||
Line 116: | Line 130: | ||
- | [[Category: | + | [[Category:HowTos]] |
[[Category:Midgard wiki]] | [[Category:Midgard wiki]] |
Learn more about Contributing to the wiki.