
Linux驱动开发
文章平均质量分 69
本系列为Linux驱动学习笔记,使用正点原子开发板。
JavonPeng
提得起,放得下,提放自如,方是自在人
展开
-
linux驱动笔记——从单片机移植驱动到ARM Linux上
linux驱动笔记1. 写在前面 2. 硬件环境 2.1 主控环境 2.2 外设环境 3.硬件接线 3.1 STM32接线 3.2 RK3399接线 4. 移植原理 5. 移植操作 5.1 从设备树中传入GPIO口定义 5.2 替换STM32中的接口 5.2.1 替换宏定义接口 5.2.2 替换延时接口 5.2.3 操作函数接口替换 5.2.3.1 void DHT11_IO_OUT(void) ; .转载 2021-02-22 17:34:34 · 1081 阅读 · 0 评论 -
【Linux】在 Makefile 中使用 pkg-config 添加库的方法
直接调用 pkg-config 编译的时候:arm-linux-gnueabihf-g++ -o cv_test cv_test.cpp `pkg-config --cflags --libs opencv`在Makefile里面添加:LIBOPENCV_INC = $(shell pkg-config --cflags opencv)LIBOPENCV_LIBS = $(shell pkg-config --libs opencv)...CFLAGS += $(LIBOPENCV_INC原创 2020-12-28 17:41:56 · 2549 阅读 · 1 评论 -
【Linux驱动开发】OpenCV移植到ARM开发板全过程记录
opencv官网一、下载opencv库源码1、创建存放库的文件夹mkdir ~/linux/mylib&&cd ~/linux/mylib2、下载wget https://codeload.github.com/opencv/opencv/tar.gz/3.4.1 -O opencv-3.4.1.tar.gz3、解压&&进入解压后的文件夹tar -xvf opencv-3.4.1.tar.gz&&cd opencv-3.4.1/二、配置原创 2020-12-27 15:30:29 · 1803 阅读 · 4 评论 -
【Linux编程】UVC摄像头采集与显示(V4L2编程)
手头有一个UVC(usb video class)摄像头(也称为免驱摄像头),就顺便学习了一下V4L2编程 ,写代码的过程中参考了前辈的博客,觉得写的非常的好,特将链接贴在这里http://www.linuxidc.com/Linux/2016-11/137067.htm关于V4L2讲解的可以学习前辈的博客,这里只是写了一个实例代码供看了知识点还无从下手写代码的新手作为参考。平台描述: OK210开发板。 屏幕是开发板自带的800*480的RGB32格式屏幕。 摄像头转载 2020-12-08 14:11:31 · 4760 阅读 · 0 评论 -
【Linux驱动开发】将多个C源文件编译进一个KO模块
Maindev 是主文件,External 是外部调用文件,将Maindev.c ,External.c,External.h 编译成alex.ko 模块。在Maindev 里实现入口和出口。程序编写:Maindev.c#include <linux/init.h>#include <linux/module.h>#include "External.h"static int __init dev_init(void){ p...原创 2020-08-16 18:31:29 · 1496 阅读 · 0 评论 -
【Linux驱动开发】基础流程
一、修改设备树1、在 iomuxc 、iomuxc_snvs 节点添加新的子节点,即添加设备对应的 IO2、在 I2C 、SPI 等节点下添加子节点,配置设备相关属性信息3、编译设备树make dtbs二、编写设备驱动程序1、编写设备驱动程序2、编写应用程序3、编写Makefile三、编译设备驱动make -j12 //编译驱动arm-linux-gnueabihf-gcc xxxApp.c -o xxxApp //编译应用程序...原创 2020-07-19 22:56:51 · 862 阅读 · 0 评论 -
【Linux驱动开发】I2C 驱动实验(AP3216C驱动)
Linux 内核也将 I2C 驱动分为两部分: ①I2C 总线驱动:SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②I2C 设备驱动:针对具体的 I2C 设备而编写的驱动。I2C 总线驱动 I2C 总线驱动重点是 I2C 适配器驱动,要用到两个重要的数据结构:i2c_adapter 和 i2c_algorithm。Linux 内核将 SOC 的 I2C 适配器(控制器) 抽象成 i2c_adapter,i2c_adapter 结构体定义在 include..原创 2020-06-01 01:34:08 · 2236 阅读 · 0 评论 -
【Linux驱动开发】RTC 驱动实验
一、简介RTC 设备驱动是标准的字符设备驱动,应用程序通过 open、release、read、write 和 ioctl 等函数完成对 RTC 设备的操作。 Linux 内核将 RTC 设备抽象为 rtc_device 结构体,RTC 设备驱动申请并初始化 rtc_device,将 rtc_device 注册到内核。 RTC 设备的操作肯定是用一个操作集合(结构体)来表示的,rtc_device 结构体,此结构体定义在 include/linux/rtc.h 文件中。 drivers/rtc/原创 2020-05-31 18:37:48 · 541 阅读 · 0 评论 -
【Linux驱动开发】LCD 驱动实验
LCD 驱动程序编写1、修改设备树①LCD 所使用的 IO 配置。 ②LCD 屏幕节点修改,修改相应的属性值,换成我们所使用的 LCD 屏幕参数。 ③LCD 背光节点信息修改,要根据实际所使用的背光 IO 来修改相应的设备节点信息。子节点 pinctrl_lcdif_dat,为 RGB LCD 的 24 根数据线配置项。 子节点 pinctrl_lcdif_ctrl,RGB LCD 的 4 根控制线配置项,包括 CLK、ENABLE、VSYNC 和 HSY...原创 2020-05-31 00:21:05 · 917 阅读 · 0 评论 -
【Linux驱动开发】Linux 自带按键驱动
一、基础1、以下介绍了 input 子系统的基础,使用的自己编的按键驱动。实际上内核自带了按键驱动(一般默认使能)。【Linux驱动开发】INPUT 子系统实验2、内核自带按键驱动简介Linux内核的按键驱动采用platform框架,只需要在设备树文件中添加相应的按键节点(gpio-keys)。 Linux 内核自带的 KEY 驱动文件为 drivers/input/keyboard/gpio_keys.c二、使能Linux 内核自带按键驱动1、输入以下命令打开...原创 2020-05-30 22:25:04 · 1518 阅读 · 1 评论 -
【Linux驱动开发】INPUT 子系统实验(自编按键驱动)
一、基础概念input子系统是管理输入的子系统,专门用来处理输入事件。 例如按键、鼠标、键盘、触摸屏等都属于输入(input)设备,输入设备本质上还是字符设备。 不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息等。 input 子系统分为 input 驱动层、input 核心层、input 事件处理层。 input 子系统的所有设备主设备号都为 13input子系统结构图驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容。 核心层:原创 2020-05-30 19:22:07 · 1032 阅读 · 0 评论 -
【Linux驱动开发】MISC 驱动实验(蜂鸣器驱动)
一、基础概念MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。 所有的 MISC 设备驱动的主设备号都为 10,只需要不同的从设备号注册与注销设备函数:功能 函数 替代过程 注册MISC 设备 int misc_register(struct miscdevice * misc.原创 2020-05-31 02:17:12 · 661 阅读 · 0 评论 -
【Linux驱动开发】platform 设备驱动实验
一、基础概念Linux 系统要考虑到驱动的可重用性,所以有了驱动的分离与分层,即platform 设备驱动,也叫平台设备驱动。驱动分隔:将主机驱动和设备驱动分隔开来,比如 I2C、SPI等都会采用驱动分隔的方式来简化驱动的开发。 一般主机驱动半导体厂家已经编写,而设备驱动设备器件的厂家已经编写。 我们只需要提供设备信息即可,例如设备连接到哪个 I2C 接口,I2C 的速度等等。 相当于将设备信息从设备驱动中剥离开来,驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据原创 2020-05-24 23:28:28 · 505 阅读 · 0 评论 -
【Linux驱动开发】 Linux 并发与竞争
Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。Linux 系统并发产生的主要原因: 多线程并发访问,Linux 是多任务(线程)的系统,所以多线程访问是最基本的原因。 抢占式并发访问,从 2.6 版本内核开始,Linux 内核支持抢占,也就是说调度程序可以在任意时刻抢占正在运行的线程,从而运行其他的线程。 中断程序并发访问,硬件中断。 SMP(多核原创 2020-05-16 10:58:53 · 392 阅读 · 0 评论 -
【Linux驱动开发】Linux 自带 LED 灯驱动实验
Linux 内核的 LED 灯驱动采用 platform 框架,所以只需要在设备树文件中添加相应的 LED 节点。一、使能Linux 内核自带 LED 驱动1、输入以下命令打开 Linux 配置菜单make menuconfig2、按以下路径打开 LED 驱动配置项-> Device Drivers -> LED Support (NEW_LEDS [=y]) ->LED Support for GPIO connected ...原创 2020-05-28 00:03:32 · 2429 阅读 · 0 评论 -
【Linux驱动开发】pinctrl 子系统 和 gpio 子系统实验(LED驱动)
一、引入 pinctrl 子系统 与 gpio 子系统详情参考文章:pinctrl 子系统 与 gpio 子系统二、修改测试设备树文件1、添加 pinctrl 节点 打开 imx6ull-iot-emmc.dts,在 iomuxc 节点的 imx6ul-evk 子节点下创建一个名为“pinctrl_led”的子节点:将 GPIO1_IO03复用为 GPIO...原创 2020-05-05 18:57:58 · 716 阅读 · 0 评论 -
【Linux驱动开发】pinctrl 子系统 与 gpio 子系统
一、pinctrl 子系统(1)pinctrl 子系统简介pinctrl 子系统源码目录为drivers/pinctrl。pinctrl 子系统重点是设置 PIN(PAD )的复用和电气属性。pinctrl 子系统主要工作内容如下:获取设备树中 pin 信息。 根据获取到的 pin 信息来设置 pin 的复用功能 根据获取到的 pin 信息来设置 pin 的电气特性...原创 2020-05-05 16:50:11 · 525 阅读 · 0 评论 -
【Linux驱动开发】设备树下字符驱动实验(自编LED驱动)
一、修改测试设备树文件1、修改 arch/arm/boot/dts/imx6ull-iot-emmc.dts 文件在根节点“/”下创建“iotled”子节点/*添加字节点-led*/iotled { #address-cells = <1>; /*起始地址占用一个字长(cell)*/ #size-cells = <...原创 2020-05-05 12:21:44 · 638 阅读 · 0 评论 -
【Linux驱动开发】新字符设备驱动
字符设备驱动开发使用 register_chrdev 函数注册字符设备,使用 unregister_chrdev 函数注销字符设备。驱动模块加载成功以后使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。...原创 2020-05-04 12:05:07 · 427 阅读 · 0 评论 -
【Linux驱动开发】第一个设备驱动开发——LED驱动
一、启动系统Linux 系统选择通过 TFTP 从网络启动,并且使用 NFS 挂载网络根文件系统(1)设置 bootargs 环境变量,根文件系统从 nfs/roofts 启动setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.137.18:/home/pjw/linux/nfs/rootf...原创 2020-04-30 00:08:47 · 523 阅读 · 0 评论 -
【Linux驱动开发】字符设备驱动开发基础步骤
一、基础介绍设备:chrdevbase 虚拟设备功能:chrdevbase 设备有两个缓冲区,向 chrdevbase 设备的写缓冲区中写入数据,从读缓冲区中读取数据。文件: c_cpp_properties.json 头文件路径配置等 chrdevbase.c chrdevbase 驱动文件(模块) ...原创 2020-01-10 14:26:44 · 638 阅读 · 0 评论 -
【Linux驱动开发】字符设备驱动开发
一、字符设备驱动简介字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 Linux 应用程序对驱动程序的调用: 在 Linux 中,一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一...原创 2019-12-05 15:43:56 · 369 阅读 · 0 评论 -
【Linux驱动开发】 Linux设备分类简介
Linux 设备 Linux 中,根据设备的类型可以分为三类:字符设备、块设备、网络设备。 字符设备:应用程序按字节/字符来读写数据,通常不支持随机存取。我们常用的键盘、串口、I2C、SPI、音频都是字符设备。 块设备:应用程序可以随机访问设备数据。典型的块设备有硬盘、EMMC、NAND、SD 卡、闪存等,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的...原创 2019-12-05 11:06:48 · 797 阅读 · 0 评论 -
【Linux驱动开发】Linux设备树详解
概念 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如 CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。如图所示。树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI ...原创 2019-12-05 10:49:25 · 3511 阅读 · 7 评论