自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (4)
  • 收藏
  • 关注

原创 【RK3399 -PCIE移植过程记录】

rk3399pro-toybrick-prod-linux-edp.dts—>rk3399pro-toybrick-prod.dtsi—>rk3399pro-toybrick.dtsi—>rk3399pro.dtsi—>rk3399.dtsi(PCIE RC设备树)arch/arm64/boot/dts/rockchip/rk3399pro.dtsi,使能pcie,同时设置 PCIe 接口的 PERST#复位信号,ep-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;

2024-03-19 19:19:43 702

原创 【u-boot和kernel编译】

2)、下载rkbin到uboot同级目录(否则编译提示下载rkbin)2)、下载编译工具到kernel同级目录prebuilts/gcc目录。报错:/bin/sh: lz4c: command not found。安装sudo apt-get install liblz4-tool。4)、修改make.sh。3)、到达源码顶层目录。

2024-03-19 19:08:57 531

原创 【RK3399 PCIE调试——硬件信息资源获取】

pcie开发

2024-01-05 17:39:11 680

原创 【iwinfo命令解析】

iwinfo命令解析

2023-03-27 11:22:01 812

原创 【SIP与PTT同步互斥设计】

公司一款电台产品有两个业务功能,SIP通话和PTT对讲。SIP会话需要和应急指挥平台(sip服务端)进行通话,PTT对讲是多个设备端能够互相进行对讲,硬件设计只使用了一个话咪。目前需要解决的问题是两个业务功能互不干扰。由于PTT设计是组播方式,加入组播的所有设备都能接收到语音,所以当SIP同时工作时语音会混乱。所以需要设计一个方式,实现SIP和PTT之间的同步互斥。

2023-03-21 17:39:40 212

原创 【升级openwrt概率性升级失败】

openwrt在线升级系统

2023-03-20 15:19:17 844

原创 openwrt按键检测驱动修改——实现连续三次按键检测

openwrt按键检测驱动修改——实现连续三次按键检测

2023-02-16 16:32:52 430

原创 openwrt-看门狗watchdog

openwrt-看门狗watchdog

2023-01-04 13:31:14 1712

原创 移植zlog到openwrt

zlog移植到openwrt

2022-12-26 14:22:39 118

原创 判断经过batman-adv协议的mesh自组网拓扑节点设备个数

判断batman-adv协议自组网设备个数

2022-08-02 17:02:13 690 2

原创 【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装

【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装

2022-07-23 15:58:48 13307 4

转载 【STM32开发环境搭建】 - keil的安装和固件库包导入

【STM32开发环境搭建】 - keil的安装和固件库包导入 软件包工具有:keil5安装包MDK-523 、工具KEIL_Lic、stm32f103XX固件库包

2022-07-23 15:38:20 6204 2

原创 使用select实现sleep函数的功能

一、sleep和select到底哪个好近期在阅读公司源码过程中发现了用select实现的sleep函数,经过思索和查阅相关资料,有了一定的了解,1、首先两者都可以实现延时的效果,但是sleep延时的时间精确度上不高,因为设计CPU的调度算法、线程进程优先级,如果说对于时间上没有精确的要求,感觉sleep要笔记方便,就一行代码省事,无伤大雅。2、也有人说sleep浪费CPU,使程序阻塞,如果说计算机资源本身就很紧缺,考虑系统的运行的效率、甚至网络传输速度,最好采用select。可以查看这个人的博客,相对

2022-01-27 13:49:04 2248

原创 libcurl获取sip号源码

相关概念参考博文https://blog.csdn.net/qq_37059136/article/details/83820414源码#include "include/upload_sip.h"#define DEBUG 0char poststring[512] = {0};char postbind[100] = {0};char ip[128] = {0};char mac[128] = {0};char geturl[128] = {0};char port[128]

2022-01-27 10:34:05 211

原创 使用 libgps 库获取gps数据

