linux驱动程序设计
文章平均质量分 82
c1194758555
这个作者很懒,什么都没留下…
展开
-
GNU C 9条扩展语法
GNC CC是一个功能非常强大的跨平台C编译器,它对标准C语言进行了一系列扩展,以增强标准C的功能,这些扩展对优化、目标代码布局、更安全的检查等方面提供了很强的支持。本文把支持GNU扩展的C语言称为GNU C。Linux内核代码使用了大量的GNU C扩展,以至于能够编译Linux内核的唯一编译器是GNU CC,以前甚至出现过编译Linux内核要使用特殊的GNU CC版本的情况。本文是对Linu转载 2016-10-15 12:50:02 · 688 阅读 · 0 评论 -
linux驱动程序设计之USB
usb:通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯。有一个称为主机控制器的设备,该控制器和一个根Hub作为一个整体。这个根Hub下可以接多级的Hub,每个子Hub又可以接子Hub。每个USB设备作为一个节点接在不同级别的Hub上。 每条USB总线上最多可以接127个设备。常见的USB主控制器规格有:OHCI:主要是非PC系统上的USB芯片U原创 2017-06-13 21:02:36 · 477 阅读 · 0 评论 -
平台设备驱动和混杂设备驱动
1. 平台设备驱动在linux2.6以后的设备驱动模型中,只关心设备、驱动和总线这三个实体,总线将设备驱动绑定。在向系统注册一个设备时会由总线匹配对应的驱动,相反当向系统注册一个驱动时由总线匹配出对应的设备。在linux设备和驱动通常要挂接在某条总线上,对于IIC、SPI、USB等设备有自己的物理总线,但是在嵌入式的系统中很多的设备并不能找到自己的物理总线。基于这一背景linux发明了一种原创 2017-06-09 10:12:17 · 934 阅读 · 0 评论 -
linux驱动程序设计中的内存与I/O访问
1.内核空间内存的动态申请linux内核空间中申请内存涉及的函数主要有kmlloc()、__get_free_pages()和vmalloc()等。kmalloc()和__get_free_pages()申请的内存位于常规内存区和DMA的映射区,并且在物理上是连续的,它们与真是的物理区只存在一个固定的偏移量,存在着较为简单的转换关系。而vmalloc()分配的内存位于虚拟内存空间的连续的内存区原创 2017-05-25 17:48:22 · 839 阅读 · 0 评论 -
linux设备驱动中的中断与时钟
1. 中断与定时器中断是指CPU在执行程序过程中,出现了某些突发事件紧急处理,CPU必须暂停当前程序的执行,转去执行突发事件,处理完毕后有返回到原程序被中断的位置继续执执行。根据中断的来源可以分为外部中断和内部中断,内部中断是由CPU内部引起的,外部中断是来自CPU外部,由外设引起。根据中断是否能够屏蔽,中断可以分为可屏蔽中断和不可屏蔽中断,可屏蔽中断可以通过设置中断屏蔽寄存器的方式被屏蔽,不原创 2017-03-13 18:36:25 · 664 阅读 · 0 评论 -
linux设备驱动中的阻塞与非阻塞IO
linux设备驱动中的阻塞与非阻塞IO原创 2017-02-26 19:18:04 · 1195 阅读 · 0 评论 -
linux设备驱动中的并发控制
在linux设备驱动中必须解决的一个问题是多个进程对互斥资源的并发访问,并发的访问会导致竞态。1.1 并发与竟态并发指多个执行单元同时、并发的被执行,而并发的执行单元对共享资源的访问很容易导致竟态。在linux内核中,主要的竟态发生在以下几种情况。1. 对称多处理器(SMP)的多个CPUSMP是一种紧耦合、共享存储的系统模型,其特点是多个CPU使用共同的系统总线,因此可以访问共同的原创 2017-02-03 17:40:17 · 807 阅读 · 0 评论 -
linux驱动程序中的互斥体
互斥体用于控制进程对临界资源的访问,属于进程级别,互斥体保护的临界区可以包含能够引起进程阻塞的代码。1. 互斥体的定义及初始化struct mutex mutex; //定义mutex_init(&mutex); //初始化2. 获取互斥体void mutex_lock(struct mutex *lock); //获取互斥体,不能被信号打断。int mutex_loc原创 2016-11-21 18:35:45 · 1768 阅读 · 0 评论 -
字符驱动设备中几个重要的结构体(cdev,file_operations,inode,file)
1. cdev结构体struct cdev { struct kobject kobj; //内嵌的kobject对象 struct module *owner; //所属模板 const struct file_operations *ops; //文件操作的结构体 struct list_head list; dev_t dev; //设备号 unsigned int coun原创 2016-11-19 17:25:13 · 1955 阅读 · 0 评论 -
第一个字符设备驱动程序
驱动代码:/* * test.c * * Created on: 2016年10月29日 * Author: chy */#include #include #include #include #include #include #include #include #include #include #include static struct原创 2016-11-02 18:29:13 · 442 阅读 · 0 评论 -
linux中EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,转载 2016-10-29 16:57:58 · 1147 阅读 · 0 评论 -
总线、设备、驱动模型
总线:驱动和设备挂在总线上,总线也是联系驱动和设备的纽带。struct bus_type { const char *name; //总线的名称 struct bus_attribute *bus_attrs; //属性 struct device_attribute *dev_attrs; struct driver_attribute *drv_attrs; int (原创 2016-10-29 16:49:32 · 305 阅读 · 0 评论 -
基于mini2440的led字符设备驱动程序
已经大三了开始进行专业课的学习了,一学年的时间要学习完linux应用程序和linux驱动程序,按照进度感觉什么也学习不到。进入大三也由些烦躁,学习也有些急功近利,必须让自己沉下心读读书、敲敲代码了。可刚开始学习嵌入式linux驱动程序,看了些以前国嵌的视频发现一些函数根本找不到,很多的函数已经更新了。linux内核代码更新比较快,很多新的技术会很快取代旧的技术,这也是linux作为开源原创 2016-11-04 18:08:09 · 718 阅读 · 0 评论 -
linux总线设备驱动模型之Kobject&Kset
sysfs文件系统:linux2.6引入的全新的文件系统,它是基于内核的虚拟文件系统,其作用是将内核信息一文件的形式呈现给用户。sys部分目录结构:.├── block│ ├── loop0 -> ../devices/virtual/block/loop0│ ├── loop1 -> ../devices/virtual/block/loop1│ ├── loop2原创 2016-10-16 18:20:46 · 683 阅读 · 0 评论 -
再读linux驱动程序设计
1. 编译内核1.1 安装内核man手册1.1.1 配置编译内核make menuconfig执行后直接退出make -j 4make modulesmake modules_install INSTALL_MOD_PATH=./build //安装模块1.1.2 生成内核函数man手册sudo pip install -U Sphinxsudo pip i...原创 2019-03-29 16:19:48 · 722 阅读 · 0 评论