![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux设备驱动
文章平均质量分 79
以Cortex A7,IMX6ULL板子为例子。从裸板寄存器电亮led,到使用库函数,设备树
为了维护世界和平_
好好学习,天天向上
展开
-
linux内核源码之设备驱动系列文章汇总
1、linux 字符设备驱动实战2、linux LED设备驱动文件3、linux 设备树(.dts)实战解析4、linux 使用设备树点亮LED 实战5、linux 驱动中并发与竞争6、linux 内核定时器7、linux 内核中断理解8、linux驱动阻塞和非阻塞9、 linux 内核异步通知10、linux platform设备驱动11、Linux 内核自带的 LED 灯驱动12、linux MISC设备驱动13、linux input子系...原创 2022-04-09 11:39:31 · 2751 阅读 · 0 评论 -
linux CAN驱动实验
CAN简介CAN 全称(Controller Area Network)控制局域网络。最早是由德国BOSCH(博世)开发,是当前应用最广泛的现场总线之一。应用领域汽车电子、工业自动化、医疗、工业和船舶等。CAN特点:1)多主控制在总线空闲时,所有单元都可以发送消息。多个节点发送消息时,根据节点ID决定优先级。2)系统的柔软性3)通信速度快最高1M(举例小于40M),最长10KM,速度低于5Kbps4)具有错误检测、错误通知和错误恢复功能5)连接节点多CAN协议协议提供5种帧格式来传输数原创 2021-08-09 09:51:34 · 914 阅读 · 0 评论 -
linux内核编译错误
项目场景:linux内核编译错误问题描述: CC [M] /home/wyong/imx6ull/1_chrdevbase/chrdevbase.oIn file included from ./arch/x86/include/asm/bitops.h:16:0, from include/linux/bitops.h:36, from include/linux/kernel.h:10, fr原创 2021-08-09 09:48:32 · 1301 阅读 · 0 评论 -
linux 内核版本不对错误
项目场景:ARM linux驱动文件加载问题描述:root@ATK-IMX6U:/opt# insmod chardriver.ko[ 694.200461] chardriver: disagrees about version of symbol device_create[ 694.207624] chardriver: Unknown symbol device_create (err -22)[ 694.215509] chardriver: disagrees about ve原创 2021-08-09 09:47:56 · 463 阅读 · 0 评论 -
Linux USB驱动使用实例
文章目录一、Linux 内核自带HOST实验二、内核自带USB OTG实验(从机)一、Linux 内核自带HOST实验1、USB鼠标键盘驱动使能USB鼠标键盘属于HID设备,内核已经集成了相应的驱动1.1、首先打开HID驱动-> Device Drivers ->HID support <*>Generic HID support 1.2、使能USB键盘和鼠标驱动-> Device Drivers ->HID support ->US原创 2021-07-01 08:04:35 · 1527 阅读 · 2 评论 -
linux UART驱动_应用程序例程
文章目录Linux 下 UART 驱动框架UART 驱动 内核已经做了什么?UART 驱动 开发人员需要做什么?Linux 下 UART 驱动框架串口驱动没有什么主机端和设备端之分,就只有一个串口驱动,而且这个驱动也已经由 NXP 官方已经编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttymxcX(X=0….n)文件。数据结构 uart_driver、uart_port、uart_portstruct原创 2021-06-15 22:03:32 · 1023 阅读 · 0 评论 -
linux CPU主频设置
CPU主频相关信息root@am335x-evm:/sys/devices/system/cpu/cpu0/cpufreq# lsaffected_cpus scaling_cur_freqcpuinfo_cur_freq scaling_drivercpuinfo_max_freq scaling_governorcpuinfo_min_freq scaling_max_freq原创 2021-06-09 07:42:59 · 2849 阅读 · 1 评论 -
linux USB无线网卡(RTL8188EUS)驱动
rtl8188 usb驱动源码:Kconfig是文件WIFI驱动的配置界面文档,图形界面配置文件内容如下:删除自带的RTL8192CU驱动内核源码中,drivers/net/wireless/rtlwifi/Kconfig 删除config RTL8192CUtristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"depends on USBselect RTLWIFIselect RTLWIFI_USB原创 2021-06-08 21:26:21 · 6361 阅读 · 3 评论 -
linux SPI 驱动
文章目录前言SPI 主机驱动SPI 设备驱动SPI 设备和驱动匹配过程SPI 主机驱动分析SPI 设备驱动编写流程前言SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是 SOC的 SPI 控制器接口,不管是什么 SPI 设备,SPI 控制器部分的驱动都是一样,重点是SPI 设备驱动。SPI 主机驱动SPI 主机驱动就是 SOC 的 SPI 控制器驱动,类似 I2C 驱动里面的适配器驱动,Linux 内核使用 spi_master 表示 SPI 主机驱动,spi_原创 2021-05-19 07:15:59 · 1006 阅读 · 0 评论 -
linux 深入理解I2C内核驱动
文章目录前言1、I2C 总线驱动2、I2C 设备驱动I2C 适配器驱动分析前言I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,本章同样以 I.MX6U-ALPHA 开发板上的 AP3216C 这个三合一环境光传感器为例,通过 AP3216C 学习如何编写 Linux 下的 I2C 设备驱动程序。内核也将 I2C 驱动分为两部分:I2C 总线驱动,I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。I2C 设备驱动,I2C 设备驱动就是针对具体的 I原创 2021-05-12 08:12:48 · 1064 阅读 · 0 评论 -
linux input子系统
系列文章I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版)I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本)linux 字符设备驱动实战linux LED设备驱动文件linux 设备树(.dts)实战解析linux 使用设备树点亮LED 实战linux 驱动中并发与竞争linux 内核定时器linux 内核中断理解linux 驱动阻塞和非阻塞linux 内核异步通知linux platform驱动框架linux 内核自带的LED灯驱动linux MISC原创 2021-05-06 21:32:23 · 368 阅读 · 0 评论 -
linux MISC设备驱动
misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动...原创 2021-05-06 21:30:21 · 414 阅读 · 1 评论 -
Linux 内核自带的 LED 灯驱动
学习如何使用 Linux 内核自带的 LED 驱动来驱动 I.MX6U-ALPHA 开发板上的 LED0。LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 platform 框架因此我们只需要按照要求在设备树文件中添加相应的 LED 节点即可linux 自带LED驱动理解内核配置:-> Device Drivers -> LED Support (NEW_LEDS [=y]) ->LED Support for GPI原创 2021-05-06 21:27:54 · 2706 阅读 · 3 评论 -
linux platform设备驱动
文章目录platform 驱动platform设备platform总线设备树下的 platform 驱动驱动的分割前言Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。驱动设备匹配过程:当我们向系统注册一个驱动的时候,总线就会在右侧的设备中查找,看看有没有与之匹配的设备,如果有的话就将两者联系起来。同样的,当向系统中注册一个设备的时候,总线就会在左侧的驱动中查找看有没有与之匹配的设备,有的话也联系起来。 Linux 内核中大量的驱动程序都采用总线原创 2021-04-29 08:28:45 · 371 阅读 · 0 评论 -
linux 内核异步通知
文章目录1、异步通知简介2、驱动中的信号处理2、应用程序处理流程1、异步通知简介1)中断是处理器提供的一种异步机制,配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。2)通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动的去查询设备的使用情况。3)信号驱动可以通过主动向应用程序发送信号的方式来报告自己原创 2021-04-29 08:02:39 · 474 阅读 · 0 评论 -
linux驱动阻塞和非阻塞
文章目录阻塞与非阻塞理解阻塞在内核实现——等待队列非阻塞在内核实现——轮询1、select2、 poll 函数3、 epoll 函数阻塞与非阻塞理解1、阻塞如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */ret = read(fd, &data, sizeof(data)); /* 读取数据 */2、非阻塞如果不能获取到设备资源,线程不会挂起,原创 2021-04-29 07:43:47 · 437 阅读 · 0 评论 -
linux 内核中断理解
每个中断都有一个中断号,通过中断号即可区分不同的中断申请中断request_irq 函数用于申请中断,request_irq函数可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码段中使用 request_irq 函数int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)i原创 2021-04-28 22:10:20 · 1382 阅读 · 0 评论 -
linux 内核定时器
定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。 Linux 内核定时器采用系统时钟来实现Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。高节拍率和低节拍率的优缺点:①、高节拍率会提高系统时间精度,如果采用 100Hz 的节拍率,时间精度就是 10ms,采用1000Hz 的话时间精度就是 1ms,精度提高了 10 倍。原创 2021-04-28 22:01:33 · 955 阅读 · 0 评论 -
linux 驱动中并发与竞争
文章目录前言前言Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。现在的 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原因:多线程并发访问,Linux是多线程系统,所以存在多线程的访问是最基本的原因。抢占式...原创 2021-04-26 06:55:28 · 421 阅读 · 0 评论 -
linux 使用设备树点亮LED 实战
文章目录前言修改设备树前言了解了设备树后,这一小节将使用设备树方式点亮LED修改设备树imx6ull-alientek-emmc.dts 文件中添加tree_led { #address-cells = <1>;/*起始地址占用一个字长*/ #size-cells = <1>; /*地址长度占用一个字长*/ compatible = "tree-led"; status = "okay"; reg = < 0X020C4原创 2021-04-16 07:32:39 · 1679 阅读 · 0 评论 -
linux 设备树(.dts)实战解析
文章目录前言设备树DTS语法内容标准属性向节点追加或修改内容设备树在目录中的体现Linux 内核解析 DTB 文件帮助文档信息设备树节点的操作函数1、查找节点的 of 函数2、查找父/子节点的 OF 函数3、提取属性值的 OF 函数前言在linux2.6中,ARM架构的板级硬件细节过多的被编码在arch/arm/plat-xxx和arch/arm/mach-xxx充斥着大量的板级信息,这些细节对应内核来说不过是垃圾。设备树设备树是一种描述硬件的数据结构,它起源于OpenFirmware。采用设备树后原创 2021-04-11 20:41:50 · 11346 阅读 · 1 评论 -
linux LED设备驱动文件
文章目录前言一、地址映射二、I/O 内存访问函数读函数写函数三、 编程实战1、驱动文件2、应用文件3、加载驱动4、应用文件测试前言在linux驱动中点亮LED,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux的驱动框架。一、地址映射MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU原创 2021-04-11 14:46:44 · 580 阅读 · 0 评论 -
linux 字符设备驱动实战
IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0);IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0X10B0);原创 2021-04-11 13:38:12 · 526 阅读 · 0 评论 -
I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本)
文章目录IOMUXC_SetPinMuxIOMUXC_SetPinConfig编程实战imx6ull提供了一些封装函数IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0);IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0X10B0);这 里 使 用 了 两 个 函 数 IOMUXC_SetPinMux 和 IOMUXC_SetPinConfig , 其 中 函 数IOMUXC_SetPinMux原创 2021-04-10 21:50:28 · 1299 阅读 · 0 评论 -
交叉编译工具安装后 -bash: arm-linux-gnueabihf-gcc: cannot execute binary file: Exec format error
移植交叉编译工具,存在的问题与解决方法在终端下执行 arm-linux-gnueabihf-gcc -v提示错误 -bash: arm-linux-gnueabihf-gcc: cannot execute binary file: Exec format error交叉编译器的版本不对,x86-64表示64位系统查看系统的位数 uname -a 显示 i686 表示32位所以重新下载32位的交叉工具,最终显示的信息,代表交叉工具链可以使用...原创 2021-04-08 10:58:41 · 5873 阅读 · 2 评论 -
I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版)
文章目录前言IO命名IO 配置IO 复用配置(MUX)IO 属性配置(PAD)时钟配置GPIO配置编程实战LED原理图编程步骤程序源码前言本文介绍I.MX6ULL手册的使用方法。管脚命名规则,时钟开启,IO管脚复用,GPIO高低电平,寄存器地址查找灯。实战汇编语言点亮LEDIO命名32-bit software mux control registersIOMUXC_SW_MUX_CTL_PAD_<PAD_NAME>32-bit software pad control regis原创 2021-04-08 08:07:32 · 821 阅读 · 0 评论