自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

转载 shell if用法总结

bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令。当有多个嵌套时,只有第一个返回0退出状态的命令会导致符合该条件执行的语句部分被执行,如果所有的语句的执行状态都不为0,则执行else中语句。8、空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的影响,因此在不确定变量的内容的时候,在测试号前使用-n或者-z测试一下。[ -w FILE ] 如果 FILE 存在且是可写的则返回为真。

2023-10-07 11:00:19 2764

原创 Linux 开发好用的网站汇总

http://code.woboq.org/linux/linux/https://elixir.bootlin.com/linux/latest/sourcehttps://mirror.bjtu.edu.cn/kernel/linux/kernel/进入到特定的大版本目录,搜索“linux”即可检索出所有版本的压缩代码文件。https://www.kernel.org/doc/html/latest/admin-guide/index.htmlLinux Kernel :https://blog.

2023-07-31 11:37:21 793

原创 Linux netlink示例——监测网络网卡up/down和IP变化

【代码】Linux netlink示例——监测网络网卡up/down和IP变化。

2023-06-16 15:36:33 1639

原创 Shell特殊变量的含义和用法:$n、$#、$*、$@、$?、$$、##、%%

shell中有两类字符:普通字符、元字符。普通字符在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;元字符是Shell的保留字符,在Shell中有着特殊的含义。今天主要介绍一下shell中字符 $ 、## 和 %% 的各种用法。

2023-05-25 13:38:36 2218 1

转载 SD-scard-对应CMD指令集讲解

根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中, 如果发送地址0,则表示取消选中全部卡。发送CMD3,读取SD卡是否接入RCA (地址),短反馈 , 广播获取SD卡所分配的相对地址。获取SD电压值,作为测试当前SD卡的支持的协议,所需的电压值是否正常。发送CMD7,使能SD卡,如果参数值为0 , 即使取消所有选中SD卡。

2023-05-17 19:42:03 760

原创 Linux设备驱动-秒字符设备

本文主要是实现一个简单的字符设备驱动,以秒为单位记录时间。并且,提供应用程序获取当前时间。

2023-05-10 20:07:11 107

转载 squashfs 文件系统的制作与使用

quashfs是以linux 内核源码补丁的形式发布,附带mksquashfs工具,用于创建squash文件系统。squashfs可以将整个文件系统或者某个单一的目录压缩在一起, 存放在某个设备, 某个分区或者普通的文件中. 如果你将其压缩到一个设备中, 那么你可以将其直接mount起来使用;

2023-05-08 09:55:14 2549

原创 vim常用设置

vim常用设置

2023-04-11 17:31:06 206

转载 ARM体系结构——ARM GNU汇编基本指令

因为处理器架构不一样,指令集有所不同。所以一种架构,对应一种指令集。指令是让计算机做某个操作的具体命令,这个命令计算机能识别,每一个指令有它自己的操作意义。ARM指令在计算机中是32位的二进制数表示,所以占用4个字节。其二进制码形式如下:所以指令其实程序员与计算机之间的交互语言,以上面这条指令为例,如果你要让计算机把R1+85之后的值再赋给R0,那你必须严格按照这个指令格式去书写代码,如果不按这个格式,cpu是无法识别的。

2023-04-11 11:11:53 656

转载 Linux下io磁盘调度策略及配置

Anticipatory的中文含义是“预料的,预想的”,这个词的确揭示了这个算法的特点,简单的说有个I/O发生的时候,如果又有进程请求I/O操作,则将产生一个默认的6毫秒猜测时间,猜测下一个进程请求I/O是要干什么的。单位是 1/100 秒。默认一次读 128kb 远小于要读的,设置大些对读大文件非常有用,可以有效的减少读 seek 的次数,这个参数可以使用 blockdev –setra 来设置,setra 设置的是多少个扇区,所以实际的字节是除以2,比如设置 512 ,实际是读 256 个字节。

2023-04-09 16:26:07 692

原创 TCP cubic算法和bbr算法

