linux驱动开发相关知识
Linux的二进制包的可执行文件都安装在Linux系统 /usr/bin 下面;如果从源代码安装,可执行文件通常都在 /usr/local/bin 下面,除非配置时指定了安装位置。驱动开发相关开源码kernel-develkernel-headerskernelkernel-header:提供内核的信息,里面是内核的头文件以及Kconfig和Makefile,也是内核对外的一个
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
更多推荐
所有评论(0)