自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(766)
  • 资源 (2)
  • 收藏
  • 关注

原创 mt7601u无线模块移植

项目内容目标板IMX6ULL(Buildroot 文件系统,),内核WiFi 模块MT7601U(USB 接口,1T1R,efuse 存储 NVM)驱动源码内核源码(需先用同一工具链编译过一次)交叉工具链Makefile 配置,LINUX_SRC / CROSS_COMPILE 均已指向上述路径板上工具iwpriviwconfigwpa_cliudhcpc目标热点SSIDgui,WPA2-PSK/AES,密码 ********src/

2026-10-26 16:24:52 79

原创 Buildroot 根文件系统构建

但是我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot 官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要求,可能导致编译失败。可以看出的 buildroot 构建的根文件系统运行基本没有问题,但是这个根文件系统是最简单的,我们并没有在 buildroot 里面配置任何第三方的库和软件,接下来我们就配置 buildroot,使能一些常见的第三方软件。

2026-10-14 11:23:48 215

原创 Linux ADC 驱动

ADC,Analog to Digital Converter 的缩写,中文名称模数转换器。它可以将外部的模拟信号转化成数字信号。对于 GPIO 口来说高于某个电压值,它读出来的只有高电平,低于就是低电平。假如我想知道具体的电压数值就要借助于 ADC 的帮助,它可以将一个范围内的电压精确的读取出来。

2026-10-13 14:49:12 105

原创 Linux IIO 驱动

IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到 “工业” 两个字就觉得 IIO 是只用于工业领域的。大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC、光敏传感器、压力传感器等内部都是有个 ADC,内部 ADC 将速度计、电压 / 电流测量芯片这类准备的,当了解 DAC 也是可以的。常用的传感器,如加速度计的模拟数据转换为数字量,然后通过其他的通信接口,比如 IIC、SPI 等传输给 SOC。

2026-10-13 09:53:51 222

原创 linux Regmap API

Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 I.MX6ULL 的 PWM、定时器等外设初始化,最终都是要落到寄存器的设置上。Linux 下使用来读写 I2C 设备中的寄存器,SPI 接口的话使用等。I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的这类的冗余代码,再者,代码的复用性也会降低。

2026-10-12 10:48:39 155

原创 Linux PWM 驱动

也就是示例代码中的 imx_pwm_config_v2 和 imx_pwm_set_enable_v2。imx_pwm_enable、imx_pwm_disable 和 imx_pwm_config 这三个函数最终调用就是 imx_pwm_config_v2 和 imx_pwm_set_enable_v2。我们可以直接在用户层来配置 PWM,进入目录。imx_pwm_enable、imx_pwm_disable 和 imx_pwm_config 这三个函数就是使能、关闭和配置 PWM 的函数。

2026-10-10 17:10:02 149

原创 Linux 网络驱动

I.MX6ULL 自带 2 个网络接口(2 个 MAC 外设),一个 MAC 搭配一个 PHY 芯片,构成完整网口。片上 ENET 外设就是网络 MAC,支持 10/100M,内置三层网络硬件加速,对 IP、TCP、UDP、ICMP 等协议加速。支持全双工 / 半双工局域网;支持 RMON 远程网络监控计数;内置硬件加速单元处理 TCP/IP 协议;自带专用 DMA,用于 ENET 与 SOC 之间数据传输;支持 IEEE 1588,使用可编程增强型缓冲描述符。ENET 外设主要特性。

2026-09-24 11:04:46 191

原创 Linux 块设备驱动

块设备是针对存储设备的,比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动,块设备驱动相比字符设备驱动的主要区别如下:①、块设备只能以块为单位进行读写访问,块是 linux 虚拟文件系统 (VFS) 基本的数据传输单位。字符设备是以字节为单位进行数据传输的,不需要缓冲。

2026-09-21 10:38:20 190

原创 Linux USB驱动

前面我们讲了,USB 分为 HOST (主机) 和从机 (或 DEVICE),有些设备可能有时候需要做 HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。如果一个 USB 接口既可以做 HOST 又可以做 DEVICE 那就太好了,使用起来就方便很多。为此,USB OTG 应运而生,OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以做 HOST,也可以做 DEVICE。

