0. 前言

开了虚拟机,开始dpdk之前,我每天都干这几件事:

[root@dpdk potatos]# modprobe uio
[root@dpdk potatos]# insmod /root/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
[root@dpdk potatos]# /root/dpdk/tools/dpdk-devbind.py -b igb_uio ::04.0

作为一个有理想的人,很明显,这件事需要让机器自己干 --! 做了上百次之后,我终于开窍了。。。

1. linux启动过程

  BOIS/UEFI --> MBR --> grub2 -> linux kernel --> initrd --> root_fs --> sys init / systemd / busybox --> shell --> logind/display manager --> X

可参考另一篇:https://i.cnblogs.com/PostDone.aspx?postid=6652739&actiontip=%E5%8F%91%E5%B8%83%E6%88%90%E5%8A%9F

  涉及到驱动的地方:

  A:linux kernel,有一部分驱动是直接编译到内核里边去的 /boot/vmlinuz-linux ,另一部分是动态加载的,在/usr/lib/modules/4.10.6-1-ARCH/kernel/ 下面。还有一部分是没有的。

    我们在编译内核之前,可以修改内核编译选项,有三个选项 Y / M / N  一一对应。

  B:initrd: 但是我们是两阶段启动,所以,initrd中也被集成了一部分驱动,他们的目的只是为了strap起 rootfs。可以在/etc/mkinitcpio.conf中指定。

  C:rootfs,也就是/usr/lib/modules/4.10.6-1-ARCH/kernel/ 下面的驱动。

2. 我们讨论 rootfs中的内容。

  A:我们可以手动加载卸载他们,用modprobe。了解modprobe的大概用法,配置。

# man modprobe
# man modprobe.d

  B:udev, 设备插拔之类的,udev会根据事件,自动的加载卸载驱动。

https://wiki.archlinux.org/index.php/udev

http://www.reactivated.net/writing_udev_rules.html

https://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/udev.html

  看完两篇文档,我依然对udev了解不深。

所以,我应该把dpdk的uio放进udev么? 还是加入启动脚本里,在里边调用 modprobe?

了解一下sys init 和 systemd 的流程,应该会找到正确的方式。

3.   sys init / systemd 流程

  略。好像没啥关系

4.   来个别人总结的番外篇:(为了防止这位博友把原文删掉,我已经另存本地了。)

  http://www.cnblogs.com/image-eye/archive/2011/08/19/2145858.html

5.  按照番外片里的说法,所有设备在被内核发现的时候,内核就会发内核事件出来,而外面正在监听的udev就会捕获到,然后根据modprobe.alias 和 modprobe.dep中的内容,加载一系列的模块了。

  所以,我应该去改modprobe的配置,blacklist掉相应的网卡,使之使用dpdk的驱动。

6. https://wiki.archlinux.org/index.php/Kernel_modules#Blacklisting

CentOS 7 里边的方法:红色为关键操作。

[root@dpdk ~]# cd /lib/modules/3.10.-514.6..el7.x86_64/extra/
[root@dpdk extra]# mkdir dpdk
[root@dpdk extra]# cp /root/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko dpdk/
[root@dpdk etc]# cd modules-load.d/
[root@dpdk modules-load.d]# touch dpdk.conf
[root@dpdk modules-load.d]# vim dpdk.conf
[root@dpdk ~]# cat /etc/modules-load.d/dpdk.conf
igb_uio
[root@dpdk ~]# depmod
[root@dpdk ~]# modprobe igb_uio
[root@dpdk ~]# reboot
[root@dpdk ~]# lsmod |grep igb
igb_uio
uio igb_uio
[root@dpdk ~]#

http://stackoverflow.com/questions/34800731/module-not-found-when-i-do-a-modprobe

至此,UIO已经开机自动加载了,接下来的问题是,让UIO自动驱动网卡。

截至到目前,只能自动加载。却不知道如何让指定的网卡默认加载UIO,毕竟我不能blacklist intel的驱动。而

且从udev里卸载一个驱动去加载另一个是否常规呢?这些疑问都需要深入的理解了udev之后才能回答。

算了,放弃了。。。。 不然人家dpdk为啥要提供个脚本。。。

当然,实现功能是没问题的,只需要自启动一个脚本,调用这个驱动。

如果,有幸有人读到此处并愿意分享的话,欢迎留言。

-------- update@20170412 --------

driver_override: 可能有点关系吧,还没有时间细研究。

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-platform

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci

-----------  update@20170918 -------------

自动加载hugepage.

1. 增加内核参数: hugepages=1024

http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html#use-of-hugepages-in-the-linux-environment

2. 修改fstab自动挂载. 增加行

nodev /mnt/huge hugetlbfs defaults  

------------  update@20170918 -----------------------

清除igb_uio自动加载的逆过程.

1. 删除

/etc/modules-load.d/dpdk.conf

2. 删除

/usr/lib/modules/3.10.-693.2..el7.x86_64/weak_updates/dpdk/

3. depmod

与安装时不同的是, 还有后两个步骤

4. 卸载uio

rmmod igb_uio
modprobe -r uio

5. 重新生成initramfs

mkinitrd /boot/initramfs-3.10.-693.2..el7.x86_64.img.new 3.10.-693.2..el7.x86_64

