linux driver
linux驱动开发
Embedded-Alien
这个作者很懒,什么都没留下…
展开
-
linux printk格式化打印
=========================================How to get printk format specifiers right:Author: Randy Dunlap rdunlap@infradead.org:Author: Andrew Murray amurray@mpc-data.co.ukInteger types::If variable is of Type, use printk format specifier:-----------原创 2021-08-27 11:07:15 · 1340 阅读 · 0 评论 -
icm20608 linux驱动 regmap spi的方式读写寄存器
开发版芯片 imx6ull驱动测量了系统调用read 10000次的时间验证了开启硬件浮点和不开启硬件浮点的运算浮点数时间基本相同驱动代码#include <linux/module.h>#include <linux/spi/spi.h>#include <linux/regmap.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/cdev.h&原创 2021-08-27 09:37:57 · 679 阅读 · 0 评论 -
WRITE_ONCE()
WRITE_ONCE(prev->next, new)的作用就是安全地将prev->next指向new!相当于new = prev->next原创 2021-06-18 15:54:43 · 305 阅读 · 0 评论 -
likely()和unlikely()
编程的时候根据if条件成立的概率,手动引导编译器设置cpu 的cache命中率,提高程序运行效率编译成二进制代码时likely使得if后面的执行语句紧跟着前面的程序,unlikely使得else后面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度。likely(x)代表x是逻辑真(1)的可能性比较大;unlikely(x)代表x是逻辑假(0)的可能性比较大。...原创 2021-06-18 15:44:08 · 185 阅读 · 0 评论 -
usleep_range()函数
usleep_range 用于非原子环境的睡眠,目前内核建议用这个函数替换之前udelay。其源码分析如下:void __sched usleep_range(unsigned long min, unsigned long max){ #得到最早wakeup的时间 ktime_t exp = ktime_add_us(ktime_get(), min); #计算必须要在max-min这个时间段wakeup,然后将这个时间转成nsec u64 delta = (u64)(max - min)转载 2021-06-08 18:13:03 · 10498 阅读 · 0 评论 -
get_device()和put_device()函数
在linux内核中,get_device()和put_device()是一对相反的操作函数。get_device()是对设备引用数量加一,put_device()是对设备引用减一以下就是源码/** * get_device - increment reference count for device. * @dev: device. * * This simply forwards the call to kobject_get(), though * we do take care to原创 2021-03-09 11:21:47 · 3626 阅读 · 0 评论 -
rtl8723bu linux wifi驱动移植教程
rtl8723bu linux 驱动移植教程将文件rtl8723BU_WiFi_linux_v4.3.9.3_13200.20150106_BTCOEX20140929-5443.tar.gz拷贝到linux源码目录drivers/net/wireless/net/下解压tar xzvf rtl8723BU_WiFi_linux_v4.3.9.3_13200.20150106_BTCOEX20140929-5443.tar.gz更改文件名mv rtl8723BU_WiFi_linu原创 2020-12-06 13:05:24 · 3616 阅读 · 0 评论 -
linux 内核中的链表学习总结以及应用
学习过数据结构的同学们都知道链表的结构种类:单链表,双链表,循环单/双链表,这种数据结构结构简单应用很广泛,相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或者删除数据。链表的开销主要是访问的顺序性和组织链的空间损失,不适合随机存取在Linux内核中链表的应用也非常多,对链表的操作为非就是初始化,添加节点,删除节点,遍历节点...原创 2020-03-20 21:37:47 · 282 阅读 · 0 评论 -
Modbus通信总结
原文链接:https://blog.csdn.net/byxdaz/article/details/77892778介绍:Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来...原创 2020-03-19 22:30:50 · 430 阅读 · 0 评论 -
linux 驱动开发之平台设备驱动设备树 input子系统的使用:按键中断驱动
这一章我们linux input 子系统在linux中,input子系统有三部分组成:驱动层,输入子系统核心,事件处理层.一个输入时间,比如按键按下通过:驱动->input core->event handler->user space的顺序到达用户空间的应用程序,...原创 2020-03-19 21:46:45 · 877 阅读 · 1 评论 -
linux 驱动开发之平台设备驱动设备树 led字符驱动的开发(详细注释)
我们来开始我们Linux下第一个platform设备的开发,通过linux 应用程序来控制开发板上的一个gpio led灯的亮灭.首先介绍一下平台总线设备的开发过程,linux中采用了设备和驱动分离的思想,通过总线将设备和驱动匹配,所以这里涉及三个概念:总线(bus),设备(device)和驱动(driver),总线就像是红娘月老,做设备和驱动匹配的工作,比起其他内核中的总线比如i2c,spi,...原创 2020-03-16 23:53:43 · 776 阅读 · 0 评论 -
关于ubuntu18.04版本系统中无法挂载开发板nfs文件系统的解决办法
问题描述:我本来用的是Ubuntu16升级Ubuntu18.04之后发现之前布置在电脑中的开发板nfs文件系统挂载不了了,尝试了很多方法,修改uboot的bootargs,修改exports,都没用,文件系统的其他配置都正确,就是奶粉是用不了,用了大半天时间,还是没办法,之后上网搜索Ubuntu18.04 nfs终于在网上找到解决办法:**原因:原来是这样的:ubuntu18.04只支...原创 2020-03-16 15:26:40 · 1849 阅读 · 1 评论 -
linux 驱动开发之linux vscode环境搭建以及第一个驱动 helloWorld
下载linux版的vscode ,并且安装我用的板子是nxp的imx6ull,下载nxp的的arm交叉编译工具链和他们的内核(也可以下载官方版本的内核和编译工具链),解压并设置路径,我的路径如下:内核路径/home/mayunzhi/linux/Linux-4.9.88工具链路径/home/mayunzhi/linux/ToolChain/gcc-linaro-6.2.1-2016....原创 2020-03-15 20:27:22 · 1982 阅读 · 6 评论