- 博客(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
1702
原创 【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
694
原创 【SIP与PTT同步互斥设计】
公司一款电台产品有两个业务功能,SIP通话和PTT对讲。SIP会话需要和应急指挥平台(sip服务端)进行通话,PTT对讲是多个设备端能够互相进行对讲,硬件设计只使用了一个话咪。目前需要解决的问题是两个业务功能互不干扰。由于PTT设计是组播方式,加入组播的所有设备都能接收到语音,所以当SIP同时工作时语音会混乱。所以需要设计一个方式,实现SIP和PTT之间的同步互斥。
2023-03-21 17:39:40
360
原创 【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装
【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装
2022-07-23 15:58:48
16883
5
转载 【STM32开发环境搭建】 - keil的安装和固件库包导入
【STM32开发环境搭建】 - keil的安装和固件库包导入 软件包工具有:keil5安装包MDK-523 、工具KEIL_Lic、stm32f103XX固件库包
2022-07-23 15:38:20
6902
3
原创 使用select实现sleep函数的功能
一、sleep和select到底哪个好近期在阅读公司源码过程中发现了用select实现的sleep函数,经过思索和查阅相关资料,有了一定的了解,1、首先两者都可以实现延时的效果,但是sleep延时的时间精确度上不高,因为设计CPU的调度算法、线程进程优先级,如果说对于时间上没有精确的要求,感觉sleep要笔记方便,就一行代码省事,无伤大雅。2、也有人说sleep浪费CPU,使程序阻塞,如果说计算机资源本身就很紧缺,考虑系统的运行的效率、甚至网络传输速度,最好采用select。可以查看这个人的博客,相对
2022-01-27 13:49:04
2744
原创 libcurl获取sip号源码
相关概念参考博文https://blog.youkuaiyun.com/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
247
原创 使用 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
6267
原创 在线系统升级功能(四)—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
733
原创 在线系统升级功能(三)—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
825
原创 在线系统升级功能(二)—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
3322
原创 在线系统升级功能(一)—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
2258
原创 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
905
原创 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
1335
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
1980
原创 Lora模块调试记录
一、Lora模块调试启动过程调试1、Lora主程序启动这个报错主要是GPS模块使用了另外一路的spi,在检查spi的模式、速率等等时候报错。目前没有GPS模块所以不影响正常运行情况下的报错信息忽略不用管,卡在这个位置的代码可以直接注释掉,继续往后执行:2、如上报错是I2C设备打开失败,读取的是一个温度值,目前没有这个设备,报错忽略继续往下执行即可,由于报错直接退出所以注释报错这句代码3、接收到到了前导码,但是rxpk上行数据 txpk下行数据都没有收到,直接退出程序注释掉退出位置的代码
2022-01-26 16:19:00
1486
原创 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
1844
原创 AM335X spi驱动移植(二)-驱动测试
原理图分析AM335主控板SPI接口分析,我这个开发板有两通道spi,而我选择了spi0,这是一排扩展IO
2022-01-26 15:55:00
1336
原创 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
2610
原创 buildroot 构建文件系统配置过程
文件系统构建方式自己使用过的构建系统方式主要有busybox、yocto、buildroot三种吧,openwrt也可以,目前还没有使用过,公司另个一mesh项目中使用了这种方式。刚学习嵌入式的时候当然是用busybox构建系统了,这样搭建一个最简的文件系统,但是实际开发工程中可能要移植很多东西,比如项目就要求后续要支持python开发环境,而后边的几种可以通过make menuconfig的方式选配比较适合在框架基础上添加很多软件功能。大概了解了一下yocto工具,常被车载IC行业选中,一般厂商提供
2021-08-29 19:36:20
1148
原创 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
610
原创 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
398
原创 AM335交叉编译环境搭建
概述近期公司准备推出一款lora网关产品,采用了两套产品并行开发,交给我这边的是一块盈鹏飞的com335x(也就是主控为AM335)的验证板,还有芯域矩阵的sx1302的lora模块,lora终端。由于公司目前人员紧缺,从功能验证到主要功能实现全在我这边了,不过领导那边有现成的web端解决方案,基本上我这边功能完成以后项目雏形都具备,后边就是立项推进产品研发了。特此大体记录一下自己的工作,陆续更新……COM335开发板简介上班第一天就拿到了这么一块板子如下图,和相关资料(没有pdf格式的pcb原理图和
2021-08-28 16:51:46
600
原创 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
261
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
494
原创 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
698
原创 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
986
原创 基于DCT系数关系的图像水印算法
1、DCT域的图像水印嵌入与提取在信号的频域(变换域)中隐藏信息要比在时域中嵌入信息具有更好的鲁棒性。一副图像经过时域到频域的变换后,可将待隐藏信息藏入图像的的显著区域,这种方法比LSB以及其他一些时域水印算法更具抗攻击能力,而且还保持了对人类感官的不可察觉性。常用的变换域方法有离散余弦变换(DCT)、离散小波变换(DWT)和离散傅立叶变换(DFT)等 。介绍一种提取秘密信息的时候不需要原始图像的盲水印法,算法的思想是利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。2、原理分析载体图像分为8×
2020-12-24 10:53:29
4149
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
423
原创 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
450
原创 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
227
原创 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
10837
4
STM32F103C8T6+温湿度DHT11+0.9寸OLCD+MQ-2烟雾传感器器+蜂鸣器
2022-07-23
STM32F103C8T6通过串口读取MQ-2烟雾传感器数据,可通过串口助手实时打印数据
2022-07-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人