- 博客(10)
- 资源 (2)
- 收藏
- 关注
原创 通俗易懂:linux内核中结构体的妙用
所谓linux驱动编程可以理解为linux内核的编程。既然在内核编程那就必须要符合内核的逻辑和各种规定好的框架。Linux中使用了大量的结构体方便我们在使用内核的时候调用。很多单片机开发者其实对于结构体的使用并不熟练,导致在linux开发中一头雾水。下面简单分析结构体的使用方法。1:结构体的定义struct 结构体名{ 成员列表; } 变量名列表;注意这里的变量名可以直接跟在后面也可以单独定义struct 结构体名 变量名 ;举例: ...
2021-02-03 10:37:45
1579
原创 通俗易懂:linux字符设备注册
如何将自己的驱动程序添加到内核,让用户可以访问到我们的驱动呢。我们可以通过把驱动程序以字符设备的形式注册到内核,并且自动生成设备节点。这样用户层就可以通过对设备节点的操作完成对驱动的控制。设备节点可以理解为内核提供给应用层可以操作的文件。存放路径为/dev ,可以在这里查看到所有的可用设备。1:图解字符设备的注册流程2:根据图解流程写出框架:#include <linux/init.h>#include <linux/module.h>...
2021-02-03 09:52:08
995
原创 通俗易懂:linux杂项设备注册
如何将自己的驱动程序添加到内核,让用户可以访问到我们的驱动呢。我们可以通过把驱动程序以杂项设备的形式注册到内核,并且自动生成设备节点。这样用户层就可以通过对设备节点的操作完成对驱动的控制。设备节点可以理解为内核提供给应用层可以操作的文件。存放路径为/dev ,可以在这里查看到所有的可用设备。1:图解杂项设备的注册流程2:杂项设备注册框架代码#include <linux/init.h>#include <linux/module.h>...
2021-02-02 15:30:53
534
原创 通俗易懂:把驱动编译进内核
编写好linux驱动以后有两种测试方法,一种是把驱动编译成模块,另外一种是把驱动直接编译到内核中。编译成模块可以方便的使用insmod或者modprobe命令测试驱动。但是测试成功以后我们还是需要把驱动直接编译进内核。这样内核在启动的时候就可以自动为我们加载好驱动。1:编写测试驱动 hello_linux/*包含初始化宏定义*/#include <linux/init.h>/*包含初始化加载模块*/#include <linux/mo...
2021-02-01 12:27:44
3921
3
原创 设备树:三星4412的i2c驱动开发
I2C作为常用的一种通讯协议,在板级通讯中十分常见。很多传感器使用的都是i2c协议进行数据通讯。常见的有 距离传感器,温湿度传感器,陀螺仪,触摸芯片等。在linux中,芯片厂家已经完成了i2c控制驱动的编写,并且已经嵌入linux内核。因此我们只需要在linux提供的i2c框架中,完成i2c设备驱动的编写即可。I2C控制驱动:包括i2c寄存器的初始化,应答,读写等基础功能I2C设备驱动:根据实际使用的外设,编写初始化,数据读写等1:在设备树中添加相关的节点信息笔者...
2021-01-27 10:31:25
492
原创 是心动的感觉,利用linux内核自带驱动在设备树下设置心跳灯
Linux内核提供了丰富的设备驱动。我们可以直接利用官方的驱动简单的在设备树中添加相关设备属性来实现各种功能,下面以led心跳灯进行测试。1:利用menuconfig进行内核裁剪首先我们需要先把内核编译一遍,然后再输入指令 make menuconfig 进入如下界面在这里我们看到 compatible的属性为 gpio-leds ,因此需要在设备树文件内创建此设备树节点。3:根据绑定文档确定修改方法进入目录 /Documentation/devicetre...
2021-01-20 16:55:38
998
原创 三星4412利用设备树pinctrl控制GPIO之夜空中最亮的灯
三星4412利用设备树pinctrl控制GPIO之夜空中最亮的灯设备树:顾名思义利用树形结构描述设备的文件。Pinctrl:依据Linux设计分离的思想,简化驱动对芯片引脚的控制。驱动通过pinctrl来控制引脚,各个芯片厂家已经对pinctrl相关代码封装好了。只需要通过文档直接调用相关API即可,大大简化了驱动编写的工作量。查找相关文档:由于每个厂家的硬件不一样,所以使用方法也略有差异,我们需要通过相关文档查看官方给出的例程。路径为内核目录下的/Documentation/...
2021-01-15 20:01:00
1001
3
原创 通俗易懂:linux内核空间和用户空间数据读写
linux为了保护内核的安全性和使得内核和用户空间是分离的。那么在驱动编写过程中,如果应用程序需要对驱动文件进行读写应该怎么办呢?这里linux给我们提供了两个简单的函数分别是:copy_to_user(); 内核数据发给应用 (此时相当于应用层需要读取数据) copy_from_user(); 内核从应用中获取数据 (此时相当于应用层写数据到驱动)这两个函数的头文件为#include<linux/uaccess.h&...
2021-01-08 17:14:53
1201
1
原创 通俗易懂:linux应用层main函数分析
main函数大家都不陌生,在linux的驱动调试中我们经常需要编写简单的linux应用层代码对驱动进行测试。今天主要分析main函数传参的方法linux中对main函数的定义如下:int main(int argc,char *argv[]);对于这两个参数专业的术语就不在此讲解,有兴趣的可以自行百度。我这里就用最通俗的话讲解使用方法。首先是argc这个变量,可以把他想象成一个自动数数的工具,也就是说这个参数的值等于在执行文件时你输入的参数个数。比如 我们编译生成了一个 名字为dem
2021-01-07 19:18:33
659
原创 编写A33驱动代码,实现安卓APP控制对应引脚点灯
编写A33驱动代码,实现安卓APP控制对应引脚点灯1:虚拟机安装1:安装:14.0的VMware Workstation2:安装:12.04 Ubuntu3:打开虚拟机更新软件源为国内4:Root Ubuntu su root 密码:1234565:更新环境变量:source /etc/profile6:分别解压SDK源码包,得到lichee和android两个目录2:安装相应的库支持sudo apt-get install git-core gnupg flex ...
2021-01-05 15:57:28
704
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人