• 在Centos上打Preempt-rt实时补丁


    1.系统centos6.5,内核2.6.31.6,补丁patch-2.6.31.6-rt19.bz2,以下方式获得:

    wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.6.tar.bz2
    wget https://www.kernel.org/pub/linux/kernel/projects/rt/2.6.31/patch-2.6.31.6-rt19.bz2

    2.解压内核文件并打补丁

    tar xjvf linux-2.6.31.6.tar.bz2 
    cd linux-2.6.31.6
    bzcat ../patch-2.6.31.6-rt19.bz2 | patch -p1

    3.配置内核

    make menuconfig

    内核配置时主要修改以下几处:

    (1)选择“Processor type and features -> High Resolution Timer Support"

    (2)选择“Processor type and features -> Preemption Mode (Complete Preemption (Real-Time)) -> Complete Preemption (Real-Time)"

    (3)不选 "Device Drivers -> Staging drivers"

    参考:https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO

    4.编译

    make

    执行上述命令时遇到如下问题:

    (1)“syscall_trace_enter”和“syscall_trace_leave

    /usr/src/linux-2.6.31.6/arch/x86/include/asm/ptrace.h:146:13: note: previous declaration of 'syscall_trace_leave' was here
    make[2]: *** [arch/x86/kernel/ptrace.o] Error 1
    make[1]: *** [arch/x86/kernel] Error 2
    make: *** [arch/x86] Error 2

    解决方法如下:

    将“/usr/src/linux-2.6.31.6/arch/x86/kernel/ptrace.c”和“/usr/src/linux-2.6.31.6/arch/x86/include/asm/ptrace.h”两文件中关于“syscall_trace_enter(struct pt_regs *)”和“syscall_trace_leave(struct pt_regs *)”函数的定义

    统一起来,修改ptrace.h文件中两函数的定义如下:

    extern asmregparm long syscall_trace_enter(struct pt_regs *);
    extern asmregparm void syscall_trace_leave(struct pt_regs *);

     (2)解决(1)后执行“make”,又出现如下错误:

    gcc: error: elf_i386: No such file or directory
    gcc: error: unrecognized command line option ‘-m’
    make[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] Error 1
    make[1]: *** [arch/x86/vdso] Error 2
    make: *** [arch/x86] Error 2

    应该是gcc版本问题,

    gcc -v

    显示

    gcc version 4.8.0 (GCC) 

    /usr/bin/gcc -v

    显示

    gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

    通过执行

    find / -name gcc

    发现系统装了两个版本的gcc,默认执行4.8版本,而此版本gcc与2.6.31内核不兼容,出现上述问题,解决方法是将当前默认版本的gcc改为4.4.7版本(暂时)

    mv /usr/local/bin/gcc /usr/local/bin/gcc4.8.0
    ln -s /usr/bin/gcc /usr/local/bin/gcc

    注:将/usr/bin/gcc链接为/usr/local/bin/gcc,这样在系统执行gcc(即/usr/local/bin/gcc)时会自动链接到/usr/bin/gcc

    5.继续编译,可以顺利执行

    make -j2

    双核一起执行编译,加快速度

    6.编译完成后,执行

    make modules_install

    此时/lib/modules目录下应该有/2.6.31.6-rt19这一目录,然后执行

    mkinitrd /boot/initrd-2.6.31.6-rt19.img 2.6.31.6-rt19 --force

    可在/boot目录下生成initrd-2.6.31.6-rt19.img及自动更新/boot/grub/grub.conf文件,可通过修改后者调整不同内核的启动顺序。

    7.重启!

    8.进入系统后找不到eth0.。。。并且系统中没有e1000e(Intel 82579LM 网卡的驱动)模块。

    参考:http://www.cnblogs.com/QuLory/archive/2012/09/27/2706429.html

       https://patchwork.kernel.org/patch/1301031/

    机器人、自动化、控制
  • 相关阅读:
    等价表达式
    读入字符串
    n以内质数占的比例
    图论——最小生成树_prim
    搜索
    图论——最小生成树
    线段树模板
    WC总结
    三练斜率优化
    斜率优化技巧——换个角度思考
  • 原文地址:https://www.cnblogs.com/okstill/p/4532786.html
Copyright © 2020-2023  润新知