![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux应用
文章平均质量分 77
Linux应用相关知识收集
勇往直前996
内在清醒,行所当行,敢做就能赢。
展开
-
CAN基本问题解惑
是的,标准帧和扩展帧的数据长度在传统CAN协议(CAN 2.0A和CAN 2.0B)中最多都是8个字节。CAN帧被划分为标准帧(Standard Frame)和扩展帧(Extended Frame),这种划分主要是为了满足不同应用场景下对标识符长度的需求,增强CAN网络的灵活性和适用性。标准帧的帧ID为11位,扩展帧的帧ID为29位。CAN FD(Flexible Data-rate)协议是对传统CAN协议的扩展,它引入了更高的数据速率和更大的数据字段长度,解决了传统CAN协议中数据字段长度的限制问题。原创 2024-06-18 08:24:09 · 511 阅读 · 0 评论 -
使用chatGPT解答关于芯片手册中Memory Map的相关疑问
这些地址在芯片的整体地址空间中是唯一且固定的,通过地址解码逻辑确保处理器访问这些地址时能正确地与相应的外设进行交互。每一个地址或地址范围就像地图上的一个地理位置,标记了特定的硬件资源。7、总结来说就是设计师在设计soc或者mcu时,现根据cpu的寻址范围来确定内存空间的大小,然后再确定有哪些外设,给相应的外设分配内存范围,进而确定各个外设的具体对应的物理地址。在Linux系统中,从应用程序读取硬盘数据并发送到串口的过程中,涉及多个地址转换和处理的步骤,包括虚拟地址、物理地址、以及I/O地址的处理。原创 2024-05-24 15:32:50 · 648 阅读 · 0 评论 -
Ubuntu16.04安装VS Code中文化及创建快捷方式
帮助你在 Ubuntu 16.04 上将 Visual Studio Code 的快捷方式放到桌面。原创 2023-05-26 14:38:00 · 1791 阅读 · 0 评论 -
ANSI是什么编码?
用Notepad++创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII呢),输入汉字居然不是乱码:保存为test.txt,发送给你美国的同事Bob。他也用Notepad++,不幸的是,却发现你的文件内容是这样的:也许你会认为:你用的是中文系统,能正常显示中文;他用的是英文系统,不能显示中文!这么想,好像很有道理呢!但是再细想一下:一个系统显示乱码,说明它不支持这种编码格式(或者解码方式不对)。难道英文系统不支持ANSI?难道ANSI是一种中文编码?如果你身边有一个韩文系转载 2022-06-12 18:54:42 · 3644 阅读 · 0 评论 -
Linux 编程基础2--什么是POSIX
一、什么是POSIX1. 概念POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),2. 发布者-IEEE发布者为电气与电子工程师协会(Institute of Electrical and Electronics Engineers),简称IEEE。这个协会老牛了【该组织在太空、计算机、电信、生物医学、电力及消费性电子产品等领域中都是主要的权威】!POSIX是IEEE为要在各种UNIX操作系统上运转载 2022-04-30 18:03:53 · 590 阅读 · 1 评论 -
Linux 编程基础1--文件IO和标准IO、系统调用与库函数
一、文件IO和标准IO1、什么是文件I/O和标准I/O文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linux或unix平台。标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性,标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I转载 2022-04-30 16:49:51 · 395 阅读 · 0 评论 -
C 标准库基础 IO 操作总结
其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数、输出参数和返回值,接下来才能开始设计具体的实现过程。C 语言标准库提供的接口功能很有限,不像 Python 库。不过想把它用好也不容易,本文总结 C 标准库基础 IO 的常见操作和一些特别需要注意的问题,如果你觉着自己还不是大神,那么请相信我,读完全文后你肯定会有不少收获。一、操作句柄打开文件其实就是在操作系统中分配一些资源用于保存该文件的状态信息及文件的标识,以后用户程序可以用这个标识做各种读写操作,转载 2022-03-31 13:47:45 · 438 阅读 · 0 评论 -
shell脚本判断僵尸进程
目录1、交互式 Bash Shell 获取进程 pid2、Bash Shell 脚本获取进程 pid#3、获取 Shell 脚本自身进程 pid#4、查看指定进程是否存在#5、关于/dev/null的说明:6、最后我的杀死僵尸进程脚本:1、交互式 Bash Shell 获取进程 pid在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加-v grep是为了避免匹配到 grep 进程).转载 2022-03-29 14:34:18 · 832 阅读 · 0 评论 -
常见的校验算法
UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。在自定义数据存储时,有经验的工程师都会添加一定校验信息。你平时通信或者数据存储时,有用到校验信息吗?下面就介绍几种常见的校验算法。一、校验和校验和是最基本,也是嵌入式工程师最常用的一种校验算法,其实现方法很简单,简单到只有几行代码。实现的方式方法很多,不同的编程语言,不同的应用有所不同,下面以C语言8位校验和为例:uint8_t CheckSum(uint8_t *Buf,转载 2021-11-30 13:06:52 · 1005 阅读 · 0 评论 -
Linux C TCP通讯——可直接用于实际项目开发
TCP通讯代码demo:int is_valid_IP(const char *ipstr) { if (!ipstr) return 0; int a, b, c, d; int tmp = sscanf(ipstr, "%d.%d.%d.%d", &a, &b, &c, &d); if (4 != tmp) return 0; if (!(0 > a || 255 < a || 0 > b || 255 < b ||.原创 2021-11-23 10:55:23 · 1232 阅读 · 0 评论 -
C语言返回局部变量的几种用法--(经典例子)
一般来说,函数是可以返回局部变量的。局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。下面以函数返回局部变量的指针举...转载 2021-11-21 12:07:33 · 2190 阅读 · 2 评论 -
protobuf-c之嵌入式平台使用
什么是protobuf-c之前的文章:《Protobuf:一种更小、更快、更高效的协议》详细介绍了protobuf及protobuf-c。这里再简单提一下:Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。protobuf支持一些主流的语言,唯独没有支持C,所以诞生了第三方的protobuf-c。之前文章介绍了protobuf、protobuf-c在PC平台上的安装及使用,本篇笔记我们来把它用在我们的嵌入式转载 2021-11-16 18:13:26 · 1177 阅读 · 0 评论 -
Protobuf:一种更小、更快、更高效的协议
前言之前分享关于JSON的使用:例说嵌入式实用知识之JSON数据。JSON类型数据可读性很好,但是整个数据包中会带有一些无用的数据,会在一定程度上带来通信负担。本篇文章我们来分享一种更轻量的数据格式——protobuf。protobuf的优点: 更小、更快、更简单。 支持多种编程语言 。 解析速度快。 可扩展性强。 什么是protobuf、protobuf-c?Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结转载 2021-11-16 18:09:14 · 624 阅读 · 1 评论 -
2021-11-15
linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PATH环境变量中#查看PATH:echo $PATH举例说,命令 composr 在/usr/loca/bin但执行的时候提示:-bash: composr: command not found这个时候,通过echo $PATH,,发现composer并未在PATH环境变量中有设置,这个转载 2021-11-15 10:37:51 · 489 阅读 · 0 评论 -
u-boot 和 bootloader 的内容以及区别
嵌入式软件工程师听说过 u-boot 和 bootloader,但很多工程师依然不知道他们到底是啥。Bootloader比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后引导系统内核,直到系统启动。Bootloader是嵌入式系统在加电后执行的第一段代码,通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到转载 2021-09-30 08:50:56 · 266 阅读 · 0 评论 -
C、C++编程学习资料收藏
怎么算入门,我觉得可以入手做一些项目就算入门了。 需要掌握至少一门编程语言,例如,C/C++或者 Java; 需要学习数据结构与算法,至少掌握常见的数据结构与算法; 需要学习数据库知识,因为做项目几乎离不开数据库,数据库必须掌握; 掌握一门技能,例如后端开发、web 开发、移动端开发、人工智能等; 当然还需要进一步精进,可以学习操作系统,计算机网络,计算机组织原理、汇编等相关专业课程。C语言刚开始就是泡书,然后就是抄代码,上机调试,模仿修改,看 n 遍...转载 2021-09-09 22:08:44 · 563 阅读 · 1 评论 -
创建数据库链接sqlite3_open用法
sqlite3_open用法:原型:int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */);用这个函数开始数据库操作。需要传入两个参数,一是数据库文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件来打开。转载 2021-03-11 10:13:03 · 1847 阅读 · 0 评论 -
Linux下找出吃内存的方法总结
linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」。现在想要查询该进程占用的内存大小。linux命令行下有很多的工具进行查看,现总结常见的几种方式。1、通过进程的 status[root@web3_u~]#cat/proc/25282/statusName:php-cgiState:S(sleeping)Tgid:25282Pid:25282PPid:27187TracerPid:0Uid:...转载 2021-03-09 12:34:05 · 751 阅读 · 0 评论 -
心跳包机制设计详解
存在下面两种情形:情形一:一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接。例如,对于一个即时通讯软件,如果服务器没有消息时,我们确实不会和服务器有任何数据交换,但是如果连接被关闭了,有新消息来时,我们再也没法收到了,这就违背了“即时通讯”的设计要求。情形二:通常情况下,服务器与某个客户端一般不是位于同一个网络,其之间可能经过数个路由器和交换机,如果其中某个必经路由器或者交换器出现了故障,并且一段时间内没有恢复,导致这之间的链路不再畅转载 2021-03-04 12:54:14 · 1580 阅读 · 2 评论 -
并发中的线程与线程池
1、一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质。CPU并不知道线程、进程之类的概念。CPU只知道两件事:1. 从内存中取出指令2. 执行指令,然后回到1你看,在这里CPU确实是不知道什么进程、线程之类的概念。接下来的问题就是CPU从哪里取出指令呢?答案是来自一个被称为Program Counter(简称PC)的寄存器,也就是我们熟知的程序计数器,在这里大家不要把寄存器想的太神秘,.转载 2021-02-08 14:44:55 · 106 阅读 · 0 评论 -
读取文件时,程序经历了什么?
承接上文《一文彻底理解高性能高并发中的线程与线程池》,这是高性能、高并发系列的第二篇文章,在这里我们来到了I/O这一话题。你有没有想过当我们执行I/O操作时计算机底层都发生了些什么?在回答这个问题之前,我们先来看下为什么对于计算机来说I/O是极其重要的。不能执行I/O的计算机是什么?相信对于程序员来说I/O操作是最为熟悉不过的了:当我们使用C语言中的printf、C++中的"<<",Python中的print,Java中的System.out.println等时,这是I.转载 2021-02-08 14:23:15 · 219 阅读 · 0 评论 -
warning: Can‘t attach LWP 540028960: No child processes
最近使用GDB调试自己的程序,遇到一个问题:warning: Can't attach LWP 540028960: No child processeslinux-thread-db.c:434: internal-error: thread_get_info_callback: Assertion `inout->thread_info != NULL' failed.A problem internal to GDB has been detected,further debuggi原创 2021-01-22 09:24:32 · 1090 阅读 · 5 评论 -
arm linux修改时区设置
arm linux 通过NTP对时之后,终端命令行Date命令显示的时间是对的,但是web服务器中的时间还是差8H。之前是通过export TZ=CST-8 修改的系统时区。最后通过增加:./etc/localtime这个文件用来设置系统的时区,将 /usr/share/zoneinfo/ 中相应文件拷贝到/etc下并重命名为 localtime 即可修改时区设置,而且这种修改对 date 命令是及时生效的。不论是 date 还是 hwclock 都会用到这个文件,会根据这个文件的时区设置来进行.转载 2021-01-11 09:34:32 · 1927 阅读 · 0 评论 -
解决option1 ttyUSB1: option_instat_callback: error -2 错误
我的开发板通过usb口连接EC200S的模组,每次通过ttyUSB口发完AT命令后,结束关闭时总会报出一下异常:option1 ttyUSB1: option_instat_callback: error -2报出这个错误到是也没有什么其他异常,但是可能是个隐患,总觉的不正常。通过网上查找原因,基本可以锁定位置,也是因为所用的linux kernel版本低的原因,因为高版本已经解决掉这个问题了,解决方法:找到源码中该目录:/drivers/usb/serial/option.copti原创 2020-12-14 10:54:17 · 1796 阅读 · 1 评论 -
浅谈内核的Makefile、Kconfig和.config文件
Linux内核源码文件繁多,搞不清Makefile、Kconfig、.config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些问题都和Makefile、Kconfig、.config有关,下面简单谈谈Makefile、Kconfig和.config。希望对你有启发。三者的作用:简单来说就是去饭店点菜:Kconfig是菜单,Makefile是做法,.config就是你点的菜。Makefile:一个文本形式的文件,编译源文件...转载 2020-11-04 13:07:33 · 172 阅读 · 0 评论 -
Ubuntu创建Eclipse快捷方式
1.下载eclipse,开发者建议下载eclipse jee版本,以免后期为了各种插件焦头烂额;附上链接:https://www.eclipse.org/downloads/2、创建快捷方式cd /usr/share/applicationssudo gedit eclipse.desktop3、在eclipse.desktop中输入以下内容:[Desktop Entry]Encoding=UTF-8Name=EclipseComment=Eclipse IDEExec=/h转载 2020-09-25 18:31:33 · 1010 阅读 · 0 评论 -
/bin/bash: arm-none-linux-gnueabi-gcc: command not found
把交叉编译工具链相应的环境变量已经配置好,但是使用"arm-linux-gcc -v"命令,总显示“command not found”,最终确定的原因就是相应的xxx-xxx-gcc 命令不能在64位机器上执行,所以导致报错,这是我的原因。网上给出了三种情况如下:一、arm-none-linux-gnueabi-gcc不能再64位系统下下编译ARM的32位库的问题解决方法如下:#我是逐条安装的sudo apt-get install libgl1-mesa-dri:i386sudo ap转载 2020-09-18 17:13:32 · 5876 阅读 · 1 评论 -
docker创建并运行ubuntu12.04容器
1、宿主机创建容器前,准备工作拉取ubuntu16.04镜像 sudo docker pull ubuntu:12.04 查看镜像列表 拉取新镜像前新镜像拉取后以下操作看其他博客建议操作的,我实际没有进行设置,但是后也创建启动成功了,不知道后边会有什么影响#创建容器前准备工作,先把宿主机系统防火墙起开,放通端口,可参考之前blog:Linux系统防火墙放行端口此处是#查看系统防火墙状态systemctl status firewalld#开启系统防火墙..转载 2020-09-18 14:22:48 · 555 阅读 · 0 评论 -
Linux C获取本机IP
通常查询IP的时候在Linux下可以使用ifconfig查看对应网卡信息:enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.99 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::976c:f683:736c:c13a prefixlen 64 scopeid 0x20<li转载 2020-09-10 13:17:42 · 542 阅读 · 0 评论 -
frp内网穿透神器的编译
一、编译器官方下载1、 Go 安装包下载2、 https://golang.org/dl/(没访问成功)编译工具下载后,在.profile文件中配置环境变量:export GOROOT=/root/goexport GOPATH=/root/go/workexport PATH=$PATH:/root/go/bin参考网址:frp内网穿透神器的编译二、编译遇到一个问题go: github.com/armon/go-socks5@v0.0.0-20160...原创 2020-09-08 14:36:01 · 2997 阅读 · 0 评论 -
查看linux系统中空闲内存/物理内存使用/剩余内存
1、使用free命令:$free -m free -m 参数是以MB为单位如下如所示:[root@linuxzgf ~]# free -m total used free shared buffers cachedMem: 7982 6811 1171 0 350 5114-/+ buffers/cache: 1346转载 2020-08-28 11:06:55 · 2180 阅读 · 0 评论 -
CGI程序与web间数据交互
CGI是通用网关接口的简称,通过CGI可实现客户端浏览器与服务器之间数据的交互。CGI通信系统由显示在前端的HTML页面以及运行在服务端上的cgi程序组成。web客户端显示的是相关的html文件,这些文件一般存储在目录/www下,CGI程序一般为后缀是.cgi的文件,存储路径一般也是/www。CGI通信系统的结构框图如下:步骤1:web客户端对服务器发起HTTP请求;步骤2:环境变量向CGI程序发送数据;步骤3:重定向CGI标准输出到管道,服务器通过管道获取CGI输出数据;步骤.转载 2020-08-17 15:05:05 · 1739 阅读 · 0 评论 -
解决shmget和sem_open:errno:38:Function not implemented
在移植的linux上使用shmget、sem_open创建共享内存,总显示创建失败。1、shmget异常 shmid = shmget((key_t)0x11,SHM_SIZE,0666 | IPC_CREAT); if(shmid == -1){ printf("Init the shared memory[%dKB] failed [%d:%s]!\n",SHM_SIZE/1024, errno, strerror(errno)); return ERROR_SHMGET; }原创 2020-08-13 17:47:24 · 7007 阅读 · 1 评论 -
gdb 调试入门,大牛写的高质量指南
gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意。gdb 是 GNU 调试器,Linux 上的标配调试器。当我看 Greg Law 在 CppCon 2015 上的演讲《给我 15 分钟,我将改变你的对 GDB 的认知》的时候,我想起了示例输出的不足,幸运的是,这次有输出!这 15 分钟太值了。 它也启发我去分享一个完整的 gdb 调试实例,包含输出和每个步骤,甚至钻牛角尖的情况。这不是一个特别有趣或奇怪的问题...转载 2020-08-13 11:53:27 · 489 阅读 · 0 评论 -
启动 GDB 调试
使用 GDB 调试程序一般有三种方式:gdb filename gdb attach pid gdb filename corename这也对应着本节课的核心内容:直接调试目标程序 附加进程 调试 core 文件接下来我们逐一讲解。直接调试目标程序在开发阶段或者研究别人的项目时,当编译成功生成目标二进制文件后,可以使用gdb filename直接启动这个程序的调试,其中filename是需要启动的调试程序文件名,这种方式是直接使用 GDB 启动一个程序进行调试。注意这里说...转载 2020-08-13 11:12:53 · 2305 阅读 · 0 评论 -
gdb调试信息与调试原理
Linux 下 C++ 程序开发,即使使用 makefile、cmake 等编译工具,其最终都是调用 gcc 这一编译工具组的。这里说的工具组,是因为编译 C 程序和 C++ 程序使用的编译工具还是有一点差别的,一般编译 C 程序使用gcc,编译 C++ 程序使用g++。(下面为了叙述方便,除非特别说明,否则不做具体区分是 gcc 还是 g++,统一使用 gcc 这一名词代指。)本课程中我使用的操作系统是 CentOS 7.0,为了演示方便直接使用的 root 账号演示。如果读者的机器上没有...转载 2020-08-13 10:55:40 · 600 阅读 · 0 评论 -
gdb移植arm,编译错误对‘_obstack_free’未定义的引用及gdb瘦身
1 任务:移植gdb到arm-linuxgdb版本:gdb-7.12.tar.gztermcap版本:termcap-1.3.1.tar.gz交叉编译工具链:arm-hisiv500-linux2 termcap移植 cd termcap-1.3.1/ ./configure --host=arm-linux --prefix=$(pwd)/../termapinstall --with...转载 2020-08-12 11:34:18 · 403 阅读 · 0 评论 -
gdb交叉编译记录
一、基础文件gdb下载点:http://ftp.gnu.org/gnu/gdb/我下载的是:gdb-8.0.1.tar.gz版本工具链版本:gcc 版本 4.8.4 (GCC)二、开始编译命令先配置:./configure --target=arm-linux --host=arm-linux --prefix=/home/gdb-8.0.1/build,然后make即可。完成之后不知道--prefix为什么没起作用。在编译期间出现一个问题:解决方法:首先参考:ht.原创 2020-08-12 11:23:51 · 170 阅读 · 0 评论 -
LINUX CGI
为什么要进行CGI编程? 在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了CGI,WEB的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。有的人认为可以用JavaScript来代替CGI程序,这其实是一个概念上的错误。JavaScript只能够在客户浏览器中运行,而CGI却是工作在...转载 2020-06-18 23:45:26 · 758 阅读 · 0 评论 -
Virtualbox Ubuntu 挂载共享文件夹
1、分享Virtualbox Ubuntu 共享文件夹、自动挂载的一些问题2、VirtualBox挂载共享文件夹转载 2020-05-16 15:55:14 · 622 阅读 · 0 评论