一、安装启动守护进程准确来说 libgps(man libgps)是一个与 GPS 守护进程进行通信的 C 库。包含打开、收发、解析数据包等接口,我们只需要使用libgps提供的接口就可拿到GPS数据。但是这个库的接口的使用,依赖 GPS 守护进程的运行。而这个守护进程才是真正基于上述协议与 GPS 接收器进行通信的。1、选配上gpsd编译进文件系统(make menuconfig)2、在开发板启动这个守护进程/usr/sbin/gpsd -N -n -S 2947 /dev/ttyUSB03

2022-01-27 10:19:52 5695

原创 在线系统升级功能(四)—mtd工具实现嵌入式设备在线升级

升级脚本编写1、升级的思想:1)、uImage需要直接擦除烧写对应的flash块,对于rootfs已经在运行的过程中,需要保留用户相关数据同时进行定向定点更新(分为要升级修改内容的、要增加内容的、大部分忽略的这么三类)2)、脚本分析编写:脚本运行时候需要带着升级的问题系统镜像,比如:./sysupgrade -f rootfs.tar (升级包rootfs.tar,这个升级包将会被放到/tmp目录下,同时解压出来)2、升级脚本#!/bin/bashexport VERSION=3exp

2022-01-27 09:51:02 602

原创 在线系统升级功能(三)—mtd工具实现嵌入式设备在线升级

文件系统升级步骤1、启动系统查看proc/mtd,显示新的分区(user)2、将root.bin烧写到新分区user中,让文件系统支持mtd工具,nandwirte和flash_erase必须 Package Selection for the target ---> Filesystem and flash utilities ---> [*] mtd/jffs2 utilities

2022-01-27 09:50:36 696

原创 在线系统升级功能(二)—mtd工具实现嵌入式设备在线升级

一、升级步骤1、增加flash分区,修改uboot源码和Linux内核源码1)、修改u-boot源码#define MTDPARTS_DEFAULT 这个宏定义决定 u-boot 对 nand 的分区,可以增加一个,最后一个没有逗号隔开,注意带单位新增的user这个分区为了烧写新的更新的rootfs镜像2)、修改内核源码2、重新编译uImage、u-boot.img、MLO烧写1)擦除flash2)烧写u-boot.img和u-boo-spl.bin3)重新烧写flash的SPL

2022-01-26 17:07:29 3203

原创 在线系统升级功能(一)—mtd工具实现嵌入式设备在线升级

一、flash相关概念TI COM335 升级功能,板子采用的是一个512M的nand flash,使用mtd管理分区,mtd同时提供了字符设备节点和块设备节点读写flash分区内容:Nand flash特性:1)每一位只能从1写0,不能从1写02) 虽以block为单位,真正读写按照page当然可以借助mtd命令或者uboot阶段的flash读写命令直接擦除烧写flash,但是当系统启动以后运行文件系统,这种方式明显有问题,比如flash_erase擦除mtd下的分区时候会有部分进程使用这些f

2022-01-26 17:01:37 2043

原创 Lorawan 与NS端联调测试记录

Lora数据包构成分析前导码(默认12个符号长度) + 可选类型报头 + 数据有效负载 + crc数据校验步骤1、 开发板ping通NS端(保证lorawan能够入网)2、 供应商提供的商用lorawan NS 创建网关(保证在线状态)1) 查看当前lorawan的MAC地址2)修改配置文件global_conf.json:网关EUI是lorawan的MAC地址得到的,要和global_conf.json文件中保持一致,因为地址为:E0:62:34:2D:D1:9C,所以对

2022-01-26 16:49:03 758

原创 Lorawan源码程序编译和运行过程记录

一、源码获取解压1、 解压源码不同的LoRa模块提供商也会因为硬件结构不同而提供他们适配的源码总体符合smetech官方源码框架,解压源码:Sx1302LinuxDriver.zip2、 修改顶层目录下的Makefile,修改架构和交叉编译工具3、编译源码Make4、因为我们的lora模块是连接在spi总线之上,所以查看spi测试代码,修改核心库源码libloragw/tst/test_loragw_spi.c5、重新Make以后在开发板运行执行spi测试程序test_loragw_spi

