Linux下驱动开发
文章平均质量分 81
朝辞暮见
思!
展开
-
ubuntu 下如何下载linux内核源码
转载地址:https://blog.csdn.net/xq723310/article/details/492013311.首先看一下自己的内核版本,如果不想下载和自己正在使用的内核匹配的版本,可以忽略这一步。2.下载内核代码,98M,速度比较快,3.完成后,到/usr/src中查看你已经下载好的源码4.现在可以进行解压了,解压之前先复习一下tar命令把-c: 建立压缩档案-x:解压-t:查看内容...转载 2018-06-26 10:23:58 · 32098 阅读 · 4 评论 -
platform设备驱动全透析
转载链接:点击打开链接1.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2 C、SPI等的设备而言,这...转载 2018-07-04 20:15:12 · 210 阅读 · 0 评论 -
从用户态的open到内核驱动实现流程
转载地址:点击打开链接问题来源:在讲授Linux初级驱动的时候,我发现困惑很多同学的是不真正理解从应用层到我们自己所写的驱动层的调用过程,所以写此文章来大概描述。首先我们知道,在我们目前的Linux系统中,我们大概共约300左右个系统调用,其中syscall_table.S列出了所有的系统调用表。在本文件中记录了所有当前平台系统中所提供的系统调用表,其中第五项就包括:.long sys_open ...转载 2018-06-27 23:05:38 · 380 阅读 · 0 评论 -
实验:设计实验测试内核空间定义的变量和函数地址在3G – 4G之间
1K地址: 1 0000000000(10个0)1M地址:1 0000000000(10个0)0000000000(10个0)1G地址:1 0000000000(10个0)0000000000(10个0)0000000000(10个0)3G地址:11 0000000000 0000000000 00000000003G地址:0xcfffffff3G – 4G地址范围:0xcffffff...原创 2018-06-27 23:02:50 · 248 阅读 · 0 评论 -
Makefile 中:= ?= += =的区别
转载地址:https://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($...转载 2018-06-26 11:05:47 · 156 阅读 · 0 评论 -
Linux 字符设备驱动开发基础 —— ioremap() 函数解析
转载链接:点击打开链接一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地...转载 2018-06-30 20:37:10 · 584 阅读 · 0 评论 -
Linux 字符设备驱动开发基础 —— ioctl() 函数解析
转载地址点击打开链接一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。下面是其源代码定义:函数名: ioctl功 能: 控制I/O设备用 法: int ioctl(int handle, int cmd,[int *argdx, int argcx]);参...转载 2018-06-30 20:33:31 · 684 阅读 · 0 评论 -
led设备驱动
Led设备驱动基于字符设备框架,并且用到硬件知识比如EXYNOS中的控制led寄存器地址。还有几个重要函数比如ioremap、ioctl函数会在其他博客中贴出。这里直接贴出代码。Led.c文件内容/*6- 包含内核头文件*/#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h&...原创 2018-06-30 19:01:20 · 789 阅读 · 0 评论 -
Linux 驱动开发之内核模块开发 —— 内核模块编译 Makefile 入门
转载地址:https://blog.csdn.net/zqixiao_09/article/details/50838043一、模块的编译 我们在前面内核编译中驱动移植那块,讲到驱动编译分为静态编译和动态编译;静态编译即为将驱动直接编译进内核,动态编译即为将驱动编译成模块。而动态编译又分为两种:a -- 内部编译 在内核源码目录内编译b -- 外部编译 在内核源...转载 2018-06-25 20:41:48 · 301 阅读 · 0 评论 -
Linux内核模块分析(module_init宏)
我转载地址:https://blog.csdn.net/lu_embedded/article/details/51432616在学习Linux驱动开发时,首先需要了解Linux的模块化机制(module),但是module并不仅仅用于支撑驱动的加载和卸载。一个最简单的模块例子如下:// filename: HelloWorld.c#include <linux/module.h>...转载 2018-06-25 20:37:30 · 913 阅读 · 0 评论 -
Linux字符设备框架
一、申请设备号1、静态申请设备号2、动态申请设备界号 #include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h> dev_t devno;int major = 0;int minor = 0; struct file_o...原创 2018-06-30 17:33:29 · 306 阅读 · 0 评论 -
Linux模块编程方法总结
一、编写一个基本的内核模块1、编辑源文件,代码hello.c#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h> int init_hello_module(void){ printk("init_hello_module\n"); retur...原创 2018-06-30 15:29:35 · 4232 阅读 · 1 评论 -
详解应用层open函数如何调用到底层驱动中xxx_open函数
原文链接linux中一切皆文件,内核如何来区别每一个文件,这个叫做inode号,每个文件有一个特定的inode号用ls -i查看文件inode号,每个文件会对应一个inode结构体,inode结构体的内容非常多,我们省略了一部分struct inode { umode_t i_mode; // 打开方式 kuid_t i_uid; // 用户id kgid...转载 2018-07-22 16:28:52 · 2921 阅读 · 0 评论