前段时间调试网络相关的功能时发现,在一定的丢包率情况下,使用tcp bbr算法比cubic算法有更好的网络传输表现(拉流更顺畅)。本文仅仅记录一次网络调试经验以及网上查找的一些结论性的内容。对于两种tcp拥塞控制算法的具体实现不做深究,更多的是了解两种算法的表现情况及使用场景。

2023-03-25 22:39:44 1287

原创 数据在协议栈传送过程中分片和重组解析

MTU是数据链路层的概念,指数据链路层对数据帧长度的限制。以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。这个1500字节被称为链路层的MTU(最大传输单元)。但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区。并不包括链路层的首部和尾部的18个字节。所以,事实上这个1500字节就是网络层IP数据报的长度限制。因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节。

2023-03-25 21:31:30 1918 1

原创 TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)

TCP快速重传和超时重传都会面临到一个重传什么包的问题,因为发送端也不清楚丢失包后面传送的数据是否有成功的送到。主要原因还是对于TCP的确认系统,不是特别的好处理这种不连续确认的状况了,只有低于ACK number的片段都被收到才有进行ACK,out-of-order的片段只能是等待,同时,这个时间窗口是无法向右移动的。假设服务器给客户端发送了序号为0-1000的数据包,客户端只收到0-800和820-1000的数据,序号为801-819的数据缺失。

2023-03-21 22:51:50 2949

转载 进程调度之实时调度策略(SCHED_FIFO、SCHED_RR、MAX_RT_PRIO实时优先级)

Linux提供了两种实时调度策略:SCHED_FIFO和SCHED_RR普通的、非实时的调度策略是SCHED__NORMAL借助调度类的框架,这些实时策略并不被完全公平调度器来管理, 而是被一个特殊的实时调度器管理。具体的实现定义在文件kernel/sched_rt.c中,在接下来的内容中我们将讨论实时调度策略和算法。

2022-12-15 21:58:14 2455

原创 从内核角度理解Linux进程和线程的区别

本文档基于Linux5.10.61版本,从内核角度探讨进程和线程的区别。进程和线程的概念我们并不陌生,线程又被称为轻量级进程LWP(Light Weight Process)。进程创建主要使用的是fork()和vfork()系统调用,而线程创建使用的是C库里的pthread_create(),这三个最终都会调用到内核的kernel_clone()函数。在第3小结,我们会详细介绍kernel_clone()的实现流程。

2022-12-15 21:45:19 242

原创 Linux性能调优之perf使用方法

本文档主要记录Linux内核perf工具的使用方法以及遇到的问题。

2022-12-15 21:05:04 3267

转载 Flash的读写特点

如图的 8-pin 是较常用的一种封装. 各 pin 的意义:CS:chip select, 芯片使能引脚. CS拉高时, 芯片处理省电模式, 各数据引脚(D0/D1/D2/D3)处理高阻态;CS拉低时芯片工作, 数据引脚可以传输数据。DO:(在CLK下降沿)输出数据或状态. 正常情况下只有DI/DO作为IO引脚, 启用 Quad 模式需要置QE(Quad Enable)位. QE=1时, WP和HOLD分别变为IO2,IO3.WP:低电平有效, 保护状态寄存器不被写入。GND:接地。

2022-12-15 20:42:17 716

转载 nor Flash和nand Flash的区别

flash 按照结构可以分为 nor flash 和 nand flash两大类。

2022-12-15 20:23:12 4156

原创 Linux内存管理--基本概念

每个进程有它自己的PGD( Page Global Directory),它是一个物理页,并包含一个pgd_t数组。其定义见。进程的pgd_t数据见 task_struct -> mm_struct -> pgd_t * pgd;为了存储保护位,pgprot_t被定义,它拥有相关的flags并经常被存储在page table entry低位(lower bits),其具体的存储方式依赖于CPU架构。每个pte_t指向一个物理页的地址,并且所有的地址都是页对齐的。

2022-10-11 22:34:24 574

转载 Linux内存管理 之 KSM功能介绍

