Linux驱动(IMX6ULL)
基于IMX6ULL开发环境,学习其驱动开发使用
海拉鲁开荒人
林克
展开
-
Linux驱动系列---1.字符设备驱动
字符设备驱动驱动开发前提驱动开发步骤驱动模块加载卸载加载卸载函数加载卸载指令字符设备注册,注销操作函数添加LICENSE和作者信息关于设备号设备号组成设备号分配静态分配:动态分配设备号程序编写创建VScode工程添加头文件路径编写驱动程序编写测试APP编译运行Makefile文件编译模块编译测试APP加载模块驱动开发前提开发板已经移植好合适的Uboot,Linux内核,rootfs根文件系统...原创 2020-03-06 11:57:25 · 299 阅读 · 0 评论 -
Linux驱动系列---2.led驱动开发
LED驱动地址映射内存管理单元(MMU)ioremapiounmapIO内存访问函数读操作函数写操作函数代码编写led.cledApp.cMakefile编译运行测试编译led.ko编译ledApp运行测试地址映射内存管理单元(MMU)主要功能:完成虚拟空间到物理空间的映射内存保护,设置存储器访问的权限,设置虚拟存储空间的缓冲特性。在开启MMU之前,IOMUXC_SW_MUX_CT...原创 2020-03-11 10:03:54 · 179 阅读 · 0 评论 -
Linux驱动系列--3.新字符型设备驱动
新字符型设备驱动新字符型设备驱动原理分配和释放设备号新字符型设备注册字符设备结构cdev_init函数cdev_add函数cdev_del函数自动创建设备节点创建和删除类创建与删除设备设置文件私有数据代码编写newchrled.c编译测试新字符型设备驱动原理分配和释放设备号在使用register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会带来两个问题:①、需...原创 2020-03-11 13:45:50 · 136 阅读 · 0 评论 -
Linux驱动系列--4.设备树
设备树学习设备树的理解个人理解设备树的生成设备树的理解个人理解设备树是一种设备信息结构体,在一个嵌入式系统中,存在各种设备,CPU,RAM,ROM,IIC,定时器,SPI等等都是一种设备,在系统构建时,为了方便设备驱动开发,将各种设备的信息以树状结构整合到一起,在编写驱动时,从设备树上获取设备基础信息,进行设备的配置和操作。在设备树中根节点为设备树的根,设备以树干-树枝-树叶的结构链接,设备信息包含:兼容性,寄存器地址,设备类型等信息。设备树的生成设备树文件格式为.dtb格式,有dtsi文件通过原创 2020-06-04 10:54:21 · 1154 阅读 · 0 评论 -
IMX6ULL驱动学习--阻塞,非阻塞IO(未完)
Linux阻塞和非阻塞IOLinux阻塞和非阻塞IO阻塞式实现方式等待队列等待队列项添加/移除队列项到队列头等待唤醒等待事件非阻塞式轮询Linux阻塞和非阻塞IO当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞式实现方式阻塞式IO int fd;int data = 0;fd = open("原创 2020-07-30 10:20:35 · 176 阅读 · 0 评论 -
IMX6ULL驱动学习--MISC驱动
MISC杂项驱动MISC驱动MISC简介程序结构注册`miscdevice`设备程序测试MISC驱动MISC简介MISC驱动,又称杂项驱动。通常嵌套在platform总线驱动中。所有的MISC设备驱动的主设备号都是10,从设备号不同,解决了设备号紧张的情况。程序结构注册miscdevice设备注册miscdevice设备定义miscdevice设备向内核注册miscdevice设备时,miscdevice是一个结构体,定义在include/linux/miscdevice.h中,如下:原创 2020-07-24 17:28:07 · 377 阅读 · 0 评论 -
IMX6ULL驱动学习--Linux自带LED驱动
@toc原创 2020-07-01 09:47:16 · 906 阅读 · 1 评论 -
IMX6ULL驱动学习 -- 内核定时器
内核定时器时钟源定时器API代码定时器模块代码定时器测试应用代码Makefilemake.sh时钟源定时器API代码定时器模块代码timer.c#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.h>#include <linux/mod原创 2020-07-24 17:27:28 · 436 阅读 · 0 评论 -
IMX6ULL驱动学习--Platform驱动开发
Platform平台驱动Platform设备驱动业务逻辑驱动和设备匹配BUS定义匹配过程Platform驱动驱动结构体定义驱动实现过程驱动模板Platform设备platform_device结构体platform_device 结构体定义platform_device设备信息框架设备树设备信息编辑Platform测试程序设备信息结构体版platform_deviceplatform_driver设备树版设备树信息platform_driverPlatform设备驱动Platform 设备驱动,又称平台原创 2020-06-30 19:31:36 · 902 阅读 · 0 评论 -
IMX6ULL驱动学习--pinctrl子系统和gpio子系统
pinctrl子系统和gpio子系统pinctrl子系统和gpio子系统作用pinctrl子系统PIN配置信息详解gpioled.cdtbspinctrl子系统和gpio子系统作用Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,将驱动与底层IO电气属性配置分开。pinctrl子系统无pinctrl子系统时设备初始化流程1.修改设备树,添加节点,设置reg属性,主要为相关寄存器。2.获取reg属性寄存器,并配置寄存器设置IO功能。3.获取原创 2020-06-09 17:12:59 · 1013 阅读 · 0 评论 -
IMX6ULL学习--Linux并发与竞争及解决机制
Linux并发与竞争及解决机制并发与竞争解决机制原子操作加锁自旋锁读写锁信号量互斥体并发与竞争Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。产生原因:多线程并发访问解决机制原子操作加锁自旋锁读写锁信号量互斥体...原创 2020-06-08 14:09:23 · 258 阅读 · 0 评论 -
IMX6ULL学习--TFTP加载内核和设备树,NFS挂载根文件系统
前提条件开发板和主机相互ping通,主机IP:192.168.0.175,开发板IP:192.168.0.111 。主机已经单间NFS网络文件系统安装配置xinetd安装软件$ sudo apt-get install xinetd查询/etc/下是否存在xinetd.conf文件,没有的话新建一个$ ls /etc/xinetd.conf修改 xinetd.conf$sudo vi /etc/xinetd.confxinetd.conf# Simple conf原创 2020-05-15 11:06:39 · 1470 阅读 · 1 评论 -
IMX6ULL学习--搭建NFS网络文件系统
原理分析NFS原理是在主机上建立一个NFS服务,将主机上的共享文件夹共享给别的客户端,主机与其他客户端之间通过网络连接传输数据,客户端通过挂载NFS文件夹访问主机文件夹,就像访问本地文件夹一样。前提条件网络互通主机与开发板相互ping通。主机可以安装NFS主机可以访问外网搭建参数主机IP:192.168.0.175主机共享文件夹:/home/book/arm/imx6ull/eth_file开发板IP:192.168.0.111开发板挂载文件夹:/home/root/eth_fi原创 2020-05-14 20:04:39 · 564 阅读 · 0 评论