2026-09-20 15:21:05 142

原创 Linux CAN 驱动

I.MX6ULL 带有 CAN 控制器外设,叫做 FlexCAN,FlexCAN 符合 CAN2.0B 协议。FlexCAN 完全符合 CAN 协议,支持标准格式和扩展格式,支持 64 个消息缓冲。I.MX6ULL 自带的 FlexCAN 模块特性如下:①、支持 CAN2.0B 协议,数据帧和遥控帧支持标准和扩展两种格式,数据长度支持 0~8 字节,可编程速度,最高 1Mbit/S。②、灵活的消息邮箱,最高支持 8 个字节。③、每个消息邮箱可以配置为接收或发送,都支持标准和扩展这两种格式的消息。

2026-09-18 14:52:08 202

原创 Linux 音频驱动实验

音频 CODEC 支持 I2S 协议,那么主控制器也必须支持 I2S 协议,I.MX6ULL 也提供了一个叫做 SAI 的外设,全称为 Synchronous Audio Interface,翻译过来就是同步音频接口。I.MX6ULL 的 SAI 是一个全双工、支持帧同步的串行接口,支持 I2S、AC97、TDM 和音频 DSP,SAI 主要特性如下:①、帧最大为 32 个字。②、字大小可选择 8bit 或 32bit。③、每个接收和发送通道拥有 32×32bit 的 FIFO。

2026-09-17 14:59:22 152

原创 Linux 多点电容触摸屏

最简单的组合就是 ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y,可以通过在这两个事件上报触摸点,如果设备支持的话,还可以使用 ABS_MT_TOUCH_MAJOR 和 ABS_MT_WIDTH_MAJOR 这两个消息上报触摸面积信息,关于其他 ABS_MT 事件的具体含义大家可以查看 Linux 内核中的 multi-touch-protocol.txt 文档,这里我们重点补充一下 ABS_MT_TOOL_TYPE 事件。是不是 request_irq 函数不能使用?

2026-09-16 14:02:17 199

原创 linux 交叉编译tslib

第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为 /dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为 event2 那么就应该设置为 /dev/input/event2,以此类推。第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为 /etc/pointercal,此文件可以不存在,校准的时候会自动生成。校准完成以后如果不满意,或者不小心对电容屏做了校准,那么直接删除掉。

2026-09-16 11:38:10 184

原创 Linux 串口驱动

当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成。第 1996~2034 行,初始化 sport,我们重点关注的就是第 2003 行初始化 sport 的 port 成员变量,也就是设置 uart_ops 为 imx_pops,imx_pops 就是 I.MX6ULL 最底层的驱动函数集合,稍后再来看。第 2061 行,使用 uart_add_one_port 向 uart_driver 添加 uart_port,在这里就是向 imx_reg 添加 sport->port。

2026-09-15 10:34:46 82

原创 Linux SPI驱动

SPI驱动框架和I2C很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是SOC的SPI控制器接口。

2026-09-14 16:42:31 68

原创 Linux I2C驱动实验

I2C是很常用的一个串行通信接口,用于连接各种外设、传感器等器件。Linux 内核也将I2C驱动分为两部分:①、I2C总线驱动,I2C总线驱动就是SOC的I2C控制器驱动,也叫做I2C适配器驱动。②、I2C设备驱动,I2C设备驱动就是针对具体的I2C设备而编写的驱动。

2026-09-11 17:48:39 114

原创 Linux RTC驱动

RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、release、read、write 和 ioctl 等函数完成对 RTC 设备的操作。Linux 内核将 RTC 设备抽象为。

2026-09-11 15:05:10 128

原创 Linux LCD驱动

裸机 LCD 驱动编写流程如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽 (width)、高 (height)、hspw、hbp、hfp、vspw、vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片等信息。在 Linux 中应用程序最终也是通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。

2026-09-11 10:02:15 197

原创 Linux INPUT 子系统实验

按键、鼠标、键盘、触摸屏等都属于输入 (input) 设备,Linux 内核为此专门做了一个叫做 input 子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息,input 核心层负责处理这些事件。接下来我们就来学习一下 Linux 内核中的 input 子系统。

