当前位置:首页 » 操作系统 » linux自动加载驱动

linux自动加载驱动

发布时间: 2022-12-18 17:41:24

linux如何加载驱动

linux操作系统下,加载驱动的方式有二:

  1. 静态加载驱动;

  2. 动态加载驱动;

作为前者,静态加载驱动是通过将驱动程序编译到内核而进行的一系列配置操作;对于后者而言则是向内核注册设备信息,从而在kernel启动后,再通过insmod指令,关联好主、次设备号,从而以模块的形式进行加载的;

二者各有优点,所以应用的场合也是不一样的;

Ⅱ Linux驱动程序有几种加载方式以及它们之间的区别

linux关于总线、设备、驱动的注册顺序
设备挂接到总线上时,与总线上的所有驱动进行匹配(用bus_type.match进行匹配),
如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备,挂接到总线上
如果匹配失败,则只是将该设备挂接到总线上。
驱动挂接到总线上时,与总线上的所有设备进行匹配(用bus_type.match进行匹配),
如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备;挂接到总线上
如果匹配失败,则只是将该驱动挂接到总线上。
需要重点关注的是总线的匹配函数match(),驱动的初始化函数probe()
1.
platform_bus_type--总线先被kenrel注册。
2.
系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform
devices)注册到平台总线中(platform_bus_type)
3.
平台驱动(platform
driver)与平台设备(platform
device)的关联是在platform_driver_register或者driver_register中实现,一般这个函数在驱动的初始化过程调用。
通过这三步,就将平台总线,设备,驱动关联起来。
1.
platform
bus先被kenrel注册。
------------------------------------------------------
do_basic_setup()
-->-driver_init()
-->-platform_bus_init()-->bus_register()
2.
系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform
devices)注册到平台总线中(platform_bus_type)
------------------------------------------------------
系统启动阶段,总线的驱动链表还是空的,所以启动阶段的platform_add_devices()只负责将设备添加到总线的设备链表上。

Ⅲ linux系统怎么加载raid驱动

一般情况想常用的服务器,ibm hp dell等,linux系统都会内置raid卡允动的,不需要自己安装驱动,至少我是很少碰见要装驱动的情况。如果发现安装时认不到硬盘。可以按照以下官方说明来安装驱动。有问题可以在上班时间HI我。都在线。

RHEL5, unlike previous RHEL version, requires additional steps for installing the OS onto an Intel(R) Embedded Server RAID Technology volume.
1) Create a RAID array using the Intel Embedded Server RAID Technology II RAID BIOS Configuration Utility.
2) Boot your system using RHEL disc one.
3) At boot prompt type “linux nostorage”
4) Proceed with the installation and you will see a screen which provides you with ?Add device? button.
5) Click “Add Device”, a list of all drivers will appear
6) Press F2 to select driver from floppy
7) Insert the floppy with the Installer DUD image
8 ) Select device that corresponds to the floppy drive (sda in case of USB floppy)
9) After the driver is loaded the list of all drivers will appear again
10) Scroll down the driver list and select. Update megaide driver? in the list
11) Click OK
12) The driver will be loaded and the list of detected devices will appear
13) Click Done
14) Complete installation with RHEL CD

Ⅳ 如何在linux下安装网卡驱动

一、查看网卡型号和机器位数

1、查看网卡型号

linux系统下通过以下命令,可以查看当前的网卡驱动信息;

[box color="white" icon="none"]

[root@localhost zhangy]# lspci |grep -i eth

03:00.0 Ethernet controller: Realtek Semiconctor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

[/box]

2、查看机器位数

驱动程序是要区分系统是32位系统还是64位系统的, 所以通过以下linux命令,就可以知道操作系统的位数了;

[box color="white" icon="none"]

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux

[/box]

下载前先看一下你的网卡驱动,如果是最新的就不用在重新装了。

[box color="white" icon="none"]

[root@localhost zhangy]# ethtool -i eth0

driver: r8169

version: 2.3LK-1-NAPI

firmware-version:

bus-info: 0000:03:00.0

[/box]

RTL8111/8168B就是网卡的型号,这样你可以网卡的型号来找一下网卡驱动的官方网站,然后下载最新的网卡驱动,驱动分64位和32位的,i386,i686是32位的机器,x86_64表示是64位的机器,不要选错驱动了。

二、下载驱动,并安装

1、解压

[box color="white" icon="none"]

[root@localhost download]# tar jxvf r8168-8.032.00.tar.bz2

[/box]

2、安装

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# make && make install

[/box]

如果报以下错误

make -C /lib/moles/2.6.18-308.8.2.el5PAE/build SUBDIRS=/home/zhangy/r8168-8.032.00/src INSTALL_MOD_DIR=kernel/drivers/net moles_install

make: *** /lib/moles/2.6.18-308.8.2.el5PAE/build: 没有那个文件或目录。 停止。

make: *** [install] 错误 2

说明你kernel源码没有安装。安装kernel源码

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# yum install kernel-xen kernel-xen-devel kernel

> kernel-PAE kernel-PAE-devel kernel-devel kernel-headers

[/box]

安装完以后,一定要重启机器。不然下面操作就过不去了,会报FATAL: Mole r8168 not found.

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# depmod -a

[root@localhost r8168-8.032.00]# modprobe r8168

[/box]

编辑配置文件/etc/modprobe.cof,如果以前没有添加alias eth0 r8168,如果已经有了修改一下成alias eth0 r8168。

查一下驱动是不是加载了,如果有以下内容说明驱动安装成功了。

