• 一个linux 驱动升级的小问题记录


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

    内核 3.10.

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

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

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

    也就是会默认更新initramfs,

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

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

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

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

    即如下操作:

    mv /boot/vmlinuz-3.10.0 /boot/vmlinuz-3.10.0-327
    mv /boot/initramfs-3.10.0.img /boot/initramfs-3.10.0-327.img

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

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

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

    lsinitrd /boot/initramfs-3.10.0.img |grep -i i40e
    drwxr-xr-x   2 root     root            0 Mar 22 14:16 usr/lib/modules/3.10.0/updates/drivers/net/ethernet/intel/i40e
    -rw-r--r--   1 root     root      8160823 Mar 22 14:16 usr/lib/modules/3.10.0/updates/drivers/net/ethernet/intel/i40e/i40e.ko

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

  • 相关阅读:
    OpenERP实施记录(12):付款处理
    OpenERP实施记录(10):采购补货
    OpenERP实施记录(9):销售一批电脑
    从一个action地址获取信息
    在线杀毒 (最大文件大小64MB)
    WIN7启动WIFI
    Lazy Load, 延迟加载图片的 jQuery 插件【备忘】
    Android 汉字转拼音之JNI篇
    Android Studio 解决方法No JVM installation found. Please install a 64-bit JDK.
    Unity3D移植到自己的Android程序
  • 原文地址:https://www.cnblogs.com/10087622blog/p/10577094.html
Copyright © 2020-2023  润新知