BCLinux驱动盘制作手册


  • BCLinux Developers

    本文介绍如何制作BCLinux的驱动盘,用于安装过程中的驱动更新。


    1.驱动盘格式

    为了便于驱动更新,驱动盘是有固定格式的,如下:

        /
        |rhdd3   - DD marker, contains the DD's description string
        /rpms
          |  /i386 - contains RPMs for this arch and acts as package repo
          |  /i586
          |  /x86_64
          |  /ppc
          |  /...  - any other architecture the DD provides drivers for
    

    其中rhdd3文件中包含一串字符串,描述驱动盘的格式的版本信息,当前是version 3:

    Driver Update Disk version 3
    

    rpms目录下存放的是由更新驱动的rpm包制作的YUM源。所有的驱动都必须制作成rpm包并制作成YUM源,才能使得Anaconda可以识别。

    2.驱动程序源码获取

    硬件厂商负责驱动程序源码的维护和发布,当发现驱动bug时,厂商会发布驱动程序更新。用户需要更新驱动程序时,可以从厂商网站上获取驱动程序的源码。
    获取的源码一般需要用户自己编译(例如e1000),也有些硬件厂商已经将驱动程序在主流的Linux发行版上编译好了(例如megaraid_sas)。

    3.驱动盘的制作

    对于以源码方式下载的驱动程序,需要用户自己编译成内核模块。为了支持驱动在安装过程中的更新,还需要将其制作成rpm包,并按照上面提到的格式要求制作成驱动盘。本文介绍如何使用ddiskit工具制作驱动盘。

    3.1 ddiskit获取

    可以从下面获取ddiskit源码:http://gitlab.bclinux.org/linux/ddiskit

    [zhangshengju@mirrors tmp]$ git clone git@gitlab.bclinux.org:linux/ddiskit.git
    Cloning into 'ddiskit'...
    remote: Counting objects: 45, done.
    remote: Compressing objects: 100% (37/37), done.
    remote: Total 45 (delta 9), reused 0 (delta 0)
    Receiving objects: 100% (45/45), 440.70 KiB | 518.00 KiB/s, done.
    Resolving deltas: 100% (9/9), done.
    

    3.2 ddisk使用

    以ixgbe驱动为例,示例ddisk工具的使用。首先下载驱动程序源码,下载地址:

    https://downloadmirror.intel.com/14687/eng/ixgbe-4.3.15.tar.gz
    

    进入ddiskit目录,创建ixgbe目录,并复制tmpl目录下的内容到ixgbe目录:

    [zhangshengju@mirrors tmp]$ cd ddiskit/
    [zhangshengju@mirrors ddiskit]$ mkdir ixgbe
    [zhangshengju@mirrors ddiskit]$ cp -rf tmpl/ ixgbe/
    

    将下载的驱动源码放在目录ixgbe/rpm/SOURCES/下,重命名这个目录下的tmpl.conf文件和tmpl.files文件为ixgbe.conf和ixgbe.files,并替换其中的tmpl字符串:

    [zhangshengju@mirrors ddiskit]$ sed -i -e 's/tmpl/ixgbe/g' ixgbe/rpm/SOURCES/ixgbe.*
    [zhangshengju@mirrors ddiskit]$ tree ixgbe/rpm/SOURCES/
    ixgbe/rpm/SOURCES/
    ├── ixgbe-4.3.15.tar.gz
    ├── ixgbe.conf
    └── ixgbe.files
    

    重命名ixgbe/rpm/SPECS/tmpl.spec文件为ixgbe.spec,并修改其中的内容,修改的地方包括软件名,版本号,软件描述等等:

    Name:		ixgbe
    Version: 4.3.15
    Release: 1
    Summary: Intel(R) 10GbE PCI Express Ethernet Connection
    Vendor: Intel Corporation
    
    Group: System Environment/Kernel
    License:	GPLv2
    URL:		http://www.kernel.org/
    Source0:	%{name}-%{version}.tar.gz
    Source1:	%{name}.files
    Source2:	%{name}.conf
    BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
    BuildRequires:	%kernel_module_package_buildreqs
    
    %kernel_module_package -f %{SOURCE1} default
    
    %description
    An example RHEL6 Driver Update package.
    
    %prep
    %setup
    set -- *
    mkdir source
    mv "$@" source/
    mkdir obj
    
    %build
    for flavor in %flavors_to_build; do
    	rm -rf obj/$flavor
    	cp -r source obj/$flavor
    	make -C %{kernel_source $flavor} M=$PWD/obj/$flavor/src
    done
    
    %install
    export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
    export INSTALL_MOD_DIR=extra/%{name}
    for flavor in %flavors_to_build ; do
    	make -C %{kernel_source $flavor} modules_install \
    		M=$PWD/obj/$flavor/src
    	# Cleanup unnecessary kernel-generated module dependency files.
    	find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \;
    done
    
    sed -e s/this_weakupdate/`uname -r | cut -f1 -d-`/ \
    ../../SOURCES/%{name}.conf > \
    ../../SOURCES/%{name}.a
    mv ../../SOURCES/%{name}.a ../../SOURCES/%{name}.conf
    
    install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT/etc/depmod.d/%{name}.conf
    
    %clean
    #rm -rf $RPM_BUILD_ROOT
    
    %changelog
    

    在subdirs文件中添加ixgbe:

    [zhangshengju@mirrors ddiskit]$ cat subdirs 
    ##############################################
    # Full list of example driver subdirectories #
    ##############################################
    ixgbe
    

    修改完毕后,执行make命令。执行结束后,会生成几个目录:

    • images
      包含了压缩的驱动盘镜像dd.iso.gz。
    • disk
      驱动盘镜像(ISO文件)中的内容。

    这个工具适用于BCLinux 6和7,生成的驱动盘如何进行驱动更新可以参考下面的文档: