As chinaet already implied, the newer Kindles use an initramfs instead of an initrd. The Kindle's initramfs is linked statically into the Kernel image.

In this post I will describe how I managed to get the uImage from the device and extracted the initramfs from it.

Part 1: Get uImage from device
There are multiple ways to do this. chinaet use /dev/mtd1ro, but you can also fetch a memory dump from U-Boot if you have a serial connection to your Kindle(which will give you bootloader access).

Here are the instructions for fetching the uImage from the boot loader:

On my Kindle both recovery and normal image were identical, so we only have to get a dump of one of those images.
First, change the address offset to the address of one of those kernel images (I used image 1):

Code:

uboot> base A0060000
Base Address: 0xa0060000

To check the base address, let's display the u-Boot header of the image at this position:

md.b will display the memory from address 0x0 to 0x40 relative to the base address. If your are interested in the U-Boot header format, look at include/image.h in the U-Boot sources(included in Amazon's source code release).

imls(or the above memory dump of the header) will give you the data size of your image. In my case, the data size is 1887264=0x001ccc20 Bytes.
Add 64 Bits(the size of the header) to the data size and you get the size of your uImage.
Now we will pull a dump of the whole uImage via the serial line. Minicom has a nice capture mode which can be enabled by typing CTRL-A, then Z and then L.
After you have started capturing, we can get us the dump:

Code:

md.b 0 {size of uImage in hex, see above}

And then allow some time to pass for the transmission(about 15 Mins).

Now for the difficult part: First of all, stop capturing by pressing the same keys in Minicom again.
Then let's have a look at your captured file. It should look something like this:

Delete everything from the file that does not belong to the dump(in my case that would be the first line).

Now that we have the uImage as memory dump, it would be nice to convert this output into a real file.
I have written a C program which does this task for you(attached), but you still need to compile it with gcc or an IDE. I am too lazy too look up how to do this from command line via gcc, but there are probably tons of info on this in the internet.

Now you can run the whole thing:

Code:

./UBootMemeryDumpParser {path to dumpfile} > uImage

It will probably complain about a few errors in you dump, but this is normal. Just use "base" from u-boot to jump to the address in the incorrect line and "md.b" to get the few wrong bytes. This way you can replace wrong lines in your dump without needing to get an entirely new copy of the uImage dump.

Test if your image is valid:

Code:

mkimage -l uImage

. If not, you will have to get the whole dump again(or did you forget to add the 64 Bits of the U-Boot header to the data size when running md.b?)

Part 2: Extract initramfs from uImage

Don't worry, the rest is easy once you know how to do it. First of all, we need to extract the zImage from the uImage by stripping the 64-bytes uImage header: