一个linux 驱动升级的小问题记录
重复踩了两次坑,所以简单记录下。
内核 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 驱动升级的小问题记录的更多相关文章
- 初学Python-搞了一个linux用户登录监测小工具
这几天突发奇想,想学习一下Python.看了点基础,觉得有点枯燥,所以想搞点什么.想了想,就随便弄个检测Linux用户登录的小工具吧~ 首先,明确一下功能: 1.能够捕获 linux 用户登录的信息. ...
- 第一个Linux驱动-流水灯【转】
转自:http://www.xuebuyuan.com/1856562.html 水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/artic ...
- 【从零开始,从内核驱动驱动到用户空间调用】编写第一个linux驱动,通过端口访问I/O寄存器。
目的: 通过I/O端口方式访问RTC的秒寄存器: 由于本人从来没看过linux方面的书籍,也只是会在终端用些常用的命令而已,这次老大叫我学着通过I/O端口方式直接去读写寄存器.于是我在google中搜 ...
- 如何成为一个Linux内核开发者
你想知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动.“这篇文档的目的,就是通过描述你需要 经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所 ...
- linux驱动面试题2
1.什么是GPIO? general purpose input/output GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的 ...
- linux驱动面试题整理
1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也 ...
- LINUX驱动、系统底层
就业模拟测试题-LINUX驱动.系统底层工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143921试卷录 ...
- Linux代码的重用与强行卸载Linux驱动
(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...
- 超简单易用的 “在 pcduino 开发板上写 Linux 驱动控制板载 LED 的闪烁”
版权声明:本文为博主原创文章,未经博主同意不得转载.转载联系 QQ 30952589,加好友请注明来意. https://blog.csdn.net/sleks/article/details/251 ...
随机推荐
- Centos7快速部署saltstack
saltstack是一个和ansible差不多的自动化运维工具,可以用来批量管理大量主机 OS:centos7.3 server:172.16.13.159 client: 172.16.13.156 ...
- 后台管理系统好用的UI框架
https://www.layui.com/demo/form.html
- jquery怎么选择嵌套的第一层的li
$(".ra").click(function(){ var id=$(this).children("ul").attr("id"); i ...
- lnmp环境 swoole聊天室
pecl install swoole 安装php扩展swooleservice php-fpm restart 重启php服务whereis php.ini 查看php.ini的位置 查看文件是否配 ...
- Windows2008 R2 X64 PHP环境搭建步骤
Windows2008 R2 X64 PHP环境搭建步骤: 下载:Mysql5.7.23.PHP5.6.Zend.XCahe 一.安装MYSQL.导入数据: 解压MYsql压缩包,并新建Data目录, ...
- TCP/IP各层对应的协议
应用层: 该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据协议.如: HTTP:超文本传输协议. TELNET:(网络电传),通过一个终端(terminal)登录到网络(运行在TCP ...
- Read The Docs搭建
#!/bin/sh ########################### base ###################### yum -y update yum -y install yum-u ...
- leetcode 890. 查找和替换模式 Python
用模式的每个字母去当做key对应单词列表的每个字母value, 如果放进dict之前检测到key已经存在,就检测Word[i][j]是否是和已经存在的value一致,不一致就代表不匹配,break检查 ...
- redis中key的过期键删除策略
Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...
- Python import与from import使用及区别介绍
Python程序可以调用一组基本的函数(即内建函数),比如print().input()和len()等函数.接下来通过本文给大家介绍Python import与from import使用及区别介绍,感 ...