- 博客(64)
- 资源 (16)
- 收藏
- 关注
原创 Ubuntu 18.04安装Qt开发环境异常解决办法
近期需要在Ubuntu 18.04系统下用到Qt5.15开发环境,按照网上的资料在线安装,5.3 查看ubuntu 18.04 glibc当前版本。出现了GLIBC_2.28,意味着更新成功了。4.2 更新软件源(这一步非必要)5.1 执行以下命令更改软件源。提示以上错误,并无法继续打开。4.3 指定软件源IP地址。命令即可打开Qt开发环境了。按自己需求选择安装完成。增加这一行,保存并退出。执行下面命令重新安装。
2023-03-29 14:13:23 977
转载 Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法
关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found`出现报错,建议不要使用源码包去编译并升级。提醒:在其他博客教程上,有些网友(我也不例外,后面可拯救回来)就按照教程并使用GLIBC_xxx的源码包并去升级,结果往往是系统崩溃而告终。通常情况下,有些环境需要glibc更高的版本才支持,比如GLIBC_2.28。(XX指原本的版本,看文件夹有哪个就试一下),然后ls这些指令就可以用了,再使用ln -s把以前的库链接回来。
2023-03-29 11:21:49 9062 1
原创 Ubuntu 22.04 Qt5.12.9编译出现“cannot find -lGL”解决
有些不甘心重装系统,重新搜索cannot find -lGL,找到了这篇文章 https://www.jianshu.com/p/e1b2511c7cda ,即方案二:搜索系统中已经存在的libgl1-mesa-dev相关文件,使用find /usr -name libGL*命令搜索(libgl1-mesa-dev是有关OpenGL的库)搜索结果中发现/usr/lib/x86_64-linux-gnu/libGL.so.1文件(这个文件也可能在另一个目录中)。
2022-10-25 07:06:53 2266
原创 Linux学习笔记(22.2)——基于IIC + Regmap + IIO的AP3216C的设备驱动
Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 I.MX6ULL的 PWM、定时器等外设初始化,最终都是要落到寄存器的设置上。 Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器, SPI 接口的话使用 spi_write/spi_read等。 I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_t
2022-10-22 10:33:21 973
原创 Linux学习笔记(22.1)——基于SPI + Regmap + IIO的ICM20608设备驱动
Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 I.MX6ULL的 PWM、定时器等外设初始化,最终都是要落到寄存器的设置上。 Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器, SPI 接口的话使用 spi_write/spi_read等。 I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_t
2022-10-16 16:16:07 1415
原创 Linux内核:I2C设备驱动
I²C(发音:I²C,在内核文档中写成I2C)是由Philips开发的协议。它是一种缓慢的两线协议(可变速度,最高可达400 kHz),具有高速扩展(3.4 MHz)。它提供了一种廉价的总线,用于连接需要不频繁或低带宽通信的多种设备。I2C广泛应用于嵌入式系统中。一些系统使用不符合品牌要求的变体,因此不标榜为I2C,而是使用不同的名称,例如TWI(两线接口),IIC。最新的I2C官方规范是NXP Semiconductors发布的《I2C总线规范与用户手册》(UM10204)。......
2022-08-29 09:25:17 3035
转载 Linux内核:设备树
设备树描述了设备的详细信息,这些信息包括数字类型的、字符串类型的、数组类型的,我们在编写驱动的时候需要获取到这些信息。 Linux 内核给我们提供了一系列的函数来获取设备树中的节点或者属性信息,这一系列的函数都有一个统一的前缀“of_”,所以在很多资料里面也被叫做 OF 。这些 OF原型都定义在 文件中。...
2022-08-10 09:23:31 2874 1
原创 Linux学习笔记(24)—— LCD驱动程序
有关LCD接口的相关文档,已有许多优秀博文讲解,本文不再赘述,下面仅浅显地罗列出LCD驱动程序、测试程序等LCD设备驱动程序关键点LCD驱动程序的核心就是:分配fb_info设置fb_info注册fb_info硬件相关的设置硬件相关的设置又可以分为3部分:引脚设置时钟设置LCD控制器设置/** * 文件 : lcd_drv.c * 作者 : glen * 描述 : lcd driver文件 */#include <
2022-05-11 22:42:11 905
原创 Linux学习笔记(17.12)—— 基于输入子系统的按键驱动程序
Linux输入设备种类繁杂,常见的包括触摸屏、键盘、鼠标、摇杆等;这些输入设备属于字符设备,而linux将这些设备的共同特性抽象出来,Linux input 输入子系统就产生了。1. 软件框架 input输入子系统是一组驱动程序的集合,旨在支持Linux下的所有输入设备。大多数驱动程序位于drivers/input中,但也有相当一部分位于drivers/hid和drivers/platform中。 输入子系统的核心是输入模块,它必须在任何其他输入模块之前加载——它作为两组模块之间的通
2022-04-21 23:14:19 1122
翻译 TMS320F2837xD技术参考手册 —— 处理器间通信(IPC)
处理器间通信(IPC)模块允许两个CPU子系统之间进行通信。1. 介绍 本节详细介绍了每个CPU可用于请求和共享信息的IPC功能。IPC的功能包括:消息RAMsIPC标志和中断IPC命令寄存FLASH pump信号时钟配置信号自由运行计数器 所有IPC功能都是相互独立的,大多数功能不需要任何特定的数据格式。还有两个寄存器用于启动模式和状态通信。有关这些寄存器的更多信息,请参阅引导ROM一章。图7-1显示了IPC模块的设计结构。2. 消息RAMs 有两个专
2022-03-23 19:41:46 1871
原创 Linux学习笔记(17.11)—— 按键的中断与mmap
本文主要参考韦东山Linux文档内存映射现象与数据结构编写mmap_test.c测试程序#include <stdio.h>#include <unistd.h>#include <stdlib.h>int a;int main(int argc, char **argv){ if (argc != 2) { printf ("Usage: %s <number>\r", argv[0]); ret
2022-03-16 21:52:42 901
原创 Linux学习笔记(17.10)—— 按键的中断线程化处理
本文主要参考韦东山老师视频及文档Linux中断处理流程中断系统中相关数据结构 每一个irq_desc数组项中都有一个函数:handle_irq,还有一个action链表。要理解它们,需要先看中断结构图: 外部设备1、外部设备n共享一个GPIO中断B,多个GPIO中断汇聚到GIC(通用中断控制器)的A号中断,GIC再去中断CPU。那么软件处理时就是反过来,先读取GIC获得中断号A,再细分出GPIO中断B,最后判断是哪一个外部芯片发生了中断。 所以,中断的处
2022-03-12 12:16:15 1292
原创 Linux学习笔记(17.9)—— 在工作队列处理按键后续工作
Linux设备驱动之工队列工作队列 软中断运行在中断上下文中,因此不能阻塞和睡眠,而tasklet使用软中断实现,当然也不能阻塞和睡眠。但如果某延迟处理函数需要睡眠或者阻塞呢?没关系工作队列就可以如您所愿了。 把推后执行的任务叫做工作(work),描述它的数据结构为work_struct ,这些工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct,而工作线程就是负责执行工作队列中的工作。系统默认的工作者线程为events。 工作
2022-03-08 05:08:02 357
原创 Linux学习笔记(17.8)—— 有中断下半部tasklet处理的按键驱动
Linux设备驱动之中断下半部tasklet上半部与下半部的区别① 处理及时性差异:上半部指的是中断处理程序,下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。比如:在网络传输中,网卡接收到数据包这个事件不一定需要马上被处理,适合用下半部去实现;但是用户敲击键盘这样的事件就必须马上被响应,应该用中断实现。② 可嵌套性差异:上半部(中断)不能被相同类型的中断打断,而下半部依然可以被中断打断;上半部(中断)对于时间非常敏感,而下半部基本上都是一些可以延迟的工作。基于上半部与下半部的区别
2022-03-03 23:34:10 239
原创 Linux学习笔记(17.7)——基于定时器的按键驱动
Linux内核定时器概念 内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:① 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。② 不能执行休眠(或可能引起休眠的函数)和调度。③ 任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件。 内核定时器的调度函数运行过..
2022-02-09 23:09:14 245
原创 Linux学习笔记(17.6)——基于异步通知的按键驱动
异步通知 使用休眠-唤醒、POLL机制时,都需要休眠等待某个事件发生时,它们的差别在于后者可以指定休眠的时长。如果APP不想休眠怎么办?也有类似的方法:驱动程序有数据时主动通知APP,APP收到信号后执行信息处理函数。1.1 什么叫“异步通知”?举个例子:你去买奶茶,你在旁边等着,眼睛盯着店员,生怕别人插队,他一做好你就知道:你是主动等待他做好,这叫“同步”。你付钱后就去玩手机了,店员做好后他会打电话告诉你:你是被动获得结果,这叫“异步”。1.2 如何使用异步通知?驱..
2022-01-26 23:54:47 1179
原创 Linux学习笔记(17.5)——基于poll机制按键驱动
poll机制 (干货源自韦东山老师)1.1 使用流程 使用休眠-唤醒的方式等待某个事件发生时,有一个缺点:等待的时间可能很久。我们可以加上一个超时时间,这时就可以使用poll机制。① APP不知道驱动程序中是否有数据,可以先调用poll函数查询一下,poll函数可以传入超时时间;② APP进入内核态,调用到驱动程序的poll函数,如果有数据的话立刻返回;③ 如果发现没有数据时就休眠一段时间;④ 当有数据时,比如当按下按键时,驱动程序的中断服务程序被调用,它会记录数据、唤醒APP;..
2022-01-26 15:11:28 287
原创 Linux学习笔记(17.4)——基于gpio中断的按键驱动
使用中断先前采用查询方式的按键驱动占用过多内存,不适合产品的实际使用,这就要使用中断。Linux系统也随着芯片技术的发展对中断处理不断优化,具体的演进如下(参考韦东山老师):Linux(4.1.15内核)中断系统中的重要数据结构:Linux对中断的处理过程,放两张图片在这里仅作为引子,不作深入探讨,实际上我还没弄明白。深入研究可以“肝”一下内核源码。按键设备驱动文件button_drv.c文件中,button_drv_read函数调用wait_event_interruptible,当没有按键.
2022-01-20 18:11:51 1484
原创 Linux学习笔记(17.3)——基于pinctrl和gpio子系统的按键驱动
为什么要引入pinctrl和gpio子系统?我认为有这么一个根本出发点——让你的程序更有生命力,不要为了目标板的一点小小的变更而忙得焦头烂额。所以,1)当你的按键驱动程序要去适配不同的SOC时,要做到不改变驱动程序,就要把驱动程序分为上层的按键驱动程序“空壳”(即没有实际对硬件操作的框架)和下层的具体SOC的驱动程序(实现实际所需硬件驱动,并注册给上层以便于其调用)的上下两层,这样一来,当目标SOC变更时换掉下层的SOC驱动程序即可,这就是分层;但,更进一步地,2)当目标SOC一致而外围电路发生变化.
2022-01-16 14:40:22 819
原创 Linux学习笔记(17.2)——基于设备树的按键驱动
字符设备驱动程序设计思路 与上一篇文章Linux学习笔记(17.1)——基于platform设备驱动的按键驱动的基本思路一致,之所以再次列出上面的图片,是想凸显其重要性。到目前为止,Linux的发展经历了30多年,从当间开始学习往往难以理解,搞不清楚为什么会这么复杂——有这么多弯弯绕绕,而如果了解其演进过程,则会有助于理解,同时也于您后续编写优质的程序大有裨益。本文与上文的主要区别在于将设备资源文件用设备树替代,其它文件基本没有没有变化。关于设备树请参考韦东山老师的视频及文档或网上其它优质资源。..
2022-01-15 16:47:46 970 2
原创 Linux学习笔记(17.1)——基于platform设备驱动的按键驱动
字符设备驱动程序设计思路 基于platform平台的设备驱动的关键在于,1)将驱动程序分为与具体硬件驱动分为上下两层,2)并将下层的具体硬件驱动分离为资源和相关的SOC驱动。本文为便于理解分层、分离的概念,将驱动 分成了3个C文件:button_drv.c、imx6_io_drv.c、atk_btn_dev.c以及2个头文件:button_drv.h、imx6_io_drv.h。下面分别列出代码按键设备驱动(框架)文件button_drv.c文件实现与硬件有关的按键驱动,主要实现str.
2022-01-14 17:42:51 439
原创 Linux学习笔记(15.4)——LED设备驱动之面向对象演进4(用设备树)
Linux学习笔记(15.3)采用platform_device指定LED资源,即:首先,根据实际电路将LED的引脚信息(默认状态、打开时电平、GPIO时钟开关位偏移量、引脚序号、GPIO物理地址)初始化;然后,定义struct resource类型的led_res资源,将.start成员指向上面定义的LED引脚信息;接着,定义struct platform_device类型的led_dev资源,指定资源的名称.name、.num_resources(几个LED)、.resource(led_res
2022-01-02 09:52:43 402
原创 Linux学习笔记(15.3)——LED设备驱动之面向对象演进3
在Linux学习笔记(15.2)中,将LED字符设备驱动程序分为led_drv和led_dev两个文件,其中led_drv提供led_drv_open、led_drv_write、led_drv_release等与应用程序对应的函数,而这些函数在实际执行时要通过函数指针调用底层的led_init、led_exit、led_ctrl等函数完成对LED的控制;而led_dev文件则提供LED的资源和实际对LED操作的函数。为提升程序的可移植性,可进一步将led_dev文件中LED资源和实际对LED操作的函数.
2021-12-25 07:11:51 169
原创 Linux学习笔记(15.1)——LED设备驱动之面向对象演进1
LED字符设备驱动程序改进——构造led_drv和led_dev结构体/* * 文件名 : led_drv.c * 作者 : glen * 描述 : led_drv驱动文件 */#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/ide.h>#include <linux/init.
2021-12-18 06:30:37 109
原创 Linux学习笔记(15.2)——LED设备驱动之面向对象演进2
LED字符设备驱动程序改进——构建led_drv.c文件和led_dev.c文件将二者都用到的公共部分提取出来,放入到led_dev.h文件当中去/** * @file led_dev.h * @author glen ([email protected]) * @brief * @version 0.1 * @date 2021-12-17 * * @copyright Copyright (c) 2021 */#ifndef __LED_DEV_H__#define.
2021-12-18 06:01:17 212
原创 CCS7.4 SysBIOS开发环境搭建
CCS7.4 SysBIOS开发环境搭建首先,关于TI-RTOS、SYSBIOS、XDCTools这些概念及相互之间的关系,请参考下面链接文档描述:https://blog.csdn.net/Xiao_Jie123/article/details/110273646?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161637810716780265459088%2522%252C%2522scm%2522%253A%25222014071
2021-03-22 12:08:00 2491
原创 TMS320F28377D.cmd文件分析
TMS320F28377D.cmd文件分析存储器分配MEMORY{PAGE 0 : /* 程序存储区 */ /* BEGIN用于"引导至FLASH" bootloader模式 */ /* Flash引导地址, 见图1.1 */ BEGIN : origin = 0x080000, length = 0x000002 /* Flash扇区 */ FLASHA : origin = 0x080002, length = 0x001F
2021-03-11 17:02:00 2290
原创 《传感器电路的低噪声信号调理》阅读笔记
《传感器电路的低噪声信号调理》阅读笔记信噪比驱动ADC时保持较低的模拟前端噪声同样非常重要。这对于避免降低信噪比(SNR)来说至关重要。放大器引起的SNR性能下降净值(单位dB)为:SNRLOSS=20log[NADCNADC2+π2f−3dB(2.5NENFSR)2] SNR_{LOSS} = 20log[\frac{N_{ADC}}{\sqrt{{N_{ADC}}^2+\frac{\pi}{2}f_{-3dB}(\frac{2.5NE_N}{FSR})^2}}] SNRLOSS=20log[
2021-02-03 10:58:44 1209
翻译 TMS320F283xD中文技术参考手册之ADC
TMS320F283xD中文技术参考手册之ADC11. TMS320F28377D的ADC特征11.1 ADC介绍 这里介绍的ADC模块是逐次逼近型(SAR)ADC,具有可选的16位和12位分辨率。ADC由一个ADC核心和一个外围包装器组成。ADC核心由模拟电路组成,包含通道选择模拟开关MUX、采样保持电路、逐次逼近电路、电压基准电路和其它辅助模拟电路组成。ADC外围包装器由数字电路组成,用于配置和控制ADC。这些电路包含可编程的转换逻辑、结果寄存器、模拟电路接口、并行总线接口、后处理电路和
2021-01-07 10:00:23 11381 1
原创 AD元件库和封装库转换成KiCAD库方法
AD元件库和封装库转换成KiCAD库方法从github或gitee下载(克隆)pcad2kicad工具打开网址:https://github.com/xtoolbox/pcad2kicad https://github.com/xtoolbox/pcad2kicad https://github.com/xtoolbox/pcad2kicad,克隆或下载PCAD/AD库文件转换KiCad工具
2020-12-25 17:04:05 4593 3
原创 使用GerberTools的Gerber Panelizer工具进行gerber文件拼板的方法
使用GerberTools的Gerber Panelizer工具进行gerber文件拼板的方法下载GerberTools工具,点击链接地址 https://github.com/ThisIsNotRocketScience/GerberTools/releases ,选择最新的GerberTools压缩文件(如下图),解压到常用的工作目录。准备好gerber文件,笔者使用的是kicad导出的文件,导出gerber文件的方法这里不作介绍了,需要注意的是要把边界描述文件扩展名.gm1改为.gko,
2020-12-03 23:06:35 4841
原创 Linux学习笔记(23)——基于wm8960的音频设备驱动
根据WM8960与处理器接口SAI和I2C来修改设备树文件a) 首先在i2c2节点下增加wm8960子节点codec: wm8960@1a { compatible = "wlf,wm8960"; /* 兼容属性 */ reg = <0x1a>; /* wm8960的I2C地址 */ clocks = <&clks IMX6UL_CLK_SAI2>; clock-names = "mclk"; wlf,shared-lrclk; .
2020-07-04 23:56:35 4925 3
原创 Linux学习笔记(22)——基于ICM20608的SPI设备驱动
修改设备树文件,增加Iecspi3 节点上增加CM20608子节点&ecspi3 { /* 设置当前片选数量为1, 因为就只接了一个ICM20608 */ fsl,spi-num-chipselects = <1>; cs-gpio = <&gpio1 20 GPIO_ACTIVE_HIGH>; pinctrl-names = "defalu...
2020-04-26 23:05:32 2252 2
原创 Linux学习笔记(21)——基于platform的杂项(MISC)设备驱动
修改设备树文件,增加beep节点beep { #address-cells = <1>; #size-cells = <1>; compatible = "glen-beep"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_beep>; /* 属性设置蜂鸣器所使用的PIN对应的pi...
2020-02-15 15:59:20 372
原创 Linux学习笔记(20)——基于platform的设备驱动
设备树文件仍与第18节的保持不变编写led设备程序/* * 文件名 : leddevice.c * 作者 : glen * 描述 : leddevice驱动文件 */#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#...
2020-02-14 15:11:23 388
原创 Linux学习笔记(20)——linux异步通信设备驱动
设备树文件仍与18节的保持不变编写阻塞设备驱动程序,编译拷贝到NFS网络文件系统的/lib/modules/4.1.15目录下/* * 文件名 : asyncnoti.c * 作者 : glen * 描述 : asyncnoti驱动文件 */#include <linux/types.h>#include <linux/kernel....
2020-02-12 23:24:29 232
原创 Linux学习笔记(19)——linux阻塞设备驱动
设备树文件仍与上一节(18)的保持不变编写阻塞设备驱动程序,编译拷贝到NFS网络文件系统的/lib/modules/4.1.15目录下/* * 文件名 : blockio.c * 作者 : glen * 描述 : blockio驱动文件 */#include <linux/types.h>#include <linux/kernel....
2020-02-12 07:39:26 167
原创 Linux学习笔记(18)——linux中断设备驱动
在设备树中添加按键KEY节点1.1 修改设备树根节点下KEY节点如下:key { #address-cells = <1>; #size-cells = <1>; compatible = "glen-key"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_key>; ...
2020-02-07 07:52:20 390
转载 编程缩写字典
编程缩写字典序号描述缩写词AAdditionAdd AccumulatorAcc AddressAddr ActionAct ActiveAct Amplitude...
2020-02-04 16:35:11 620
原创 Linux学习笔记(17)——KEY按键设备驱动
在设备树中添加按键KEY节点及pinctrl-key子节点1.1 在设备树根节点下添加按键KEY节点 key { #address-cells = <1>; #size-cells = <1>; compatible = "glen-key"; pinctrl-names = "default"; pinctrl-0 = <&pin...
2020-01-30 23:52:22 700
TMS320F2837xD 中文技术参考手册之 ADC.pdf
2020-12-10
SourceInsight4.0.0089
2018-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人