自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

以梦为马不负韶华

世上没有‘包医百病’的仙方,也没有“施诸四海而皆准,推之百世而不悖”的真理。 不要幻想毕其功于一役,一夜之间在地上建起天堂,在追求真理寻找幸福的过程中要脚踏实地,得尺进尺,得寸进寸一点一滴的改造渐进才能完善达到。

  • 博客(48)
  • 资源 (3)
  • 收藏
  • 关注

原创 【f1c200s/f1c100s】mangopi自制linux开发板驱动适配进度(PCB、代码开源)

【f1c200s/f1c100s】mangopi自制linux开发板驱动适配进度(PCB、代码开源)目前进度过程记录博客目前进度目前自制的mangopi设备驱动适配已完成部分包含: 基于扫描的gpio-keys子系统适配 LED子系统适配 RGB接口LCD显示屏适配 ft5406触摸屏适配 博通RTL8188EUS无线网卡适配 PWM驱动适配 显示屏背光适配以下这几项在下载到荔枝派源码时已经适配好了: SPI FLASH驱动 USB驱动 串口驱动mangopi内核代

2022-05-10 14:39:48 5467 9

原创 ATF密钥生成和验签

博客介绍了根密钥的生成过程和验签流程,以及为何不在efuse和otp中直接存储公钥的原因。

2024-04-09 14:00:07 368

原创 ATF Image加载认证流程梳理

从该函数可以发现,该函数中又使用plat_get_image_source得到了policy中FIP_IMAGE_ID所定义的加载策略,并赋值给静态全局变量。根据项目需要,会预定义每个阶段的image从哪里加载以及与怎么加载,和相应的规范(spec,其实为每个镜像的UUID,用于在加载image时区分不同的image),在ATF中称之为。⚡在boot流程中,load各个阶段的image都是从fip中得到的,但是fip并不是实际的设备,不具备访问物理设备例如sd、emmc的能力,还需要依赖其他的IO方法。

2024-03-05 14:54:33 840

原创 ATF信任链(CoT)代码梳理

CoT节点里的​成员定义了该image的认证方法,例如​的认证方法为签名和抗回滚。​​CoT节点里面的​​内容会保存从image的解析得到的hash值等信息,会被用于后续子节点的认证和鉴权。​​

2024-03-05 14:43:28 924

原创 Makefile模板

Makefile模板

2023-07-14 20:02:58 232

原创 Zotero+坚果云打造多设备同步的文献管理工具(保姆级教程)

使用Zotero和坚果云打造多设备同步的文献管理工具(保姆级教程)

2023-04-27 21:32:16 2697 1

原创 LaTex使用方法和技巧——以IEEE会议论文模板为例

LaTex使用方法和技巧——以IEEE会议论文模板为例包含、参考文献管理、图片处理、表格处理、公式处理、伪代码等

2022-12-02 15:45:59 6977 1

原创 利用Realsense D435和Mocap制作TUM数据集

使用d435和mocap制作tum数据集

2022-11-29 19:53:56 785 2

原创 【f1c200s/f1c100s】FT5426触摸屏驱动适配

嵌入式linux下的触摸屏驱动是基于input子系统的,当触摸发生时,内核上报触摸事件至用户层。我使用的显示屏是正点原子的7寸RGB接口显示屏,触摸芯片为FT5426。和其他很多外设一样,FT5426的驱动linux内核(5.2)也是自带的,FT5426的数据接口是IIC,因此我们只需要在设备树中配置IIC并且打开内核相关功能即可。

2022-05-26 09:25:21 4745 3

原创 【f1c200s/f1c100s】屏幕背光驱动适配

