自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 RK3588 PWM调试记录---linux pwm子系统驱动框架

RK3588一共有4组PWM,每组有4个通道,共可以产生4*4=16路PWM波形;PWM0 开始地址:0xfd8b0000PWM1 开始地址:0xfebd0000PWM2 开始地址:0xfebe0000PWM3 开始地址:0xfebf0000即每组PWM的地址空间是(0xfd8b0000-0xfebd0000=0x1000)64KB(0x1000/1024)RK3588的PWM支持捕获、连续和单次触发三种模式。

2023-07-05 16:47:39 1707 1

原创 RK3588命令行(SSH)登录字符logo修改

如果需要静态motd消息,那么在/etc/目录下,新建或者修改配置文件motd,在其中定制你需要的登录后信息即可。文件记录了操作系统的名称和版本号,这些登录提示很明显的泄漏了系统信息,为了安全起见,建议将系统相关信息去除。,分别是用来控制debug串口登录显示和SSH登录显示的,后面的像Debian系发行版,对。就是SSH或者debug串口登录后显示的内容logo,直接修改即可;修改方式其实很容易就能找到,但是,其背后的运行逻辑,网上的资料较少。文件,系统登录后,显示的字符界面其实来自于。

2023-06-21 13:08:49 914

原创 rk3588根文件系统制作和导出镜像img

在我们做过根文件系统精简以后,我们需要将目前精简过的根文件系统导出,制成镜像文件,方便生产烧录。

2023-06-07 15:34:14 2209 1

原创 RK3588网络调试记录---linux双网口以及WIF

