导航:首页 > 源码编译 > 驱动源码

驱动源码

发布时间:2022-01-28 23:49:24

‘壹’ 怎么将驱动源代码编译linux系统

一、 驱动程序编译进内核的步骤
在 linux 内核中增加程序需要完成以下三项工作:
1. 将编写的源代码复制到 Linux 内核源代码的相应目录;
2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项;
3. 在目录的 Makefile 文件中增加对新源代码的编译条目。

bq27501驱动编译到内核中具体步骤如下:
1. 先将驱动代码bq27501文件夹复制到 ti-davinci/drivers/ 目录下。
确定bq27501驱动模块应在内核源代码树中处于何处。
设备驱动程序存放在内核源码树根目录 drivers/ 的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。
a. 字符设备存在于 drivers/char/ 目录下
b. 块设备存放在 drivers/block/ 目录下
c. USB 设备则存放在 drivers/usb/ 目录下。
注意:
(1) 此处的文件组织规则并非绝对不变,例如: USB 设备也属于字符设备,也可以存放在 drivers/usb/ 目录下。
(2) 在 drivers/char/ 目录下,在该目录下同时存在大量的 C 源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。
(3) bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方面查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。

2. 在/bq27501下面新建一个Makefile文件。向里面添加代码:
obj-$(CONFIG_BQ27501)+=bq27501.o
此时,构建系统运行就将会进入 bq27501/ 目录下,并且将bq27501.c 编译为 bq27501.o
3. 在/bq27501下面新建Kconfig文件。添加代码:
menu "bq27501 driver"

config BQ27501
tristate"BQ27501"
default y
---help---
Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko.
endmenu
注意:help中的文字不能加回车符,否则make menuconfig编译的时候会报错。
4. 修改/drivers目录下的Kconfig文件,在endmenu之前添加一条语句‘source drivers/bq27501/Kconfig’ 对于驱动程序,Kconfig 通常和源代码处于同一目录。 若建立了一个新的目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的语句将其挂接在 drivers 目录中的Kconfig 中。

5. 修改/drivers目下Makefile文件,添加‘obj-$(CONFIG_BQ27501) +=bq27501/’。这行编译指令告诉模块构建系统在编译模块时需要进入 bq27501/ 子目录中。此时的驱动程序的编译取决于一个特殊配置 CONFIG_BQ27501 配置选项。

6. 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句
source "drivers/bq27501/Kconfig"

‘贰’ 能给我发几个Linux驱动源码吗

有,我发给你 我发给你的邮箱是凡凡<[email protected]>▼

‘叁’ 程序高手来!!求驱动程序代码!!跪谢= =

*

* 与PCI函数进行交互的简单KLD

*

* Murray Stokely

*/

#include <sys/param.h> /* kernel.h中使用的定义 */

#include <sys/mole.h>

#include <sys/systm.h>

#include <sys/errno.h>

#include <sys/kernel.h> /* 模块初始化中使用的类型 */

#include <sys/conf.h> /* cdevsw结构 */

#include <sys/uio.h> /* uio结构 */

#include <sys/malloc.h>

#include <sys/bus.h> /* pci总线用到的结构、原型 */

#include <machine/bus.h>

#include <sys/rman.h>

#include <machine/resource.h>

#include <dev/pci/pcivar.h> /* 为了使用get_pci宏! */

#include <dev/pci/pcireg.h>

/* softc保存我们每个实例的数据。 */

struct mypci_softc {

device_t my_dev;

struct cdev *my_cdev;

};

/* 函数原型 */

static d_open_t mypci_open;

static d_close_t mypci_close;

static d_read_t mypci_read;

static d_write_t mypci_write;

/* 字符设备入口点 */

static struct cdevsw mypci_cdevsw = {

.d_version = D_VERSION,

.d_open = mypci_open,

.d_close = mypci_close,

.d_read = mypci_read,

.d_write = mypci_write,

.d_name = "mypci",

};

/*

* 在cdevsw例程中,我们通过结构体cdev中的成员si_drv1找出我们的softc。

* 当我们建立/dev项时,在我们的已附着的例程中,

* 我们设置这个变量指向我们的softc。

*/

int

mypci_open(struct cdev *dev, int oflags, int devtype, d_thread_t *td)

{

struct mypci_softc *sc;

/* Look up our softc. */

sc = dev->si_drv1;

device_printf(sc->my_dev, "Opened successfully.\n");

return (0);

}

int

mypci_close(struct cdev *dev, int fflag, int devtype, d_thread_t *td)

{

struct mypci_softc *sc;

/* Look up our softc. */

sc = dev->si_drv1;

device_printf(sc->my_dev, "Closed.\n");

return (0);

}

int

mypci_read(struct cdev *dev, struct uio *uio, int ioflag)

{

struct mypci_softc *sc;

/* Look up our softc. */

sc = dev->si_drv1;

device_printf(sc->my_dev, "Asked to read %d bytes.\n", uio->uio_resid);

return (0);

}

