Getting the image section of the ELF file to load w/ VxWorks boot
diekema_jon
diekema at bucks.si.com
Wed May 10 03:51:08 EST 2000
The approach that I settled upon was identified in my initial post,
however I didn't actually do all the steps. I have attached the the
files that are needed to make it work.
Note: The Linux_2_3 BitKeeper repository at FMS Labs contains
these changes.
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.2).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `!/bin/sh' line above, then type `sh FILE'.
#
# Made on 2000-05-09 13:39 EDT by <diekema at bucks>.
# Source directory was `/home/bucks/users/diekema'.
#
# Existing files will *not* be overwritten unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 3708 -rw-r--r-- arch/ppc/mbxboot/Makefile
# 156 -rw-r--r-- arch/ppc/mbxboot/gzimage.c
# 156 -rw-r--r-- arch/ppc/mbxboot/rdimage.c
# 3415 -rw-r--r-- arch/ppc/mbxboot/vmlinux.lds
#
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
set `$dir/gettext --version 2>&1`
if test "$3" = GNU
then
gettext_dir=$dir
fi
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
shar_touch=touch
else
shar_touch=:
echo
$echo 'WARNING: not restoring timestamps. Consider getting and'
$echo "installing GNU \`touch', distributed in GNU File Utilities..."
echo
fi
rm -f 1231235999 $$.touch
#
if mkdir _sh04766; then
$echo 'x -' 'creating lock directory'
else
$echo 'failed to create lock directory'
exit 1
fi
# ============= arch/ppc/mbxboot/Makefile ==============
if test ! -d 'arch'; then
$echo 'x -' 'creating directory' 'arch'
mkdir 'arch'
fi
if test ! -d 'arch/ppc'; then
$echo 'x -' 'creating directory' 'arch/ppc'
mkdir 'arch/ppc'
fi
if test ! -d 'arch/ppc/mbxboot'; then
$echo 'x -' 'creating directory' 'arch/ppc/mbxboot'
mkdir 'arch/ppc/mbxboot'
fi
if test -f 'arch/ppc/mbxboot/Makefile' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'arch/ppc/mbxboot/Makefile' '(file already exists)'
else
$echo 'x -' extracting 'arch/ppc/mbxboot/Makefile' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'arch/ppc/mbxboot/Makefile' &&
#
# arch/ppc/mbxboot/Makefile
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
# Copyright (C) 1994 by Linus Torvalds
# Adapted for PowerPC by Gary Thomas
# modified by Cort (cort at cs.nmt.edu)
#
X.c.s:
X $(CC) $(CFLAGS) -S -o $*.s $<
X.s.o:
X $(AS) -o $*.o $<
X.c.o:
X $(CC) $(CFLAGS) -DINITRD_OFFSET=$(IOFF) -DINITRD_SIZE=$(ISZ) -DZIMAGE_OFFSET=$(ZOFF) -DZIMAGE_SIZE=$(ZSZ) -c -o $*.o $<
X.S.s:
X $(CPP) $(AFLAGS) -traditional -o $*.o $<
X.S.o:
X $(CC) $(AFLAGS) -traditional -c -o $*.o $<
X
ZOFF = 0
ZSZ = 0
IOFF = 0
ISZ = 0
X
TFTPIMAGE=/tftpboot/zImage.embedded
X
ifdef CONFIG_8xx
ZLINKFLAGS = -T vmlinux.lds -Ttext 0x00180000
OBJECTS := head.o misc.o ../coffboot/zlib.o m8xx_tty.o gzimage.o rdimage.o
CFLAGS = $(CPPFLAGS) -O2 -DSTDC_HEADERS -fno-builtin -DCONFIG_8xx
endif
X
ifdef CONFIG_8260
ZLINKFLAGS = -T vmlinux.lds -Ttext 0x00400000
OBJECTS := head_8260.o misc.o ../coffboot/zlib.o m8260_tty.o embed_config.o gzimage.o rdimage.o
CFLAGS = $(CPPFLAGS) -O2 -DSTDC_HEADERS -fno-builtin -DCONFIG_8260
endif
X
OBJCOPY_ARGS = -O elf32-powerpc
X
ifeq ($(CONFIG_MBX),y)
OBJECTS += pci.o qspan_pci.o
CFLAGS += -DCONFIG_MBX
endif
ifeq ($(CONFIG_RPXLITE),y)
CFLAGS += -DCONFIG_RPXLITE
OBJECTS += iic.o embed_config.o
endif
ifeq ($(CONFIG_RPXCLASSIC),y)
CFLAGS += -DCONFIG_RPXCLASSIC
OBJECTS += iic.o embed_config.o pci.o qspan_pci.o
endif
ifeq ($(CONFIG_BSEIP),y)
CFLAGS += -DCONFIG_BSEIP
OBJECTS += iic.o embed_config.o
endif
X
all: zImage
X
zvmlinux.initrd: zvmlinux
#
# Build the boot loader images
#
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .gzimage gzimage.o
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
X --add-section=.gzimage=../coffboot/vmlinux.gz \
X --set-section-flags=.gzimage=alloc,load,readonly,data \
X gzimage.o
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .rdimage rdimage.o
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
X --add-section=.rdimage=ramdisk.image.gz \
X --set-section-flags=.rdimage=alloc,load,readonly,data \
X rdimage.o
X $(LD) $(ZLINKFLAGS) -o $@ $(OBJECTS)
#
# Compute the sizes/offsets for the final image, and rebuild with these values.
#
X $(CC) $(CFLAGS) \
X -DINITRD_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd .rdimage` \
X -DINITRD_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd .rdimage` \
X -DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd .gzimage` \
X -DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd .gzimage` \
X -c -o misc.o misc.c
X $(LD) $(ZLINKFLAGS) -o $@ $(OBJECTS)
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment $@
X $(OBJDUMP) -h $@
X
zImage: zvmlinux
X ln -sf zvmlinux zImage
X
zImage.initrd: zvmlinux.initrd
X ln -sf zvmlinux.initrd zImage.initrd
X
zvmlinux: $(OBJECTS) ../coffboot/vmlinux.gz
#
# Build the boot loader images
#
#
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .gzimage gzimage.o
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
X --add-section=.gzimage=../coffboot/vmlinux.gz \
X --set-section-flags=.gzimage=alloc,load,readonly,data \
X gzimage.o
X $(LD) $(ZLINKFLAGS) -o $@ $(OBJECTS)
#
# Compute the sizes/offsets for the final image, and rebuild with these values.
#
X $(CC) $(CFLAGS) \
X -DINITRD_OFFSET=0 \
X -DINITRD_SIZE=0 \
X -DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux .gzimage` \
X -DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux .gzimage` \
X -c -o misc.o misc.c
X $(LD) $(ZLINKFLAGS) -o $@ $(OBJECTS)
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment $@
X $(OBJDUMP) -h $@
X
znetboot : zImage
X cp zImage $(TFTPIMAGE)
X
znetboot.initrd : zImage.initrd
X cp zImage.initrd $(TFTPIMAGE)
X
clean:
X rm -f vmlinux* zvmlinux* zImage*
X
fastdep:
X $(TOPDIR)/scripts/mkdep *.[Sch] > .depend
X
dep:
X $(CPP) $(CPPFLAGS) -M *.S *.c > .depend
X
# just here to match coffboot/Makefile
vmlinux.coff:
X
vmlinux.coff.initrd:
SHAR_EOF
$shar_touch -am 05060231100 'arch/ppc/mbxboot/Makefile' &&
chmod 0644 'arch/ppc/mbxboot/Makefile' ||
$echo 'restore of' 'arch/ppc/mbxboot/Makefile' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'arch/ppc/mbxboot/Makefile:' 'MD5 check failed'
4ef1fd04948006dccd8474e4e7479ba0 arch/ppc/mbxboot/Makefile
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'arch/ppc/mbxboot/Makefile'`"
test 3708 -eq "$shar_count" ||
$echo 'arch/ppc/mbxboot/Makefile:' 'original size' '3708,' 'current size' "$shar_count!"
fi
fi
# ============= arch/ppc/mbxboot/gzimage.c ==============
if test -f 'arch/ppc/mbxboot/gzimage.c' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'arch/ppc/mbxboot/gzimage.c' '(file already exists)'
else
$echo 'x -' extracting 'arch/ppc/mbxboot/gzimage.c' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'arch/ppc/mbxboot/gzimage.c' &&
/*
X * gzimage.c
X *
X * Dummy file to allow a compressed zImage to be added
X * into a linker section, accessed by the boot coode
X */
X
char dummy_for_gzimage;
SHAR_EOF
$shar_touch -am 05040233100 'arch/ppc/mbxboot/gzimage.c' &&
chmod 0644 'arch/ppc/mbxboot/gzimage.c' ||
$echo 'restore of' 'arch/ppc/mbxboot/gzimage.c' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'arch/ppc/mbxboot/gzimage.c:' 'MD5 check failed'
111ba05ecf9b8794b789b9b649d7401f arch/ppc/mbxboot/gzimage.c
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'arch/ppc/mbxboot/gzimage.c'`"
test 156 -eq "$shar_count" ||
$echo 'arch/ppc/mbxboot/gzimage.c:' 'original size' '156,' 'current size' "$shar_count!"
fi
fi
# ============= arch/ppc/mbxboot/rdimage.c ==============
if test -f 'arch/ppc/mbxboot/rdimage.c' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'arch/ppc/mbxboot/rdimage.c' '(file already exists)'
else
$echo 'x -' extracting 'arch/ppc/mbxboot/rdimage.c' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'arch/ppc/mbxboot/rdimage.c' &&
/*
X * rdimage.c
X *
X * Dummy file to allow a compressed initrd to be added
X * into a linker section, accessed by the boot coode
X */
X
char dummy_for_rdimage;
SHAR_EOF
$shar_touch -am 05040233100 'arch/ppc/mbxboot/rdimage.c' &&
chmod 0644 'arch/ppc/mbxboot/rdimage.c' ||
$echo 'restore of' 'arch/ppc/mbxboot/rdimage.c' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'arch/ppc/mbxboot/rdimage.c:' 'MD5 check failed'
de5a391cc4ccd1516ca4486eeeb2ff30 arch/ppc/mbxboot/rdimage.c
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'arch/ppc/mbxboot/rdimage.c'`"
test 156 -eq "$shar_count" ||
$echo 'arch/ppc/mbxboot/rdimage.c:' 'original size' '156,' 'current size' "$shar_count!"
fi
fi
# ============= arch/ppc/mbxboot/vmlinux.lds ==============
if test -f 'arch/ppc/mbxboot/vmlinux.lds' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'arch/ppc/mbxboot/vmlinux.lds' '(file already exists)'
else
$echo 'x -' extracting 'arch/ppc/mbxboot/vmlinux.lds' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'arch/ppc/mbxboot/vmlinux.lds' &&
OUTPUT_ARCH(powerpc)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf?
X __DYNAMIC = 0; */
SECTIONS
{
X /* Read-only sections, merged into text segment: */
X . = + SIZEOF_HEADERS;
X .interp : { *(.interp) }
X .hash : { *(.hash) }
X .dynsym : { *(.dynsym) }
X .dynstr : { *(.dynstr) }
X .rel.text : { *(.rel.text) }
X .rela.text : { *(.rela.text) }
X .rel.data : { *(.rel.data) }
X .rela.data : { *(.rela.data) }
X .rel.rodata : { *(.rel.rodata) }
X .rela.rodata : { *(.rela.rodata) }
X .rel.got : { *(.rel.got) }
X .rela.got : { *(.rela.got) }
X .rel.ctors : { *(.rel.ctors) }
X .rela.ctors : { *(.rela.ctors) }
X .rel.dtors : { *(.rel.dtors) }
X .rela.dtors : { *(.rela.dtors) }
X .rel.bss : { *(.rel.bss) }
X .rela.bss : { *(.rela.bss) }
X .rel.plt : { *(.rel.plt) }
X .rela.plt : { *(.rela.plt) }
/* .init : { *(.init) } =0*/
X .plt : { *(.plt) }
X .text :
X {
X *(.text)
X *(.fixup)
X *(.got1)
X }
X _etext = .;
X PROVIDE (etext = .);
X .rodata :
X {
X *(.rodata)
X *(.rodata1)
X }
X .fini : { *(.fini) } =0
X .ctors : { *(.ctors) }
X .dtors : { *(.dtors) }
X /* Read-write section, merged into data segment: */
X . = (. + 0x0FFF) & 0xFFFFF000;
X .data :
X {
X *(.data)
X *(.data1)
X *(.sdata)
X *(.sdata2)
X *(.got.plt) *(.got)
X *(.dynamic)
X CONSTRUCTORS
X }
X _edata = .;
X PROVIDE (edata = .);
X
X .fixup : { *(.fixup) }
X __start___ex_table = .;
X __ex_table : { *(__ex_table) }
X __stop___ex_table = .;
X
X . = ALIGN(32);
X .data.cacheline_aligned : { *(.data.cacheline_aligned) }
X
X . = ALIGN(4096);
X __init_begin = .;
X .text.init : { *(.text.init) }
X .data.init : {
X *(.data.init);
X __vtop_table_begin = .;
X *(.vtop_fixup);
X __vtop_table_end = .;
X __ptov_table_begin = .;
X *(.ptov_fixup);
X __ptov_table_end = .;
X }
X . = ALIGN(16);
X __setup_start = .;
X .setup.init : { *(.setup.init) }
X __setup_end = .;
X __initcall_start = .;
X .initcall.init : { *(.initcall.init) }
X __initcall_end = .;
X . = ALIGN(4096);
X __init_end = .;
X
X . = ALIGN(4096);
X __pmac_begin = .;
X .text.pmac : { *(.text.pmac) }
X .data.pmac : { *(.data.pmac) }
X . = ALIGN(4096);
X __pmac_end = .;
X
X . = ALIGN(4096);
X __prep_begin = .;
X .text.prep : { *(.text.prep) }
X .data.prep : { *(.data.prep) }
X . = ALIGN(4096);
X __prep_end = .;
X
X . = ALIGN(4096);
X __apus_begin = .;
X .text.apus : { *(.text.apus) }
X .data.apus : { *(.data.apus) }
X . = ALIGN(4096);
X __apus_end = .;
X
X . = ALIGN(4096);
X __apus_begin = .;
X .text.apus : { *(.text.apus) }
X .data.apus : { *(.data.apus) }
X . = ALIGN(4096);
X __apus_end = .;
X
X . = ALIGN(4096);
X __openfirmware_begin = .;
X .text.openfirmware : { *(.text.openfirmware) }
X .data.openfirmware : { *(.data.openfirmware) }
X . = ALIGN(4096);
X __openfirmware_end = .;
X
X __bss_start = .;
X .bss :
X {
X *(.sbss) *(.scommon)
X *(.dynbss)
X *(.bss)
X *(COMMON)
X }
X _end = . ;
X PROVIDE (end = .);
X
X /*
X * For loader only: Put the zImage after everything else
X */
X _gzstart = . ;
X .gzimage : { *(.gzimage) }
X _gzend = . ;
X
X /*
X * For loader only: Put the initrd after zImage
X */
X _rdstart = . ;
X .rdimage : { *(.rdimage) }
X _rdend = . ;
X
}
SHAR_EOF
$shar_touch -am 05060231100 'arch/ppc/mbxboot/vmlinux.lds' &&
chmod 0644 'arch/ppc/mbxboot/vmlinux.lds' ||
$echo 'restore of' 'arch/ppc/mbxboot/vmlinux.lds' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'arch/ppc/mbxboot/vmlinux.lds:' 'MD5 check failed'
5dfe86d647b2e619ecd80dc9b32c7c65 arch/ppc/mbxboot/vmlinux.lds
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'arch/ppc/mbxboot/vmlinux.lds'`"
test 3415 -eq "$shar_count" ||
$echo 'arch/ppc/mbxboot/vmlinux.lds:' 'original size' '3415,' 'current size' "$shar_count!"
fi
fi
rm -fr _sh04766
exit 0
--
------------------\\----------------------\\----------------------------
Jon Diekema | | Smiths Industries
(616) 241-8310 | | 3290 Patterson Avenue, SE
diekema_jon at si.com \\ \\ Grand Rapids, MI 49512-1991
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list