- 博客(262)
- 资源 (10)
- 收藏
- 关注

原创 我的Linux名片
面试官: “你好,先自我介绍一下吧。”程序猿:“你好,我是一名嵌入式Linux软件工程师,具有丰富的inux、嵌入式系统、Android相关的开发经验,擅长C/C++,熟练使用GNU/GCC、GDB、VIM等开发工具,这是我的名片!”面试官:“哇,我还是第一次见到这样别致的名片,酷!,把电路板做成名片,不错。它能跑起来吗?”程序猿:“别小看它,它不仅能跑,而且还是Linux系统,最新版本的内核哦,里面还集成了”...
2021-10-10 20:24:01
12997
10
原创 Ubuntu系统-core文件生成配置方式
Core文件(核心转储文件)是Linux和其他类Unix系统中一个非常重要的调试工具。当程序崩溃时,系统可以生成一个core文件,其中包含了程序崩溃时的内存状态、寄存器值、堆栈信息等详细内容。
2025-01-20 15:22:46
988
1
原创 解决Pynput不能在Ubuntu22.04上正常使用问题
pynput 是一个 Python 库,它提供了一套简单的接口来控制和监控输入设备,包括鼠标和键盘。Ubuntu 22.04默认使用的是Wayland,因此,想要正常使用pynput的话,需要切换到xOrg系统。按照如下步骤操作即可。因为pynput需要需要图形环境的支持,Ubuntu系统下,其对xOrg支持的很好,但是对Wayland支持的不好,如果输出是wayland,则表示当前使用的是Wayland。如果输出是x11,则表示使用的是Xorg。试了很多方法都不行,后来找到了问题的原因。
2024-09-04 11:06:59
720
原创 我的创作纪念日
1.虽然我的内容产量不高,但每次Blog都是来源自切身感受,与自己当前所做的事情密切相关的。未来,我会继续在Linux这篇热土深耕,记录成长中的点滴,与优快云共同成长。2. 对于如何平衡工作和写作,我认为,时间就像海绵里的水,挤挤总是有的。1.最有成就感的代码是一行bash脚本,功能是删掉压缩包解压后的文件。3.最精彩的一篇blog,我认为是。2.阅读量最高的一篇blog是。,总的阅读量接近10w。
2023-11-12 17:05:25
426
原创 Ubuntu22.04下安装Ros2-Humble
ROS2的Humble版本为TLS版本,维护日期截止到2027年(可以参考可以看到,其支持Linux/MacOS/Windows等多个系统,针对于Linux系统,对应的系统版本是(Ubuntu 22.04,Jammy),本文章记录ROS2 Humble Debian Packages安装包在Ubuntu 22.04下的安装过程,本文参考了,记录了过程中出现的问题。
2023-07-18 11:41:11
2967
原创 Ubuntu20.04升级到Ubuntu 22.04
升级完成后,重启系统reboot重启成功之后,查看系统的当前版本最新版本应该是20.04.6,如下图所示。
2023-07-17 17:11:02
9710
2
原创 Flash技术概述
Flash全称flash memory,也就是平时说的“闪存”。经常被用在嵌入式领域,比如手机、平台、电脑主板等等。绝大部分的U盘、SDCard、MMC卡、TF卡等移动存储设备也都是使用 Flash 作为存储介质Flash Memory主要可以分为NOR Flash、NAND Flash、eMMC、UFS几种类型。NOR flash支持片上执行,可以在上面直接运行代码,软件驱动比NAND简单,一般小容量的用NOR型,因为小容量NOR读取速度快。
2023-03-23 17:52:40
812
原创 搭建ESP32-Arduino开发环境(离线一键安装超级好用)
首先需要声明的是,如果按照来搭建开发环境的话,你可能会经历“ESP32-Arduino从搭建环境到到放弃”,因为这套开发环境的源码都是在Github上的,下载速度巨慢,可能需要几天,最后还不一定成功,所以,对于国内的朋友(能FanQiang的不在内:)),为了节省时间,最好还是选择离线安装比较好。,它提供的ESP32-Arduino离线安装包,按照教程可以实现ESP32-Arduino的一键安装,节省了很多的时间,超级好用。另外该网站提供了很多其他的工具的下载,值得推荐!!
2023-03-21 10:45:49
5146
原创 记录一次linux应用内存调试过程(续)
本文所描述的内存调试过程,主要是记录最近项目里面遇到的一个内存使用问题。过程大概是,测试软件稳定性时,发现系统内存随着时间的变化,会不断的增长,并且不会恢复。由于怀疑是,应用程序出现了内存泄漏,所以开启了针对于内存泄漏的分析、调试,过程中使用了程序功能模块隔离法、valgrind工具、编写单独程序测试(怀疑是mosquitto存在问题)等方法,最后发现没有内存泄漏的地方。
2023-03-09 16:15:13
2517
原创 Asan基本原理及试用
Asan是Google专门为C/C++开发的内存错误探测工具,作为标配集成到了GCC 4.8及之后的版本,可以探测大多数内存问题,作为C/C++程序猿深入内存管理各种问题的迫害,人生苦短,快用Asan
2023-03-09 13:59:59
6136
2
原创 记录一次linux应用内存调试过程
记录一次不成功的linux应用内存泄漏调试过程,虽然最终没有找到问题的根源,但是,文中提到的调试过程,还是很有借鉴意义的
2023-03-02 17:29:15
676
原创 同一网卡如何配置多个IP地址
而且,两种用途对IP地址的要求不同:当做调试口时,IP地址是固定的;当做业务传通信口时,IP地址是动态分配的。配置,就是给同一个网卡设置不同名字,比如,对于eth0,我们可以设置别名:eth0:0、eth0:1、eth0:2等。平时在做嵌入式linux设备开发时,不知道你是否遇到过这种需求:设备本身只有一个以太网口,但需求是,interfaces文件里,配置eth1为dhcp方式获取IP,eth1:0为静态IP。ifconfig可以配置任何网卡的ip地址,比如以太网、wifi、4G modem等。
2023-01-09 17:11:38
7744
原创 记一次坎坷的调试|Mosquitto通过TLS连接EMQ时阻塞的问题
最近两天在调试一个关于嵌入式Linux系统环境时,在系统开机之后,Mosquitto通过tls连接MQTT服务器(EMQ)时,创建MQTT连接总是阻塞的问题,现记录一下调试过程及解决问题的步骤。先说下开发调试环境:linux系统开机之后,出现shell登录提示符之后,调用mosquitto_connect和EMQ建立基于TLS的连接,mosquitto_connect调用之后阻塞,大约90秒,该函数调用才会返回,并且报错。之后,mosquitto会触发重连机制,再次连接EMQ服务器,连接成功。这时,如果重新
2022-08-01 21:48:55
2548
15
原创 嵌入式Linux开发|pinctrl子系统
众所周知,每颗SoC都会有很多的pin,除了具有特殊作用的,比如电源、地等pin,其他的pin一般都会**“身兼数职”**,比如,一个pin既可以当做GPIO来使用,也可以用作UART的TX,又或者是SPI的MOSI;而且,这些pin往往具有不同的能力,比如,上拉、下拉、不同的驱动能力等等。pinctrl子系统就是用来完成上述功能而设计的,pinctrl对下管理SoC所有的pin,对上提供配置SoC所有pin的接口。通常,再将linux系统移植到一款新SoC上时,其中一项工作,就是将所有pin注册到pinc
2022-06-08 22:41:13
1794
原创 面向C语言编程|数据类型“多态”
多态是面向对象编程中的一个概念,表示一个对象,比如一个接口,在不同的情况下,有不同的表现形式。比如,对于人这个对象,其都会有吃饭,这个接口。但是对于不同的”人,其吃饭所用的工具可能不尽相同,比如,中国人通常用筷子吃,外国人通常用的是刀叉,当然,对于中国小孩,也可能用的是勺子,😃 。C语言中基本数据类型,含义十分的明确,32bit系统来说,char就是一个字节,short就是两个字节,int和long也有类似的定义。那么,如何用C语言实现,同一个数据类型表达多个含义呢?我们其实可以使用union来实现,一定
2022-05-26 22:26:29
433
原创 嵌入式Linux开发|点亮那颗LED灯
做嵌入式开发离不开LED,小小的LED可以作为系统状态指示,为调试带来方便。下面是典型的LED控制电路:可以看到,通过控制AA27和AF12这两个引脚达到控制LED1和LED2这两个LED。如果是单片机开发,控制一颗LED的步骤比较的简单、直接,直接配置GPIO功能,输出高、底电平就可以控制LED了。相对来说,在Linux系统下,想要控制一颗LED,就比较费周折了,有下面几种方式:通过gpiolib子系统控制IO来驱动LED。通过sys子系统控制IO来驱动LED,即通过/sys/class/g
2022-05-15 16:50:26
2851
原创 USB的那点事 |一、 自我介绍
前世今生USB,全称Universal Serial Bus,即,通用串行总线,出生于1974年,双十一 >:,那个年代,PC时代降临,互联网时代还未到来,个人计算机江湖风起云涌,各种设备如雨后春笋般涌现,各种接口也是千奇百怪,各式各样的串口、并口盛行,为了能够统一PC接口,简化产品设计,USB诞生了。凭借其无可挑剔的设计和优异的性能,其迅速占领了PC接口市场,成为了PC使用最为广泛的接口。性格观其名,就可知USB的性格特点,那就是:开放(Universal)、单纯(Serial)、大度(Bus
2022-04-12 22:53:05
989
原创 关于USB的那点糗事
最近,在做一款产品,里面用到了一个USB3.0接口,在做产品功能设计的时候,由于对USB的认识存在误区,导致了设计出现了误会,现记录一下,防止以后再发生类似的笑话 ):误区一:认为USB3.0/2.0是两个独立的接口我们使用的是一款5G模组,下面是产品手册上关于USB接口的描述:注意,红框标注的部分。起初,我只注意到了,该USB接口符合USB2.0和USB3.0规范,就天真的认为,其为两个独立的接口,一个是USB2.0,另一个是USB3.0,所以,设计了如下的USB设备架构:可以看到,USB2
2022-04-10 23:00:06
1559
原创 CMake之Option使用简介
CMake中的option用于控制编译流程,相当于C语言中的宏条件编译。基本格式options基本格式如下:option(<variable> "<help_text>" [value])variable:定义选项名称help_text:说明选项的含义value:定义选项默认状态,一般是OFF或者ON,除去ON之外,其他所有值都为认为是OFF。示例示例项目结构如下:build:工程编译目录CMakeList.txt:cmake主编译脚本sub:子工程目
2022-03-17 17:25:22
34059
9
原创 保姆级教程|VMware安装Ubuntu20.04(系统安装+网络配置+open-vm-tools安装+国内软件源更新)
当前工作使用的Ubuntu版本是16.06 TLS,官方对这个版本已经在2021年停止维护,这对于更新或者安装软件造成很大的阻碍,所以,决定搭建一台Ubuntu 20.04TLS虚拟机,下面奉上整个安装过程。获取Ubuntu 20.04这里可以下载Ubuntu 20.04 TLS Desktop镜像。VMware这里使用的VMware版本为VMware® Workstation 15 Pro,VMware版本不太重要,只要不是太古老的就可以啦。安装Ubuntu 20.04创建虚拟机这里选择
2022-03-10 21:17:25
34130
14
原创 Linux命令之美|linux使用tar误解压之后,如何删除解压后的文件
可否有这样的经历,在工作环境下,解压了一个超大、文件超多的压缩包,比如,big-bag.tar.gz,解压的一瞬间,你猛然发现,忘记新建一个文件夹了,解压后的文件和原有的文件、文件夹混在一起了:(,是不是很崩溃!可以,不要忘记,没有Linux命令接解决不了的问题,一个不行,用两个。先说解决命令:$ tar -jxvf big-bag.tar.gz #这是手残解压的命令$ tar -tf big-bag.tar.gz | xargs rm -rf #这是删除解压后的新文件的命令没错,就是简单!
2022-03-09 17:02:19
7313
3
原创 ARM平台交叉编译|MQTT-mosquitto
mosquitto编译方式分为两种:cmake和make。windows、Mac平台使用cmake编译方式,其他平台,包括linux平台,直接使用make进行编译。windows7下编译mosquitto详细介绍了windows7环境下编译mosquitto的步骤。本文所介绍的内容是关使用于某种ARM平台下的mosquitto的编译步骤。编译环境宿主机:Ubuntu 16.04Host: ARM,Cortex-A55交叉编译器:aarch64-linux-gnu-gcc, 7.2.1 20171
2022-03-08 10:13:32
3583
原创 ARM平台交叉编译|OpenSSL
编译步骤准备编译平台OS:Ubunti16.04交叉编译器Compiler:aarch64-linux-gnu-gccOpenssl:openssl-3.0.1编译配置./Configure --prefix=/dir/to/install --cross-compile-prefix=aarch64-linux-gnu- -no-asm sharedprefix:openssl安装目录–cross-compile-prefix:交叉编译器前缀no-asm:不使用汇编代码。由于是
2022-03-07 17:13:17
4534
1
原创 极简系列|日志模块-clog
日志作为应用程序调试和维护的基本手段被广泛使用,像是谷歌的glog,java领域的log4j,它们都是功能强大的大型日志中间件。可是,在特殊的领域,比如是嵌入式开发领域,由于资源的限制,可能不能直接应用这些“庞大大物”,这里要介绍的clog,十分适合资源受限的嵌入式系统,其由C语言开发,整个代码不到400行,但它的功能可以满足基本的开发需求。clog基本属性:支持日志级别设置(DEBUG|INFO|ERROR|FATAL)支持多线程,是线程安全的。日志输出路径可配置。单个日志文件输出,并且日志是
2022-02-07 15:09:53
1294
原创 极简系列|Makefile工程框架(可执行程序、静态库、动态库)
作为一名Linux系统下的开发人员,平时工作中会经常用Makefile来构建应用开发框架。如果是特别简单的应用,几行makefile代码就可以搞定。但对于稍微上点规模的应用,其可能会包含若干个模块,复杂点的还会链接其他的动态库,这时的makefile可能就不是几行代码就能搞定的了。这时就需要用到一些比较复杂的makefile语法来构建整个应用工程。如果每次都要从头编写makefile,可能会由于某个语法忘记了,耽误开发的效率。本文要介绍的MakeExp,就是一种用于构建中等规模的Linux应用程序时,ma
2022-02-06 22:09:34
1780
原创 windows7下编译mosquitto
准备工作mosquittomosquitto源码下载地址,目前使用的是最新版本2.0.14。windowwindows系统为win7 sp1版本,其他版本应该也也可以。Visual StudioVS版本为2010,其他版本类似。cmake用于为mosquitto配成、生成vs下的工程,cmake的下载地址,这里使用的是3.22.1版本。cmake的安装比较简单,安装提示安装即可。pthreads-ws32mosquitto用到了POSIX下的pthreads线程库,windows原生是
2022-01-19 15:48:22
2327
原创 windows系统-串口设备导致鼠标乱跳的问题
最近在windows7 SP1系统上,开发了一款modbus数据监听、处理的应用程序。主要功能就是监听485线上modbus通信数据,处理数据,并上报到中心平台,485数据通过USB转485信号转换模块获取。 在调试的过程中发现,...
2022-01-17 17:02:26
13551
3
原创 记一次C栈溢出
今天与大家分享的一次堆栈溢出的调试过程,废话少说直接看代码。1 #include <stdio.h>2 #include <string.h>3 void stack_damage(char *buffer, int *len)4 {5 char *str = "stack damaged!";6 int slen = strlen(str);7 strncpy(buffer, str, slen);8 *len = slen;9 }1
2021-05-31 23:01:49
288
原创 2022内容输出小目标
公众号1.继续做奔跑的码仔公众号2.把平时遇到的问题,想法及时的记录下来,供以后复盘3.关注人数,突破5004.坚持一周两篇的输出频率博客1.输出自己平时工作,学习中遇到的问题,问题涉及到的点,解决的方案2.每周两篇输出3.粉丝数突破500注:0.以上方法来于使用德鲁克的回馈分析法1.每个季度复盘目前的状态2.年底验证目标是否达到预期...
2021-05-22 12:28:07
250
2
原创 Linux shell脚本IO重定向
shell IOshell脚本或者Linux终端上,常用的IO文件描述符有三个:0 标准输入(stdin)1 标准输出 (stdout)2 标准错误 (stderr)标准输入一般为键盘,标准输出和标准错误一般都是显示器。可以在shell脚本的后面添加 >filename,将标准输出重定向到文件中。重定向一般情况下,shell脚本的标准输出和标准错误都是输出到显示器上的,我们可以通过IO重定向,将标准输出和标准错误重定向其他文件或设备。IO重定向的一般形式如下: $ echo "
2021-04-08 16:43:46
525
原创 Linux系统下的时区配置管理
时区Linux系统关于时区的配置有两种方式:通过配置/etc/localtime和/etc/timezone文件。通过配置TZ环境变量。两种方式都可以达到配置时区的目的,下面分别说明一下这两种方式的使用方式。系统时区/etc/localtime用于配置系统时区,即,系统中其他任何需要时区参数的应用都可以通过localtime来获取时区信息,localtime一般为/usr/share/timezone/下某一时区配置文件的软链接,/usr/share/timezone为时区数据库,里面包含世
2021-04-07 18:58:09
4741
原创 史上最简单的Git入门教程
Git基本教程目录Git基本教程 11. 版本控制系统简介 11.1 何为版本控制 11.2 分布式VS集中式 32. Git初体验 62.1 Git诞生记 62.2 安装Git 72.3 创建Git版本库 83. Git本地管理 103.1 提交修改 103.2 版本回退 133.3 工作区和暂存区 183.4 管理修改 233.5 撤销修改 253.6 删除文件 284. 远程仓库 304.1 GitHub初体验 30
2021-03-20 23:53:41
4906
2
原创 史上最小的Http服务器
概述TinyHttp基于CSAPP(深入理解计算机系统第11章网络编成)实现。TinyHttp足够小,只有不到300行的代码,却可以完整的展示一个Web服务器的基本原理和功能。TinyHttp实现了HTTP的GET、POST、HEAD方法处理过程。TinyHttp可以动态的扩展静态文件类型。TinyHttp可以动态的扩展cgi-bin下的可执行程序,完成各种不同功能的动态内容的生成。TinyHttp是健壮的,实现对于常见异常的处理过程,比如,SIGPIPE信号等。项目代码:https://
2021-01-28 19:07:25
2023
1
原创 Web基础之HTTP
概述HTTP(Hypertext transfer Protocol)超文本传输协议,用于Web应用开发时,客户端和服务器之间的通信协议。HTTP是一个纯文本的通信协议,HTTP最新的版本是HTTP1.1,兼容HTTP1.0版本的协议,RFC2616描述了HTTP1.1相关的内容,可以这里获取到最新的HTTP RFC文档。基本结构与其他的通信协议类似,HTTP协议也是由消息头和消息体组成的。下面是HTTP通信时的几点约定:以行作为基本的传输单元,每行以回车 换行(C语言里是“\r\n”)结尾。
2021-01-27 21:18:25
617
原创 EOF到底是什么意思?
概述我们在使用C标准I/O时,经常会看到EOF这个概念。起初,我认为EOF就是字面意思即,到达了文件的结尾(End of File)。可是,最近在看K&R时,发现函数返回时EOF表示的是当前函数调用出现了错误,这些错误包括:文件达到了末尾;文件读写出现了错误,比如,磁盘没有空间。下面是man中,关于fgetc的解释:fgetc() reads the next character from stream and returns it as an unsigned char cast t
2021-01-25 19:29:25
27916
1
原创 你真的懂C的格式化I/O吗?(下)
系列文章目录[C语言]之基本输入输出(格式化I/O)文章目录系列文章目录回顾格式化输入回顾上一篇文章主要是总结了C语言下格式化输出相关的内容,这一节来总结一些格式化输入相关的内容。格式化输入下面是ANSI C定义的标准的输入函数族:#include <stdio.h>int scanf(const char *format, ...);int sscanf(const char *string, char *format, ...);int fscanf(FILE *str
2021-01-24 12:29:59
356
TensorFlow实战Google深度学习框架(第2版)+源码
2019-03-18
二线城市的城程序员收入为什么这么低?
2022-11-09
坐标河北石家庄,有多少人在搞Linux呢?
2022-10-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人