共享内存的概念在现代操作系统中很常用了,比如,一个程序启动时会与父进程共用它的全部内存。当其中一个进程发生变化时,就会触发写时复制,把原来的内容写入到新的内存页中,再进行修改。这时其他的未改动的页面仍然是共享的。在执行完exec之后所有的页面不再共享,父子进程各有各的物理页。共享内存是进程间通信的一种手段,多个进程的地址空间共享同一块物理内存,共享内存的进程在进行修改之后同样也会修改物理内存。当linux启用了KSM之后,KSM会检查多个运行中的进程,并比对它们的内存。

2022-10-11 21:53:24 3359

转载 Linux内存管理 之 KSM代码实现

关键词:KSM、匿名页面、COW、madvise 、MERGEABLE、UNMERGEABLE。KSM是Kernel Samepage Merging的意思,用于合并内容相同的页面。在虚拟化环境中,同一台主机上存在许多相同OS和应用程序,很多页面内容可能是完全相同的,因此可以被合并,从而释放内存供其它应用程序使用。KSM允许合并同一个进程或不同进程之间内容相同的匿名页面,这对应用程序是不可见的。

2022-10-11 21:34:23 848

转载 【亲测好用,墙裂推荐】精确制导 --- 把linux内核源码中需要的代码导入Source Insight

不知道大家在做Linux内核或者驱动相关开发的时候有没有碰到这样的情况,一个最新的Linux内核大约有5万多个文件,我们用Source Insight对内核创建项目工程然后建立链接,会发现一个整个项目有2个G左右的大小,而且在查找函数的调用往往会被其他没有编译进内核的文件所干扰。经过查找我发现了一个能够精准导入内核文件的方法。本文的导入脚本是从别人的项目中提取出来的,链接:。

2022-09-15 22:44:46 980

转载 Linux命令 之 find & grep配合使用

1.使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配,打印出不匹配的行。2.或者更简单一些,直接使用–exclude-dir选项,即指定排除目录,注意svn前的 .find ~ -type d -print #查找所有目录。b) -perm:按照权限查找文件。e)-group和-nogroup。a) -name:按照文件名查找。d) -user和-nouser。

2022-09-15 22:30:37 2890

原创 linux系统特殊进程简介——idle、init和kthreadd进程

Linux下有3个特殊的进程:idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)。

2022-09-04 19:41:31 1497

原创 一文弄懂printf函数从用户态到内核态的执行流程

我们经常使用C库的printf函数,花时间整理一下从用户态到内核态的整个流程,涉及libc、系统调用、tty驱动、console等多个方面。

2022-09-04 19:30:56 2332 1

转载 Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,GPIO 的操作接口包括 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。文件 IO 方式操作 GPIO,使用到了4个函数 open、close、read、write。

2022-08-23 22:26:28 2182

原创 Linux内核MMC_TEST使用方法

或者CONFIG_MMC_BLOCK=y, CONFIG_MMC_TEST=y。如果选用后一种配置,需要再系统起来后,在总线driver中手动bind和unbind,见后面;2.CONFIG_DEBUG_FS=y,CONFIG_DEBUG_KERNEL=y,这两项在我们项目的kernel的defconfig中已经配置,所以不需要进行改动;

2022-08-23 22:13:47 1121

转载 linux下使用gettimeofday获取当前时间的注意事项

在32位下为4个字节,能够表示的最大正整数是2147483647,而这个表示的时间最大能到2038-01-19 03:14:07,超过了之后就变为-2147483648,这就是linux2038年的问题。这时会用到gettimeofday函数,它可以返回自1970-01-01 00:00:00到现在所经历的秒数(这里是Coordinated Universal Time (UTC),以前也叫Greenwich Mean Time (GMT),该函数的第二个参数应该为NULL),

2022-08-23 22:07:29 824

原创 Linux命令 之 vim命令

使用vi编辑器编辑长文件时,有时需要根据某个字符,快速定位到某一行,这里就需要使用使用类似查找的命令;在vi模式下,直接输入“/”斜杠;再输入要查找的字符串,然后回车即可;方法如下1、命令模式下输入“/字符串”,例如“/hive.sit”2、如果查找下一个,按“n”即可。...

