![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动程序设计
文章平均质量分 65
鱼思故渊
这个作者很懒,什么都没留下…
展开
-
struct file 和 struct inode的理解
内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hlist_node i_hash;struct list_head i_list;struct list_head i_sb_list;struct list_head i_d转载 2013-09-07 20:41:24 · 2770 阅读 · 0 评论 -
linux驱动开发--I/O内存的访问流程
设备通常会提供一组寄存器来用于控制设备、读写设备和获取设备状态,既控制寄存器、数据寄存器和状态寄存器、这些寄存器可能位于I/O空间,也可能位于内存空间。当位于I/O空间时,通常被称为I/O端口,位于内存空间时,对应的内存空间被称为I/O内存(现在一般都是统一编址)1、对于I/O端口有专门的函数提供读取端口上的数据,例如读写字节端口(8字节宽)Unsigned inb(unsigned原创 2015-02-01 17:28:17 · 2041 阅读 · 0 评论 -
一个简单的字符驱动
#include #include #include #include #include MODULE_LICENSE("GPL"); #define MAJOR_NUM 100 int g_val; static ssize_t global_read(struct file *filp, char __user *buf, size_t len, lo原创 2013-12-01 11:30:10 · 1168 阅读 · 0 评论 -
设备驱动--自动创建节点
#include #include #include #include MODULE_LICENSE("GPL"); #define DEVICE_NAME ("my_dev") int MAJOR_NUM = 666; int g_val; struct device *dev; struct class *myclass; static ssize_原创 2013-12-01 11:32:05 · 1177 阅读 · 0 评论 -
cc1: error: unrecognized command line option "-m64" 需要添加上ARCH=arm
[root@localhost pwm2]# makemake -C /work/cs/YL-9G45/linux-2.6.30 M=/work/rootfs/test/pwm2 modulesmake[1]: Entering directory `/work/cs/YL-9G45/linux-2.6.30' CC [M] /work/rootfs/test/pwm2/pwm原创 2013-11-19 19:18:39 · 16464 阅读 · 0 评论 -
error: unknown field 'ioctl' specified in initializer
在linux-2.6.36内核上加载编译驱动时,出现 error:unknown field 'ioctl' specified in initializer原因是:在2.6.36内核上file_operations发生了重大的改变:原先的 int (*ioctl)(struct inode*, struct file*, unsigned int, unsigned long)原创 2013-11-19 19:16:53 · 11376 阅读 · 0 评论 -
linux驱动头文件说明
#include linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include在l转载 2013-09-05 19:09:09 · 1007 阅读 · 0 评论 -
Kernel configuration is invalid. include/linux/autoconf.h or include/config/auto.conf are missing
//刚下载的linux源代码,一个简单的hello驱动都没有编译通过//下面是驱动源代码#include #include static int hello_init(void){ printk(KERN_ALERT "Hello, Tekkaman Ninja !\n"); return 0;}static void hello_exit(void){ pri原创 2013-09-05 15:39:24 · 9471 阅读 · 4 评论 -
linux字符设备驱动程序scull实例
【1.系统环境】该驱动程序在UBUNTU10.04LTS编译通过,系统内核为linux-2.6.32-24(可使用uname -r 命令来查看当前内核的版本号)由于安装UBUNTU10.04LTS时,没有安装LINUX内核源码,因此需要在www.kernel.org下载LINUX源码,下载linux-2.6.32.22.tar.bz2(与系统运行的LINUX内核版本尽量保持一致),使用如下转载 2013-09-03 10:06:39 · 3747 阅读 · 2 评论 -
scull源码分析
Makefile文件分析# disable/enable debugging#DEBUG = y# 当DEBUG变量等于y时。两个比较变量用括号括起来,逗号分隔。ifeq和括号中间有一个空格。ifeq ($(DEBUG), y) # += 追加变量值。如果该变量之前没有被定义过,+=就自动变成=,变量被定义成递归展开式的变量;如果之前已经定义过,就遵循之前的风格。# = 递归展开转载 2013-09-03 10:46:22 · 3391 阅读 · 0 评论 -
linux内核中struct file_operations 结构体介绍
File_operations结构体 file_operation就是把系统调用和驱动程序关联起来的关键数据结构。这个结构的每一个成员都对应着一个系统调用。读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。 在系统内部,I/O设备的存取操作通过特定的入口点来进行,而这组特定的入口点恰恰是由设备驱动程序提供的。转载 2013-09-07 19:11:44 · 14215 阅读 · 0 评论 -
字符设备的注册(struct cdev结构体的使用解释)
在linux内核2.6版本以前,注册一个字符设备的的经典方法是使用register_chrdev,相应的从设备中注销字符设备的方法是unregister_chrdev,而在2.6版本以后,字符设备函数的注册与注销使用的是如下一套方法:#include struct cdev *cdev_alloc(void);//分配一个独立的cdev结构 void cdev_init(struct转载 2013-09-07 21:05:36 · 4669 阅读 · 0 评论 -
Linux驱动开发--linux下的DMA编程
DMA编程DMA是一种无需要CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率DMA方式的数据传输由DMA控制器控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMA控制器通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后序处理.DMA可以用做内原创 2015-02-01 20:14:02 · 8246 阅读 · 0 评论