企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

为 openSUSE添加 RAID 驱动(opensuse安装nvidia显卡驱动)

wudianyun 2025-05-03 17:02:49 精选文章 8 ℃

概述:系统版本: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

Tags:

最近发表
标签列表