重复踩了两次坑,所以简单记录下。

内核 3.10.

在修改了驱动的gro实现之后,进行驱动版本的升级,make && make install 之后,发现tg3的驱动,没有生效。

相同功能的代码在i40e下的驱动能生效,仔细对比install的过程,发现i40e的makefile中会默认调用

cmd_initrd := $(shell \
if which dracut > /dev/null >& ; then \
echo "dracut --force"; \
elif which update-initramfs > /dev/null >& ; then \
echo "update-initramfs -u"; \
fi )

也就是会默认更新initramfs,

而在tg3中的makefile中,进行install,只是:

ifneq ($(BCM_KVER), 2.4)
install: default tg3..gz
else
install: $(BCM_DRV) tg3..gz
endif
mkdir -p $(PREFIX)/$(BCMMODDIR);
install -m $(BCM_DRV) $(PREFIX)/$(BCMMODDIR);
@if [ "$(PREFIX)" = "" ]; then /sbin/depmod -a ;\
else echo " *** Run '/sbin/depmod -a' to update the module database.";\
fi
install -m tg3..gz $(PREFIX)/usr/share/man/man4;\

这样的话,initramfs没有更新,驱动加载的还是老的。这个是第一个小坑。

第二个小坑是,i40e的驱动也不是每台设备都升级成功了,后来才发现,那台没有升级成功的设备的内核,是我之前修改过的,在编译内核之后,我将对应的img进行了改名,

即如下操作:

mv /boot/vmlinuz-3.10. /boot/vmlinuz-3.10.-
mv /boot/initramfs-3.10..img /boot/initramfs-3.10.-.img

这个操作,导致了在i40e模块升级的时候,更新的initramfs名字为initramfs-3.10.0.img,而不是对应的 /boot/initramfs-3.10.0-327.img,从而也失败了。

那么问题来了,initfamfs里,究竟哪些驱动升级后必须加进去,哪些不必须呢?比如网卡驱动,其实可以不加进去,在systemd中将原来的网卡驱动卸载,然后加载新的驱动就行。

initramfs里面,一开始要查看里面的数据,还按照文件格式各种解压,后来发现前辈已经帮我们做好了,就是lsinitrd命令,

lsinitrd /boot/initramfs-3.10..img |grep -i i40e
drwxr-xr-x root root Mar : usr/lib/modules/3.10./updates/drivers/net/ethernet/intel/i40e
-rw-r--r-- root root Mar : usr/lib/modules/3.10./updates/drivers/net/ethernet/intel/i40e/i40e.ko

这个lsinitrd就是一个脚本。而制作initramfs文件,一般使用 mkinitrd,或者直接调用 dracut。

一个linux 驱动升级的小问题记录的更多相关文章

  1. 初学Python-搞了一个linux用户登录监测小工具

    这几天突发奇想,想学习一下Python.看了点基础,觉得有点枯燥,所以想搞点什么.想了想,就随便弄个检测Linux用户登录的小工具吧~ 首先,明确一下功能: 1.能够捕获 linux 用户登录的信息. ...

  2. 第一个Linux驱动-流水灯【转】

    转自:http://www.xuebuyuan.com/1856562.html 水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/artic ...

  3. 【从零开始,从内核驱动驱动到用户空间调用】编写第一个linux驱动,通过端口访问I/O寄存器。

    目的: 通过I/O端口方式访问RTC的秒寄存器: 由于本人从来没看过linux方面的书籍,也只是会在终端用些常用的命令而已,这次老大叫我学着通过I/O端口方式直接去读写寄存器.于是我在google中搜 ...

  4. 如何成为一个Linux内核开发者

    你想知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动.“这篇文档的目的,就是通过描述你需要 经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所 ...

  5. linux驱动面试题2

    1.什么是GPIO? general purpose input/output GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的 ...

  6. linux驱动面试题整理

    1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也 ...

  7. LINUX驱动、系统底层

    就业模拟测试题-LINUX驱动.系统底层工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143921试卷录 ...

  8. Linux代码的重用与强行卸载Linux驱动

    (一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...

  9. 超简单易用的 “在 pcduino 开发板上写 Linux 驱动控制板载 LED 的闪烁”

    版权声明:本文为博主原创文章,未经博主同意不得转载.转载联系 QQ 30952589,加好友请注明来意. https://blog.csdn.net/sleks/article/details/251 ...

随机推荐

  1. gcc and g++ 常用参数解释

    程序编译运行的过程 预处理.处理一些#include,#define命令,生成.i或者.ii文件: 编译.编译器进行语法分析,语义分析,中间代码生成,目标代码生成,优化,生成.s文件 汇编.汇编器把汇 ...

  2. Java技术学习之影响MySQL性能的配置参数

    本文将介绍MySQL参数的五大类设置,平时我们一般都很少碰它们,在进行MySQL性能调优和故障诊断时这些参数还是非常有用的. (一)连接连接通常来自Web服务器,下面列出了一些与连接有关的参数,以及该 ...

  3. servlet中的request和response

    request对象 1.什么是请求 a.浏览器向服务器发送数据就是请求. 一.request功能1--获取数据 1.获取浏览器相关的信息 getRequestURL方法 -- 返回客户端发出请求完整U ...

  4. neo4j通过LOAD CSV导入结点和关系

    1.neo4j默认的导入入口是:安装路径/import,所以要将csv文件放在import目录下,像下面这样: 2.导入后中文乱码: 因为neo4j是utf-8的,而CSV默认保存是ANSI的,需要用 ...

  5. Devexpress gridview cell增加控件

    1.根据上图次序,先添加三类控件类型: 2.根据上图次序设置columnEdit 3.点开ColumnEdit , 设置 check 和 uncheck的 value

  6. JavaScript 版本的 RSA加密库文件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. MySQL误操作删除后,怎么恢复数据?

    MySQL误操作删除后,怎么恢复数据?登陆查数据库mysql> select * from abc.stad;+----+-----------+| id | name |+----+----- ...

  8. rocketmq (一)运行原理以及使用问题

    使用消息中间件可以解决高并发,那是因为消息中间件可以将消息缓存到队列之中. 但是 当消息 过多的时候,几万,几十万...消息中间件也可能会宕机,所以我们可以对消息中间件进行集群,在之前的activem ...

  9. Spring事件通知机制

    在上图中,调用 getApplicationEventMulticaster()方法,该方法返回的ApplicationEventMulticaster类型的对象applicationEventMul ...

  10. Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序

    Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...