How to add nic driver to pxe boot initrd

文章目录

  • How to add nic driver to pxe boot initrd
    • 1. 概述
    • 2. 准备工作
    • 3. 如何添加nic驱动
      • 3.1 Redhat/CentOS 7系列添加Mellaxon CX6 NIC Driver
      • 3.2 Debian9系列添加Broadcom NIC Driver

1. 概述

initrd (initial ramdisk) 是一种临时根文件系统,它可以通过BootLoader引导加载到内存中的作为临时根文件系统,并运行不同的程序,它可以用作 Linux 启动过程的一部分。
在pxe装机过程中,BootLoader 引导加载vmlinuz及initrd后,将initrd做为初始化文件系统,并从网络文件共享服务器(nfs/http/vsftp)中加载文件系统进行装机,但旧的Linux发行版的initrd由于缺少一些新的NIC驱动,无法正确识别NIC设备,这时候如果要正确通过PXE安装OS,需要将该⽹卡的驱动程式打包到initrd的镜像file中。
此文档分别以centos/redhat 7系列添加Mellaxon CX6 NIC Driver、debian9.9添加Boadcom NIC Driver为例,其他型号网卡驱动添加也可参考此文档进行。

2. 准备工作

  • ISO镜像包
  • NIC Driver package

3. 如何添加nic驱动