int

mypci_write(struct cdev *dev, struct uio *uio, int ioflag)

{

struct mypci_softc *sc;

/* Look up our softc. */

sc = dev->si_drv1;

device_printf(sc->my_dev, "Asked to write %d bytes.\n", uio->uio_resid);

return (0);

}

/* PCI支持函数 */

/*

* 将某个设置的标识与这个驱动程序支持的标识相比较。

* 如果相符,设置描述字符并返回成功。

*/

static int

mypci_probe(device_t dev)

{

device_printf(dev, "MyPCI Probe\nVendor ID : 0x%x\nDevice ID : 0x%x\n",

pci_get_vendor(dev), pci_get_device(dev));

if (pci_get_vendor(dev) == 0x11c1) {

printf("We've got the Winmodem, probe successful!\n");

device_set_desc(dev, "WinModem");

return (BUS_PROBE_DEFAULT);

}

return (ENXIO);

}

/* 只有当探测成功时才调用连接函数 */

static int

mypci_attach(device_t dev)

{

struct mypci_softc *sc;

printf("MyPCI Attach for : deviceID : 0x%x\n", pci_get_devid(dev));

/* Look up our softc and initialize its fields. */

sc = device_get_softc(dev);

sc->my_dev = dev;

/*

* Create a /dev entry for this device. The kernel will assign us

* a major number automatically. We use the unit number of this

* device as the minor number and name the character device

* "mypci<unit>".

*/

sc->my_cdev = make_dev(&mypci_cdevsw, device_get_unit(dev),

UID_ROOT, GID_WHEEL, 0600, "mypci%u", device_get_unit(dev));

sc->my_cdev->si_drv1 = sc;

printf("Mypci device loaded.\n");

return (0);

}

/* 分离设备。 */

static int

mypci_detach(device_t dev)

{

struct mypci_softc *sc;

/* Teardown the state in our softc created in our attach routine. */

sc = device_get_softc(dev);

destroy_dev(sc->my_cdev);

printf("Mypci detach!\n");

return (0);

}

/* 系统关闭期间在sync之后调用。 */

static int

mypci_shutdown(device_t dev)

{

printf("Mypci shutdown!\n");

return (0);

}

/*

* 设备挂起例程。

*/

static int

mypci_suspend(device_t dev)

{

printf("Mypci suspend!\n");

return (0);

}

/*

* 设备恢复(重新开始)例程。

*/

static int

mypci_resume(device_t dev)

{

printf("Mypci resume!\n");

return (0);

}

static device_method_t mypci_methods[] = {

/* 设备接口 */

DEVMETHOD(device_probe, mypci_probe),

DEVMETHOD(device_attach, mypci_attach),

DEVMETHOD(device_detach, mypci_detach),

DEVMETHOD(device_shutdown, mypci_shutdown),

DEVMETHOD(device_suspend, mypci_suspend),

DEVMETHOD(device_resume, mypci_resume),

{ 0, 0 }

};

static devclass_t mypci_devclass;

DEFINE_CLASS_0(mypci, mypci_driver, mypci_methods, sizeof(struct mypci_softc));

DRIVER_MODULE(mypci, pci, mypci_driver, mypci_devclass, 0, 0);

‘肆’ window7下如何编写USB驱动源码

首先需要把驱动压缩解压到一个文件夹
然后找到你桌面的计算机 点右键 属性
然后点设备管理
然后找到你的Apple USB Ethernet Adapter 设备 点右键属性
再点驱动程序 再点下面的更新驱动程序
再点 浏览计算机查找驱动程序软件
然后一步步确定即可。重新启动,OK!

‘伍’ 如何找到mysql-jdbc驱动源码

在工程中右键新建file,命名为jdbc.properties

创建完毕如图:

在jdbc.properties文件中输入如下信息,分别是数据库的驱动,连接,用户名和密码

新建JdbcTest2.java

输入如下代码:

代码说明:
这段代码是读取配置文件,把配置文件中的各个项通过名称读取出来

这段代码是通过反射来创建Driver对象,反射就是类的实例化

在主函数中输入如下,测试方法

运行之后的结果如下,表示连接成功!

‘陆’ linux的U盘驱动源码

根据你的描述,估计FUSE不适合你。

参考以下几个文件吧(我的系统是DEBIAN LENNY)

localhost:/home/aaa/program# apt-cache search libusb
libusb-0.1-4 - userspace USB programming library
libusb-1.0-0 - userspace USB programming library
libusb-1.0-0-dev - userspace USB programming library development files
libusb-dev - userspace USB programming library development files