[box color="white" icon="none"]

[root@localhost r8168-8.032.00]# lsmod |grep r8168

r8168 231132 0

[/box]

必须重新启动一下机器,用ethtool查看驱动才会改变,不然还是老样子。下面是新的驱动。

[box color="white" icon="none"]

[root@localhost ~]# ethtool -i eth0

driver: r8168

version: 8.032.00-NAPI

firmware-version:

bus-info: 0000:02:00.0

[/box]

Ⅳ linux系统中哪个命令可以用来加载驱动程序

在2.4内核中,加载驱动命令为:insmod ,删除模块为:rmmod;
在2.6以上内核中,除了insmod与rmmod外,加载命令还有modprobe;
insmod与modprobe不同之处:
insmod 绝对路径/××.o,而modprobe ××即可,不用加.ko或.o后缀,也不用加路径;最重要的一点是:modprobe同时会加载当前模块所依赖的其它模块;
lsmod查看当前加载到内核中的所有驱动模块,同时提供其它一些信息,比如其它模块是否在使用另一个模块。

Ⅵ linux中动态加载驱动的过程是怎么样的,能给个详细的吗

介绍个动态加载模块的过程

在该驱动中,我们假设对键盘的获取是以0.2s为周期执行。源代码如下

static struct timer_list timer;///////我们定义的定时器,也许你会问timer_list是什么来的,其实一看名称就应该就知道了,而为什么要用到list那么多定时器呢?其实在linux中还有很多相同的定义,比如说信号,我们定义的也是信号集,你可以定义该list是一个元素的,也可以是多个的。所以对于 timer_list就可以这样描述:在未来某一个特定时刻执行某一系列特定任务的功能。下面我们还会给出内核中timer_list的具体描述,^_^ 好像我的话又说多了

static int Keypad_starttimer(void)
{
init_timer(&timer);//初始化定时器结构
timer.function=Keypad_timer;//超时服务程序
timer.expires=jiffies+20;//当前时刻加0.2s
add_timer(&timer);
return 0;
}
///超时服务程序
static void Keypad_timer(unsigned long data)
{
read_xy();
}

/////////接下来说下timer-list这个数据结构,如果你不感兴趣的话可以跳过,该结构在include\linux\timer.h中定义
struct timer_list
{
struct list_head entry;
unsigned long expries;
spinlock_t lock;
unsigned long magic;
void (*function)(unsigned long);
unsigner long data;
struct tvec_t_base_s *base;
}

七.利用等待队列实现阻塞型I\O

在用户程序执行读操作的时候有可能尚且没有数据可以读取,为此需要让read操作等待,直到有数据可以读取,这就是阻塞型i\o,阻塞型io可以通过使用进程休眠方法实现。在无数据可以读取的时候,采用等待队列让进程休眠,直到有数据到达的时候才唤醒进程完成数据的读操作。

在本驱动中的read,若循环队列缓冲区中没有数据,则进程进入休眠态,定时器函数每隔0.2s读取键值一次,将按键状态放入缓冲并且适时唤醒进程读取数据。

等待队列的使用流程如下:

1.声明一个等待队列

2.把当前进程加入到等待队列中

3.把进程的状态设置为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE;

4.调用schele,以让出cpu

5.检测所需要的资源是否可用,若是,把当前进程从等待队列中删除,否则转3循环

接下来我们在对read中有关等待队列阻塞实现做具体的解释

static ssize_t Keypad_read(struct file *filp,char *buf,ssize_t count,loff_t *l)
{
DECLEARE_WAITQUEUE(wait,current);//声明等待队列,将当前进程加入到等待队列中
KEY_EVENT t;
ulong out_buf[2];
if(head==tail)//当前循环队列中没有数据可以读取
{
if(filp->f_flags & O_NONBLOCK)//假如用户采用的是非堵塞方式读取
return _EAGAIN;
add_wait_queue(&queue,&wait);//将当前进程加入等待队列
current->state=TASK_INTERRUPTIBLE;//设置当前进程的状态
while((head==tail)&&!signal_pending(current))//假若还没有数据到循环队列并且当前进程没有受到信号(该类信号具体来说是未决的休眠)
{
shele();//进程调度
current->state=TASK_INTERRUPTIBLE;
}
current->state=TASK_RUNNING;//该进程恢复执行
remove_wait_queue(&queue,&wait);//移出等待队列
if(head==tail)
return count;
t=get_data();//调用get_data()函数,得到缓冲区中的数据,下面将给予详细的 介绍
out_buf[0]=t.status;
out_buf[1]=t.click;
_to_user(buf,&out_buf,sizeof(out_buf));//将得到的键值拷贝到用户数据区
return count;
}
}

热点内容
安卓手机听筒在哪里关闭 发布:2025-05-14 17:16:20 浏览:454
我的世界炸毁50万服务器 发布:2025-05-14 17:16:07 浏览:122
存储站源 发布:2025-05-14 17:14:20 浏览:863
win2008的ftp设置 发布:2025-05-14 17:03:31 浏览:663
莱克发的工资卡密码是多少 发布:2025-05-14 16:57:10 浏览:178
方舟怎么用自己的存档进入别人的服务器 发布:2025-05-14 16:46:25 浏览:877
微博视频高清上传设置 发布:2025-05-14 16:38:41 浏览:548
数据库图书管理设计 发布:2025-05-14 16:33:52 浏览:378
php开发的网页 发布:2025-05-14 16:22:03 浏览:477
服务器内存跑满了怎么回事 发布:2025-05-14 16:21:16 浏览:224