2022-01-26 16:41:22 1130 1

原创 Lora源码的相关问题(lora_pkt_fwd.c 修改记录)

一、关于Lora源码的相关问题1、首先lorawan需要将smetech的源码的I2C和温度相关的代码去掉,因为当前的模块中并没有相关的代码,2、lora移植涉及到的平台主要是spi驱动移植、外部中断、休眠等几个地方二、问题解决记录1、去掉I2C和温度相关代码,注释掉相关代码2、打开hal库检查信息,这样就可以在lorawan程序运行过程中打印3、编译报错解决,主要是lgw_start函数的修改引起的错误修改libloragw/inc/loragw_hal.h这个头文件,将函数参

2022-01-26 16:26:35 1841

原创 Lora模块调试记录

一、Lora模块调试启动过程调试1、Lora主程序启动这个报错主要是GPS模块使用了另外一路的spi,在检查spi的模式、速率等等时候报错。目前没有GPS模块所以不影响正常运行情况下的报错信息忽略不用管,卡在这个位置的代码可以直接注释掉,继续往后执行:2、如上报错是I2C设备打开失败,读取的是一个温度值,目前没有这个设备,报错忽略继续往下执行即可,由于报错直接退出所以注释报错这句代码3、接收到到了前导码,但是rxpk上行数据 txpk下行数据都没有收到,直接退出程序注释掉退出位置的代码

2022-01-26 16:19:00 1261

原创 buildroot中增加Lora模块(sx1302)驱动

增加sx1302的源码1、在buildroot顶层目录dl目录下增加sx1302的源码2、在buildroot的package目录下创建sx1302目录,然后创建Config.in和sx1302.mk两个文文件。其中Config.in文件内容如下,这个文件主要是菜单选项,用来产生make menuconfig选配的选项其中sx1302.mk文件是编译的规则,也就是makefile,由于我目前还需要将整个源码和配置文件都保存到跟文件按系统中,所以需要cp拷贝3、make menuconfig

2022-01-26 16:07:50 1529

原创 AM335X spi驱动移植(二)-驱动测试

原理图分析AM335主控板SPI接口分析,我这个开发板有两通道spi,而我选择了spi0,这是一排扩展IO

2022-01-26 15:55:00 1239

原创 AM335 —spi驱动移植(一)

一、PCB原理图分析1、AM335主控板SPI接口分析总共有四路spi,我使用了spi0这一组。2、原理图分析二、spi驱动移植1、 spi设备驱动移植(去I2C增spi)开发板上电以后通过查看/dev目录,底下没有生成对应的spi设备,推测spi驱动未被加载到内核中,原因一:可能是根文件系统没有mdev或者udev服务,不会直接创建设备节点。原因二:没有spi驱动代码,需要修改内核源码,增加spi设备驱动排查一:通过修改查看i2c驱动,发现i2c设备驱动能够自动创建设备节点,排除

2022-01-26 15:40:30 2436

原创 Loarwan源码(lora_pkt_fwd.c)阅读分析

