Because of the project requriement, I need to compile the kernel to replace the original one. Lacking of the Android compiling environment, so I decided to unpacking the original boot.img, and replace the kernel image and then pack it again through the tools mkbootimg
- I followed the User Guide to compile the kernel using make uImage, and then cp the uImage to the path where I wanted to pack boot.img, but it didn't work.
- Then I compared the uImage and orginal kernel image which I got from unpacking, and I found that the uImage owned an external header including some description of the kernel. My informatin is like this, 'Linux-3.0.35-06522-xxxxxxx' and other dump information
- So I suspected that maybe zImage should be the right one. After the test, I got that point.
So my question is what's the function of uImage. As the User Guide said, the uboot can only boot the image which is added by 'mkimage' tool. But the truth is not like that.
Here the text I extract from the User Guilde elaborating the function of mkimage
Any image that should be loaded by U-Boot must have an unique image head. For
example, data must be added at the head of the loaded image to tell U-Boot about the
image (i.e., it's a kernel, or ramfs, etc) and how to load the image (i.e., load/execute
address). Before you can load any image into RAM by U-Boot, you need a tool to add
this information and generate a new image which can be recognized by U-Boot. The tool
is delivered together with U-Boot. After you set up U-Boot using the steps outlined
above, you can find the tool (mkimage) under tools/. The process of using mkimage to
generate an image (for example, kernel image and ramfs image), which is to be loaded by
U-Boot, is outlined in the subsequent sections of this document.