The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/scripts/extract-vmlinux

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #!/bin/sh
    2 # ----------------------------------------------------------------------
    3 # extract-vmlinux - Extract uncompressed vmlinux from a kernel image
    4 #
    5 # Inspired from extract-ikconfig
    6 # (c) 2009,2010 Dick Streefland <dick@streefland.net>
    7 #
    8 # (c) 2011      Corentin Chary <corentin.chary@gmail.com>
    9 #
   10 # Licensed under the GNU General Public License, version 2 (GPLv2).
   11 # ----------------------------------------------------------------------
   12 
   13 check_vmlinux()
   14 {
   15         # Use readelf to check if it's a valid ELF
   16         # TODO: find a better to way to check that it's really vmlinux
   17         #       and not just an elf
   18         readelf -h $1 > /dev/null 2>&1 || return 1
   19 
   20         cat $1
   21         exit 0
   22 }
   23 
   24 try_decompress()
   25 {
   26         # The obscure use of the "tr" filter is to work around older versions of
   27         # "grep" that report the byte offset of the line instead of the pattern.
   28 
   29         # Try to find the header ($1) and decompress from here
   30         for     pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"`
   31         do
   32                 pos=${pos%%:*}
   33                 tail -c+$pos "$img" | $3 > $tmp 2> /dev/null
   34                 check_vmlinux $tmp
   35         done
   36 }
   37 
   38 # Check invocation:
   39 me=${0##*/}
   40 img=$1
   41 if      [ $# -ne 1 -o ! -s "$img" ]
   42 then
   43         echo "Usage: $me <kernel-image>" >&2
   44         exit 2
   45 fi
   46 
   47 # Prepare temp files:
   48 tmp=$(mktemp /tmp/vmlinux-XXX)
   49 trap "rm -f $tmp" 0
   50 
   51 # Initial attempt for uncompressed images or objects:
   52 check_vmlinux $img
   53 
   54 # That didn't work, so retry after decompression.
   55 try_decompress '\037\213\010' xy    gunzip
   56 try_decompress '\3757zXZ\000' abcde unxz
   57 try_decompress 'BZh'          xy    bunzip2
   58 try_decompress '\135\0\0\0'   xxx   unlzma
   59 try_decompress '\211\114\132' xy    'lzop -d'
   60 
   61 # Bail out:
   62 echo "$me: Cannot find vmlinux." >&2

Cache object: 9836ee6e54100bc32526d0ace935bcea


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.