
Linux Driver
文章平均质量分 67
Linux Driver
zxy131072
嵌入式linux
展开
-
Linux内核定时器使用
内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于内核源码 linux/timer.h 和 kernel/timer.c 文件中。被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。不能执行休眠(或可能引起休眠的函数)和调度。任何被访问的数据结构都应该针对并发访问进行保护,以原创 2021-01-07 13:39:51 · 533 阅读 · 0 评论 -
GNU C 与 ANSI C的区别
GNU C 与 ANSI C的区别零长度数组GNU C允许使用零长度数组,定义变长度对象时比较方便struct var_data { int len; char data[0];};var_data的大小仅为一个int型,data是常量地址,data[index]是访问其后的内存空间。可以使用如下方式遍历数据struct var_data data;for(i=0; i<data.len; i++){ printf("%x ", data.data[i]);}cas原创 2021-01-05 14:09:43 · 311 阅读 · 0 评论 -
100ask_imx6ull开发板led驱动的实现
声明:本例程的所有源码参考自正点原子的左神的源码,在他的基础上,修改成适用于100ask_imx6ull的开发板的驱动,感谢左神提供的开源精神,特此声明!我的其它文章也是在左神的代码的基础上修改成适用于韦东山老师的板子的代码,其它文章就不再一一说明,如有问题请给我留言或者私信我,谢谢!一、开发环境1、100ask_imx6ull开发板2、mint19.1开发环境3、适用windows下的...原创 2020-03-17 22:34:56 · 933 阅读 · 0 评论 -
I2C总线的工作原理与特点
经过很长时间的折腾,终于在设备树上将MPU6050调出来了,完成了自己认为是驱动学习的一个里程碑式的过程,会分几次总结下I2C驱动的过程,理论网上很多,都是互相借鉴,所以我的也是借鉴的,这是我认为很好理解的介绍I2C的原理的文章,如原作者认为侵权,请联系及时处理,谢谢!以下只是讲解I2C的工作与原理,这个与使用什么设备是没有关系的。I2C总线是由Philips公司开发的一种简单、双向二线制同步...原创 2019-10-20 08:32:10 · 1150 阅读 · 0 评论 -
implicit declaration of function ‘copy_from_user’; did you mean ‘raw_copy_from_user’?报错解决
在编译驱动模块的时候,使用copy_to_user和copy_from_user函数时,会出现下面的类似报错,原因是缺少相关的头文件。现象解决办法添加如下头文件#include <linux/uaccess.h>在这里插入代码片再次编译...原创 2019-08-17 13:57:01 · 6844 阅读 · 1 评论 -
implicit declaration of function 'class_device_create'报错解决
最新想学习下韦东山老师的源码教程,将其驱动源码移植到itop4412开发板上,出现一下报错implicit declaration of function 'class_device_create'报错解决原因是老版本的内核的函数与新版本的内核函数的不同,需要将class_device_create 和 class_device_destory分别改成device_create 和 ...原创 2019-08-20 17:22:38 · 1271 阅读 · 0 评论 -
005_总线、设备和驱动注册流程
在Linux2.6 之后,Linux 设备驱动分为三个实体总线、设备、驱动,平台总线将设备和驱动匹配。在系统注册任意一个驱动的时候,都会寻找对应的设备;当系统注册设备的时候,系统也会寻找对应的驱动进行匹配。一、总线、设备和驱动关系图Linux 创立了一种虚拟总线,也叫平台总线或者platform 总线,这个总线也有对应的设备platform_device,对应的驱动叫platform_d...原创 2019-08-24 11:42:26 · 359 阅读 · 0 评论 -
004_Makefile的编译
一、向内核中添加驱动步骤在向内核中添加驱动的时候要完成3 项工作,包括:1、在Kconfig 中添加新代码对应项目的编译条件2、将驱动源码添加到对应的目录中3、在目录Makefile 中文件中增加针对新代码的编译条目二、编译器路径的设置1、打开家目录下的.bashrc文件,在其最下面添加如下内容:export PATH=$PATH:/home/mint/itop/arm-2009...原创 2019-08-24 11:35:57 · 692 阅读 · 0 评论 -
003_menuconfig Makefile 等文件的关系
一、.config Kconfig Makefile menuconfig关系1、Kconfig2、menuconfig3、Makefile4、.configLinux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉。menuconfig是生成.config的一个工具,menuconfig实现的代码在源码的scripts目录下。Makefile用来定义哪些内容作为模块...原创 2019-08-24 10:59:30 · 334 阅读 · 0 评论 -
002_最简单的linux驱动模块
一、Ubuntu系统下的Vim编辑器无法显示中文字符1、打开文件“/etc/vim/vimrc”2、在最底部添加代码set fencs=utf-8,GB18030,ucs-bom,default,latin1二、最小linux驱动模板mini_linux_module.c#include <linux/init.h>#include <linux/module....原创 2019-08-24 10:48:01 · 201 阅读 · 0 评论 -
001_内核源码文件
一、源码目录结构1、迅为iTOP-4412 的平台文件,是arch→arm→mach-exynos→mach-itop4412.c。2、arch→arm→boot 目录,默认编译生成的内核镜像是在这个目录下。二、基础知识1、名词解释:gccgcc是linux系统下主要的编译软件,gcc的全称是GNU...原创 2019-08-24 10:39:11 · 190 阅读 · 0 评论 -
串口测试例程
串口分为RS232和TTL,所以在测试前请先确认自己的串口类型进行测试。下面以海思的一个RS232串口为例说明一下具体的测试过程,串口测试代码参考的为讯为提供的,在其基础上做的调整。 1、确定接口,将RXD与USB转串口模块的TXD相连,将TXD与USB转串口模块的RXD相连,GND直连。这是在硬件上的准备。 2、准备测试代码,将其编译成ELF文件,并拷贝至开发板下,准备运行。...原创 2019-01-24 09:54:19 · 2226 阅读 · 1 评论