netplan只是作为一个生成配置文件的工具,他通读取/etc/netplan/*.yaml文件,在系统启动早期的时候,生成位于/run/systemd/network的配置文件,例如/etc/netplan/01-netcfg.yaml将会生成了run/systemd/network/10-netplan-eno1.network文件,然后将控制权交给特定的渲染器,所以真正对网络进行管理的并不是netplan,而是。所以在**rk3588上配置ip的时候,尽量不要使用ifconfig或者ip的指令。

2023-05-24 16:47:47 4381 6

原创 RK3588 设备树pinctrl gpio子系统解析,解决GPIO无法正确拉高拉低的问题,RK3588设备树详解

firefly的官方说明文档其中,bank是所属的组,Core-3588J 有 5 组 GPIO bank:GPIO0-GPIO4,每组又以 A0-A7, B0-B7, C0-C7, D0-D7 作为编号区分。首先,对于firefly的rk3588j的开发板,其设备树有几个比较重要的文件,分别是;;;;这个几个文件将其外围设备基本描述完全了,另外还有一些可能位于内,

2023-05-12 15:38:17 5039 3

原创 关于GD32替换STM32(pin to pin)搭载rt-thread操作系统,需要注意的问题总结

该函数位于启动文件中的Reset_Handler中(具体实现在GD32位于system_gd32f4xx.c,STM32位于system_stm32f4xx.c中,几乎所有的文件,你只要把gd换成st就能找到对应的文件),gd的叫startup_gd32Fxxx.s,一般st的也是类似的名字,像startup_st32Fxxx.s,(其实就是兆芯抄的别人的。。)xxx是对应的芯片的具体型号,例如我用的gd32f450,和stm32f427的芯片,二者可以pin to pin互换。

2023-05-08 16:27:58 2913

原创 firefly开发板RK3588非默认外设使能(串口uart、IIC、adc等)设备树修改详细步骤

此文件中,rk已经将所有的io复用全部写好了,有些板子例如im6ull并没有全部写出来,还需要我们自己根据芯片手册,将io的复用写出来。即可完成设备树的编译,如果内核没有更改,只是改了设备树,编译速度会很快,kernel目录下生成的boot.img就是生成的内核+设备树的镜像,烧录进设备在目录/dev下即可看到ttyS3即uart3.如果我们自己的底板用到了串口3,那么此时就需要我们自己将串口3的声明加入到此设备树文件中(原开发板的串口3是用复用做音频的IIC)。此文件是关于io复用的设备树文件。

2023-02-23 11:21:56 2372 6

原创 RK3588 ssh Failed to start OpenBSD Secure Shell server 以及E: Sub-process /usr/bin/dpkg returned无法下载软件

上面的意思就是用户名sshd,用户组,权限组,登录时自动使用的bash等等。建立该目录,启动ssh服务,成功!启动ssh server。

2023-02-15 09:40:41 3398

原创 firefly开发板RK3588内核裁剪的详细步骤

将kernel目录下的boot.img和位于rk3588_repo_sdk_v1.0.2a/rockdev下的parameter.txt(是个软连接,需要下载真正的文件)文件下载到windows;此时会打开一个图形化界面,就是我们熟悉的内核裁剪界面了,修改后,保存到.config,即完成了内核裁剪;如果提示7z或者python不存在,直接安装一个就行了,安装方法自行搜索;将if的判断条件改成1,即不再判断config文件是不是发生了改变,我们需要做的就是修改build.sh脚本,的文件confi.c。

2023-02-07 17:27:10 3718 1

原创 C++模板的高级用法

模板的嵌套调用,并组合了函数指针数组模板,在一些复杂的应用场合能起到非常好的效果;

2023-01-17 15:45:07 318

原创 C++引用的数组在模板中的巧妙运用

2.template会动态编译,自动推断a的大小,由于已经知道了数组的长度,因此该函数可以自动推断出字符串的长度。array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用。1.整个char数组不会作为指针,而是作为数组被引用 ,因而,sizeof可以获得整个数组的长度。可见,即使没有传入具体的大小,也可以利用模板的动态联编的特性,推断出传入的数组的具体大小;array首先和&结合,所以array是引用,引用的对象是数组。

2023-01-17 14:20:41 627

原创 ubuntu20.04 service版本硬盘部分未挂载,实际容量不对。sda3部分未使用

会有mount: /: unknown filesystem type 'LVM2_member’的提示,其实就是因为部分被分成了逻辑卷,所以无法挂载,OK,可以看到,sda3一共有109g,其中一部分被分成了ubuntu–vg-ubuntu–lv,逻辑卷,54G。指令:lvextend -l +100%FREE /dev/mapper/ubuntu–vg-ubuntu–lv。并且被挂载到了根目录下“/”,但是sda3并没有被完全使用,109-54=55G,没有被挂载到任何目录下。此时如果使用挂载指令。

2023-01-05 23:10:41 2490 2

原创 C++11智能指针

在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_ptr 指针默认的释放规则是不支持释放数组的,只能自定义对应的释放规则,才能正确地释放申请的堆内存。//指定 default_delete 作为释放规则//自定义释放规则} //初始化智能指针,并自定义释放规则});

2023-01-05 13:24:48 915

原创 C/C++第三方库zeromq、log4cpp交叉编译、本地安装ubuntu18.04

1)ubuntu下命令不推荐这种方式,因为很可能安装的版本并不是最新的;2)自己编译安装(推荐)地址:https://github.com/zeromq/libzmq/releases/tag/v4.3.4目前最新的是4.3.4下载一个tar.gz格式的下载之后命令解压:①进入文件目录交叉编译的时候,如果没有将交叉编译工具加入到环境变量中,需要手动加一下,例如我的交叉编译工具目录为/opt/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-

2022-12-07 14:50:07 1335

原创 我的开发配置

使用vscode连接的时候,会出现linux下的隐藏文件,例如.bashrc .cach等,或者一些其他的不需要的文件夹,可以使用文件排除的功能。设置搜索workbench.colorCustomizations,然后打开settings.json设置文件。左下角设置-搜索file.exclude 添加排除规则,例如排除.开头的文件,可以使用**/.**即可。一分钟内无操作自动关闭屏幕。主题:Dracula。

2022-09-13 21:58:31 372

原创 嵌入式常见的结构体函数指针注册、嵌套结构体初始化,rt_thread中的函数注册技巧

在一些嵌入式的单片机开发当中经常遇到一些结构体内嵌函数指针的用法;指针变量名)(形参列表);第一个括号一定不能少。“函数类型”说明函数的返回类型,由于“()”的优先级高于“”,所以指针变量名外的括号必不可少;

2022-09-02 19:26:23 1496

原创 TI MCU(TM320F280049)RTOS SYS/BIOS操作系统使用