6. reboot

-------------- update @ 2018-07-25 ------------------------------------

[administrator][driver] driverctl 是如何在udev上层管理设备驱动的

igb_uio 自动加载问题.

偶然发现的,可以用 driverctl  做.

driverctl 设置了udev的rules,  同时留下了pci的ID在配置里:

[root@D129 copyright]# rpm -ql driverctl
/etc/driverctl.d
/usr/lib/udev/rules.d/-driverctl.rules
/usr/lib/udev/rules.d/-vfio-uio.rules
/usr/lib/udev/vfio_name
... ...
[root@D129 copyright]# cat /etc/driverctl.d/pci-\:\:04.0
igb_uio
[root@D129 copyright]#

[dpdk][kernel][driver] 如何让DPDK的UIO开机自动加载到正确的网卡上的更多相关文章

  1. 浅析 GRUB 如何加载 linux kernel

    前言 对于 GRUB 的加载流程,网上绝大部分都是写对 menu.lst, grub.cfg 这些 GRUB 配置文件的编写流程,就像是写脚本语言一样,用些关键字就能让 PC机能正确启动桌面 Linu ...

  2. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

  3. selenium学习笔记11——driver.get(url) 页面加载时间太长

    在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在加载,页面没有加载完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经加载出来了. 解决方 ...

  4. selenium学习笔记——driver.get(url) 页面加载时间太长

    # 两个同时设置才行 # 实现效果:加载状态停止,进行代码下一步操作 driver.set_page_load_timeout(10) driver.set_script_timeout(10) # ...

  5. [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载

    1.  修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...

  6. CentOS VirtualBox启动虚拟及报错:VirtualBox error: Kernel driver not installed (rc=1908)

    VirtualBox error: Kernel driver not installed (rc=1908) Hi all, Let me first say that this is my fin ...

  7. Ubuntu 升级VisualBox后无法启动 Kernel driver not installed (rc=-1908)

    VisualBox之所以在Linux上比传统的VMware快得多,关键一点就是它和Linux内核的结合比较紧密,这也是开源的优点. 不过Linux内核更新很频繁,每次更新内核后启动VirtualBox ...

  8. virtualbox cannot access the kernel driver的解决办法

    一位网友windows xp sp3下安装virtualbox 4.1.20版本,安装好了重启过后,可以打开virtualbox,但是等到创建好虚拟电脑后按启动按钮,就出现了错误提示:"Ca ...

  9. Fedora安装VirtualBox时出现错误Kernel driver not installed (rc=-1908)的解决办法

    新建虚拟机后启动时出现如下错误: Kernel driver not installed (rc=-1908) The VirtualBox Linux kernel driver (vboxdrv) ...

随机推荐

  1. Cublas矩阵加速运算

    前言 编写 CUDA 程序真心不是个简单的事儿,调试也不方便,很费时.那么有没有一些现成的 CUDA 库来调用呢? 答案是有的,如 CUBLAS 就是 CUDA 专门用来解决线性代数运算的库. 本文将 ...

  2. GitHub网站操作

    1.建立新的仓库 2.添加文件 3.新建一个分支 4.删除仓库

  3. 微信小程序测试指南

    [本文出自天外归云的博客园] 微信小程序本地部署测试方法 下载微信开发者工具 让小程序管理员将测试人员的微信号添加开发者权限 本地设置hosts为测试环境hosts 打开微信web开发者工具并扫码登录 ...

  4. 【emWin】例程十六:窗口管理器

    介绍: 显示器上出现的任何内容都包含在窗口中,窗口可以为任何尺寸,并且可在屏幕上一次显示多个窗口, 甚至部分或整个窗口在其他窗口的前面也可.我们可以对窗口进行创建.移动.调整大小等操作,也 可以操控任 ...

  5. one-to-all及all-to-all网络通信模式

    在这两种模式下,因为 占用的通信通道非常高,形成了一个一对多的通道 甚至是多对多的通道,导致现有的fattree网络结构负载太大.

  6. excel 2007 无法输入中文

    解决方法: 1.32位系统:找到C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller,将这个文 ...

  7. idea java 非web程序打包

    以下打包非常暴力.O(∩_∩)O哈哈~ 方法一: 第一步:选择需要打包的程序 第二步:选择需要打包的文件 第三步:artifacts->jar->from modules with... ...

  8. Pika的设计及实现

    Pika pika是360奇虎公司开源的一款类redis存储系统,主要解决的是用户使用 Redis 的内存大小超过 50G.80G 等等这样的情况,会遇到启动恢复时间长,一主多从代价大,硬件成本贵,缓 ...

  9. 《objective-c基础教程》学习笔记 (一)—— 开发环境配置和简单类型输出

    懒惰是富有最大的敌人,再不前进,我们就out了.最近工作比较轻松,不是很忙.于是想晚上下班回家学习点新东西.看着苹果大军的一天天壮大,心里也是痒痒的.于是就想先系统的学习下Objective-C,为之 ...

  10. 5 -- Hibernate的基本用法 --5 1 持久化类的要求

    1.  提供一个无参数的构造器:所有的持久化类都应该提供一个无参数的构造器,这个构造器可以不采用public访问控制符.只要提供了无参数的构造器,Hibernate就可以使用Constructor.n ...