之前对dpdk编译了解得较少,之前直接就把centos yum update了,造成测试经理部署的centos 6.5升级为6.9,造成dpdk编译出错。

先说说centos 6.9下编译的心得:

1. 安装DPDK,解压缩DPDK

2.配置编译 config/common_base CONFIG_RTE_BUILD_SHARED_LIB =y

3.编译
gcc 版本需要用 4.4.7的来编译,208开发机上的/usr/bin/gcc是这个版本,/opt/rh...下和/usr/local/gcc-6.x ..下的gcc版本太高了,是不能编译dpdk16.04这个版本的。如果不是4.4.7这个版本,可以:
export PATH=/usr/bin:$PATH 来指定gcc用/usr/bin/gcc这个版本。

尝试过用高版本的来编译,提示说不存在compiler-gcc5.h,把compiler-gcc5.h拷贝到类似于/usr/src/kernels/2.6.32-696.10.1.el6.x86_64/include/linux
这样的目录下,但是因为部分dpdk代码不规范,高版本的会发现更多的错误。

用4.4.7这个编译,发现KNI模块提示出错,原因在http://dev.dpdk.narkive.com/Tmz3Gv1z/dpdk-dev-can-t-build-dpdk-16-04-on-centos-6-8 给出了答案。根据http://www.jianshu.com/p/bc2bde0e4442,我们可以禁掉KNI模块,否则按照前一个链接,需要编译内核,比较麻烦。修改config/。这个问题,dpdk QQ开发群也有同感:“是的,6.5可以,升级以后各种问题。”

近点KNI,需要修改文件,config/common_linuxapp,搜索关键字“KNI”,置为“n”。

主要问题是CentOS 6.x太老了,dpdk官方懒得全面支持。

运行/tools/dpdk-setup.sh 选择x86_64-native-linuxapp-gcc (avx 指令不支持)
#
# Compile librte_acl
#
CONFIG_RTE_LIBRTE_ACL=n
CONFIG_RTE_LIBRTE_ACL_DEBUG=n
重新编译DPDK 重新编译应用程序

编译完,说编译成功,但是“Installation cannot run with T defined and DESTDIR undefined”,提示你没有指定安装路径,这里我们只需要编译,本来也不需要安装,所以忽略,不影响使用。

按照http://dpdk-docs.readthedocs.io/en/latest/linux_gsg/sys_reqs.html#dpdk 这个网页,说要求Kernel version >= 2.6.34,我们的centos6.x都是2.6.32的内核,不符合要求。这个问题有待以后研究。

调整过参数(disable KNI和ACL)的dpdk 16.07.02在这里: https://192.168.1.91/svn/sourceev/trunk/dpdk-16.07.2-adjustParmeter.tar.gz
ACL是针对特定网卡禁掉的,别的网卡未必需要对acl禁掉。

2. 当然最简单的方式是启动时,回退到原来的内核版本。修改/boot/grub/grub.conf,把default改为6.5的那个内核(2.32-431...)。

如果原来没有原来的内核,可以参考https://iforday.com/86.html,来安装6.5的内核。

后来,发现内核更新后,程序没法跑,不能确定是程序的问题,还是dpdk的问题。

禁止内核更新,需要这么做。

方法如下:

  方法1:

  # vim /etc/yum.conf

  exclude=kernel*

  在 [main]配置段下,追加或修改以上内容。

  可通过下面的命令查看是否生效:

  # yum update | grep -i kernel

  方法2:

  在yum命令行中加上-x参数,来跳过指定的更新。如:

  # yum -x ‘kernel*’ update

  Linux禁止系统内核Kernel升级的方法就介绍到这里了,方法2是通过在yum命令行中加入参数来实现的,相较于方法1简单了很多。

    1. #禁止更新内核
    2. exclude=kernel*
    1. # 禁止更新系统
    2. exclude=centos-release*

最新文章

  1. PHP获取接口数据(模拟Get)
  2. 【记录】ASP.NET MVC RegisterBundles
  3. [转]完美洗牌(Perfect Shuffle)问题
  4. linux进程间通信-信号量(semaphore)
  5. javaWeb 数据库连接池连接数据库
  6. Android项目实战(二):安卓应用程序退出的三种方法
  7. HDU5336-XYZ and Drops-模拟
  8. Cocos2d 中的Sprite大小调整问题
  9. LA 4080 (多源最短路径+边修改+最短路径树)
  10. 把一个select查询结果插入到一个表(可选指定字段和值实例)
  11. Android学习笔记_点九绘图与软键盘和事件传递
  12. 实用的两款jquery树形tree插件
  13. freeswqitch odbc
  14. jQuer插件满屏气泡飘落动画效果
  15. JavaScript如何实现继承
  16. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stu' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is
  17. LOJ 3055 「HNOI2019」JOJO—— kmp自动机+主席树
  18. 给go程序添加命令行参数
  19. Quatz入门
  20. codeforces水题100道 第十二题 Codeforces Beta Round #91 (Div. 2 Only) A. Lucky Division (brute force)

热门文章

  1. 微软VBS生成Excel内容和图表示例
  2. python 写入CSV出现空白行问题及拓展
  3. 启动elk中elasticsearch服务报错which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
  4. vins-mono调试教程
  5. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理
  6. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
  7. 1.7Oob 成员变量可以不初始化 但局部变量必须初始化
  8. [nginx] load balancing & location
  9. tomcat端口设置
  10. 20165225 《Java程序设计》第二周学习总结