与STM32不同的是,SYS/BIOS在配置一些线程、事件的时候,可以通过图形化界面配置。在导入例程以后,会自动生成一个cfg格式的文件,右键->openwith->XCONF,图形化界面中,右侧的outline中选择一些配置如cloclk/event/Queue/Task/Timer/Hwi/Swi等各种配置,以Hwi为例,在第二步,我们配置了硬中断,SYS/BIOS会在工程中,如果中断发生,找到名字为sysbios_HWI_spiA_RXISR()函数,因此我们需要实现该函数,并在中断中处理数据;...

2022-08-02 11:52:01 977

原创 基于opencv实现桌面图标识别

numy和opencv。直接使用pip安装即可;直接贴代码:然后,依据此可以改成的自动化操作。

2022-06-30 11:31:56 1975

原创 TMS320F280049芯片实时操作系统(RTOS)例程工程(SYS/BIOS)

关于TMS320F280049的实时操作系统,TI官方的是叫做SYS/BIOS,是TI-ROTS的一种,支持C2000,以及错误提示:error #10265: no valid memory range available for placement of ".text:ti_catalog_c2800_initF2837x_flashfuncs的处理。首先要下载一个IDEA开发工具。官网的下载地址为:CCS下载地址这个是11.2.0的版本下载完以后直接安装,我的安装位置是E:\ti\下载地址

2022-06-27 12:54:18 1945

原创 Jestson Nano 从tftp服务器下载更新kernel和dtb

我们做内核裁剪的时候可能会频繁的下载内核,但是jetson nano的下载工具太慢,所以我们可以将内核放到tftp服务器,通过uboot更新内核,就会十分方便。首先搭建一个tftp服务器,步骤参考tftp服务器搭建,不同的是,安装Nvidia论坛的说法,将tftp服务器的目录建立在/var/lib/tftpboot/目录,根目录下是否可行我没有做测试,有兴趣的可以试下。在tftpboot目录下新建目录pxelinux.cfg,新建文件01-48-b0-2d-3d-2d-8c,注意这个文件名字会根据板子不

2022-06-21 11:06:16 431

原创 Jestson Nano自定义根文件系统创建(支持NVIDIA图形库的最小根文件系统)

前面两篇,我们通过裁剪内核,构造了一个自定义内核,但是官方的根文件系统太大,有13G之多,而nano的emmc版本带的flash只有16gb,所以,根文件系统的裁剪势在必行。基于此,我们根据ubuntu基本的根文件创建自己的自定义文件系统。整个过程我参考官网论坛的一些资料,做成了两个脚本,直接放在一个目录里面运行即可在当前目录下的build目录下生成根文件系统,将build目录下的所有文件复制到/Linux_for_Tegra/rootfs目录下,运行以下指令:这一步是用来安装NVIDIA的图形加速库

2022-06-17 15:20:07 547

原创 Jetson Nano 自定义启动图标kernel Logo cboot logo

Jetson Nano的启动图标分为两个部分,一个图标位于cboot内,注意不是uboot logo;一个在内核启动后文件系统内。1、 进入到工具目录2、 编辑config编辑config_file.example文件,并重命名为config_file,将里面的内容:nvidia480.bmp nvidia 480;nvidia720.bmp nvidia 720;nvidia1080.bmp nvidia 1080修改成自己的文件名字,例如12.bmp nvidia 480;12.bm

2022-06-15 11:49:39 1099

原创 ubuntu server 20.04 配置无线wifi网络并设置固定ip公司连接家里的linux服务器配置

addresses: [192.168.68.102/24] :固定ip:192.168.68.102,24:子网掩码255.255.255.0。这里的外部端口我们可以选择设置为任意一个,最好不要设置为22,容易被被人攻击,内部端口就选择22。前面如果安装了wpa的话,就应该有这个文件。然后进入路由器的高级功能,然后端口转发。这时候有可能网络还是不行,看第四步;例如我的网卡名字是wlp2s0。wlp2s0就是网卡名字;首先你需要有个公网地址。

2022-06-03 21:27:23 11234

原创 unbuntu(debian)下TFTP服务器搭建及测试

TFTP服务器搭建及测试,常用的tftp命令

2022-06-02 10:33:43 555

原创 制作jetson nano最基本的根文件系统、服务器挂载NFS文件系统

