
Linux内核驱动开发
文章平均质量分 62
Andrea-地面宇航员
步履不停,运指不歇 ✍
展开
-
【无标题】
I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,会加一个上拉电阻。上拉电阻主要用于为信号线或GPIO引脚提供默认状态(根据I2C总线规范,总线空闲时两根线都必须为高)。在I2C 的电路中,I2C设备(芯片)的 SCL 和 SDA 的内部电路是“开漏”的,这意味着它们可以吸收电流,但无法提供电流。通俗点讲就是:这种信号可以被设置为低电平,但不能被设置为高电平。I2C协议中数据传输的单位是字节,也就是8位。原创 2024-01-30 00:07:40 · 401 阅读 · 0 评论 -
IIC 总线协议
支持任何IC 生产过程(NMOS、CMOS、双极性)。两线——串行数据(SDA) 和串行时钟(SCL) 线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器、LCD驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显,LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见图1)。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。原创 2024-01-29 23:49:26 · 643 阅读 · 0 评论 -
C语言内联汇编
c语言内联汇编的使用原创 2024-01-27 14:46:11 · 539 阅读 · 0 评论 -
内核模块传参
内核模块传参 在应用程序开发的时候,我们都知道main函数可以传递参数,main函数的两个参数,argc表示命令行参数的个数,argv是一个数组,存放命令行参数,且下标从0开始。从内核模块的模板可以看到,入口函数和出口函数参数类型都是void类型,表示两者都是不接收参数的。内核模块的入口出口函数不接收参数,不代表驱动模块不接收参数,需要用其它方法和函数。一. 内核模块传参相关函数和宏定义1.1 module_parammodule_param(name, type, perm)name:模原创 2021-07-26 23:15:49 · 445 阅读 · 0 评论 -
Linux内核中的打印
Linux内核中的打印一. 内核中的打印级别在终端通过 vi -t printk 可以追到在头文件 kern_levels.h 中定义了0~7, 8个打印级别数字越小,打印级别越高#define KERN_EMERG KERN_SOH "0" /* system is unusable */#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */#define KERN_CRIT KER原创 2021-07-26 16:03:45 · 2045 阅读 · 0 评论 -
第一个内核模块
第一个内核模块一. 内核模块三要素入口出口GPL协议二. 第一个内核模块代码最简单的内核模块代码static int __init demo_init(void){ //__init告诉编译器将demo_init函数 //放到.init.text的段中(vmlinux.lds) return 0; }module_init(demo_init);//告诉内核入口函数的地址//出口:在卸载驱动的时候执行出口原创 2021-07-26 14:58:11 · 154 阅读 · 0 评论