Initramfs

From coreboot
Revision as of 23:43, 6 August 2008 by Stuge (talk | contribs) (Fix objcopy --add-section to work also when the section already exists.)
Jump to navigation Jump to search

The wiki is being retired!

Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!

How to inject a separate initramfs file into a 2.6 vmlinux (as section .init.ramfs):

First turn the initramfs into an ELF, excluding anything but the file data:

   objcopy -I binary -O elf32-i386 -B i386 --redefine-sym _binary_initramfs_start=.init.ramfs -N _binary_initramfs_end -N _binary_initramfs_size initramfs initramfs.elf

Note that the symbol names _binary_initramfs_{start,end,size} depend on the input filename. objcopy does some translation here, e.g. a period (.) in the filename will become an underscore (_) in the symbols.

Now remove any existing .init.ramfs section in vmlinux and add the section in initramfs.elf:

   objcopy -I elf32-i386 -O elf32-i386 -R .init.ramfs --add-section .init.ramfs=initramfs.elf vmlinux vmlinux.withnewinitramfs

All done.