zoukankan      html  css  js  c++  java
  • 内核升极2.6.18 升级到 2.6.32 装systemtap 原创

    系统: redhat serever 5.3  linux 2.6.18

    现在要升级到 LINUX 内核 2.6.32

    安装步骤:

    1.下载装源代码:

    https://www.kernel.org/

    找到 https://www.kernel.org/pub/  链接

    查找linux->kernel->v2.6->linux-2.6.32.tar.bz2

    2.拖动虚拟机 放到目录 /usr/src/kernels/下解压 为    linux -3.2.26.

    3 .配制内核

              1.  yum install ncurses-devel.x86_64

              2.  打补丁utrace,  (补丁下载      https://web.elastic.org/~fche/frob-utrace/)

              3.  补丁安装.

                            

    [root@localhost kernels]# ls -al
    
    --
    -rw-r--r--  1 root root  12078 Sep 18 07:05 tracehook.patch
    -rw-r--r--  1 root root 149494 Sep 18 07:05 utrace.patch
    -rwxrw-rw-  1 root root  47352 Sep 18 07:05 utrace-ptrace.patch
    
    
    [root@localhost linux-2.6.32]# patch -p1 <../tracehook.patch
    patching file arch/powerpc/include/asm/ptrace.h
    patching file arch/powerpc/kernel/traps.c
    patching file arch/s390/kernel/traps.c
    patching file arch/x86/include/asm/ptrace.h
    patching file arch/x86/kernel/ptrace.c
    patching file include/linux/ptrace.h
    patching file include/linux/sched.h
    patching file include/linux/tracehook.h
    patching file kernel/ptrace.c
    patching file kernel/signal.c
    [root@localhost linux-2.6.32]# 
    
    
    [root@localhost linux-2.6.32]# patch -p1 <../utrace.patch
    patching file Documentation/DocBook/Makefile
    patching file Documentation/DocBook/utrace.tmpl
    patching file fs/proc/array.c
    patching file include/linux/sched.h
    patching file include/linux/tracehook.h
    patching file include/linux/utrace.h
    patching file init/Kconfig
    patching file kernel/Makefile
    patching file kernel/fork.c
    patching file kernel/ptrace.c
    patching file kernel/utrace.c
    [root@localhost linux-2.6.32]# 
    
    
    
    [root@localhost linux-2.6.32]# patch -p1 <../utrace-ptrace.patch
    patching file include/linux/ptrace.h
    patching file kernel/Makefile
    patching file kernel/ptrace-utrace.c
    patching file kernel/ptrace.c
    patching file kernel/utrace.c
    View Code

     4. config 配制

        执行    make menuconfig

        

    [root@localhost linux-2.6.32]# make menuconfig
      HOSTCC  scripts/kconfig/conf.o
      HOSTCC  scripts/kconfig/kxgettext.o
      HOSTCC  scripts/kconfig/lxdialog/checklist.o
      HOSTCC  scripts/kconfig/lxdialog/inputbox.o
      HOSTCC  scripts/kconfig/lxdialog/menubox.o
      HOSTCC  scripts/kconfig/lxdialog/textbox.o
      HOSTCC  scripts/kconfig/lxdialog/util.o
      HOSTCC  scripts/kconfig/lxdialog/yesno.o
      HOSTCC  scripts/kconfig/mconf.o
      SHIPPED scripts/kconfig/zconf.tab.c
      SHIPPED scripts/kconfig/lex.zconf.c
      SHIPPED scripts/kconfig/zconf.hash.c
      HOSTCC  scripts/kconfig/zconf.tab.o
      HOSTLD  scripts/kconfig/mconf
    scripts/kconfig/mconf arch/x86/Kconfig
    #
    # using defaults found in /boot/config-2.6.18-128.el5
    #
    /boot/config-2.6.18-128.el5:609:warning: symbol value 'm' invalid for IP_DCCP_CCID3
    /boot/config-2.6.18-128.el5:610:warning: symbol value 'm' invalid for IP_DCCP_TFRC_LIB
    /boot/config-2.6.18-128.el5:1330:warning: symbol value 'm' invalid for FIXED_PHY
    /boot/config-2.6.18-128.el5:1623:warning: symbol value 'm' invalid for ISDN
    /boot/config-2.6.18-128.el5:2704:warning: symbol value 'm' invalid for RTC_INTF_SYSFS
    /boot/config-2.6.18-128.el5:2705:warning: symbol value 'm' invalid for RTC_INTF_PROC
    /boot/config-2.6.18-128.el5:2706:warning: symbol value 'm' invalid for RTC_INTF_DEV
    /boot/config-2.6.18-128.el5:2777:warning: symbol value 'm' invalid for GFS2_FS_LOCKING_DLM
    #
    # configuration written to .config

      设置参数:

       保存退去。

    检查 .config 相关参数为 y

    [root@localhost linux-3.5]# cat .config | grep CONFIG_DEBUG_INFO
    CONFIG_DEBUG_INFO=y
    [root@localhost linux-3.5]# cat .config | grep CONFIG_KPROBES
    CONFIG_KPROBES=y
    [root@localhost linux-3.5]# cat .config | grep CONFIG_RELAY
    CONFIG_RELAY=y
    [root@localhost linux-3.5]# cat .config | grep CONFIG_DEBUG_FS
    CONFIG_DEBUG_FS=y
    [root@localhost linux-3.5]# cat .config | grep CONFIG_MODULES
    CONFIG_MODULES=y
    [root@localhost linux-3.5]# cat .config | grep CONFIG_MODULE_UNLOAD
    CONFIG_MODULE_UNLOAD=y

    [root@localhost linux-3.5]#cat .config | grep CONFIG_UTRACE      (linux 3.5 没有这个选项)
    CONFIG_UTRACE=y

    [root@localhost linux-3.5]#cat .config | grep CONFIG_SYSFS_DEPRECATED_V2

    CONFIG_SYSFS_DEPRECATED_V2=y

    5. make

    6.make  modules_install

    7.make install

    8.

    开机会出现error

    方法:

    编译2.6.32内核后重启出现

    insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists

    解决方法:

    1,解压initrd文件

    [root@localhost ~]# cp /boot/initrd-2.6.32.img /tmp

     [root@localhost ~]# cd /tmp/  

     [root@localhost tmp]# ls  initrd-2.6.32.img

     [root@localhosttmp]# mkdir newinitrd

     [root@localhost tmp]# cd newinitrd/

     [root@localhost newinitrd]# zcat ../initrd-2.6.32.img |cpio -i  

    11537 blocks 释放之后看到如下内容

      [root@localhost newinitrd]# ls

      bin   dev   etc   init   lib   proc   sbin   sys   sysroot

     2.编辑init,删掉其中重复的四行中的两行

    echo "Loading dm-region-hash.ko module" 

    insmod /lib/dm-region-hash.ko  

    echo "Loading dm-region-hash.ko module"

    insmod /lib/dm-region-hash.ko

     3,重新打包initrd  

    [root@localhostnewinitrd]# find .|cpio -c -o > ../initrd  11538 blocks

     [root@localhost newinitrd]# cd ..  

    [root@localhost tmp]# gzip -9 < initrd > initrd.img

     [root@localhost tmp]# ls

     initrd-2.6.32.img    initrd    initrd.img          newinitrd

    initrd.img就是重新打包的initrd,然后把initrd.img拷贝到/boot,

    更改grub.conf里边的initrd-2.6.32.img为initrd.img,  

    这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists” 就不会有了

    9.设置 /boot/grub 中的default=0  使其从2.6.32起动
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.32)
            root (hd0,0)
            kernel /vmlinuz-2.6.32 ro root=LABEL=/ rhgb quiet
            initrd /initrd-2.6.32.img
    title Red Hat Enterprise Linux Server (2.6.18-128.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet
            initrd /initrd-2.6.18-128.el5.img

    ---------------------------------------------------------------------------------------

    10.下载 systemtap-2.8.tar.gz

    [root@localhost grub]# /tap/bin/stap -V
    Systemtap translator/driver (version 2.8/0.151, non-git sources)
    Copyright (C) 2005-2015 Red Hat, Inc. and others
    This is free software; see the source for copying conditions.
    enabled features: TR1_UNORDERED_MAP NLS
    You have new mail in /var/spool/mail/root

    方法:

    到 官网 http://www.sourceware.org/systemtap/wiki/

    Overview

    SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data.

    SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running system. We are publishing samples, as well as enlarging the internal "tapset" script library to aid reuse and abstraction.

    Archive of SystemTap releases  The current release is 2.8, 2015-06-18.

    Focus areas for near-future development

    Archive of SystemTap releases  中选择 2.8的版本,放到LINUX tmp 目录中,解压

    -----------------------------------------------------------------------------------------------------------------------

    11.下载 elfutils-0.151.tar.bz

    https://fedorahosted.org/elfutils/

    elfutils

    The latest released version of elfutils always appears in Fedora development builds and can be found in ​http://koji.fedoraproject.org/packages/elfutils/.

    Most versions are also released as Fedora updates for the current and one or two prior versions of Fedora.

    The source for elfutils is available in ​http://fedorahosted.org/releases/e/l/elfutils/.

    See ​https://fedorahosted.org/mailman/listinfo/elfutils-devel for the developers' mailing list.

    点选 http://fedorahosted.org/releases/e/l/elfutils/. 放到LINUX tmp 目录中解压

    12.安装systemtap 2.8

    1.    cd  /

    2 .  mkdir soft   

    3.  进入systemtap-2.8.tar.gz的解压目录

    执行 ./configure --prefix=/soft/ --with-elfutils=/tmp/elfutils-0.151

    4.make

    5.make install

    ---------------------------------------------------------------------------

    13.设置PATH路

     .bash_profile

    STAP=/soft/bin/

    PATH=$PATH:$HOME/bin

    PATH=$STAP:$PATH

    export PATH

    -------------------------------------------------------------------------------

    14.安装内核符号

    [root@localhost ~]# stap-prep
    Need to install the following packages:
    kernel-2.6.32.x86_64
    kernel-devel-2.6.32.x86_64
    kernel-debuginfo-2.6.32.x86_64

    自建内核就不用装了

    15.安装其他符号

    1.

           stap -d /bin/ls --ldd -e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' -c "ls /"

           WARNING: cannot find module /bin/ls debuginfo: No DWARF information found [man warning::debuginfo]
           semantic error: while resolving probe point: identifier 'process' at <input>:1:7
           source: probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}
           semantic error: no match
           Pass 2: analysis failed.  [man error::pass2]
                安装对应的debuginfo即可解决
                查找/bin/ls所在的包名

                 [root@localhost ~]# rpm -qf /bin/ls

                 coreutils-debuginfo-5.97-19.el5.x86_64.rpm

                 安装coreutils对于的debuginfo包.

                 rpm -ivh coreutils-debuginfo-5.97-19.el5.x86_64.rpm

     2
    stap -L  'process("/lib64/libc.so.6").function("malloc")'
    Missing separate debuginfos, use: debuginfo-install glibc-2.5-123.el5_11.1

    [root@localhost ~]# rpm -qf /lib64/libc.so.6
    glibc-2.5-123.el5_11.1

    安装 rpm -ivh  glibc-debuginfo-2.5-123.el5_11.1.x86_64.rpm

    16. print_regs() and print _backtrace()

     cat bt.stp

    probe kernel.function(@1){ 
    print("----------------START-------------------------
    ")     
    printf("In process [%s]
    ", execname())   
    
    print_regs()   
    print_backtrace()  
    print("----------------END-------------------------
    ")   
    exit()
    } 
    [root@localhost ~]# stap -v bt.stp "do_fork"
    Pass 1: parsed user script and 109 library script(s) using 110744virt/34332res/2092shr/32912data kb, in 260usr/60sys/316real ms.
    Pass 2: analyzed script: 1 probe(s), 4 function(s), 3 embed(s), 0 global(s) using 132840virt/57352res/3104shr/55008data kb, in 460usr/390sys/903real ms.
    Pass 3: translated to C into "/tmp/stapXvhrib/stap_9f09e2f8d05b04c5f922e1fe3470a188_2491_src.c" using 132840virt/57616res/3368shr/55008data kb, in 70usr/220sys/372real ms.
    Pass 4: compiled C into "stap_9f09e2f8d05b04c5f922e1fe3470a188_2491.ko" in 3550usr/5110sys/9158real ms.
    Pass 5: starting run.
    ----------------START-------------------------
    In process [automount]
    RIP: ffffffff81040c72
    RSP: ffff880047de7f48  EFLAGS: 00000246
    RAX: 00007f8727af29d0 RBX: 00007f8727af2940 RCX: 0000000000000000
    RDX: ffff880047de7f58 RSI: 00007f8727af2250 RDI: 00000000003d0f00
    RBP: 0000000000000000 R08: 00007f8727af29d0 R09: 00007f8727af29d0
    R10: 00007f8727af29d0 R11: 0000000000000206 R12: 0000000000000000
    R13: 0000000000000003 R14: 0000000000001000 R15: 00007f8729970c00
    FS:  00007f8729726940(0000) GS:ffff880003400000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fb198462070 CR3: 00000000523f9000 CR4: 00000000000406f0
     0xffffffff81040c72 : do_fork+0x0/0x32c [kernel]
     0xffffffff8100bc13 : stub_clone+0x13/0x20 [kernel]
     0xffffffff8100b92b : system_call_fastpath+0x16/0x1b [kernel] (inexact)
    ----------------END-------------------------
    Pass 5: run completed in 20usr/80sys/1729real ms.

    17.linux 3.2.26   return 探针

          linu >=3.5    无return 探针,发 展中

    LINUX 3.5

     stap -e 'probe process("a.out").function("fun").return {printf("%s",probefunc())}'   

    error semantic error: process return probes not available with inode-based uprobes

    why:

       Here is a short history of uprobes (the feature that gives systemtap user probes):

    - original uprobes (with both function entry and return probes): RHEL5 era kernels (needs kernel utrace), in an external kernel module

    - uprobes v2 (with both function entry and return probes): RHEL6 era kernels (needs kernel utrace), in an external kernel module

    - inode uprobes (with function entry probes): current kernels, doesn't need kernel utrace, built into the kernel

     Your kernel has inode uprobes, which doesn't support function return probes yet. There have been some work in this area, but I don't believe that functionality has quite made it into the kernel yet.In the    meantime, you might be able to switch to the dyninst runtime (--runtime=dyninst or --dyninst). This is a new, somewhat experimental runtime, that does probing purely in userspace. You won't be able  to  use dyninst if your script uses any kernel probing features (like 'kernel.function').

    18.查看RPM包安装了那些文件命令(与 rpm -qf  /lib64/libc.so.6  相对)

      rpm -ql glibc-2.5-123.el5_11.1

    /usr/lib/gconv/gconv-modules
    /usr/lib/gconv/gconv-modules.cache
    /usr/lib/gconv/libCNS.so
    /usr/lib/gconv/libGB.so
    /usr/lib/gconv/libISOIR165.so
    /usr/lib/gconv/libJIS.so
    /usr/lib/gconv/libJISX0213.so
    /usr/lib/gconv/libKSC.so
    /usr/libexec/getconf
    /usr/libexec/getconf/POSIX_V6_ILP32_OFF32
    /usr/libexec/getconf/POSIX_V6_ILP32_OFFBIG
    /usr/sbin/glibc_post_upgrade.i686
    /usr/sbin/iconvconfig

    ----


     

     

     

     

                            

                            

               

  • 相关阅读:
    位运算符设置权限
    urlencode、urldecode、rawurlencode、rawurldecod
    二分查找法的mid值 整数溢出问题
    GIT 常用命令
    nginx配置反向代理转发
    PHP实现无限极分类
    PHP面试题目整理(持续更新)
    去除input的默认样式
    git 常用指令
    数组去重
  • 原文地址:https://www.cnblogs.com/zengkefu/p/4826933.html
Copyright © 2011-2022 走看看