官网有示例的文件系统,根文件系统烧录请参考上一篇;但是内容过于臃肿,并不适合嵌入式linux,所以我们需要自己制作一个简单的根文件系统,开发阶段,可以先使用一个最简单的根文件系统,外挂一个NFS文件系统,方便开发;一、Jestson Nano自定义根文件系统制作...

2022-05-31 11:58:36 444 5

原创 Debian ping: www.baidu.com: Temporary failure in name resolution域名解析出错

可以通过ip连接ping通,但是通过域名ping就会提示DNS暂时解析失败尝试了各种解决办法一、resolv.conf这个文件在debian9的目录/etc/systemed/目录下但是按照网上的方法直接打开DNS解析或者添加nameserver并不能起作用!二、解决办法直接在/etc/目录下新建vi /etc/resolv.conf填上 你的dns,例如nameserver 144.144.144.144退出保存,再次尝试ping,成功!!!...

2022-05-17 17:26:59 6819

原创 linux用户创建及权限、用户组设置

用户创建和删除用户创建和删除都需要在root权限下操作1.创建用户命令:adduser按照提示输入密码输入命令:cat /etc/passwd查看用户id,组和权限等debian-user:x:1000:0:debian-user,,,:/home/debian-user:/bin/bash用户名debian-user,密码占位符x;用户id:10000;用户组:0;家目录:home;登录后运行的bash程序:/bin/bash更改组命令:usermod -g 1003 用户名

2022-05-17 10:17:56 1612

原创 so动态库生成、链接方法

1、动态库的编译下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:test.h,三个.c文件:t1.c、t2.c、t2.c,我们将这几个文件编译成一个动态库:libtest.so。//test.h:#include “stdio.h”void t1();void t2();void t3();//t1.c:#include “test.h”void t1(){printf(“t1…\n”);}//t2.c:#include “test.h”void t2(){pr

2022-05-13 11:35:36 2376

原创 ubuntu 下jetson nano编译内核、系统烧录、内核裁剪

一、内核编译jetson nano 的内核编译踩了不少坑,记录一下:步骤如下:1.下载交叉编译工具这里的网址来自官网,可以会更新,如果下载不了,需要去官网下载。/home$ wgethttp://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz2.解压工具可.

2022-05-12 14:58:33 5417 13

原创 Linux 常用命令

一、系统操作1.gz/tar解压缩 tar -zxvf 文件名 z 一般处理.gz文件 x 解压 c压缩 v 显示执行过程 f 指定备份文件2.xz 解压缩wwwaa xz -dk 文件名 d 解压.xz文件 k 保留原文件(如果不想保留,可以去掉k)3.查看环境变量 echo $PATH4.设置环境变量当前用户下:.bashrc中编写好以后,用source ./.bashrc5.删除文件/文件夹 rm 文...

2022-05-11 17:46:28 383

原创 嵌入式linux开发板USB功能测试 Sigmstar星辰科技SD222D

一、内核配置首先需要配置内核,进入kernel文件夹,执行指令make menuconfig进入图形化界面Devices Drivers—>[*]USB supprot---->[M]USB Gadget Support ---->[M] USB Gadget Drivers[M] Serial Gadget (with CDC ACM and CDC OBEX support)保存到.config文件,我用的是sigmarstar的222D板子,内核装载的时候,先默认保存

2022-02-17 16:00:04 2108 2

原创 STM32启动文件详解(startup_af32f403zx_hd.s)

Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;开辟栈的大小为 0X00000400(1KB),名字为 STACK;ALIGN=3,表示按照 2^3对齐,即 8 字节对齐。Stack_Mem SPACE Stack_Size __initial_sp ;表示栈的结束地址,即栈顶地址,栈是由高向低生长的。EQU类似define定义Stac

2021-09-15 16:07:01 776

原创 C++中虚函数和纯虚函数的区别与总结

