Linux
文章平均质量分 69
奔跑的码仔
心有多大,舞台就有多大
展开
-
解决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 · 473 阅读 · 0 评论 -
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 · 673 阅读 · 1 评论 -
记录一次linux应用内存调试过程(续)
本文所描述的内存调试过程,主要是记录最近项目里面遇到的一个内存使用问题。过程大概是,测试软件稳定性时,发现系统内存随着时间的变化,会不断的增长,并且不会恢复。由于怀疑是,应用程序出现了内存泄漏,所以开启了针对于内存泄漏的分析、调试,过程中使用了程序功能模块隔离法、valgrind工具、编写单独程序测试(怀疑是mosquitto存在问题)等方法,最后发现没有内存泄漏的地方。原创 2023-03-09 16:15:13 · 2338 阅读 · 0 评论 -
Asan基本原理及试用
Asan是Google专门为C/C++开发的内存错误探测工具,作为标配集成到了GCC 4.8及之后的版本,可以探测大多数内存问题,作为C/C++程序猿深入内存管理各种问题的迫害,人生苦短,快用Asan原创 2023-03-09 13:59:59 · 5468 阅读 · 2 评论 -
记录一次linux应用内存调试过程
记录一次不成功的linux应用内存泄漏调试过程,虽然最终没有找到问题的根源,但是,文中提到的调试过程,还是很有借鉴意义的原创 2023-03-02 17:29:15 · 583 阅读 · 0 评论 -
同一网卡如何配置多个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 · 6952 阅读 · 0 评论 -
基于阿里云的SSH反向代理环境搭建
本篇文章介绍基于阿里云实现SSH反向代理功能原创 2022-12-08 10:02:41 · 1131 阅读 · 0 评论 -
记一次坎坷的调试|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 · 2377 阅读 · 15 评论 -
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 · 32659 阅读 · 8 评论 -
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 · 6566 阅读 · 2 评论 -
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 · 3270 阅读 · 0 评论 -
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 · 4060 阅读 · 1 评论 -
极简系列|Makefile工程框架(可执行程序、静态库、动态库)
作为一名Linux系统下的开发人员,平时工作中会经常用Makefile来构建应用开发框架。如果是特别简单的应用,几行makefile代码就可以搞定。但对于稍微上点规模的应用,其可能会包含若干个模块,复杂点的还会链接其他的动态库,这时的makefile可能就不是几行代码就能搞定的了。这时就需要用到一些比较复杂的makefile语法来构建整个应用工程。如果每次都要从头编写makefile,可能会由于某个语法忘记了,耽误开发的效率。本文要介绍的MakeExp,就是一种用于构建中等规模的Linux应用程序时,ma原创 2022-02-06 22:09:34 · 1740 阅读 · 0 评论 -
我的Linux名片
面试官: “你好,先自我介绍一下吧。”程序猿:“你好,我是一名嵌入式Linux软件工程师,具有丰富的inux、嵌入式系统、Android相关的开发经验,擅长C/C++,熟练使用GNU/GCC、GDB、VIM等开发工具,这是我的名片!”面试官:“哇,我还是第一次见到这样别致的名片,酷!,把电路板做成名片,不错。它能跑起来吗?”程序猿:“别小看它,它不仅能跑,而且还是Linux系统,最新版本的内核哦,里面还集成了”...原创 2021-10-10 20:24:01 · 12896 阅读 · 10 评论 -
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 · 484 阅读 · 0 评论 -
Linux系统下的时区配置管理
时区Linux系统关于时区的配置有两种方式:通过配置/etc/localtime和/etc/timezone文件。通过配置TZ环境变量。两种方式都可以达到配置时区的目的,下面分别说明一下这两种方式的使用方式。系统时区/etc/localtime用于配置系统时区,即,系统中其他任何需要时区参数的应用都可以通过localtime来获取时区信息,localtime一般为/usr/share/timezone/下某一时区配置文件的软链接,/usr/share/timezone为时区数据库,里面包含世原创 2021-04-07 18:58:09 · 4342 阅读 · 0 评论 -
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 · 26675 阅读 · 1 评论 -
[计算机系统]之虚拟内存-第一部分(基本原理续)
系列文章目录[计算机系统]之虚拟内存-第一部分(基本原理)文章目录系列文章目录虚拟内存作用(续)简化内存管理保护内存地址翻译基本原理利用高速缓存利用TLB多级页表具体实例虚拟内存具体案例虚拟内存作用(续)简化内存管理进程、虚拟内存、物理内存之间的关系简化程序的连接、简化程序的加载、简化数据之间的共享(共享库)、简化内存分配虚拟内存机制为进程使用内存提供了极大的方便,它为进程提供了一致的、独立的地址空间。对于32bit系统来说,每个进程都是独享4GB的虚拟内存空间,即使物理内存只有几百兆的情况原创 2021-01-15 23:39:46 · 671 阅读 · 1 评论 -
[计算机系统]之虚拟内存-第一部分(基本原理)
概述虚拟内存是什么?解决了什么问题?根据冯•诺依曼计算机体系结构的定义,CPU和内存是最为核心的系统构件,CPU用于程序指令的执行,而内存作为磁盘数据的缓存,用于为CPU提供指令和数据保存的环境。内存作为一种稀缺资源,如果管理不当或导致内存耗尽,程就无法执行,或内存被破坏导致进程、系统崩溃。所以,需要设计一套机制来有效的管理和使用内存,这种机制就是“虚拟内存”。软件设计领域流传着这样一句至理名言:“软件领域的任何问题,都可以通过增加一个间接的中间层来解决”,这一句话同样适用于虚拟内存。虚拟内存就是处原创 2021-01-13 23:29:37 · 1636 阅读 · 1 评论 -
浅谈Linux信号那些事
概述信号是类UNIX系统中存在一种异步通信机制,用于内核通知用户进程系统里发生了某个事件,例如,编写过应用程序的朋友应该都会遇到过”段错误“,引起段错误的信号就是SIGSEGV,此外,当用户键入Ctrl+C之后,就可以停止前台的终端进程,或者在终端通过kill命令就可以杀死某个进程。在编写较为复杂的应用程序程序时,肯定会涉及到信号的检测和处理,比如,在编写终端处理程序时,如何处理SIGINT信号(Ctrl+C)、SIGTSTP(Ctrl+Z)等信号;在编写TCP通信程序时,如何处理SIGPIPE信号;以原创 2021-01-07 18:23:32 · 2037 阅读 · 5 评论 -
Linux Bash Set命令解析
概述平时在学习大牛的Shell脚本时,我们经常在脚本的开头看到很多set开头的命令,比如#! /usr/bin/env bashset -eset -uset -x或者set -eux但是,人们经常忽略这几个set命令的含义,我要说的是这个命令的作用其实非常的强大,可以提供脚本的debug效率和安全性。好了,下面我们就一 一分析一下这几个命令的真正含义。set命令为shell内建命令,通过help set可以看到关于set的帮助信息。其主要作用是改变 shell 选项和位置参数的值,或者原创 2020-12-08 22:50:59 · 1163 阅读 · 0 评论 -
Linux内核基础数据结构-双链表
链表概述链表作为一种基本的数据结构,得益于其简单的结构、优良的性能(双向链表的插入和删除复杂度都是O(1)),被广泛的应用于各种程序设计中。链表一般分为单向链表和双向链表。对于单向链表,其删除和插入的一般复杂度都是O(n),所以,工程上一般很少使用,下面介绍的所有链表都是双向链表。常见的双向链表数据结构定义如下:struct list_node_xxx{ struct list_node_xxx *prev,*next; //具体的数据,比如一个char数组 char data[100];};原创 2020-07-19 19:32:12 · 1136 阅读 · 1 评论 -
shell脚本如何优雅的打印帮助信息
一个好的帮助信息对于快速、高效的使用shell脚本是非常有好处的。我们一般通过echo来逐行打印帮助信息,这种方式一个明显的缺点就是需要手动去进行排版,而排版的过程有时十分的繁琐。有没有想过,如果可以像写一般的注释一样来完成帮助信息的编写,那该多好啊!本文通过sed这个工具来实现,像写注释一样写shell的帮助信息。shell中一般#开头的行为注释信息,所以利用这个特性,我们可以把帮助信息设计成如下的样式:#!/usr/bin/env bash ###### my-script — does on原创 2020-07-17 15:32:08 · 3926 阅读 · 2 评论 -
一文搞懂I2C协议-硬件基础
I2C是什么I2C总线是由飞利浦在80年代初设计的,以允许位于同一电路板上的组件之间能够轻松通信。飞利浦半导体于2006年迁移到了NXP。I2C名称翻译为“ Inter IC”。有时,该总线称为IIC或I²C总线。I2C总结的基本的特征:电路简单,只需要两根线,时钟线和数据线I2C为总线型结构,主设备依靠从设备地址进行寻址I2C总线上的设备可以为一主多从或者多主多从,可以提供仲裁和冲突检测I2C标准的传输速率可以达到100Kbit/s,快速模式下可以达到400Kbit/s,高速模式下可以到达3原创 2020-07-10 10:26:22 · 6601 阅读 · 0 评论 -
嵌入式Linux 硬件时间-系统时间-时区设置
Linux系统时间分为两种:系统时间和硬件时间。系统时间为Linux内核时间,硬件时间一般为BOIS中的RTC时间。Linux内核在启动时,会尝试读取BIOS中的RTC时间,并以此为基准设置系统时间。内核启动之后,系统时间和硬件即为两个独立的时间,各自运行。嵌入式Linux系统开发时,同样需要提供硬件来为系统提供时间基准,这个硬件一般就是RTC芯片,比如,rx8010。Linux关于时间的配置包括:系统时间设置、硬件时间设置、时区设置。时区配置tzselect命令用于设置系统的当前时区。在桌面系统上,原创 2020-07-07 10:31:46 · 2775 阅读 · 0 评论 -
那些年,用过的Linux网络工具
Linux作为一款强大的操作系统,凭借其优异的的网络服务功能,被广泛使用到云服务中心、数据中心、嵌入式边缘物联代理等等,需要可靠的网络服务支持的场景。具体到生成环境,免不了使用工具去管理和控制网络,本文就来带领大家细数一下,Linux下都有哪些提供网络管理的工具。ifconfig相信大家最为熟悉的就是ifconfig,作为网络接口的配置工具,经常用用来查看、配置网口的基本信息。查看所有网口信息 ifconfig -a eth0 Link encap:Ethernet HWadd原创 2020-07-04 17:00:17 · 1012 阅读 · 0 评论 -
copy_{to,from}_user Vs memcpy
Linux地址空间熟悉Linux内核的开发人员都知道,Linux下的进程地址空间分为内核空间和用户空间,对于32bit系统来说,典型的空间划分为:1G(内核空间)+3G(用户空间),对于这种划分来说,内核空间地址范围:0xC000 0000 ~0xFFFF FFFF,用户空间地址范围为:0x0000 0000 ~ 0xBFFF FFFF。当然,为了需要,我们可以将地址空间配置成其他方式,比如2G:2G等等。Linux虚拟地址机制大家知道,Linux进程中使用的地址是虚拟地址,进程在操作这些地址时,MM原创 2020-06-29 23:01:10 · 1984 阅读 · 0 评论 -
Linux以太网卡架构解析-MAC层和PHY层
引子最近,在调试基于Freescale IMX6UL板子的以太网口时,遇到了一个奇怪的问题:网口插拔时,系统检测不到Link Down、Link UP事件。并且,在使用ifconfig eth0 up,然后再ifconfig eth0 down时,会提示:$ sudo ifconfig eth0 up$ sudo ifconfig eth0 downifconfig: SIOCSIFFLAGS: No such device首先,可以确定的是,以太网PHY芯片驱动可以正确加载,这说明芯片的DTS原创 2020-06-29 11:37:01 · 12023 阅读 · 1 评论 -
linux 文件系统损坏修复方式
使用fsck修复树莓派受损文件系统原创 2020-06-24 23:02:04 · 5111 阅读 · 0 评论 -
windows 10如何修改WSL普通账户的密码
本文主要介绍如何修改WSL账号密码,本文针对的WSL版本为Ubuntu18.04。将WSL的默认账户改为root进入PowerShell,进入方式:win + x aPS C:\windows\system32> ubuntu1804.exe config --default-user root再次进入WSL,这时就会已root身份登入PS C:\windows\system32> ubuntu1804.exeroot@DESKTOP-OTHFAK6:~# 通过pass原创 2020-06-21 12:16:20 · 2022 阅读 · 1 评论 -
Linux内核开发基础-低精度timer_list和高精度hrtimer定时器
Linux内核定时器开发-低精度和高精度定时器上篇文章讲解了如何正确的使用内核延时函数,在进行驱动开发时,可能会经常用到精确地延时操作。除此之外,如果要实现一个定时任务,那就需要用到定时器。作为一项基础功能需求,Linux内核提供了定时器相关的实现。下面就具体看一下,Linux内核所提供的定时器实现。定时器种类为了适应不同的应用场景,Linux内核提供了两种定时器:低精度和高精度定时器。低精度定时器基于硬件的周期性中断实现,其定时周期的粒度为1/HZms,例如,内核HZ为1000,那么低精度的定时器最原创 2020-06-18 09:54:02 · 3978 阅读 · 4 评论 -
嵌入式Linux应用崩溃调试-难以追踪的栈信息
在进行嵌入式Linux应用程序开发时,经常会用到gdb对崩溃日志进行分析,一般情况下,可以直接定位到崩溃的位置。但有时分析core文件时,却看不到有意义的崩溃栈,这时问题就有点复杂了,出现这种现象的原因可能有这么几个:应用程序在编译时没有指定-g选项,导致可执行程序没有调试信息。应用程序所依赖的动态库和静态库没有调试信息。应用程序的运行时环境没有调试信息,比如libc等。嵌入式Linux系统应用程序运行时环境和交叉编译工具链的运行时环境版本不一致,比如,嵌入式Linux环境中所使用的libc库和交原创 2020-06-04 11:26:41 · 5309 阅读 · 0 评论 -
内核开发基础-如何使用内核延时
从事Linux内核开发特别是驱动开发的小伙伴,肯定需要经常使用到定时器,比如,按键的去抖、LED屏幕显存buffer的刷新等。同时,在控制硬件时,可能会用到十分精确地短延时,这时,定时器的精度就不能满足这种需求了,这时就会使用到高精度定时器和忙等延时。今天就来简要说一下如何正确的使用内核提供的delay和sleep函数。这篇文章面对的读者是从事与驱动程序开发,但是,对于内核delay和sleep实现机制不是很熟悉的开发人员。如何插入delays首先,你需要回答一个问题,“需要使用delay的代码存在于原创 2020-05-31 22:52:20 · 1262 阅读 · 0 评论 -
DTS中如何配置设备相关的pinctrl
设备驱动如何在dts配置pins进行嵌入式Linux驱动开发时,不可避免的会涉及到DTS相关的编写工作,而其中,最为重要的一项工作就是pinctrl相关的配置,这包括pins的功能选择(作为普通IO,还是作为外围控制器的pins)以及pins的配置(pull-up/pull-down、驱动能力、三态等)。内核中的pinctrl子系统抽象了不同SoC中关于pins的管理方式,Linux内核之pi...原创 2020-03-29 22:53:20 · 5255 阅读 · 0 评论 -
Unix进程相关用户ID、用户组ID详解
文章目录Unix文件相关属性文件属性操作相关命令进程相关ID设置用户ID和设置组ID文件访问权限进程操作文件更改用户ID和组ID我们在使用类UNIX系统时,经常会涉及到各种ID,比如,文件属性相关的用户ID、组ID、其他ID,进程运行时相关的6个ID:实际ID、实际组ID、有效ID、有效组ID、保存的设置用ID、保存的设置组ID。实际使用过程中,我们经常搞混各个ID基本概念和使用方式,所以,本...原创 2020-02-12 22:25:38 · 2218 阅读 · 0 评论 -
windows7&&Ubuntu 16.04 系统引导问题修复
文章目录前言解决方案适用场景分析过程windows7启动ubuntu 16.04启动参考文章前言本文用来记录最近关于如何修复Ubuntu16.04和windows7双系统无法正常进入系统的问题。首先,回顾一下问题现场。某天早上,正常开机选择启动windows7系统,但提示如下信息:相信,第一次遇到这种问题的人,第一反应肯定一脸懵逼,尝试重启是否可以解决问题。但经过几次重启之后,发现问...原创 2019-10-31 11:32:18 · 1177 阅读 · 2 评论 -
一个普通码农的Linux之路
1.Hi,大家好,我是奔跑的码仔,是一名长期混迹于Linux江湖,靠Linux吃饭的程序员。生活在一个IT大环境不好的二线城市,大家也知道,这里的程序员本来就很稀少,况且是Linux程序员呢,就更是稀有物种了!可是,不是有那么一句老话嘛,物以稀为贵。你还别说,虽然,这里的Linux岗位较少,但是,薪资总体还是蛮有竞争力的。所以,才会有时间来总结自己的Linux学习之路(不然,早就去加班挣生活费了...原创 2019-10-28 10:04:39 · 1176 阅读 · 5 评论 -
Linux ftp服务器和客户端解析
文章目录ftp术语是什么工作方式用户授权传输模式ftp服务器ftpdvsftpd安装文件结构运行方式vsftpd配置文件chroot账号登录限制欢迎信息虚拟路径ftp客户端嵌入式Linux开发过程中需要经常涉及到文件的拷贝,那么使用简单、快捷的应该是ftp服务。ftp服务器一般分为两种:vsftpd和ftpd,下面逐一讲解一下。ftp术语是什么FTP(File Transfer Proto...原创 2019-10-14 11:30:57 · 4999 阅读 · 1 评论 -
linux 中df和du命令的区别
df命令用于查看文件系统使用情况,例如:liang@liang:~/Desktop/apue.2e/file$ df 文件系统 1K-块 已用 可用 已用% 挂载点/dev/sda1 330215 124637 188529 40% /tmpfs 126456原创 2012-08-26 21:30:59 · 1121 阅读 · 0 评论 -
linux 下查看程序运行时间
有时候我们要计算程序执行的时间.比如我们要对算法进行时间分析 一、函数法可以使用下面这个函数. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */ long tv_usec; /* 微秒数 */ }; //get原创 2012-08-26 21:47:45 · 2276 阅读 · 0 评论