2026-09-09 16:24:52 120

原创 Linux MISC驱动实验

所有的 MISC 设备驱动的,不同的设备使用不同的从设备号。随着 Linux 字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解决此问题。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设备驱动可以简化字符设备驱动的编写。我们需要向 Linux 注册一个 miscdevice 设备,miscdevice 是一个结构体,定义在文件定义一个 MISC 设备 (miscdevice类型) 以后我们需要设置minorname和fops。

2026-09-09 14:16:47 98

原创 Linux 自带的 LED 灯驱动实验

此文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写,我们在编写设备节点的时候要注意以下几点: ①、创建一个节点表示 LED 灯设备,比如。重新编译设备树并且使用新的设备树启动 Linux 系统,启动以后 LED0 就会闪烁,作为系统心跳指示灯,表示系统正在运行。驱动结构体变量,可以看出,Linux 内核自带的 LED 驱动采用了 platform 框架。修改完成以后保存并重新编译设备树,然后用新的设备树启动开发板。第 236~239 行,LED 驱动的匹配表,此表只有一个匹配项,

2026-09-04 17:39:41 167

原创 linux 设备树下的 platform 驱动编写

platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。在没有设备树的 Linux 内核下,我们需要分别编写并注册。

2026-09-04 16:33:09 234

原创 linux platform设备驱动

前面我们讲了设备驱动的分离,并且引出了总线 (bus)、驱动 (driver) 和设备 (device) 模型,比如 I2C、SPI、USB 等总线。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。

2026-09-04 14:53:07 235

原创 linux 异步通知

我们首先来回顾一下 “中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。比如我们通过按键去开关蜂鸣器,采用中断以后处理器就不需要时刻的去查看按键有没有被按下,因为按键按下以后会自动触发中断。

2026-09-03 17:31:04 209

原创 Linux 阻塞和非阻塞 IO 实验

这里的 “IO” 并不是 STM32 或者其他单片机的时候所说的 “GPIO”(也就是引脚)。这里的 IO 指的是 Input/Output,也就是输入 / 输出,是应用程序对驱动设备的输入 / 输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞式 IO 如图所示:

2026-09-03 15:15:03 218

原创 STM32 PACK 下载和 手动添加PACK包

在搜索框中输入需要下载的芯片名,例:stm32f103,然后在搜索结果中选择需要的芯片,进入到芯片参数界面。进入到芯片参数界面后,点击STM32F1xx_DFP蓝色字样。进入STM32H7xx_DFP后,即可直接下载最新版本,也可以根据需要下载历史版本。以上就是Keil5 MDK芯片包官网下载方法。

2026-09-01 09:57:04 312

原创 Qt 打包为可执行文件发布

exeDebug 打包体积巨大,并且目标机器没有 debug 库会直接运行失败。

2026-08-28 10:07:39 251

原创 Linux内核 并发与竞争

