嵌入式驱动linux
文章平均质量分 75
记录学习linux驱动开发内容
梅山剑客
2023年6月毕业,7月入职的嵌软攻城狮
展开
-
Linux驱动开发+QT应用编程实现IIC读取ap3216c
Linux驱动开发+Linux应用开发+LinuxQt开发实现传感器的数据读取。注意:QT开发中的是杂项设备,驱动开发用的是字符设备节点。原创 2022-07-20 20:25:27 · 4008 阅读 · 6 评论 -
正点原子linux阿尔法开发板使用——SPI驱动
主机控制器驱动:SOC的spi外设驱动,是半导体厂家编写号的,为spi-imx.c当spi控制器的设备和驱动匹配之后,spi_imx_probe函数就会执行。SPI控制驱动核心就是spi_master的构建,spi_masterspi_master->transferspi_master-> transfer_one_message 6ULL主机控制器使用此函数,设备驱动:具体的SPI芯片驱动SPI_Driver 非常重要,重点是申请或者定义一个spi_driver 然后初始化spi_driver的各个成原创 2022-06-22 16:47:17 · 1186 阅读 · 5 评论 -
正点原子linux阿尔法开发板使用——IIC驱动
i2c_client:表示I2C设备,我们自己创建i2c_client,我们一般在设备树里面添加具体的I2C芯片,比如fxls8471,系统在解析设备树的时候就会知道有这个I2C设备,然后会创建对应的i2c_client。i2c设备驱动框架,i2c_driver初始化与注册,需要II2C设备驱动编写人员编写的,IIC驱动程序就是初始化i2c_driver,然后向系统注册。注册使用、,如果注销i2c_driver使用在IIC1上接了一个AP3216C1、修改设备树,IO,添加AP3216C的设备节点。原创 2022-06-18 09:33:27 · 1317 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——LCD驱动
framebuffer在内核中的表现就是fb_info结构体,屏幕驱动重点就是初始化里面的各个成员变量。初始化完成之后,通过register_framebuffer。fb_info就是Framebuffer驱动框架的实现。卸载驱动的时候,调用驱动 :1、LCD控制器 (通用的)2、具体屏幕参数。打开imx6ull.dtsicompatible 匹配属性。驱动文件为mxsfb.c,为paltform驱动框架,probe函数就会执行。驱动文件为mxsfb.c,为platform驱动框架,驱动和设备原创 2022-06-16 11:01:18 · 873 阅读 · 1 评论 -
正点原子linux阿尔法开发板使用——input子系统
为了处理按键、鼠标、键盘、触摸屏等设备。input子系统也是字符设备,input核心层会帮我们注册input字符设备驱动。既然内核已经帮我们修改好了input驱动,那么我们需要做什么呢?需要完善输入设备,完善输入设备的时候就要按照input子系统的驱动框架要求来。1、input_dev(表示具体的输入设备)申请并初始化并注册input_dev。使用input_allocate_device申请,evbit表示输入事件,比如按键对应的事件就是EV_KEY,如果要连按,那么还要加EV_REP。事件类型如下原创 2022-06-15 21:54:02 · 405 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——platform平台总线模型
目的:为了提高软件的重用,跨平台性能!!!控制器驱动和设备驱动分离!!!将驱动分离:主机控制器驱动和设备驱动,主机控制器驱动一般是半导体厂家写的。在linux驱动框架下编写具体的设备驱动。驱动和设备。驱动就是具体的设备驱动。设备:是设备属性,包括地址范围,如果是IIC器件地址,速度。总线主要完成总线下设备和驱动之间的匹配。驱动数据类型为device_driver,驱动程序向内核注册驱动采用driver_register。向总线注册驱动的时候,会检查当前总线下的所有设备,有没有与此驱动匹配的设备,如果有原创 2022-06-10 23:01:51 · 508 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——阻塞IO和非阻塞IO
阻塞:资源不可以的时候,程序挂起,资源可以的时候唤醒。非阻塞:资源不可以的时候,应用轮询查看,或者放弃。Linux 内核提供了等待队列(wait queue)来实现阻塞进程的唤醒工作。如果用户应用程序以非阻塞的方式访问设备,设备驱动程序就要提供非阻塞的处理方式,也就是轮询。poll、epoll 和 select 可以用于处理轮询,应用程序通过 select、epoll 或 poll 函数来查询设备是否可以操作,如果可以操作的话就从设备读取或者向设备写入数据。poll中断处理函数唤醒。...原创 2022-06-10 10:24:18 · 191 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——Linux中断实验
1、先知道需要使用的中断对应的中断号2、先申请request_irq,此函数会激活中断。3、如果不用中断了,那就时放点,free_irq;4、中断处理函数 5、5、中断使能与禁止函数常用的中断使用和禁止函数如下所示:上半部和下半部上半部分占用时间少,下半部分占用时间多。中断处理一定要越快越好。参考点:①、如果要处理的内容不希望被其他中断打断,那么可以放到上半部。②、如果要处理的任务对时间敏感,可以放到上半部。③、如果要处理的任务与硬件有关,可以放到上半部④、除了上述三点以外的其他任务,优先考原创 2022-06-08 22:18:48 · 360 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——Linux内核时间管理
内核时间管理1、Cotex-M内核使用systick作为系统时钟源。2、硬件定时器、软件定时器,软件定时器的原理依靠系统定时器来驱动。3、linux内核频率可以设置,通过make menuconfig图形化配置。4、HZ表示系统的节拍率。jiffies:保存系统运行的时间。内核定时器1、软件定时器和硬件定时器不一样,直接给周期值。设置期满以后的时间。2、定时处理函数。3、内核定时器不是周期性的,一次定时时间到了以后就会关闭,除非重新打开。2022.5.27 P39。...原创 2022-05-30 22:05:58 · 350 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——Linux 并发与竞争
原子操作原子变量和原子位原子操作的API:自旋锁1、自旋锁自旋锁是轻量级的。自旋锁的定义:自旋锁的API原创 2022-05-27 15:38:53 · 278 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用—pinctrl和gpio子系统
pinctrl子系统和gpio子系统试验6ULL的GPIO的使用1、设置PIN的复用和电气属性2、配置GPIOpinctrl子系统使用GPIO子系统来使用GPIO子系统。打开imx6ull.dts查看复用设备树。和参考手册对应上了根据设备的类型,创造对应的子节点,然后设备所用的pin放到子节点。如何添加一个pin 的信息。 imx6ul-evk { pinctrl_hog_1: hoggrp-1 { fsl,pins = < MX6UL_PAD_UART1_RT原创 2022-05-25 22:33:34 · 832 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——网络环境搭建
TFTP网络环境搭建安装xinetdsudo apt-get install xinetd查询/etc/下是否存在 xinetd.conf 文件。修改 xinetd.conf 文件内容如下:TFTP 目录新建目录mkdir -p /home/alientek/linux/tftpsudo chmod 777 /home/alientek/linux/tftp/cd /home/alientek/linux/lstftp-hpa 和 tftpd-hpa 服务程序执行以下程序原创 2022-05-22 21:15:00 · 1310 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用—Linux设备树
设备树2022.5.22小结:dtc是编译工具.dtb是dtc编译后的结果,dts是最后生成的设备树文件。需要单独编译一个设备树文件,使用如下指令:make imx6ull-alientek-emmc.dts makefile中的文件设备树语法dts也有头文件,扩展名为.dtsi头文件,可以将一款soc其他所有的设备提取出来,作为一个通用的.dtsi文件。dts是以斜杠‘/’开始。左忠凯草绘设备树设备树语法在设备树举例子:从根节点/开始描述设备信息,在/根节点外,有原创 2022-05-22 20:07:59 · 1857 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用—新字符设备驱动
新字符设备驱动:原创 2022-05-21 23:18:28 · 371 阅读 · 0 评论 -
正点原子linux阿尔法开发板使用——应用开发篇
linux应用开发篇1、应用编程点灯:使用交叉编译器source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi2022.5.15 GPIOlinuxc 应用文档p526控制gpio输出在GPIO中断测试章节中,使用到了 poll()多路转接。作用:检测文件当前状态是否就绪,是不是需要使用到的状态。文档交叉P475。#include <poll.h>int原创 2022-05-19 20:47:32 · 1721 阅读 · 2 评论 -
正点原子linux阿尔法开发板使用——驱动开发篇
linux驱动开发篇1、编译出厂内核源码1.1 复制linux内核源码到Ubuntu中创建新目录mkdir -p IMX6/linux-imx-4.1.15-2.1.0解压linux内核源码tar xf linux-imx-4.1.15-2.1.0-gb78e551-v1.4.tar.xz -C IMX6/linux-imx-4.1.15-2.1.0/进入解压的目录中cd IMX6/linux-imx-4.1.15-2.1.0查看解压后的文件执行编译./build.sh编译原创 2022-05-19 20:46:49 · 3616 阅读 · 2 评论 -
正点原子linux阿尔法开发板使用——QT开发篇
主要记录正点原子阿尔法开发板使用的一些记录,方便以后查询。QT开发篇1、关闭原子出厂界面 vi /etc/rc.local注释箭头这句话即可。关闭桌面程序后,可执行下面的指令进行重启桌面程序/opt/QDesktop > /dev/null 2>&1 &2、交叉编译环境设置。3、 如何创建自启动程序与出厂 Qt 一样,自启动脚本/程序指令可以放到/etc/rc.local 这个文件里,因为/etc/rc.local是系统启动最后一个执行的。当然也可以放在原创 2022-05-15 16:59:53 · 1458 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(十一)—触摸屏驱动
驱动开发综合例程实验原创 2022-03-12 10:19:56 · 434 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(十)—IIC驱动实验
一、IIC简介IIC介绍参照二、应用层实现IIC应用层操作 I2C 是以数据包进行交流的,所有我们在应 用层就要进行封包的操作。 数据包对应的结构体是 i 2c_rdwr_ioctl_data , 这个结构体定义在 i nclude\uapi\linux\i2c-dev.h 下面:定义如下:/* This is the structure as used in the I2C_RDWR ioctl call */ struct i2c_rdwr_ioctl_data { struct i2c原创 2022-03-11 08:28:54 · 1390 阅读 · 1 评论 -
迅为嵌入式linux驱动开发笔记(九)—输入子系统
一、什么是输入子系统输入子系统是 Linux 专门做的一套框架来处理输入事件的,像鼠标,键盘,触摸屏这些都是输入设备。 但是这些输入设备的类型又都不是一样的,所以为了统一这些输入设备驱动标准应运而生的。统一了以后,在节点 /dev/input 下面则是我们输入设备的节点,如下图所示:这些节点对应的则是我们当前系统的输入设备 , 我们要怎么查看当前系统都有哪些输入设 备呢?我们可以使用命令来查看:cat /proc/bus/input/devices那么我们要怎么确定哪个设备对应哪个节点呢?这里原创 2022-03-10 10:55:57 · 1407 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(四)—设备树
一 、什么是设备树? 设备树是一种描述硬件资源的数据结构。 它通过 bootloader 将硬件资源传给内核, 使得内核和硬件资源描述相对独立。二、设备树的基本概念 1、为什么叫设备树呢? 因为他的语法结构像树一样,所以管它叫设备树。...原创 2022-03-09 20:28:05 · 1099 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(八)—内核定时器
内核定时器二. Linux 内核定时器基础知识Linux 内 核 使 用 timer_list 结 构 体 表 示 内 核 定 时 器 ,timer_list 定 义 在 文 件 include/linux/timer.h 中,定义如下:struct timer_list { struct list_head entry; unsigned long expires; /* 定时器超时时间,不是时长,单位是节拍数 */ struct tvec_base *base; void原创 2022-03-09 20:20:47 · 1071 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(七)—等待&工作队列
等待队列二.等待队列基础知识当我们进程去访问设备的时候,经常需要等待有特定事件发生以后在继续往下运行,这 个时候就需要在驱动里面实现当条件不满足的时候进程休眠,当条件满足的时候在由内核唤醒 进程。 那么等待队列就实现了在事件上的条件等待。<1> 等待队列头 等待队列头就是一个等待队列的头部, 每个访问设备的进程都是一个队列项, 当设备 不可用的时候就要将这些进程对应的等待队列项添加到等待队列里面。 等待队列头使用结构体 wait_queue_head_t 来表示,这个结构体定义在文件 in原创 2022-03-08 21:14:15 · 1319 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(六)— 中断与中断下文
设备树节点以及相关函数一. 设备树中的中断节点。如果一个设备需要用到中断功能, 开发人员就需要在设备树中配置好中断属性信息, 因为 设备树是用来描述硬件信息的, 然后 Linux 内核通过设备树配置的中断属性来配置中断功能。 设备树中断的参考绑定文档:Documentation/devicetree/bindings/arm/gic.txt中断实际上是非常复杂的, 但是作为开发人员, 我们只需要关系怎么在设备树中指定中断, 怎么在代码中获得中断就可以。 其他的事情, 比如设备树中的中断控制器, 这原创 2022-03-07 21:45:47 · 1297 阅读 · 0 评论 -
一周小结(一)
一、周一体验了官方uboot&linux移植的步骤完成uboot和和linux移植体验。二、构建了BusyBox根文件系统三、linux驱动开发学习周三开始linux驱动开发学习,周末将代码进行测试验证。问题如下:1、kernel和原子开发板不匹配问题。参考解决链接:解决链接2、完成nfs文件系统挂载问题。主要是重启之后需要重新挂载文件系统。setenv ipaddr 192.168.0.50setenv ethaddr b8:ae:1d:01:00:00setenv gatew原创 2022-03-06 21:12:20 · 457 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(五)—pinctl和gpio子系统
一、pinctl和gpio子系统pinctrl子系统设置引脚的复用关系和电气属性。2、Linux Pinctrl 子系统提供的功能是什么?( 1 ) 管理系统中所有的可以控制的 pin , 在系统初始化的时候,枚举所有可以控制的 pin , 并标识这些 pin 。( 2 ) 管理这些 pin 的复用( Multiplexing )。对于 SOC 而言,其引脚除了配置成普通 的 GPIO 之外,若干个引脚还可以组成一个 pin group,形成特定的功能。( 3 ) 配置这些 pin 的特性。例如原创 2022-03-05 14:08:32 · 2636 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(三)— 平台总线模型
一、平台总线模型介绍1、什么是平台总线模型?平台总线模型也叫 platform 总线模型。 是 Linux 内核虚拟出来的一条总线,不是真实的导线。平台总线模型就是把原来的驱动 C 文件给分成了俩个 C 文件,一个是 device.c , 一个是 driver.c 把稳定不变的放在 driver.c 里面,需要变得就放在了 device.c 里面。把共性的放在dirver.c,变的存放在device.c中。2、为什么会有平台总线模型?( 1 ) 可以提高代码的重用性( 2 ) 减少重复性代码。原创 2022-03-04 08:28:01 · 1033 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(二)—地址映射与字符设备
一、linux物理地址到虚拟地址的映射linux不能直接对物理地址进行操作,如果需要操作硬件,需要先把物理地址转成虚拟地址,因为linux使能了MMU,所以不能直接操作物理地址。1、使能MMU有什么好处?(1)让虚拟地址成了可能(2)可以让系统更加安全,有了MMU,上层应用看到的内存都是虚拟内存,应用就不能直接访问硬件,这样保证了系统安全。2、MMU非常复杂,如何完成物理地址到虚拟地址的转换呢?内核提供了相关的函数。在include/asm-generic 下的io.hioremap:把物理原创 2022-03-03 11:14:57 · 1175 阅读 · 0 评论 -
迅为嵌入式linux驱动开发笔记(一)—杂项设备、应用与内核间数据传输
一、Linux下第一个驱动驱动分为四个部分:头文件驱动模块的入口和出口声明信息功能实现第一步 包含头文件1 #include<linux/init.h> 包含宏定义的头文件2 #include<linux/module.h>包含初始化加载模块的头文件第二步,驱动模块的入口和出口module_init();module_exit();第三步 声明模块拥有开源许可证MODULE_LICENSE(“GPL”);第四步 功能的实现内核加载时打印 printk(“原创 2022-03-02 17:30:13 · 1550 阅读 · 0 评论