3.1 Redhat/CentOS 7系列添加Mellaxon CX6 NIC Driver

  1. 通过U盘或webUI安装OS到SUT

    [root@localhost ~]# cat /etc/redhat-release
    CentOS Linux release 7.6.1810 (Core)
    
  2. 在SUT安装网卡驱动
    [root@localhost ~]# ls MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
    MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
    [root@localhost ~]# tar zxvf MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
    [root@localhost ~]# cd MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64/
    [root@localhost MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64]# ls
    common_installers.pl            distro            LICENSE                     RPM-GPG-KEY-Mellanox  uninstall.sh
    common.pl                       docs              mlnx_add_kernel_support.sh  RPMS
    create_mlnx_ofed_installers.pl  is_kmp_compat.sh  mlnxofedinstall             src
    [root@localhost MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64]# ./mlnxofedinstall --force
    
  3. 解压原始initrd
    • 将OS镜像挂载到本地

      [root@localhost ~]# mount -o loop -t iso9660 CentOS-7.6-x86_64-DVD-1810.iso /mnt/
      
    • 为新的initrd创建挂载点
      [root@localhost ~]# mkdir initrd_mlx5
      
    • 拷⻉ISO镜像⾥原始的initrd.img
      [root@localhost ~]# cp /mnt/images/pxeboot/initrd.img /root/initrd_mlx5/
      
    • 解压原始的initrd.img
      [root@localhost ~]# cd /root/initrd-mlx5/
      [root@localhost initrd_mlx5]# mkdir tmp #创建tmp是为了将解压后的files暂时存放这⾥
      [root@localhost initrd_mlx5]# cd tmp
      [root@localhost tmp]# xz -dc ../initrd.img | cpio -id
      271820 blocks
      [root@localhost tmp]# ls
      bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var
      
  4. 拷贝网卡驱动到解压后的initrd中
    • 查看驱动文件路径及依赖驱动信息

      [root@localhost tmp]# modinfo mlx5_core | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
      depends:        mlx_compat,auxiliary,devlink,ptp,mlxfw,psample
      [root@localhost tmp]# modinfo mlx_compat | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/compat/mlx_compat.ko
      depends:
      [root@localhost tmp]# modinfo auxiliary | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/base/auxiliary.ko
      depends:        mlx_compat
      [root@localhost tmp]# modinfo devlink | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/net/core/devlink.ko.xz
      depends:
      [root@localhost tmp]# modinfo ptp | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/ptp/ptp.ko.xz
      depends:        pps_core
      [root@localhost tmp]# modinfo pps_core | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/pps/pps_core.ko.xz
      depends:
      [root@localhost tmp]# modinfo mlxfw | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlxfw/mlxfw.ko
      depends:
      [root@localhost tmp]# modinfo psample | egrep "filename|depends"
      filename:       /lib/modules/3.10.0-957.el7.x86_64/kernel/net/psample/psample.ko.xz
      depends:
      
    • 将上面所有需要的驱动拷⻉到 /root/initrd-mlx5/tmp/lib/modules/3.10.0-
      862.el7.x86_64,注意位置需要⼀⼀对应。

      [root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlx5/core
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlx5/core/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/compat/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/compat/mlx_compat.ko lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/compat/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/base/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/base/auxiliary.ko lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/base/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/kernel/net/core
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/kernel/net/core/devlink.ko.xz lib/modules/3.10.0-957.el7.x86_64/kernel/net/core/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/ptp/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/ptp/ptp.ko.xz lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/ptp/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/pps/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/pps/pps_core.ko.xz lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/pps/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlxfw/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlxfw/mlxfw.ko lib/modules/3.10.0-957.el7.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlxfw/[root@localhost tmp]# mkdir -p lib/modules/3.10.0-957.el7.x86_64/kernel/net/psample/
      [root@localhost tmp]# cp /lib/modules/3.10.0-957.el7.x86_64/kernel/net/psample/psample.ko.xz lib/modules/3.10.0-957.el7.x86_64/kernel/net/psample/
      
  5. 更新驱动信息模块modules.symbol/modules.alias/modules.dep
    [root@localhost tmp]# cat /lib/modules/3.10.0-957.el7.x86_64/modules.symbols | egrep "mlx5_core$|mlx_compat$|devlink$|ptp$|mlxfw$|psample$|pps_core$" >> lib/modules/3.10.0-957.el7.x86_64/modules.symbols
    [root@localhost tmp]# cat /lib/modules/3.10.0-957.el7.x86_64/modules.alias | egrep "mlx5_core$|mlx_compat$|devlink$|ptp$|mlxfw$|psample$|pps_core$" >> lib/modules/3.10.0-957.el7.x86_64/modules.alias
    [root@localhost tmp]# depmod -b /root/initrd_mlx5/tmp -a -v * 创建依赖列表并重新映射
    
  6. 重新打包initrd 镜像file
    [root@localhost ~]# cd /root/initrd_mlx5/tmp/
    [root@localhost tmp]# find . -print | cpio -o -H newc | xz --format=lzma > ../initrd-cx6.img
    276695 blocks
    [root@localhost tmp]# cd ..
    [root@localhost initrd_mlx5]# ls
    initrd-cx6.img  initrd.img  tmp
    
  7. 将打包好的initrd-cx6.img 拷贝到pxe server, 并修改引导菜单
    [root@simonlinux ~]# vim /var/lib/tftpboot/uefi/grub.cfg
    set default="0"
    set timeout=60
    menuentry '1.Install CentOS 7.6 via http[With 100G CX6]' --class fedora --class gnu-linux --class gnu --class os {linuxefi /boot/ctos/7.6/vmlinuz inst.repo=http://www.httpboot.local/pxeimg/centos/7.6/os/x86_64 ipv6only=1 quiet#linuxefi /images/pxeboot/vmlinuz inst.repo=http://[2001:db8:ffff:100::10]/pxeimg/centos/8.5/os/x86_64initrdefi /boot/ctos/7.6/initrd-cx6.img#initrdefi /boot/ctos/7.6/initrd.img
    }
    

3.2 Debian9系列添加Broadcom NIC Driver

  1. 通过U盘或webUI安装OS到SUT

    root@debian:~# cat /etc/issue
    Debian GNU/Linux 9 \n \lroot@debian:~# uname -a
    Linux debian 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1 (2019-04-12) x86_64 GNU/Linux
    root@debian:~#
    
  2. 在SUT安装网卡驱动
    root@debian:~# ls -l bnxt_en-1.10.2-221.0.114.0.tar.gz
    -rw-r--r-- 1 root root 603657 Oct 21 21:47 bnxt_en-1.10.2-221.0.114.0.tar.gz
    root@debian:~# tar zxvf bnxt_en-1.10.2-221.0.114.0.tar.gz
    root@debian:~# cd bnxt_en-1.10.2-221.0.114.0/
    root@debian:~/bnxt_en-1.10.2-221.0.114.0# ls
    bnxt.c                    bnxt_debugfs_cpt.c  bnxt_ethtool_compat.c  bnxt_lfc.h        bnxt_tc.c         ChangeLog
    bnxt_compat.h             bnxt_debugfs.h      bnxt_ethtool.h         bnxt_lfc_ioctl.h  bnxt_tc_compat.h  COPYING
    bnxt_compat_link_modes.c  bnxt_devlink.c      bnxt_extra_ver.h       bnxt_netlink.c    bnxt_tc.h         find_src.awk
    bnxt_compat_link_modes.h  bnxt_devlink.h      bnxt_fw_hdr.h          bnxt_netlink.h    bnxt_ulp.c        Makefile
    bnxt_coredump.c           bnxt_dim.c          bnxt.h                 bnxt_nvm_defs.h   bnxt_ulp.h        MANIFEST
    bnxt_coredump.h           bnxt_dim.h          bnxt_hsi.h             bnxt_ptp.c        bnxt_vfr.c        README.TXT
    bnxt_dcb.c                bnxt_eem.c          bnxt_hwrm.c            bnxt_ptp.h        bnxt_vfr.h
    bnxt_dcb.h                bnxt_eem.h          bnxt_hwrm.h            bnxt_sriov.c      bnxt_xdp.c
    bnxt_debugfs.c            bnxt_ethtool.c      bnxt_lfc.c             bnxt_sriov.h      bnxt_xdp.h
    root@debian:~/bnxt_en-1.10.2-221.0.114.0# make;make install
    
  3. 解压原始initrd
    • 下载对应版本的netboot到SUT

      root@debian:~# ls netboot.tar.gz
      root@debian:~# cd debian-installer/
      root@debian:~# tree -L 2
      .
      └── amd64├── bootnetx64.efi├── boot-screens├── grub├── initrd.gz├── linux├── pxelinux.0└── pxelinux.cfg
      
    • 为新的initrd创建挂载点
      root@debian:~# mkdir initrd_bnxt
      
    • 拷⻉netboot⾥原始的initrd.gz
      root@debian:~# mkdir initrd_bnxt
      root@debian:~# cp debian-installer/amd64/initrd.gz initrd_bnxt/
      root@debian:~# cd initrd_bnxt/
      root@debian:~/initrd_bnxt# ls
      initrd.gz
      
    • 解压原始的initrd.gz
      root@debian:~# cd /root/initrd_bnxt/
      root@debian:~/initrd_bnxt# gunzip initrd.gz
      root@debian:~/initrd_bnxt# mkdir tmp #创建tmp是为了将解压后的files暂时存放这⾥
      root@debian:~/initrd_bnxt# cd tmp
      root@debian:~/initrd_bnxt/tmp# cpio -i -F ../initrd
      139458 blocks
      root@debian:~/initrd_bnxt/tmp# ls
      bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var
      
  4. 拷贝网卡驱动到解压后的initrd中
    • 查看驱动文件路径及依赖驱动信息

      root@debian:~/initrd_bnxt/tmp# modinfo bnxt_en | egrep "filename|depends"
      filename:       /lib/modules/4.9.0-9-amd64/updates/bnxt_en.ko
      depends:        ptp
      root@debian:~/initrd_bnxt/tmp# modinfo ptp | egrep "filename|depends"
      filename:       /lib/modules/4.9.0-9-amd64/kernel/drivers/ptp/ptp.ko
      depends:        pps_core
      root@debian:~/initrd_bnxt/tmp# modinfo pps_core | egrep "filename|depends"
      filename:       /lib/modules/4.9.0-9-amd64/kernel/drivers/pps/pps_core.ko
      depends:
      
    • 将上面所有需要的驱动拷⻉到 /root/initrd_bnxt/tmp/ib/modules/4.9.0-9-amd64/,注意位置需要⼀⼀对应。
      # copy bnxt_en
      root@debian:~/initrd_bnxt/tmp# mkdir lib/modules/4.9.0-9-amd64/updates
      root@debian:~/initrd_bnxt/tmp# cp /lib/modules/4.9.0-9-amd64/updates/bnxt_en.ko lib/modules/4.9.0-9-amd64/updates/.
      # copy ptp
      root@debian:~/initrd_bnxt/tmp# cp /lib/modules/4.9.0-9-amd64/kernel/drivers/ptp/ptp.ko lib/modules/4.9.0-9-amd64/kernel/drivers/ptp/ptp.ko
      # copy pps_core.ko
      root@debian:~/initrd_bnxt/tmp# cp /lib/modules/4.9.0-9-amd64/kernel/drivers/pps/pps_core.ko lib/modules/4.9.0-9-amd64/kernel/drivers/pps/pps_core.ko
      
  5. 更新驱动信息模块modules.symbol/modules.alias/modules.dep
    root@debian:~/initrd_bnxt/tmp# cd lib/modules/4.9.0-9-amd64/
    root@debian:~/initrd_bnxt/tmp/lib/modules/4.9.0-9-amd64# cat /lib/modules/4.9.0-9-amd64/modules.symbols | grep "bnxt_en$" >> modules.symbols
    root@debian:~/initrd_bnxt/tmp/lib/modules/4.9.0-9-amd64# cat /lib/modules/4.9.0-9-amd64/modules.alias | grep -i bnxt_en >> modules.alias
    root@debian:~/initrd_bnxt/tmp/lib/modules/4.9.0-9-amd64# depmod -b /root/initrd_bnxt/tmp -a -v * 创建依赖列表并重新映射
    
  6. 重新打包initrd 镜像file
    root@debian:~# cd /root/initrd_bnxt/tmp/
    root@debian:~/initrd_bnxt/tmp# find . -print | cpio -o -H newc -O ../initrd-bnxt
    159523 blocks
    root@debian:~/initrd_bnxt/tmp# gzip -c ../initrd-bnxt > ../initrd-bnxt.gz
    root@debian:~/initrd_bnxt# ls
    initrd initrd-bnxt  initrd-bnxt.gz  tmp
    root@debian:~/initrd_bnxt#
  7. 将打包好的initrd-bnxt.gz 拷贝到pxe server, 并修改引导菜单
    [root@simonlinux ~]# vim /var/lib/tftpboot/uefi/grub.cfg
    set default="0"
    set timeout=60
    submenu '03 Debian os Install'{
    menuentry 'Install Debian9.9 under UEFI mode via Preseed' {set background_color=blacklinuxefi    /debian9/debian-installer/amd64/linux vga=788 debian-installer/allow_unauthenticated=true url=http://192.168.15.10/ks_cfg/preseed-uefi.cfg auto=true priority=critical interface=auto ---quietinitrdefi   /debian9/debian-installer/amd64/initrd-bnxt.gz#initrdefi   /debian9/debian-installer/amd64/initrd.gz
    }
    }

How add nic driver to initrd相关推荐

  1. allwinner: add sun8i-emac driver

    最近看到网上有个H3芯片的一些板子挺便宜的.尝试了一下,编译了openwrt的固件,发现没有支持内置的网卡和声卡.但是在网上下载了一些厂家的镜像却发现,在发行版的系统里是支持网卡和声卡的. 今天是20 ...

  2. babyos2(35) network(1) -- simple RTL8139 nic driver

    要为babyos2实现网络,首先要支持网卡,之前选了RTL8139,为此前面做了PCI相关的一些东西,这次要实现简单的网卡驱动. 1.从PCI获取设备信息 uint32 rtl8139_t::get_ ...

  3. msm8660 add lcd driver

    增加mipi himax hx8363a lcd驱动 android/bootable/bootloader/lk/platform/msm8x60/panel_himax_mipi.c [new f ...

  4. add printer driver error 1802修复说明

    1.重启电脑后 ,将服务"Print Spooler"服务重新启动 2.srclient.dll文件拷贝到c盘 windows/system32目录下 3.连接好打印机USB接口, ...

  5. Linux内核部件分析 设备驱动模型之driver ---mark 详细

    Linux内核部件分析 设备驱动模型之driver 转载:https://www.linuxidc.com/Linux/2011-10/44627p7.htm 上节我们分析设备驱动模型中的device ...

  6. MT6737 平台TP driver分析(二)

    tp厂商驱动文件分析 \kernel-3.18\drivers\input\touchscreen\mediatek\NT11206 \kernel-3.18\drivers\input\touchs ...

  7. platform driver注册过程

    platform 总线上的驱动注册一般使用module_platform_driver宏,如goldfish设备的注册 module_platform_driver(goldfish_pipe); 这 ...

  8. Linux Driver 和Device匹配过程分析

    Linux Driver 和Device匹配过程分析 1,总线注册匹配过程 1.1 struct platform_driver 1.2 struct device_driver 1.3 PCIe总线 ...

  9. FT2000+模块在麒麟系统下串口输出功能调试

    FT2000+芯片自带串口,于是模块可以通过前出CPU串口登录系统,查看系统IP地址等信息,在网络故障时方便用户进行问题定位. 打开串口功能需要在系统下配置两个地方 1.需要修改/boot/grub. ...

最新文章

  1. JPA不同包下同类名查询出错
  2. 干货回顾丨深度学习性能提升的诀窍
  3. crontab工具类 断给定的时间 是否 满足 crontab 表达式.md
  4. EF中一对多的关系中,用单字段保存ID拼接字符串
  5. MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
  6. linux软链接上传svn,svn 软链接问题
  7. mysql中ibdata1过大的问题
  8. 【转】WPF之路-常用布局控件一
  9. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 14丨重新格式化部门表【难度中等】
  10. php查真实地址,php教程:检查URL地址是否真实存在
  11. 俞敏洪回应新东方股价跌破1美元
  12. 数学建模之层次分析法(AHP)
  13. 算计算机一级应用app,计算机一级题库
  14. XML数据结构 SAX 解析
  15. 分布式数据库实战第三节 分布式数据库引擎、索引和事务
  16. 使用instrument-->Allocations进行内存分析
  17. C程序~一元二次方程求解
  18. Vue源码剖析——render、patch、updata、vnode
  19. 一个app的流程分析
  20. 没有NAS也要搭建私有云?花生棒+硬盘的一个任性玩法

热门文章

  1. 嵌入式(FS_4412 ADC实验)
  2. background-color覆盖范围
  3. redis安装和特性
  4. Android系统学习(一)------编译系统Android7.0
  5. Java后端解密微信小程序手机号数据
  6. HTML实现遮罩层的方法 HTML中如何使用遮罩层
  7. Huawei SDN Certification 华为SDN网络认证产品EOX公告
  8. 2,未来十年,资产增加
  9. 前端开发中环境变量配置
  10. java语音、视频、其他文件下载