C++中虚函数和纯虚函数的区别与总结首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:class A { public: virtual void foo() { cout<<"A::f

2021-09-08 10:47:24 129

原创 构造函数初始化

转载:https://blog.csdn.net/qq_16445683/article/details/485176391、构造函数初始化列表和构造函数体内赋值class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) /

2021-06-02 17:47:32 950

原创 md5 C源码-参考官方源码,依据https://github.com/ARMmbed/mbedtls/releases

做项目用到MD5的算法,网上找了一下,不是有bug就是压根无法用,故从官方源码拷贝下来;官方地址:https://github.com/ARMmbed/mbedtls/releases不过官方的源码包含很多其他的加密,需要从中找出需要的MD5;注意,下面的程序是计算32位的MD5,如果需要16位的MD5,只需要将算出来的结果从第9位到第24位截取出去,即是16位的MD5结果!C源文件:md5.c#include "md5.h"#include <string.h>#include

2021-04-19 17:45:45 2206

原创 乐鑫ESP32 https post请求

项目中遇到关于https的应用,例程中只有关于https的get,没有post,原以为只需要简单改动一下就能使用,但是实际调试过程中,发现不能用。 原例程是参照https_request_example_main.c文件中https getvoid app_main(void){ ESP_ERROR_CHECK( nvs_flash_init() ); ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_l

2021-04-09 16:02:22 9126 13

原创 UrlEncode C源码

int UrlEncode(const char *str, char *result, const int max_length){ int i; int j = 0; char ch; int strSize = strlen(str); if ((str == NULL) || (result == NULL) || (strSize <= 0) || (max_length <= 0)) { return 0;

2021-04-08 16:28:35 493

原创 字符数组和字符指针做形参(字符型指针)

一、字符数组做形参有时候我们需要通过调用一个函数实现对一个传入的数组进行赋值,从而改变其值。当字符数组本质是上也是指针。 void change(char p[]) { strcpy(p, "efgh"); //p[0] = 'e'; //p[1] = 'r'; }int main (int argc, const char * argv[]) { char buf[] = "abcd"; change(buf); printf(buf); return 0;}这个就是字

2021-04-06 13:40:03 4332 3

原创 char *p =new char[10];

char p =new char[10]意思申请一块10个char类型数组的内存,并将该块内存的首地址赋给定义的char类型的指针p;等价于char p;p=new char[10];此时对数组赋值的时候,可以使用两种用法,等同于数组名的用法:1.p[0]~p[9];直接赋值2.(p+0),(p+3),等。需要注意的是,一旦使用了第二种方式对p进行了操作,不可以再使用第一种方式赋值。例如p++;之后再p[6]=‘a’;等等赋值,此时的p其实对应的地址已经不是首地址了,所以p[6]=‘a’;

2020-07-23 17:45:46 1928

原创 整形指针做形参和实参一级指针和二级指针的传递关系(整形)

一、二级指针做形参,一级指针的地址做实参#include<stdio.h> void A(int** t) { int x = 3; printf("A:t: %x\n\n", t); printf("A:&t: %x\n\n", &t); printf("A:*t: %x\n\n", *t); printf("A:&(*t): %x\n\n", &(*t)); printf("A:**t: %x\n\n", **t); pr

2020-07-15 14:45:07 963

rk3588打了rt linux补丁的内核 rk3588实时内核补丁 rk3588 RT-LINUX

基于firefly SDK的rtlinux内核补丁,可以显著提升系统的实时性。使用方法可以参考对应的博客。

2024-03-25

RTL8188FU的linux驱动,可以重新编译

RTL8188FU的linux驱动,里面有完整的源码和对应的说明文档,已亲测可用!

2023-08-28

嵌入式知识领域,GD32F4系列芯片参考手册

GD32F4系列芯片参考手册,详细的描述了GD的芯片使用方法,寄存的操作等等

2023-05-08

嵌入式知识领域+STM32F4系列芯片,参考手册

详细描述了各个寄存器的配置

2023-05-08

http_post.7z

乐鑫esp32芯片例程修改,对于服务器的post请求,传输 json数据,已经实测可用,具体可参考博客https://blog.csdn.net/weixin_44244400/article/details/115551627

2021-11-01

ISO14443.7z

ISO14443-1,ISO14443-2,ISO14443-3,ISO14443-4,智能卡通信协议,包含全部,分为WORD版本和PDF版本,

2021-05-25

PBOC3.0资料.zip

中国金融集成电路(IC)卡规范 完整全套资料 关于银联卡等IC的规范类文件;进行非接NFC开发可能需要的资料

2020-08-14

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

TA关注的人

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