原子操作只能保护整形、位变量;对于设备结构体、复杂临界区,原子操作无能为力,此时使用自旋锁。线程要访问共享资源,先获取锁;锁同一时刻只能被一个线程持有。B 不会休眠,原地循环忙等待 (自旋),不停查询锁是否释放。类比公用电话亭:有人在用 (持有锁),其他人原地转圈等待,不能去做别的事。自旋锁缺点等待锁的线程一直循环,消耗 CPU。持有锁时间很短,轻量级临界区❌禁止场景:锁持有时间很长;临界区内调用休眠、阻塞 API。自旋锁结构体spinlock_tunion {struct {

2026-08-26 10:56:55 320

原创 linux pinctrl 和 gpio 子系统实验

Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。我们先来回顾一下上一章。

2026-08-17 10:15:44 159

原创 linux 设备树下的“点灯”

从图可以看出,alphahled 这个节点找到了,并且 compatible 属性值为 “atkalpha-led”,status 属性值为 “okay”,reg 属性的值为 “0X20C406C 0X4 0X20E0068 0X4 0X20E02F4 0X4 0X209C000 0X4 0X209C004 0X4”,这些都和我们设置的设备树一致。如果我们要读取设备树某个节点的属性值,首先要先得到这个节点,一般在设备结构体中添加 device_node 指针变量来存放这个节点。

2026-08-14 15:25:29 195

原创 IMX6ULL MfgTool软件烧写系统

标准的供应商定义设备”等字样就说明下载软件已经准备就绪。”,打开下载软件,如果出现“符合。烧写完成以后 MfgTool。觉得有帮助的话,打赏一下呗。上看到具体的烧写过程,如图。官方系统,烧写过程如图。

2026-08-14 09:59:21 236

原创 Linux 设备树

设备树,将这个词分开就是“设备”和“树”,描述设备树的文件叫做DTS(Device Tree Source),这个DTS文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如 CPU数量、 内存基地址、IIC接口上接了哪些设备、SPI接口上接了哪些设备等等,如图所示:在图中,树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。

2026-08-13 15:18:43 167

原创 Linux 内核启动流程

每个文件都有一个文件描述符,此处打开的“/dev/console” 文件描述符为 0。start_kernel 函数里面调用的子函数太多,而这些子函数又很复杂,因此我们简单的来看一下一些重要的子函数。查找“/sbin/init”、“/etc/init”、“/bin/init”和“/bin/sh”,这四个相当于备用。内核最终是需要和根文件系统打交道的,需要挂载根文件系统,并且执行根文件系统中的 init。首先分析 Linux。arch/arm/kernel/head.S 中,因此要分析。

2026-08-03 14:42:02 167

原创 Linux 内核顶层 Makefile 详解

顶层Makefile一开始就是Linux可以看出,Linux内核版本号为4.1.15。MAKEFLAGS变量设置如下所示:16MAKEFLAGSrRincludedirCURDIRLinux编译的时候也可以通过“V=1”来输出完整的命令,这个和uboot一样,相关代码如下所示:Linux编译的时候使用“make -s”就可实现静默编译,编译的时候就不会打印任何的信息,同 ubootLinux编译的时候使用“O=xxxLinux也支持代码检查,使用命令“

2026-08-03 11:55:49 210

原创 U-Boot详解(三)之启动流程详解

再来看一下函数 rel_test 对于全局变量 rel_a 的调用,第 2 行设置 r3 的值为 pc+12 地址处的值,因为 ARM 流水线的原因,pc 寄存器的值为当前地址+8,因此 pc=0X87804184+8=0X8780418C,r3=0X8780418C+12=0X87804198,第 7 行就是0X87804198 这个地址,0X87804198 处的值为 0X8785DA50。但是,这个文件并不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。,测试 DRAM,空函数。

2026-07-31 11:15:26 225

原创 U-Boot详解(二)之顶层 Makefile 分析

顶层 Makefile 一开始是版本号,内容如下(为了方便分析,顶层 Makefile 代码段前段行号采用 Makefile 中的行号,因为 uboot 会更新,因此行号可能会与你所看的顶层 Makefile 有所不同): 其中,VERSION 是主版本号,PATCHLEVEL 是补丁版本号,SUBLEVEL 是次版本号,这三个一起构成了 U-Boot 的版本号,例如当前的 U-Boot 版本号就是“2016.03”。EXTRAVERSION 是附加版本信息,NAME 是和名字有关的,一般不使用这两个

2026-07-24 11:05:25 185

原创 U-Boot详解(一)

Makefile 嵌套在大项目中很常见,一般大项目里面所有的源代码都不会放到同一个目录中,各个功能模块的源代码都是分开的,各自存放在各自的目录中。也就是给 obj-y 追加了一个"bootm.o",obj-y 包含着所有要编译的文件对应的.o 文件,这里表示需要编译文件 cmd/bootm.c。:和 u-boot.bin 一样,u-boot.bin 就是 u-boot-nodtb.bin 的复制文件。是一系列的文件,这些文件都是编译生成的,都是一些命令文件,比如文件.u-boot.bin.cmd。

2026-07-17 09:09:57 255

原创 RGBLCD屏幕学习

显示一帧图像的过程想象成绘画,那么在显示的过程中就是用一根“笔”在不同的像素点画上不同的颜色。这根笔按照从左至右、从上到下的顺序扫描每个像素点,并且在像素画上对应的颜色,当画到最后一个像素点的时候一幅图像就绘制好了。信号是垂直同步信号,也叫做帧同步信号,当产生此信号的话就表示开始显示新的一帧图像了,所以此信号在上图。是水平同步信号,也叫做行同步信号,当产生此信号的话就表示开始显示新的一行了,所以此信号都是在上图。:行同步信号,当此信号有效的话就表示开始显示新的一行数据,查阅所使用的。

2026-07-16 10:19:48 243

原创 小程序学习(二十九)之项目打包

可以在查看支持哪些平台!!

2026-07-05 14:29:39 83

原创 小程序学习(二十八)之“订单列表”

一、Tabs 滑动切换一、Tabs 滑动切换。

2026-07-04 18:02:09 91

GEC6818 相册、音乐、视频、2048、刮刮乐、锁屏

GEC6818 相册、音乐、视频、2048、刮刮乐、锁屏

2025-12-23

GEC6818 SPI RFID

GEC6818 SPI RFID

2025-12-18

ARM开发板使用USB WIFI模块实现上网

ARM开发板使用USB WIFI模块实现上网

2025-12-15

commonapi-dbus-demo

commonapi-dbus-demo

2025-11-26

commonapi-dbus

commonapi-dbus

2025-11-26

zeromq-4.3.4

zeromq-4.3.4

2025-11-25

openssl+tcp

openssl+tcp

2025-11-21

gec6818 arm-gba

gec6818 arm-gba

2025-11-19

gec6818 GBA游戏移植

gec6818 GBA游戏移植

2025-11-19

gdb7.11.1.tar

gdb7.11.1.tar

2025-10-31

流程图软件111111

流程图软件111111

2025-10-30

huaweicloud

huaweicloud

2025-10-17

huaweicloud-lib

huaweicloud lib

2025-10-16

huaweicloud-sdk-c-obs-master

huaweicloud-sdk-c-obs-master

2025-10-15

mongoose123

mongoose123

2025-10-13

commonapi-someip-generator

commonapi_someip_generator

2025-09-25

commonapi-core-generator

commonapi_core_generator

2025-09-22

capicxx-someip-runtime-master.zip

capicxx-someip-runtime-master

2025-09-22

capicxx-core-runtime

capicxx-core-runtime

2025-09-22

vsomeip-master

vsomeip-master

2025-09-22

openssl、wpa-supplicant、iwlist

openssl、wpa_supplicant、iwlist

2026-10-26

tslib-1.21.tar.bz2

tslib-1.21.tar.bz2

2026-09-16

IMX6ULL.tar.bz2

IMX6ULL.tar.bz2

2026-08-11

heima 小兔鲜 source

heima 小兔鲜 source

2026-07-05

cpp qt 2048 game

cpp qt 2048 game

2026-05-28

GEC6818刷机包-201911-黑屏幕

GEC6818刷机包-201911-黑屏幕

2026-05-16

6818 opencv+ffmpeg

6818 opencv+ffmpeg

2026-05-15

opencv-4.8.0 source

opencv-4.8.0 source

2026-05-14

gec6818 ffmpeg

gec6818 ffmpeg

2026-05-14

qt 相册、音乐、视频、录音

qt 相册、音乐、视频、录音

2026-05-13

qt程序移植到ARM开发板(6818)

qt程序移植到ARM开发板(6818)

2026-05-11

LaneAutoMated

LaneAutoMated 车道线

2026-05-11

LearnOpenGL(二十一)之 PBO(像素缓冲区对象)

LearnOpenGL(二十一)之 PBO(像素缓冲区对象)

2026-04-25

GEC6818 俄罗斯方块

GEC6818 俄罗斯方块

2026-04-22

cpp vsomeip demo

cpp vsomeip demo

2026-04-21

ProPrj-AI8051U最小系统-2026-04-20

ProPrj_AI8051U最小系统_2026-04-20

2026-04-20

GEC6818 音视频播放

GEC6818 音视频播放

2026-04-04

huaweicloud+libcurl

huaweicloud+libcurl

2026-03-31

libtcp client+server

libtcp client+server

2026-03-19

基于GEC6818的点餐系统

基于GEC6818的点餐系统

2026-03-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除