屏幕背光控制前言设备树修改内核配置结果前言目前大部分嵌入式设备还是采用PWM调光的方式,当然我的mangopi也是采用这种方式进行背光调节的。linux是自带背光控制驱动程序的,要使用背光控制接口首先得调通PWM得驱动,可以参考上一篇博客PWM驱动适配。既然都有了PWM驱动了,其实就可以控制屏幕背光了,还去调专用的背光控制接口也仅仅是为了简化控制方法吧。设备树修改PWM驱动调试成功以后,还需要在设备树根节点中添加backlight节点,如下所示:backlight: backlight {

2022-05-16 17:07:59 2042

原创 【f1c200s/f1c100s】PWM驱动适配

PWM驱动适配前言适配方法设备树修改内核配置测试前言PWM可以用于控制屏幕亮度、LED亮度、风扇转速等,linux内核已经自带了许多芯片的PWM驱动,比如全志PWM驱动程序文件路径为drivers/pwm/pwm-sun4i.c,我们只需要根据绑定文档配置设备树和打开内核对应选项即可。适配方法设备树修改根据内核中全志PWM的绑定文档Documentation/devicetree/bindings/pwm/pwm-sun4i.txt,可以知道pwm控制器的设备树节点编写方法如下所示:pwm: p

2022-05-06 22:07:28 2064 6

原创 【f1c200s/f1c100s】RGB接口 LCD驱动适配

全志f1c200s适配RGB接口的LCD

2022-05-06 11:02:19 8801 36

原创 【f1c200s/f1c100s】系统运行期间替换内核镜像和设备树

【f1c200s/f1c100s】系统运行期间替换内核镜像和设备树前言方法在根文件系统挂载镜像所在分区通过NFS拷贝镜像到`/mnt`目录前言前端时间调试自己设计的mango-pi时,由于uboot没有移植USB驱动和网卡驱动,每次更新内核和设备树都需要重新插拔SD卡,非常影响调试效率,后面SD卡都给撸秃噜皮儿了😂。然后就在想能不能不关机更新内核镜像和设备树,因为我发现ubuntu好像在根文件系统下是可以找得到一个vmlinuz的,因为内核运行是将整个内核镜像文件拷贝到内存中执行的 ,所以可以在根文件系

2022-05-03 20:24:49 2084

原创 【f1c200s/f1c100s】不带中断引脚采用扫描的方式实现通用gpio-keys

【f1c200s/f1c100s】不带中断引脚采用扫描的方式实现input发现问题解决问题发现问题最近画了一块f1c200s/f1c100s开发板,暂且叫它mango-pi。原理图和PCB可以参考mago-pi。由于引脚资源有限,将按键输入引脚设计到了PA0和PA1引脚。直接使能内核自带的gpio-key功能后,内核输出不能请求irq中断。查看gpio_keys.c源码发现在文件开始就说了这个驱动只针对能够产生中断的引脚。后面查阅f1c200s参考手册发现PA端口居然不带GPIO中断!!!!!

2022-04-26 16:46:02 2495 2

原创 【f1c200s/f1c100s】Linux板卡刷写img镜像后对分区进行扩容/调整分区大小

Linux板卡刷写img镜像后,调整根文件系统大小,文件系统扩容。

2022-04-18 13:39:25 2436

原创 【f1c200s/f1c100s】使用genimage工具制作img系统镜像

利用genimage工具方便快捷傻瓜式生成img系统镜像。

2022-04-14 21:30:47 4723 1

原创 【f1c200s/f1c100s】全志f1c200s开发板设计(含原理图和PCB)

全志f1c100s/200s开发板设计(mango-pi)

2022-04-11 20:37:41 15277 20

原创 【FreeRTOS】关于FreeRTOS中堆栈的一些思考

关于FreeRTOS中堆栈的一些思考裸机时的堆栈问题运行FreeRTOS时的堆栈问题参考文献裸机时的堆栈问题内存被分为许多区域,其中包含堆和栈,当然还有其他一些区域,见内存各区域区别。内存栈中存储的是函数调用的形参、非静态局部变量以及函数调用信息。栈由编译器自动进行管理,无需人为干预。如果函数的局部变量定义大小过大(比如定义在函数内部定义超大型数组等),超过了链接脚本定义的栈区大小将会发生溢出,程序将会崩溃!内存堆是用于动态内存分配的,由编程人员手动进行管理。使用malloc函数手动申请内

2022-03-05 13:51:11 5889 3

原创 Ubuntu升级Cmake的正确方式

Ubuntu升级CMake的正确方式

2021-12-17 13:38:18 47817 57

原创 GCC/G++编译流程与编译选项

程序的编译流程和编译选项程序的编译流程预处理,生成预编译文件 gcc –E hello.c –o hello.i编译,生成汇编代码 gcc –S hello.i –o hello.s汇编,生成目标文件gcc –c hello.s –o hello.o链接,生成可执行文件gcc hello.o –o hello # -o指定输出文件名常见编译选项-l(这是小写的L):指定要链接的库。库文件的一般命名方式为libpthread.so, 去掉前缀lib和后缀*

2021-04-28 20:02:51 255

原创 嵌入式:一种裸机编程多任务切换方法

一种嵌入式裸机多任务切换方法有时候为了实现一些简单的、对实时性要求不高的任务,采用操作系统不仅增加了程序的复杂性,对低性能单片机的资源占用也是值得考虑的问题。这时候操作系统可能不是必要的,可以通过一种简单的方法,在裸机编程中实现类似“多任务切换”的方法。比如,在某个应用中,我们需要10ms做一次A/D转换,1s串口发送一次数据,500ms读一次外部IO,并且这些任务都不是对时间要求严格的任务,这时候就可以使用下面的方法实现“多任务”,不仅使程序结构更加清晰,也使我们的编程思路更加清晰。以51单片机

2021-03-22 20:20:20 1776 4

原创 传感器数据结构统一封装方法(结构体的使用)

传感器数据结构统一封装方法封装传感器结构体定义传感器在嵌入式开发中,经常遇到大量传感器数据需要获取,有可能这些传感器都是串口通信,IIC通信,或是485通信,区别仅仅是地址不同,数据量不一样,或是解析方式不同。为了增加程序可扩展性或是调试方便,往往会将有关传感器的数据统一进行管理,在C语言中,最常用的莫过于结构体了。封装传感器结构体我这里使用的传感器都是通过RS485进行通信的,是标准的ModBus RTU协议。每个传感器区别为地址不同,寄存器不同,寄存器长度不同。于是乎封装了以下结构体,可以将同一

2021-03-14 14:12:52 1000

原创 stm32HAL库 RTC配置并设置闹钟间隔响铃(思路+具体方法)

stm32 RTC配置并设置闹钟间隔响铃RTC基本配置间隔定时为了实现stm32的每隔一定时间RTC闹钟响铃一次,使用了一种笨方法,基本思路是:在RTC闹钟中断获取当前时间,并且修改下一次闹钟中断时间为当前时间+需要定时的时间。 如果有更好的思路请一定告知我,呜呜呜~。RTC基本配置在stm32 cubeMX中RTC部分做如下配置。时钟配置为外部32.768Khz高精度晶振。激活时钟源,激活日历功能。同步预分频值和异步预分频值是根晶振大小有关系的。这里我的板子使用的是32.768KHz的高精度

2021-03-14 13:40:41 4274 4

原创 Matlab解析ROS数据包中的惯导(IMU)数据和相机(Camera)数据并保存为带时间戳的txt和jpg文件

@TOC介绍有时候我们需要使用matlab处理ROS录制的数据包中的数据,将ROS数据包解析并保存文件则是第一步。目前的工作需要将数据包中的IMU数据和相机数据保存为带时间戳的格式,方便利用matlab进行处理。使用时只需要将bag包放在脚本所在的目录,并修改脚本文件中bag包路径名,以及确定bag包中含有imu和相机数据,然后直接运行,将会在当前目录生成对应的文件。目录如下图所示:加速度保存格式:matlab代码如下:clear allclcbag = rosbag('mynt_e

2020-12-26 20:09:36 1963 7

原创 用pyQt5写的一个简单的mqtt客户端demo

用pyQt5写的一个简单的mqtt客户端demo软件包安装pyQt5paho-mqttjson使用方法确保配置好mqtt服务器,并连接网络。修改同级目录下setting.json文件中的服务器配置信息。{ "broker":"129.211.xx.xxx", "port":1883, "client":"ternimal", "passwd":"Mjk2NTE3NDY5MTQ1OTg4OdawdawdaTg************AyNDA", "

2020-12-16 21:56:18 1292 3

原创 linux/ubuntu常见问题汇总(静态IP、开机自启动、环境变量、双系统、解压乱码、github加速、恢复.bashrc、改变屏幕亮度等)

linux常见问题汇总Ubuntu设置静态IPubuntu开机自启动ubuntu查看和设置环境变量查看环境变量设置环境变量环境变量作用域双系统共享硬盘rc.local执行权限ubuntu解压中文名压缩包乱码创建文件/文件夹快捷方式(创建软链接)GitHub下载加速(亲测有效,前提FQ)恢复误删的.bashrc树莓派等arm架构更新清华源x86架构arm架构ubuntu改变屏幕亮度Ubuntu设置静态IP将linux开发板与电脑网口连接,方便调试,需要将电脑有线网卡和开发板的有线网卡配置到同一局域网下。操

2020-12-16 21:38:11 158

原创 docker Hardware assisted virtualization and data execution protection must be enabled in the BIOS

Win10下面 VM虚拟机和Docker只能选其中一个。。。如果设置为bcdedit /set hypervisorlaunchtype off虚拟机可以用,docker不能用。设置为bcdedit /set hypervisorlaunchtype autoDocker可用,虚拟机无法使用。所以二选一。目前没有解决办法。参考:VMware Workstation 与 Device...

2020-04-30 10:58:48 448 2

原创 【问题解决】VMware Workstation 与 Device/Credential Guard 不兼容

VMware Workstation 与 Device/Credential Guard 不兼容问题解决问题不小心开启了内核隔离导致的问题。解决以管理员身份打开PowerShell。运行 bcdedit /set hypervisorlaunchtype off。重启。ojbk!...

2020-04-10 10:31:56 274 5

原创 解决arm/linux开发板与ubuntu虚拟机网线通信问题

解决arm/linux开发板与ubuntu虚拟机网线通信问题开发环境问题描述问题分析解决问题windows有线网卡配置虚拟机网卡配置开发板设置主要配置开发环境win10ubuntu16.4 虚拟机arm开发板台式机网口连结开发板,无线网卡连结wifi。问题描述在学习嵌入式linux时,为了调试方便,经常需要windows、linux虚拟机、linux嵌入式开发板三者通信。一般是开...

2020-03-29 22:19:06 2220

原创 最简单的Qt安装MYSQL驱动问题(解决QSqlDatabase: QMYSQL driver not loaded)

解决QSqlDatabase: QMYSQL driver not loaded开发环境解决办法1. 更换Qt版本2. MYSQL驱动安装3. 大功告成开发环境window10Qt 5.12.3MYSQL 8.0解决办法1. 更换Qt版本将Qt版本换为Qt5.12.3,问题就解决了一半了。下载地址:Qt5.12.3由于某种原因不能更换版本就请找其他解决办法吧。^v^2. M...

2020-03-29 17:39:35 404

原创 SQLite数据库基本操作(举例说明)

SQLite数据库基本操作介绍在线安装命令分类系统命令(以‘.’开头)sql命令创建一个学生管理系统数据库,需要 **学号、姓名、电话、地址** 等信息。然后创建一张表,然后查看:然后插入一个学生信息:更新已有的数据:增加一列数据:删除一个不需要的学生信息:删除某一列:1、根据旧表创建一张新表:2、删除原来的表:3、更改新表名字为stu:介绍SQLite,是一款轻型的数据库,是遵守ACID的关...

2020-02-05 16:13:50 5182

原创 程序存储和运行时的内存分布(.text .data .bss的区别)

.text .data .bss等的区别,程序存储和运行时的内存分布.text段是代码段。它用来放程序代码(code)。它通常是只读的(程序代码,编译好了就确定了,不可能改来改去的嘛)。.data(ZI data)段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量(static)。它是可读可写的。.bss(RW data )段是全局变量数据段。它用来存放未初始化的(...

2020-01-01 21:43:07 4082 3

原创 KeilMDK环境 stm32f10x快速移值FreeRTOSv9.0

KeilMDK环境 stm32f10x快速移值FreeRTOSstm32f10x快速移值FreeRTOS准备工作移值将一些中断向量交给操作系统内核管理测试程序总结stm32f10x快速移值FreeRTOSFreeRTOS由于其短小精悍,开源免费被广泛的应用。在使用FreeRTOS之前不可避免的就是移值。在这里分享一个快速简单、亲测可用的freertos移值教程。其他类型的编译器和单片机也可做为...

2019-04-27 21:12:25 692 1

原创 嵌入式Linux驱动 GPIO操作改进 包括从驱动到测试程序

嵌入式Linux驱动 GPI操作改进 包括从驱动到测试程序说明 字符的驱动编写小结字符设备驱动编写步骤操作寄存器的方式总结代码说明这篇博客记录的是上一次编写GPIO驱动的改进版本。这里改进了两个地方: 面向对象的编程思想 结构体来表示一个对象做出错判断在某个位置出错,就要在那儿释放申请的内存 字符的驱动编写小结字符设备驱动编写步骤字符设备驱动编写步骤:实现加载和卸载...

2018-12-04 19:47:27 676

原创 嵌入式Linux驱动 GPIO操作 包括驱动和应用层程序对驱动进行测试

文章目录代码驱动层代码应用层代码 测试驱动Makefile这里记录的是嵌入式linux驱动对gpio的基本操作。实现的内容是:gpio驱动编写>>>>应用编写(闪烁灯)。目标板是iTOP4412。CPU为 Exynos4412。代码代码部分包括 驱动层代码对GPIO寄存器的直接操作。然后是应用层对驱动的测试

2018-12-03 22:04:19 1047

原创 stm32是如何将寄存器值通过标准库写入寄存器的?

stm32是如何将配置从库函数调用一步一步到寄存器的?0. 前言1.综述1.1 流程2.正式开始2.1 LED库函数初始化2.2 GPIO_TypeDef2.3 GPIOA的访问方法2.4 GPIO_Init函数3.总结0. 前言在平时的学习和工作中,可能很少有人会实际去操作寄存器,但是去了解库函数是如何去操作寄存器是很有必要的。不仅可以加深对stm32的理解还能学习借鉴它库函数的封装架构。...

2018-11-25 23:13:09 3040 1

原创 嵌入式Linux驱动初探 虚拟串口设备驱动编写

文章目录1.说明2 . FIFO相关函数3.贴代码4.测试1.说明所谓虚拟串口设备意为这个串口是虚拟的,不能用来实现与下位机的串口收发。但是他可以将从用户那儿收到的数据,原封不动的回传给用户。相当于一个回环。这一功能的实现主要是在驱动中实现一个FIFO。驱动接收到用户数据后,先将之放入FIFO,当用户需要数据(读取数据)时,驱动从FIFO中把数据读出,回传给用户。2 . FIFO相关函数...

2018-11-25 20:16:53 1145 2

原创 文件I/O接口函数详解

文章目录标准IO和文件IO的区别标准IO文件IO文件描述符接口函数open头文件和函数接口测试代码close头文件和函数接口read头文件和函数接口write头文件和函数接口测试举例lseek头文件和函数接口标准IO和文件IO的区别标准IO符合ANSI C标准。带有缓冲区,减少系统调用,提高系统效率。通过流(FILE结构体)来表示一个打开的文件。只能访问普通文件和终端文件。文件I...

2018-11-20 23:17:51 582

原创 Linux标准I/O常用函数实例 向文件定时输出时间

Linux标准I/O实例 向文件定时输出时间涉及的函数代码向文件每秒写入一次当前系统时间,并添加行号。下一次启动程序时自动在文本末追加时间。涉及的函数/*标准输出函数*/int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);/*文件打开 读取函数*/FILE *fo...

2018-11-20 19:19:17 279

原创 Linux文件和标准I/O

Linux文件和I/O文件基础文件类型标准I/O系统调用缓冲机制流缓冲类型全缓冲行缓冲无缓冲打开流参数:path参数:mode关闭流文件基础文件即一组相关数据的有序集合。文件类型常规文件 r目录文件(文件夹) d (directory)字符设备文件 c (char) 代表一个字符设备块设备文件 b (block)管道文件 p 进程间通信的一种机制套接字文件 s 进程间通信和...

2018-11-20 11:59:33 244

latex_math_cheatsheet.pdf

LaTeX数学公式语法总结,方便查询。

2020-04-05

Qt Chart 基于串口实现光流上位机源码

这是一个用Qt Qchart插件实现的一个PMW3901迷你光流模块上位机源码。界面人性化 美观。 X轴Y轴速度变化量实时显示。统计帧率。统计环境质量等。

2018-10-26

Qt串口调试助手

Qt写的串口调试助手 界面美观 方便实用 支持多种格式 。

2018-08-01

空空如也

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

TA关注的人

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