![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式linux学习
Coder_BCM
深漂程序猿,从事嵌入式linux开发。
展开
-
云服务器无法ping通的解决方法
之前一直以为 ping 使用的是某一个特定的端口, 今天仔细看了一下 ping的 一些细节 才发现了 原来ping 并不需要指定端口!在服务器上还可以使用 tcpdump 来 监控 来自外部的 ping 请求。然后 服务器 上面还可以使用 traceroute 去分析 数据的流向。原因是 服务器提供商的 防火墙上面没有打开icmp 的入站许可。比如 besttrace 可以分析 整个的ping的过程的链路。解决方法就是在网络的 安全组那里 将对应的许可打开。然后还发现了一些好用的工具。原创 2023-02-26 16:52:33 · 922 阅读 · 0 评论 -
嵌入式linux学习笔记-- 记录解决stdout 延迟的问题
公司某产品 需要对软件的运行日志进行记录,目前的方案使用的是 linux的匿名管道进行数据的转发,将业务进程的print的信息发送给一个专门的日志处理进程 ,但是遇到了 日志延迟非常高的问题 经查是因为 stdout 的缓冲机制导致的 默认情况下的 输出形式就是行缓冲 但是切换为数据流输出之后系统自动将前面的进程的输出转换为 全缓冲 ,所以需要主动的切换前一个进程的缓冲类型为行缓冲!主要就是介绍了 缓冲三种类型 全缓冲 行缓冲以及不缓冲, 我们的应用场景中应该使用行缓冲!原创 2022-12-21 00:27:53 · 253 阅读 · 0 评论 -
嵌入式linux学习--lua的安全调用xpcall 理解以及简单测试
lua的安全调用 xpcall 的理解以及简答的测试demo原创 2022-12-18 15:11:44 · 341 阅读 · 0 评论 -
嵌入式linux学习笔记--驱动-(1)基础知识整理-2022-12-18
驱动基础知识整理原创 2022-12-18 14:46:05 · 454 阅读 · 0 评论 -
嵌入式学习笔记--- c++结构体的内存按bit存取的实现
今天拜读公司大佬写的代码 发现了 c++ 的结构体以及内存分布的一些实现细节,代码调整完demo 大概如下:(代码中的细节都删掉了,变量名全部换了 原本每一个bit 都带有自己的意义)后续对于bit 的访问 就可以直接按照上述的形式进行了,这样可以很方便的就操作到bit , 对于一些内存敏感的应用 会很方便,例如 modbus 直接修改某一个输入寄存器的bit。原创 2022-09-12 16:19:10 · 858 阅读 · 0 评论 -
嵌入式linux学习笔记---tar多核压缩
这里使用了一些 tar的可选参数 就是制定压缩的程序,然后原生的tar 不支持多核压缩,通过使用上述的 参数 可以多核并行进行压缩 我这边看到的是使用了 pzip。我这边实现的大致的思路就: 代码工程里面直接内置一个pzip 然后打包的时候直接运行这个pzip。记录一下之前看到的一个多核文件压缩的操作。其他的内容可以参考一下其他的大佬的文章。原创 2022-09-12 16:00:10 · 884 阅读 · 0 评论 -
redis 学习笔记(1)-- 存储自定义的数据类型
因为项目需要,最近在看redis 的相关知识,今天验证了使用Redis存储自定义的类型的方案,简单整理一下分享出来代码整理好之后会上传到以下位置 给大家参考直接上代码使用上述的代码需要预先搭建好 hiredis 环境,也可以去参考编译方法如下:...原创 2022-08-07 17:22:55 · 454 阅读 · 0 评论 -
嵌入式linux开发笔记--- 记录一次 lua动态库异常
调试 lua的 动态库出现异常了,使用 lua_tonumber 转换出来的结果一直是 0经过定位 最终发现 lua 解释器和 我链接的静态库版本不一致原创 2022-07-03 11:48:52 · 254 阅读 · 0 评论 -
嵌入式linux学习笔记---交叉编译 redis 以及redis的简单使用
因为 想实现 lua 变量的掉电保持功能所以需要 交叉编译一个 redis 的数据库编译过程如下:ps: github 访问使用了加速的方案! 如果速度较慢可以用国内的其他源。ps2: 工具链 使用了韦东山老师的工具链,实际的开发中使用的其他工具链。 但是都能用 差距不是很大。测试工程的路径如下:将 src 下生成的可执行文件 使用filezilla 传输到 嵌入式的设备中执行 效果如下:...原创 2022-07-02 18:12:57 · 949 阅读 · 0 评论 -
嵌入式linux学习笔记-- c++ 的 操作符重载
复习了一下c++ 的操作符重载以及 模板,随便写了一个demo 记录一下。#include <iostream>#define LOG(str) {printf("this is %s:%d \t%s\n",__FUNCTION__,__LINE__,str);}class MyOptr final{private: uint16_t *m_ptr;public: MyOptr(); void init(uint16_t *ptr); MyOptr(原创 2022-05-08 23:16:43 · 594 阅读 · 0 评论 -
嵌入式c++学习笔记-- std:: function std::bind的一种使用方法
#include <stdio.h>#include <functional>class test{ public: void test1(void){printf("[%s] enter ...\n",__FUNCTION__);}; void test2(void){printf("[%s] enter ...\n",__FUNCTION__);}; void test3(void){printf("[%s] enter ...\n",__原创 2022-04-10 21:30:46 · 1140 阅读 · 0 评论 -
嵌入式linux学习笔记--linux的消息队列的坑
关于消息队列的一些总结:1. msgsnd的 mtype 不能为0 2. msgsnd 和 msgrcv 的 size 是不包含前面的 mtype的size 的大小。3. 使用消息队列的时候需要注意 处理残留的数据,如果进程因为一些原因 导致一些数据没被读走,那么这些数据会被留在队列里面!!!...原创 2022-04-10 17:31:08 · 538 阅读 · 0 评论 -
嵌入式linux学习笔记--- 使用文件锁来判断 进程是否活动
最近项目中 需要在一个进程中监控另外的一个进程 所以使用了文件锁的方案去实现代码如下:#include <sys/file.h>#include <stdio.h>#include <errno.h>#include <pthread.h>#include <fcntl.h>#include <unistd.h>#define file_lock "/home/someone/file_lock"void file原创 2022-03-26 15:42:30 · 541 阅读 · 0 评论 -
嵌入式linux学习笔记--- typedef的 一种使用方法
迅速记录一下 ,今天看到代码里面的typedef 的用法,我居然看不懂, 记录一下相关的代码段 大致如下typedef char Temp1[12];typedef char Temp2[123];typedef struct { // ....... Temp1 t1; // char [12] Temp2 t2; // char [123] // .......} someType;...原创 2022-03-08 21:49:53 · 666 阅读 · 0 评论 -
嵌入式linux学习笔记--gitlab学习笔记-gitlab-runnner简单的使用介绍
最近在搞gitlab 的环境以及 配套的自动化相关的一些尝试,记录一下。为了进行最近的实验,我特意开了一台虚拟机,使用的是dell R720XD 服务器配合 exsi 虚拟化了一台 ubuntu 18.04 配置如下0. 安装 gitlab服务器的安装部分网上很多教程 就不去班门弄斧了,链接如下:https://www.cnblogs.com/hgzero/p/14088215.html1. 简单的登录测试一下服务器从gitee 拉了一个项目做测试,随便挑了一个然后使用 将工程克隆岛 新原创 2022-03-07 00:23:10 · 3321 阅读 · 0 评论 -
嵌入式linux学习笔记-- 对于动态库的一些操作 dlopen
最近公司重构代码,看到了公司的一位经验丰富的工程师的一些C++ 操作 属实有被秀到,估计光看他写的代码都够我写很多总结了。 根据他写的代码以及公司未来的代码的一些规划 我也总结一些无关痛痒的知识吧。我们的新一代的代码架构将会去做到能实时的更换模块(就是c 编译出来的动态库 能动态的去加载! 目前的思路就是使用dlopen 以及dlclose的操作去动态的加载库文件) 之前一直没想到动态库的加载还可以这么的简单,高效。下面的一些内容从大佬们的博客直接拼凑过来的 既然别人已经总结了一次 我就不去班门原创 2021-12-26 22:15:00 · 2272 阅读 · 0 评论 -
linux网络编程笔记--inet-ntoa() 函数的返回值问题以及网络地址有效性的判断
今天学习了唐佐林老师的网络课程,记录一下发现的收获。1. inet_ntoachar *inet_ntoa(struct in_addr in); // 这个函数返回的指针是一块固定的空间, 使用的时候需要注意防止覆盖demo :#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdi原创 2021-11-27 14:29:51 · 4480 阅读 · 0 评论 -
嵌入式linux学习笔记--- 记录几种 C++ 传递可变参数的方法
#include <iostream>#include <cstdio>#include <stdarg.h>template<typename... Args>void log(Args&&... args){ printf(std::forward<Args>(args)...);}#define macro_printf(...) printf(__VA_ARGS__)void my_printf(co原创 2021-11-14 21:43:26 · 1840 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux设备一个网卡配置多个ip
简单记录一下今天学到的知识。 如何给一个网卡配置多个ip#ifconfig eth0 192.168.6.99 netmask 255.255.255.0 up#ifconfig eth0:0 192.168.6.100 netmask 255.255.255.0 up#ifconfig eth0:1 173.173.173.173 netmask 255.255.255.0 up#ifconfig eth0:2 119.110.120.1 netmask 255.255.255.0 up注意原创 2021-11-05 00:39:09 · 813 阅读 · 0 评论 -
嵌入式linux学习笔记--控制台的数据重定向 以及 进程打印 数据的重定向
记录一下今天的收获,项目上的一个需求是将嵌入式平台内的所有的打印信息输出到一个统一的地方,方便管理,为了实现这种需求 我一共尝试了几种方案,记录一下。1 . 需求1 嵌入式设备的串口打印信息转移到另一个控制台这种需求是因为产品的串口默认是不引出的,平时对产品进行调试的时候免不了需要去查看串口信息,那么 我们自然就希望将原本的串口控制台的输出信息转移到当前的通用ssh 登录的控制台。相关的代码的实现如下:#include <stdio.h>#include <stdlib.h>原创 2021-11-04 00:54:32 · 1077 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux 开机总时间记录的一种方案
产品的一个功能就是在某一个界面上显示产品的总开机时间,之前一直担心因为频繁写一个块导致的EMMC 写坏,今天放下了这个思想的负担 重新尝试简单但是方便的,定时更新写入的逻辑,嗯 真香,真简单!!!! 时间计算的精度可能不是很高 还会出现丢失一些时间,不过这个应该也是无关紧要的,这个数据主要是给客户看 产品已经运行了多久了,大概评估寿命的? 不是很清楚具体这个参数的意义。直接上代码:// uptime.h#ifndef _UP_TIME_H_#define _UP_TIME_H_#includ原创 2021-10-24 16:41:59 · 1541 阅读 · 0 评论 -
嵌入式linux学习笔记---TCP立即发出 以及 TCP的keep alive
事情的起因是公司的产品的某一个功能上需要实现的功能不能满足,所以就有了本次的探索。需求: 产品在某一个端口上 定时的向外发送1440 字节的数据包,该数据包包含了产品当前的各种状态。需求2 : 产品本身绑定一个本地的端口 接收来自外部的字符串指令,并且需要对外部传入的字符串指令进行处理。1. TCP 立即发出这部分使用的是 TCP_NODELAY 这个标志去实现的。在创建完端口之后 使用以下的api 为端口设置不缓存的属性,可以实现数据的立即发出! int flag = 1; s原创 2021-10-23 15:59:34 · 2847 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux下inotify的使用(转载)
原文地址:http://www.cnblogs.com/jimmychange/p/3498862.html有时候我们需要检测某个目录下文件或者子目录的改动状况,如添加、删除、以及更新等,Linux系统上提供了inotify来完成这个功能。inotify是在版本2.6.13的内核中首次出现,现在的发行本应该都包含这个系统调用了。下面的描述中的文件如无特别说明包括文件以及目录使用inotify的第一步就是调用inotify_init()创建一个inotify实例,该函数返回一个文件描述符。这个文件描述符转载 2021-10-22 00:31:02 · 2578 阅读 · 0 评论 -
串口转以太网项目开发(1)-- 修改默认的设备树文件
本次项目的开发想要去实现一个双路的串口转以太网的功能,实验的平台是 野火的 imx.6ull pro 。 使用的sdk 是韦东山老师提供的sdk ,系统使用buildroot 编译生成。需要修改的是这个文件arch/arm/boot/dts/imx6ull-14x14-ebf.dts仿照串口2的配置 修改了串口三的配置 pinctrl_uart3: uart3grp { fsl,pins = < MX6UL_PAD_UART3_TX_DATA__UART3_DTE_RX原创 2021-10-21 00:26:10 · 321 阅读 · 0 评论 -
嵌入式linux学习笔记-- 更换ubuntu服务器的vi
sudo apt-get remove vim-commonsudo apt-get install vim原创 2021-10-13 23:54:58 · 156 阅读 · 0 评论 -
嵌入式linux学习笔记-- 设置线程名称
// This define is from Linux's <sys/prctl.h> and is most likely very// Linux specific... Feel free to add support for other platforms// that has a feature to give a thread specific name / tag.static inline voidink_set_thread_name(const char *name原创 2021-10-03 18:58:50 · 256 阅读 · 0 评论 -
嵌入式linux学习笔记-- 解决 Broken pipe
Thread 1 "logServer" received signal SIGPIPE, Broken pipe.0x00007ffff7bc5a9e in __libc_send (fd=5, buf=0x5555555b2918, len=17, flags=0) at ../sysdeps/unix/sysv/linux/send.c:2828 ../sysdeps/unix/sysv/linux/send.c: No such file or directory.开发中遇到了如原创 2021-10-03 00:14:23 · 735 阅读 · 0 评论 -
嵌入式linux 学习笔记 --c++ 根据函数名称调用 函数的几种方法 map 查表
1. 需求的来源开发中 对外提供的用户接口会接收外部传递进来的函数名称以及参数,程序根据名称调用对应的函数。2. 实现的方案方案1 :if 名称 == 函数名 执行 xxx else if 名称 == 函数名 执行 xxx else if .......方案2 : 使用c++ 的类静态函数结合 map 实现方案3 : map + 结构体的id 实现3. 方案一#include <iostream>#include <cstdio>class functionCall原创 2021-09-20 01:04:10 · 807 阅读 · 0 评论 -
嵌入式linux开发笔记--给一个进程发送信号
文章引自 https://www.cnblogs.com/52php/p/5813867.html#include <signal.h>#include <stdio.h>#include <unistd.h> void ouch(int sig){ printf("\nOUCH! - I got signal %d\n", sig); // 恢复终端中断信号SIGINT的默认行为 (void) signal(SIGIN.转载 2021-09-17 00:00:19 · 307 阅读 · 0 评论 -
2021-09-13嵌入式学习笔记--基于C++的环形缓冲区demo
最近学习了韦东山老师的RTOS训练营相关的知识后想自己实现一下环形缓冲区,具体的实现如下:注意: 缓冲区的大小要比实际的小一个! 我也是查了半天才知道的! 代码中对于未使用的空间写入了 -1 主要是方便查看,如果实际的应用中可以去掉 这一步 降低资源开销// circleBuffer.h#ifndef _CIRCLE_BUFFER_H_#define _CIRCLE_BUFFER_H_#include <stdio.h>#include <cstdio>#in原创 2021-09-16 00:14:07 · 434 阅读 · 0 评论 -
linux学习笔记-- linux的 shell和linux C 程序 获取命令行参数和环境变量
常用的linux指令基本都支持命令行参数 例如 :ls -l rm -r rm -fcp -r 那么 这些参数都是如何去被应用程序获取的呢? 学习记录一下1. shell 脚本1.1 shell 脚本获得传入的参数shell 脚本部分的数据处理是分为 传入和解析对于参数的传入 一个简单的例子就是菜鸟教程中的例子 :https://www.runoob.com/linux/linux-shell-passing-arguments.html#!/bin/bash# auth原创 2021-08-08 23:20:10 · 737 阅读 · 0 评论 -
2021-07-23--嵌入式linux设备的SFTP传输文件慢的原因
公司产品的升级包使用的是SFTP 将升级包传输到服务器上 然后进行更新的,但是传输的过程中经常就发现传输的速度慢的问题,(产品的SFTP 传输速度大约是2Mb/s )猜测中的原因是这几个SFTP 本身的原因,文件的传输需要在数据的接收端进行解密会占用大量的CPU资源,而嵌入式linux的CPU 本身就不是很强劲,主频不高而且SFTP 本身不支持多核。(错误,后续着重讲)带宽问题,设备本身的对外网卡是百兆的,而且是使用的USB进行了拓展。带宽上可能存在瓶颈。(后来经过证实 瓶颈不在这里!)磁盘问题,原创 2021-07-23 22:58:33 · 3654 阅读 · 0 评论 -
嵌入式linux学习笔记-- 获取linux的网卡的信息
最近整理了一下 关于linux 使用C/C++ 获得 网卡信息的方法#include <sys/ioctl.h>#include <net/if.h>#include <unistd.h>#include <netinet/in.h>#include <string.h>#include <stdio.h>#include <stdbool.h>typedef struct tag_network{原创 2021-06-27 22:04:06 · 525 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux下的串口应用开发--- 提取 libmodbus的串口操作
如题,本次以libmodbus的串口实现为基础 分析一下linux下的串口逻辑libmodbus的底层代码实现了linux下的串口数据的收发,准备分析一下具体的实现 然后将其中的精髓提取出来,整理成笔记。1 CMakeLists.txtproject(serial CXX)set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)add_executable(app原创 2021-06-26 23:54:53 · 593 阅读 · 1 评论 -
嵌入式linux学习笔记--linux下基于imx6ullpro 的 CP2102 /CH340 驱动 以及简单的测试
今天再次编译了linux 的内核,想起来之前一直没实现的嵌入式linux 的串口驱动,故想实验一下。本文章会分别介绍CP2102 以及CH340两者的驱动 以及他们的简单的测试,后续可能会更新一个 使用串口驱动的demo。 实验平台是韦东山老师的imx6ullpro开发板,外接的模块就是cp2102 和ch340。CP2102 和CH340 其实是不太一样的驱动,最直观的表现就是 CP2102 的价格要贵,然后据说稳定性能好不少。1. CP2102 linux 下的驱动添加CP2102 的驱动已经集原创 2021-06-19 23:52:34 · 7011 阅读 · 3 评论 -
嵌入式linux学习笔记--linux下lcd 应用的代码分析
今天拿出韦东山老师的板子看了一下lcd 相关的知识。代码的分析都在注释里面了。#include <sys/mman.h> // memory management.mmap 函数需要的将文件映射到内存#include <unistd.h> // 标准的方法usleep需要#include <linux/fb.h> // frame buffer 需要的文件#include <fcntl.h> // 提供了文件读写的标准方法#原创 2021-06-11 22:32:38 · 435 阅读 · 1 评论 -
嵌入式linux学习--rapidjson使用笔记 writer范例
今天开发过程中遇到了一个需求就是说将我的配置信息 从 一个结构体转换为一个json,然后按照之前的想法一般就是 解析一个 “{}” 的document 然后一直的addmember 。但是看到了一种writer 的东西,所以记录一下。在我看来 writer 其实更加的适合于生成一个json的字符串。它 更像是我们书写一个json的内容 而不是将这些变量组织起来 去读取 。自己写的代码就不放了,放上官方的示例代码:#include "rapidjson/writer.h"#include原创 2021-05-28 21:45:29 · 893 阅读 · 0 评论 -
嵌入式Linux笔记--frp 配置问题以及将frpc 注册成一个服务
1 . token in login doesn’t match token from configuration2. login to server failed: EOF针对第一个 口令错误的问题,我这边实际遇到的是因为写的顺序不对实际的书写顺序应该是这样的server_addr = xxx.xxx.xxx.xxxserver_port = 7000tls_enable = truetoken =your_token # token 要放到这里!!!![ssh]type = t原创 2021-04-28 23:39:20 · 6036 阅读 · 3 评论 -
嵌入式linux学习笔记--spdlog自定义一个sink
最近看了spdlog 库的一些使用方法,记录一下自己写一个sink的过程。先介绍一下大致的背景,公司的产品需要调试工具,嵌入式linux 的产品按理说最简单的就是用 串口调试,但是产品没有留串口引出,所以这条路堵死。日志写文件也可以但是只能用于事后进行问题分析,不方便实时的观察设备的运行状态。基于这种情况,我们需要涉及一个日志的输出方法,可以使得当我们的调试器(tcp 接收 分析的一个集合工具)连接到机器的某一个端口的时候,机器会自动的将日志打印到连接上来的客户端,并且这个日志工具应该支持多个客户端连接。原创 2021-04-18 15:07:10 · 1410 阅读 · 0 评论 -
嵌入式linux学习笔记---开源库spdlog的使用笔记
今天整理代码,看到了公司的关于日志方面的代码,收获比较大,所以整理一下spdlog库的使用说明。https://github.com/gabime/spdlog.git本文主要是以下几个方面的整理,参考的主要依据就是 官方例程,位于github的example\example.cpp1. 日志等级的划分以及和日志等级相关的几个函数日志分成了以下的这几个等级,具体的等级就是其中的含义 ,最严重的的时间就是critical 级别 ,最不严重的是trace /*原创 2021-04-11 11:46:42 · 3129 阅读 · 0 评论