linux驱动开发相关知识

来源:互联网 发布:画结构式的软件 编辑:程序博客网 时间:2024/06/05 07:01


Linux的二进制包的可执行文件都安装在Linux系统 /usr/bin 下面;如果从源代码安装,可执行文件通常都在 /usr/local/bin 下面,除非配置时指定了安装位置。

驱动开发相关开源码

kernel-devel

kernel-headers

kernel

kernel-header:提供内核的信息,里面是内核的头文件以及Kconfig和Makefile,也是内核对外的一个接口,当需要向内核提供兼容的功能模块时,需要提供内核的信息。

kernel-devel:包含用于内核开发所需的内核头文件以及Makefile,而kernel-souce包含所有内核源代码。这个包安装完毕后会创建类似的路径:/usr/src/kernels/3.10.0-327.x86_64

如果是用编写的模块开发的话,只需引用相应的内核头文件,只有devel包即可,如果你要修改现有的内核源代码并重新编译,那必须是kernel-souce。

 

Linux RPM包说明

src的rpm安装路径

xxxxxxxxx.rpm:RPM 的格式,已经经过编译且包装完成的 rpm 档案

xxxxx.src.rpm:SRPM的格式,包含未编译的原始码。 

以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法: 

l  方法一: 

1. 执行rpm -iyour-package.src.rpm 

2. cd/usr/src/redhat/SPECS 

3. rpmbuild -bpyour-package.specs    和软件包同名的specs文件 

4. cd/usr/src/redhat/BUILD/your-package/ 和你的软件包同名的目录 

5. ./configure 和编译普通的源码软件一样,可以加上参数 

6. make 

7. makeinstall 

l   方法二: 

1. 执行rpm -iyou-package.src.rpm 

2. cd/usr/src/redhat/SPECS (前两步和方法一相同) 

3. rpmbuild -bbyour-package.specs 一个和你的软件包同名的specs文件 

在/usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是i686,noarch等等)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。

执行: rpm -ivh即可安装完成。 

或者安装命令:

rpm -rebuild*.src.rpm 

cd/usr/src/dist/RPMS 

rpm -ivh*.rpm 

说明:rpm -rebuild*.src.rpm命令将源代码编译并在/usr/src/dist/RPMS下生成二进制的rpm包,然后再安装该二进制包即可。

NVMe驱动代码

单独编译NVME驱动

在路径:

/usr/src/debug/kernel-3.10.0-327/linux-3.10.0-327. x86_64/drivers/block

中,增加Makefile内容如下:

obj-$(CONFIG_BLK_DEV_NVME)      += nvme.o

nvme-objs := nvme-core.o nvme-scsi.o

PWD := $(shell pwd)

default:

        make-C /usr/src/kernels/3.10.0-327.x86_64/ M=$(PWD) modules

clean:

        rm –rf *.o *.ko

                           然后直接make 即可生成nvme.ko文件。

关于Makefile可以参考如下:

KERNELVER ?= $(shell uname -r)                                                                                 

KERNROOT = /lib/modules/$(KERNELVER)/build                                                                     

                                                                                             

nvme:                                                                                        

    $(MAKE) -C $(KERNROOT) M=`pwd`/drivers/block                                             

 

clean:

    $(MAKE) -C $(KERNROOT) M=`pwd`/drivers/block clean

 

Nvme驱动代码nvme的代码位于drivers/block目录内,文件不多,主要就两个文件:nvme-core.c和nvme-scsi.c。

 

系统日志

dmesg

dmesg命令显示linux内核的环形缓冲区信息,可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。

l   输出dmesg命令的前20行日志

dmesg | head -20

l   输出dmesg命令最后20行日志

dmesg | tail -20

l   清空dmesg缓冲区日志

使用如下命令dmesg -c来清空dmesg的日志。该命令会清空dmesg环形缓冲区中的日志。可以查看存储在/var/log/dmesg文件中的日志。连接任何的设备都会产生dmesg日志输出。

 

RPM包中平台说明

i386:适用于所有的 x86 平台,不论是旧的pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以工作。i 指的是 Intel 相容的 CPU 的意思, 386是 CPU 的等级。 

i586:是 586 等级的电脑pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插脚 ); 

i686:在pentun II以后的 Intel 系列 CPU ,及 K7 以后等级的CPU 

noarch:没有任何硬体等级上的限制。一般来说,这种类型的 RPM里面没有 binary file 存在。 

 

参考

Ctags on OSX

http://www.gmarik.info/blog/2010/ctags-on-OSX/

linux里的nvme驱动代码分析(加载初始化)

http://blog.csdn.net/panzhenjie/article/details/51581063

 

原创粉丝点击