- 博客(8)
- 收藏
- 关注
原创 Linux设备模型
Linux设备驱动模型我们在写最简单的设备驱动程序的时候,我们将所有的硬件信息都保存在了驱动代码中,这样有一个非常明显的不足:会导致驱动程序的通用性极差,一旦硬件平台或硬件连接有锁改变,就一定要修改驱动代码。为了解决这个问题,Linux在2.6版本之后,添加了“总线—设备—驱动”的Linux设备模型,有效地实现了设备和驱动的分离。该设备模型通过几个数据结构来反映当前系统中总线、设备以及驱动的工作状况,提出了以下几个重要概念:设备(device):挂载在某个总线的物理设备;驱动(driver):与特
2020-05-20 13:45:12 469
原创 字符设备驱动框架
初始化/移除字符设备Linux内核提供了两种方式来定义字符设备,如下所示://第一种方式:常见的变量定义static struct cdev chrdev;//第二种方式:内核提供的动态分配方式struct cdev *cdev_alloc(void);从内核中移除某个字符设备,则需要调用cdev_del函数,如下所示:void cdev_del(struct cdev *p)分配/注销设备号Linux的各种设备都以文件的形式存放在/dev目录下,为了管理这些设备,系统为各个设备进行编号
2020-05-19 13:08:14 184
原创 字符设备结构体
file_operations结构体文件结构体file以及字符设备结构体cdev,他们都有一个struct file_operations类型的成员变量。file_operations结构体中包含了操作文件的一系列函数指针,以下代码中只列出部分函数。struct file_operations { loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t
2020-05-19 10:28:54 322
原创 字符设备驱动Open调用过程
使用open函数打开设备文件,到底做了些什么工作?下图中列出了open函数执行的大致过程。设备文件通常在开机启动时自动创建的,不过,我们仍然可以使用命令mknod来创建一个新的设备文件,命令的基本语法如下:mknod 设备名 设备类型 主设备号 次设备号当我们使用上述命令,创建了一个字符设备文件时,实际上就是创建了一个设备节点inode结构体,并且将该设备的设备编号记录在成员i_rdev,将成员f_op指针指向了def_chr_fops结构体。这就是mknod负责的工作内容,具体代码见如mknod
2020-05-19 09:50:26 1085
原创 多级目录结构的Makefile(详细注释)
多级目录结构的Makefile(详细注释)本文主要以例程的方式展示了二级目录结构下的Makefile的写法(详细注释);对于更加纷杂的多级目录,大家可在此基础上进行修改#定义变量#ARCH默认为x86,使用gcc编译器,否则使用arm编译器ARCH ?= x86TARGET = hello_main#存放中间文件的路径 :./build_x86BUILD_DIR = build_$(ARCH)#存放源文件的文件夹 :./sourcesSRC_DIR = sources#存放头文件的文
2020-05-15 14:02:43 1025
原创 Linux驱动程序Makefile详解
驱动Makefile详解参考:http://blog.chinaunix.net/uid-21161467-id-108104.html例:一个简单的hello内核模块的Makefile:#hell0_makefileifneq ($(KERNELRELEASE),)obj-m:=hello.oelseKERNELDIR:=/lib/modules/$(shell uname -r)/buildPWD:=$(shell pwd)default: $(MAKE) -C $(
2020-05-15 11:54:27 5671
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人