驱动分类:
对于驱动,我们一般按两种方法进行分类:常规分类法和总线分类法。
按照常规分类法,可以分为以下三类:
1、字符设备:
以字节为最小访问单位的设备。一般通过字符设备文件来访问字符设备驱动程序。字符驱动程序则负责驱动字符设备,
,这样的驱动通常支持open、close、read、write系统调用,应用程序可以通过设备文件(比如/dev/ttySAC0等)来访问字符设备(...
分类:
系统相关 时间:
2015-03-15 09:33:39
阅读次数:
334
本文主要说说如何编译自己开发的内核模块。由于驱动通常也被编译成内核模块,因此文章的内容也适用于驱动的编译。
由于在下能力相当有限,有不当之处,还望大家批评指正^_^
一、准备工作
准备工作如何做,这里就不详说了。
a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。
b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、m...
分类:
系统相关 时间:
2015-03-08 17:19:16
阅读次数:
471
内核模块基础--特点及其命令使用
1、模块本身并不被编译进内核文件(zImage或bzImage)
2、可以根据需要在内核运行时动态加载、卸载----》进而达到节省空间的目的
命令详解(以下载驱动DNW为例):
insmod 模块名称(注意有.ko后缀)--安装
insmod dnw_usb.ko
lsmod-->查看安装的内核模块
rmmod 模块名称...
分类:
系统相关 时间:
2015-02-09 23:12:07
阅读次数:
343
Linux内核不承诺模块编程接口兼容性,事实上这类编程接口在内核主线的演进过程中,不停地发生变化,内核是如何检查插入的模块是否接口跟当前的内核接口兼容。本文重点介绍内核模块符号的CRC机制。...
分类:
系统相关 时间:
2015-01-10 01:31:24
阅读次数:
361
在编写linux内核模块的时候,有时候我们需要调用一只内核模块里面的函数,然而如果是在不同目录下面编译生成的内核模块,此时A模块去调用B模块的函数时候会出现函数未定义,无法调用的情况。那么以前我是在同一个目录下面,先后写两个makefile,然后编译生成两个不同的内核模块,这种方式可以正常实现A模块调用B模块里面的函数,不过非常麻烦。本博文将会针对这种情况提出一种可以同时生成多个内核模块。...
分类:
系统相关 时间:
2015-01-08 22:54:30
阅读次数:
264
因为linux内核变化非常快,每个小版本之间数据结构、接口都有可能发生变化,因此为我们写内核模块的兼容性带来了一些问题,经常在某版本上能正常编译的模块,换另一个模块就编译失败了,这时候我们就需要做内核版本兼容了,解决方法如下:
在内核时面有一个linux/version.h头文件,里面有两个宏LINUX_VERSION_CODE和KERNEL_VERSION,可利用这两个宏来协助完成兼容处理,例...
分类:
系统相关 时间:
2014-12-31 18:31:17
阅读次数:
239
本文讲述如何编写Linux内核模块,需要两个文件 mytest.c,Makefile。
存放到同一个文件夹目录,然后make、make install,就可以完成内核模块的编译生成和安装。
然后通过dmesg命令就可以看到从模块初始化函数输出的信息。
mytest.c:
#include
#include
#include
#include
#include
#inclu...
分类:
系统相关 时间:
2014-12-24 16:25:04
阅读次数:
320
主题: 1. 嵌入式基础知识
2. linux内核介绍
3. 内核的编译和安装(x86)
4. 第一个模块
5. 模块的相关工具
6. 模块的符号导出
7. 模块的参数
作业:
1.看linux/module.h。以后每天看课程中接触到的头文件
这个文件所在的位置:/home/zshh/work/driver/kernel/linux-3.5/include/linux
重点看...
分类:
系统相关 时间:
2014-12-21 22:14:39
阅读次数:
320
我也是从网上看到的这种解决办法。
遇到这种情况后,通过dmesg看一下内核日志。
如果发现有如下日志,那就好办了。
hello: version magic '2.6.33.3 ' should be '2.6.33.3-85.fc13.i686.PAE SMP mod_unload 686 '
修改内核源码文件include/linux/vermagic.h
把如下VERMAGIC...
分类:
其他好文 时间:
2014-11-09 16:40:55
阅读次数:
113
Linux设备驱动辩编写基础
一、linux中的驱动是以模块的形式存在的,这样就大大提高了驱动的灵活性,linux内核模块的程序结构如下:
l 模块加载函数(必须):module_init()
l 模块卸载函数(必须):module_exit()
l 模块许可证声明(必须):MODULE_LECENSE(“GPL”)
l 模块参数(可选):module_param(a,int,0...
分类:
系统相关 时间:
2014-09-01 21:14:33
阅读次数:
304