- 博客(44)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 在x86/amd64的机器上使用Docker运行arm64v8/ubuntu并安装ROS1
在 Docker 中,可以通过挂载主机目录到容器内的方式实现目录共享。这通常是通过 -v 或 --mount 选项来实现的。是因为 multiarch/qemu-user-static:register 镜像未找到。我们可以先拉取这个镜像,然后再运行命令来注册 QEMU。为了在 AMD64 主机上运行 ARM64 容器,你需要安装 QEMU 并注册 binfmt 支持。-v 选项用于挂载主机目录到容器内的目录。格式为:-v 主机目录:容器目录。这个是ubuntu的拉取指令,其他的也是类似。
2024-07-01 11:36:34 2456
原创 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 2690 1
原创 RK3588命令行(SSH)登录字符logo修改
如果需要静态motd消息,那么在/etc/目录下,新建或者修改配置文件motd,在其中定制你需要的登录后信息即可。文件记录了操作系统的名称和版本号,这些登录提示很明显的泄漏了系统信息,为了安全起见,建议将系统相关信息去除。,分别是用来控制debug串口登录显示和SSH登录显示的,后面的像Debian系发行版,对。就是SSH或者debug串口登录后显示的内容logo,直接修改即可;修改方式其实很容易就能找到,但是,其背后的运行逻辑,网上的资料较少。文件,系统登录后,显示的字符界面其实来自于。
2023-06-21 13:08:49 1256
原创 rk3588根文件系统制作和导出镜像img
在我们做过根文件系统精简以后,我们需要将目前精简过的根文件系统导出,制成镜像文件,方便生产烧录。
2023-06-07 15:34:14 3201 5
原创 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 6791 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 6577 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 3550
原创 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 3114 7
原创 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 4412
原创 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 4422 7
原创 C++引用的数组在模板中的巧妙运用
2.template会动态编译,自动推断a的大小,由于已经知道了数组的长度,因此该函数可以自动推断出字符串的长度。array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用。1.整个char数组不会作为指针,而是作为数组被引用 ,因而,sizeof可以获得整个数组的长度。可见,即使没有传入具体的大小,也可以利用模板的动态联编的特性,推断出传入的数组的具体大小;array首先和&结合,所以array是引用,引用的对象是数组。
2023-01-17 14:20:41 690
原创 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 3181 2
原创 C++11智能指针
在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_ptr 指针默认的释放规则是不支持释放数组的,只能自定义对应的释放规则,才能正确地释放申请的堆内存。//指定 default_delete 作为释放规则//自定义释放规则} //初始化智能指针,并自定义释放规则});
2023-01-05 13:24:48 1302
原创 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 1564
原创 我的开发配置
使用vscode连接的时候,会出现linux下的隐藏文件,例如.bashrc .cach等,或者一些其他的不需要的文件夹,可以使用文件排除的功能。设置搜索workbench.colorCustomizations,然后打开settings.json设置文件。左下角设置-搜索file.exclude 添加排除规则,例如排除.开头的文件,可以使用**/.**即可。一分钟内无操作自动关闭屏幕。主题:Dracula。
2022-09-13 21:58:31 465
原创 嵌入式常见的结构体函数指针注册、嵌套结构体初始化,rt_thread中的函数注册技巧
在一些嵌入式的单片机开发当中经常遇到一些结构体内嵌函数指针的用法;指针变量名)(形参列表);第一个括号一定不能少。“函数类型”说明函数的返回类型,由于“()”的优先级高于“”,所以指针变量名外的括号必不可少;
2022-09-02 19:26:23 1751
原创 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 1207
原创 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 2246
原创 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 511
原创 Jestson Nano自定义根文件系统创建(支持NVIDIA图形库的最小根文件系统)
前面两篇,我们通过裁剪内核,构造了一个自定义内核,但是官方的根文件系统太大,有13G之多,而nano的emmc版本带的flash只有16gb,所以,根文件系统的裁剪势在必行。基于此,我们根据ubuntu基本的根文件创建自己的自定义文件系统。整个过程我参考官网论坛的一些资料,做成了两个脚本,直接放在一个目录里面运行即可在当前目录下的build目录下生成根文件系统,将build目录下的所有文件复制到/Linux_for_Tegra/rootfs目录下,运行以下指令:这一步是用来安装NVIDIA的图形加速库
2022-06-17 15:20:07 686
原创 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 1300
原创 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 12525
原创 制作jetson nano最基本的根文件系统、服务器挂载NFS文件系统
官网有示例的文件系统,根文件系统烧录请参考上一篇;但是内容过于臃肿,并不适合嵌入式linux,所以我们需要自己制作一个简单的根文件系统,开发阶段,可以先使用一个最简单的根文件系统,外挂一个NFS文件系统,方便开发;一、Jestson Nano自定义根文件系统制作...
2022-05-31 11:58:36 542 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 8274
原创 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 1687
原创 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 2925
原创 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 6291 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 433
原创 嵌入式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 2216 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 883
原创 C++中虚函数和纯虚函数的区别与总结
C++中虚函数和纯虚函数的区别与总结首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:class A { public: virtual void foo() { cout<<"A::f
2021-09-08 10:47:24 165
原创 构造函数初始化
转载: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 977
原创 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 2709
原创 乐鑫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 9902 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 564
虚拟串口驱动,ch34系列驱动
2024-07-05
Jetson orin AGX 蓝牙驱动,BLE驱动、Bluetooth驱动
2024-07-05
rk3588打了rt linux补丁的内核 rk3588实时内核补丁 rk3588 RT-LINUX
2024-03-25
http_post.7z
2021-11-01
如何将一个最简单的文件系统编译进内核
2022-06-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人