2022-07-29 10:26:14 2342

转载 64位CentOS系统中安装32位开发库

项目中,实现嵌入式设备开发,后台应用开发,均采用C/C++语言,基于Linux的开发;所不同的是,嵌入式平台采用32位Linux系统,应用服务程序采用64位Linux系统。开发过程需要将两种开发环境,在同一台物理机上实现。嵌入式开发环境构建时,安装的交叉编译环境,需要32位的开发库。本文中,提供一种在线安装方法(需要root用户权限进行):如果采用ubuntu环境,执行如下命令(同样需要root用户权限):...

2022-07-10 13:27:11 1514

转载 错误:为 repo ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist

错误:为 repo ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist执行sudo yum install -y yum-utils出现如下错误的错误:为 repo ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist原因在2022年1月31日,CentOS团队终于从官方镜像中移除CentO

2022-07-10 13:25:12 802 1

原创 ln: 无法创建符号链接‘asm‘: 不支持的操作

[root@localhost u-boot-2012.10]# make s5p_goni_configConfiguring for s5p_goni board…ln: 无法创建符号链接’asm’: 不支持的操作make: *** [Makefile:716:s5p_goni_config] 错误 1

2022-07-10 12:43:23 1761 1

转载 gcc 编译参数 -fPIC 作用

fPIC 的全称是 Position Independent Code, 用于生成位置无关代码。什么是位置无关代码,个人理解是代码无绝对跳转,跳转都为相对跳转。即使不加 fPIC 也可以生成 .so 文件,但是对于源文件有要求,例如因为不加 fPIC 编译的 so 必须要在加载到用户程序的地址空间时重定向所有表目,所以在它里面不能引用其它地方的代码。。。...

2022-07-10 11:15:19 555

原创 交叉编译链安装及工具集(gcc、readelf、objdump、objcopy和strip等)使用方法

主要解决编译链程序和目标程序运行环境不同的问题,如在x86环境上使用编译工具进行编译汇编链接,而生成的程序需要运行在ARM开发板上。

2022-07-03 00:03:02 6482

转载 Linux系统查看C库函数

大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题...

2022-07-01 16:39:53 890

原创 MQTT协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、

2022-06-05 23:05:55 205

转载 Linux命令 之 wc命令

wc(word count)命令用于统计文件字节、字符、单词与行的数量。3. 选项说明4. 示例(1)使用 wc 统计 /etc/passwd 行数、单词数和字节数。40 是行数,45 是单词数,1719 是字节数。(2)wc 的命令比较简单,每个参数使用如下:(3)从文件读取输入文件名。如果有多个文件名,并且希望 wc 从一个文件中读取它们,那么使用 -files0-from 选项。这里将文件名称必须以 NULL 字符结束写在文件fileNames.txt 中。在 vim 中输入 NULL

2022-06-05 17:04:24 8246

转载 Linux命令 之 grep命令

grep(Globally search a Regular Expression and Print)是 GNU 开发的一款免费开源的文本搜索工具。grep 家族包括 grep、egrep 和 fgrep,其功能是在给定的文件中查找一个指定格式或者内容的字符串,并将匹配的字符串所在行打印出来。如果不指定任何文件名称或给定的文件名为连字符 -,则从标准输入设备读取文本,然后在这些文本中进行查找。grep 支持正则表达式表示待搜索的文本,完成文本匹配。3. 选项说明注意,长选项的参数对于短选项也是必须的。

2022-06-05 16:45:02 1088

原创 Linux命令 之 sed命令

sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern Space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。文件内容并没有改变,除非使用-i选项。sed 主要用来编辑一个或多个文件,简化对文件的反复操作或者用来编写转换程序等。sed 功能同 awk 类似,差别在于,sed 简单,对列处理的功能要差一些,awk 功能复杂,对列处理的功能比较强大。

2022-06-05 16:12:17 507

原创 利用GDB分析死锁问题

互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有

2022-05-31 23:56:05 1816

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除