用apt-get source libusb下载过来的内如如下所示:
total 1688
-rw-r--r-- 1 500 500 2661 2005-02-14 acinclude.m4
-rw-r--r-- 1 500 500 244051 2006-03-04 aclocal.m4
drwxrwxrwx 2 500 500 4096 2006-03-04 apidocs
-rw-r--r-- 1 500 500 130 2004-04-22 AUTHORS
-rw-r--r-- 1 500 500 16833 2006-03-04 bsd.c
-rw-r--r-- 1 500 500 189 2004-01-28 ChangeLog
-rwxr-xr-x 1 500 500 3642 2004-03-12 compile
-rwxr-xr-x 1 500 500 42037 2004-04-12 config.guess
-rw-r--r-- 1 500 500 2467 2006-03-04 config.h.in
-rwxr-xr-x 1 500 500 30221 2004-04-12 config.sub
-rwxr-xr-x 1 500 500 746195 2006-03-04 configure
-rw-r--r-- 1 500 500 6777 2006-03-04 configure.in
-rw-r--r-- 1 500 500 26428 2004-01-28 COPYING
-rw-r--r-- 1 500 500 35685 2006-03-04 darwin.c
drwxr-xr-x 3 root root 4096 02-19 18:51 debian
-rwxr-xr-x 1 500 500 14841 2004-03-12 depcomp
-rw-r--r-- 1 500 500 15021 2006-03-04 descriptors.c
drwxrwxrwx 2 500 500 4096 02-19 18:49 doc
-rw-r--r-- 1 500 500 44099 2006-03-04 Doxyfile
-rw-r--r-- 1 500 500 44154 2006-02-07 Doxyfile.in
-rw-r--r-- 1 500 500 759 2004-01-28 error.c
-rw-r--r-- 1 500 500 716 2004-01-28 error.h
-rw-r--r-- 1 500 500 2043 2006-03-04 INSTALL.libusb
-rw-r--r-- 1 500 500 2063 2004-01-28 INSTALL.libusb.in
-rwxr-xr-x 1 500 500 9208 2004-03-12 install-sh
-rw-r--r-- 1 500 500 1267 2004-01-28 libusb-config.in
-rw-r--r-- 1 500 500 196 2005-02-15 libusb.pc.in
-rw-r--r-- 1 500 500 1290 2006-03-04 libusb.spec
-rw-r--r-- 1 500 500 1293 2006-03-04 libusb.spec.in
-rw-r--r-- 1 500 500 2248 2004-01-28 LICENSE
-rw-r--r-- 1 500 500 19148 2006-03-04 linux.c
-rw-r--r-- 1 500 500 3146 2005-02-03 linux.h
-rw-r--r-- 1 500 500 183730 2004-04-12 ltmain.sh
-rw-r--r-- 1 500 500 2220 2006-03-04 Makefile.am
-rw-r--r-- 1 500 500 34139 2006-03-04 Makefile.in
-rwxr-xr-x 1 500 500 10678 2004-03-12 missing
-rw-r--r-- 1 500 500 8 2004-01-28 NEWS
-rw-r--r-- 1 500 500 2546 2006-03-04 README
-rw-r--r-- 1 500 500 2556 2006-03-04 README.in
drwxrwxrwx 2 500 500 4096 2006-03-04 tests
-rw-r--r-- 1 500 500 6443 2006-03-04 usb.c
-rw-r--r-- 1 500 500 8367 2006-03-04 usb.h.in
-rw-r--r-- 1 500 500 1771 2006-03-04 usbi.h
-rw-r--r-- 1 500 500 13511 2006-03-04 usbpp.cpp
-rw-r--r-- 1 500 500 24428 2005-02-10 usbpp.h
可以从usb.c, usb.h.in入手来研究。

‘柒’ 驱动源码是什么,是怎么个概念,麻烦讲的通俗点。

就是驱动程序的源程序
编写驱动程序要先写出源码,然后编译。编译之前的代码就是源码。
你下载的驱动都是经过编译的,是可执行文件,不是源码。源码只有编写者手里才有的。

‘捌’ oracle jdbc驱动源代码

可以用JD-GUI反编译jar

‘玖’ Linux驱动源码怎么和硬件联系

如题,本人安装了REDHAT LINUX,但不知道有哪些硬件的驱动程序没有安装,我如何才能查看这些没有安装驱动程序的硬件呢

阅读全文

与驱动源码相关的资料

热点内容
服务器一直崩应该用什么指令 浏览:916
cm202贴片机编程 浏览:724
php构造函数带参数 浏览:175
解压电波歌曲大全 浏览:336
为啥文件夹移到桌面成word了 浏览:858
命令符的安全模式是哪个键 浏览:758
编程中学 浏览:956
单片机求助 浏览:993
ug加工侧面排铣毛坯怎么编程 浏览:271
程序员有关的介绍 浏览:736
支付宝使用的什么服务器 浏览:210
安卓看本地书用什么软件好 浏览:921
经传软件滚动净利润指标源码 浏览:522
萤石云视频已加密怎么解除 浏览:574
一命令四要求五建议 浏览:30
qq文件夹迁移不了 浏览:19
液体粘滞系数测定不确定度算法 浏览:332
轻栈源码 浏览:426
把图片压缩到500k 浏览:35
命令你自己 浏览:369