int main(int argc, char ** argv){

2022-01-26 15:29:23 2878

原创 buildroot 构建文件系统配置过程

文件系统构建方式自己使用过的构建系统方式主要有busybox、yocto、buildroot三种吧,openwrt也可以,目前还没有使用过,公司另个一mesh项目中使用了这种方式。刚学习嵌入式的时候当然是用busybox构建系统了,这样搭建一个最简的文件系统,但是实际开发工程中可能要移植很多东西,比如项目就要求后续要支持python开发环境,而后边的几种可以通过make menuconfig的方式选配比较适合在框架基础上添加很多软件功能。大概了解了一下yocto工具,常被车载IC行业选中,一般厂商提供

2021-08-29 19:36:20 973

原创 AM335X 内核移植及问题解决

步骤由于给我的内核版本是3.2.0,太低,我的ubuntu是18.04的,后续处理了很多版本不兼容问题1、 解压源码 tar -xvf linux-3.2-evb335x.tar.bz22、 指定源码顶目录下的编译工具链以及代码编译之后运行的架构平台 197 ARCH ?= arm 198 CROSS_COMPILE ?= arm-none-linux-gnueabi-3、 清除内核源码的旧文件目标配置make mrproper4、 根据公板参考板生成自己的配

2021-08-28 17:15:27 483

原创 am335 u-boot移植

u-boot源码移植u-boot移植来说主要关心的是生成配置:根据官方资料提供: AM335X 上电后根据信号SYSBOOT[0:4]的电平来配置加载系统的硬件优先顺序,CoM-335X 可从NAND Flash 或 EMMC 启动系统(二者选一)。通过短接和断开 CoM-335X 的跳线 J1,可改变 AM335X的启动顺序,NAND 版本和 EMMC 版本的 J1 位置如下图所示:配置时候由于我的是板载Nand,并且是512M的,上边的标识太差了看不清,通过板子的出场u-boot打印信息看的,偷懒

2021-08-28 17:00:35 286

原创 AM335交叉编译环境搭建

概述近期公司准备推出一款lora网关产品,采用了两套产品并行开发,交给我这边的是一块盈鹏飞的com335x(也就是主控为AM335)的验证板,还有芯域矩阵的sx1302的lora模块,lora终端。由于公司目前人员紧缺,从功能验证到主要功能实现全在我这边了,不过领导那边有现成的web端解决方案,基本上我这边功能完成以后项目雏形都具备,后边就是立项推进产品研发了。特此大体记录一下自己的工作,陆续更新……COM335开发板简介上班第一天就拿到了这么一块板子如下图,和相关资料(没有pdf格式的pcb原理图和

2021-08-28 16:51:46 446

原创 u-boot启动流程分析—接编译流程

标题uboot启动流程分析1.1、u-boot源码经过配置编译之后生成了链接脚本文件,u-boot.lds通过查看生成的u boot.lds文件,知道当前入口地址为_startENTRY(_start)*(.vectors)arch/arm/cpu/armv7/start.o (.text*)通过生成的u-boot.lds, 知道代码当前入口点:_start,_start 在文件 arch/arm/lib/vectors.S。根据分析可以得到_start 开始的就是中断向量表。

2021-05-20 15:00:16 220 2

原创 u-boot-2020.01 编译流程分析-makefile

标题1、编译u-boot镜像执行的命令 make DEVICE_TREE=stm32mp157a-fsmp1a all2、从编译命令入手可以查看all这个目标在看源码之前用一张图将依赖关系展示出来:2.1 从顶层Makefile找到all目标,定义如下:960 all: $(ALL-y) 961 eq ($(CONFIG_DEPREC

2021-05-20 12:39:48 407

原创 stm32mp157a—u-boot配置流程

显示配置过程执行的命令1、在执行过程中加入V=1,打开开关就能显示执行 make ***_config过程中执行的命令:ubuntu > make V=1 stm32mp15_fsmp1a_basic_defconfig2、通过顶层Makefile文件可以查看到没有%defconfig目标,但是有%config目标%config: scripts_basic outputmakefile FORCE (Q)$(MAKE) $(build)=scripts/kconfig $@ 替换命

2021-05-20 11:47:17 588

原创 stm32mp157a-开发SDK工具安装

stm32mp157a-开发SDK工具安装1、ST提供的OpenSTLinux是Yocto SDK定制发行的软件开发套件,本次使用的SDK是基于FS-MP1A开发板定制的交叉编译工具链,也可以由ST官网获取,获取地址:https://wiki.stmicroelectronics.cn/stm32mpu-ecosystem-v1/wiki/Cross-compile_with_OpenSTLinux_SDK。使用此SDK,开发人员可以利用Yocto项目开发环境(快速开发,部署和测试应用程序或任何其他软件,

2021-05-19 15:56:56 784

原创 基于DCT系数关系的图像水印算法

1、DCT域的图像水印嵌入与提取在信号的频域(变换域)中隐藏信息要比在时域中嵌入信息具有更好的鲁棒性。一副图像经过时域到频域的变换后,可将待隐藏信息藏入图像的的显著区域,这种方法比LSB以及其他一些时域水印算法更具抗攻击能力,而且还保持了对人类感官的不可察觉性。常用的变换域方法有离散余弦变换(DCT)、离散小波变换(DWT)和离散傅立叶变换(DFT)等 。介绍一种提取秘密信息的时候不需要原始图像的盲水印法,算法的思想是利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。2、原理分析载体图像分为8×

2020-12-24 10:53:29 3760 2

原创 Makefile之VPATH虚路径使用实例

1、VPATH为了解决什么样的问题?如下这个文件结构我们使用make工程管理工具来进行编译工作,怎么样写一个对应的makefile默认情况下,make时只会在当前目录下(也就是VPATH目录)寻找目标和依赖,也就是寻找main.o main.c这类文件,但是当前目录没有这些文件,肯定不能生成最终的目标文件interface,那么如何在其它目录下搜索目标和依赖呢? 对于这个情况在Makefile中可以使用VPATH或者vpath告诉make所需要的源文件路径。2、实列分析其中每一个文件中的代码如下:

2020-12-18 09:30:20 352

原创 vivi虚拟摄像头驱动代码分析记录---学习记录

一、安装摄像头应用程序(初体验vivi)我们可以在线获取安装包,好像是高版本的ubuntu已经去掉了vivi这个功能。//在保证自己的ubuntu能够联网的情况下执行这条命令:1、linux@linux:~$ sudo apt-get install xawtv//安装成功之后2、linux@linux:~$ sudo modprobe -i vivi//执行上面这条命令之后,可以通过ls命令查看dev目录下自动生成了video0这个字符驱动设备linux@linux:~$ ls /dev/v

2020-12-10 17:54:20 358

原创 ioctl函数驱动实例-接上一篇博客

1、命令码的封装ioctl函数第二个参数封装一个命令码,只需要在驱动中解析这个命令码去操作对应的硬件的寄存器设置,可以先给用户空间内核空间建一个通用的命令码,相当于制定规则。//命令码文件 ioctl.h,代码如下:#ifndef __IOCTL_H__#define __IOCTL_H__//eg:封装一个控制灯亮灭的命令码,用户空间和内核空间无需读写数据,可以直接使用_IO#define RED_ON _IO('a',0) //灯开,参数不同就代表不同的功能#define RED_OF

2020-12-10 11:03:20 185

原创 ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

@ioctl函数详解一、ioctl函数的原型在用户空间的函数原型#include <sys/ioctl.h>int ioctl(int d, int request, ...); //io的控制,设备的控制 /***第一个参数d是打开的文件描述符***/ /***The second argument is a device-dependent request code,An ioctl() request has encoded in it whether t

2020-12-09 10:43:02 8607 4

STM32F103C8T6+温湿度DHT11+0.9寸OLCD+MQ-2烟雾传感器器+蜂鸣器

基于STM32的智能家居项目:通过lcd采集温湿度和MQ-2烟雾传感器的数据实时显示到0.9寸液晶屏上,并且当温度或者烟雾浓度达到阈值蜂鸣器报警

2022-07-23

ST-link驱动及工具

包含win7、win8、win10的ST-link驱动工具

2022-07-23

STM32F103C8T6通过串口读取MQ-2烟雾传感器数据,可通过串口助手实时打印数据

STM32F103C8T6通过串口读取MQ-2烟雾传感器数据,可通过串口助手实时打印数据

2022-07-23

usb串口驱动,usb转miniusb或者usb转type c线都可用

usb串口驱动,usb转miniusb或者usb转type c线都可用

2022-07-23

空空如也

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

TA关注的人

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