51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2203|回复: 0
打印 上一主题 下一主题

为 openSUSE添加 RAID 驱动

[复制链接]

 成长值: 14041

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74102
    跳转到指定楼层
    楼主
    发表于 2017-11-15 22:05:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    概述:系统版本:opensuse11.3
    initrd:系统引导内核!系统安装光盘和硬盘上的系统均需要此内核引导!
    所在目录: /boot/ 下
    .ko文件:驱动程序模块!所在目录‘/initrd/lib/modules/2.6.5-override-default/initrd/’ 目录下!
    1 使用linux dd 或者是(suse)按 f5 f6 进取安装驱动画面!
    suse: yes 和no 是是否允许用软驱安装驱动,此软驱可以用u盘顶替! (dd if=xxx.iso 或者是xxx.img of=dev/sdd) 注意是sdd 不
    是sdd1
    2 在initrd 内添加
    首先得到.ko文件: 方法: 使用源码进行编译
    在一台机器上安装需要安装的操作系统,可以是虚拟机!
    进入驱动源目录 make -c "本机内核目录" M=要安装的目的地址 modules
    例如 make -c /lib/modules/内核/build M=/tmp modules
    在M后边的目录找到.ko文件
    3 将ko文件添加到initrd文件中
    file initrd
    mkdir ./suse
    cd suse
    cp initrd suse
    gzip -dc initrd |cpio -ivd rm -f initrd
    cp xxx.ko /initrd/lib/modules/2.6.5-override-default/initrd/
    cd suse
    find . |cpio -o -H newc |gzip -9 >/tmp/initrd
    4 将 ko文件在安装系统最后一步的时候拷贝到硬盘上 !
    ctrl+alt f2 切后台
    挂在u盘
    查看mount ,看看根分区挂在到那个目录下 ,一般是/mnt目录
    拷贝u盘内的ko文件到/mnt/lib/modules/。。。。。。
    #不要进入/lib目录 ,这里是系统缓存目录!
    疑问 :modinfo -F alias modules/e1000e.ko | sed -e 's/^/alias /' -e 's/$/ e1000e/' >> lib/modules/2.6.16.60-0.21-default/modules.alias
    make 其他的文件干嘛用的
    疑问:opensuse 因为 /dev/sda 盘符跳转问题,可能需要删除引导扇区
    dd if=/dev/zero of=/dev/sdx bs=446 count=1
    注意sdx没有数字
    列出rpm包内容和解压rpm包内容
    列出rpm包的内容:
    rpm -qpl *.rpm
    解压rpm包的内容:(没有安装,就像解压tgz包一样rpm包)
    rpm2cpio *.rpm | cpio -div
    (1)
    然而,为了建立外部模块,用户必须先完成内核源代码树接口的编写。这样可以建立一些临时目录以供编译时使用。下面是一个为2.6内核构建模块的命令行。它可以从包含模块源代码目录下执行:
    # make -C /usr/src/linux-2.6.1 SUBDIRS=$PWD modules
    此示例命令假设用户的模块源代码和Makefile所在的目录与用户正在运行的命令中的相同。如果用户不使用POSIX命令(例如BASH),那么可以通过“SUBDIRS=`pwd`”命令,用$PWD变量代替SUBDIRS参数。这样用户就可以使用“pwd”命令识别工作目录。建立出口的命令如下所示:
    #make: Entering directory `/usr/src/linux-2.6.1
    *** Warning: Overriding SUBDIRS on the command line can cause
    *** inconsistencies
    make[1]: `arch/i386/kernel/asm-offsets.s is up to date.
    Building modules, stage 2.
    MODPOST
    CC /home/wvh/timesys/2.6/testmod/testmod.mod.o
    LD [M] /home/wvh/timesys/2.6/testmod/testmod.ko
    #make: Leaving directory `/usr/src/linux-2.6.1
    在模块的加载方面,最主要的开机时即加载模块的档案在于:/etc/modprobe.conf
    如果你有任何的新的驱动程序需要在开机的时候加载,呵呵!写入这个档案就对了!而核心的驱动程序写在哪里?就是在:/lib/modules/`uname–r`/kernel/drivers。
    手动编译一些驱动程序或者是 tarball 的套件时,得到了 *.ko 这个编译成功的目标档案。这样就编译完成了,接着下来就是将编译好的模块放置在核心应该要放置的地方!
    因此,我们要把模块给他直接 copy 到该目录. 完成编译之后,想要在开机的时候立即启动这个模块的对应,那么就写入/etc/modprobe.conf 当中.
    (2)vmlinuz 和 vmlinux
    vmlinuz是可引导的、压缩的内核,“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制,Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。
    vmlinuz是可执行的Linux内核,vmlinuz的建立有两种方式:
    一是编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性;
    二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”,bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码,所以你不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
    (3)initrd.img
    initrd是“initial ramdisk”的简写。
    initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如initrd- 2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。如果你使用的是scsi硬盘,而内核vmlinuz中并没有这个 scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.4.7-10.img是用gzip压缩的文件。initrd映象文件是使用mkinitrd创建的,mkinitrd实用程序能够创建initrd映象文件,这个命令是RedHat专有的,其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
    (4)
    Linux操作系统中模块操作相关命令解释
    lsmod 查看已经安装好的模块, 也可以查看/proc/modules文件的内容. 实际上,lsmod读命令就是通过查看/proc/modules的内容来显示模块信息的.
    modinfo 显示模块信息
    modprobe 不需要指定路径,它会到默认路径下寻找模块。模块也存在依赖性问题: 比如你要加载msdos.ko, 需要先加载fat.ko. modprobe查看/lib/module/version/modules.dep得知模块的依赖关系
    rmmod 卸载模块,但是内核会认为卸载模块不安全,可以添加命令强制卸载。
    depmod 检查系统中模块之间的依赖关系,并把依赖关系信息存于/lib/modules/2.6.18-1.2798/modules.dep中。 一般加载模块后,要命令行下先执行 depmod -a后,在系统加载模块时候会查看modules.dep中模块依赖及路径信息,这样子才可以成功加载需要模块。
    insmod 加载模块,需要指定完整的路径和模块名字。
    modprobe
    [root @test /root]# modprobe [-l |-c]
    [root @test /root]# modprobe modules_name<==直接加载该模块与其相依属性的模块
    参数说明:
    -l :列出目前系统所有的模块 ( 在 /lib/modules/`uname -r`/kernel 底下 )
    -c :列出目前系统所有的模块!(更详细的代号对应表)
    范例:
    [root @test /root]# modprobe ip_tables <==直接加载 ip_tables.ko 这个模块
    需要特别留意的是,模块全部都摆在『 /lib/modules/`uname -r`/kernel 』这个目录下,而且模块的名称都是以 *.ko 这个附档名存在,但是在实际加载模块的时候,只要写入名称即可,千万不可写入 .ko 或者是路径名称。
    insmod
    [root @test /root]# insmod [-fkps] module_name
    参数说明:
    -f :强制将模块加载,要加载不相同版本的模块时候可能会用到的参数
    -k :自动在核心没有使用到该模块的时候,先清除干净!
    -p :测试模块是否可以被加载,不会直接加载系统中!
    -s :将一些执行讯息写到 syslog 这种登录档,而不是写到 terminal 当中!
    insmod 可以读取非 /lib/modules/`uname -r`/kernel 内的模块,而且还可以为模块进行加载测试呢!您可以加上路径与完整的文件名来加载模块,加上 -p 这个参数可以验证该模块的可执行性与否!
    rmmod
    [root @test /root]# rmmod modules_name
    参数说明:
    范例:[root @test /root]# rmmod 8139too
    顾名思义,呵呵!移除模块的程序啦!!使用 lsmod 得到以存在的模块之后,,然后再输入『 rmmod 模块名称』就可以移除模块!
    (5) 驱动程序在内核的开关(选项)
    基础知识:
    make menuconfig 图形化的内核配置make mrproper -----删除不必要的文件和目录.
    1 #make config(基于文本的最为传统的配置界面,不推荐使用)
    2 #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
    注意:使用make menuconfig 需要安装ncurses( sudo apt-get install ncurses-dev)
    3 #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
    注意:如果要用make xconfig,则要先安装libqt3-compat-headers( sudo apt-get install libqt3-compat-headers)
    4 #make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
    目的都是生成一个.config文件,这三个命令中,make
    xconfig的界面最为友好,如果你可以使用Xwindow,你就用这个好了,这个比较方便,也好设置。如果你不能使用Xwindow,那么就使用make
    menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。 选择相应的配置时,有三种选择,它们分别代表的含义如下:
    Y或者是 * --将该功能编译进内核 N--不将该功能编译进内核 M--将该功能编译成可以在需要时动态插入到内核中的模块
    执行make menuconfig,就可以在Device Drivers !
    Multiple devices driver support:多设备驱动支持
    未测试的解决办法
    把你的driver.i586.img挂载
    mount -o loop driver.i586.img /mnt/dud
    cd /mnt/dud
    mkfs.cramfs ./ /tmp/driverupdate
    把生成的driverupdate拷贝到光盘的根目录
    cp /tmp/driverupdate /tmp/SLES10SP2_DVD/
    然后重新生成ISO

    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2024-5-14 22:31 , Processed in 0.061727 second(s), 31 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表