Linux
文章平均质量分 77
Linux学习笔记
IT味番茄
记录我的嵌入式学习生涯
展开
-
linux性能监控命令
原创 2023-08-21 09:55:36 · 293 阅读 · 0 评论 -
互斥锁、自旋锁、读写锁和文件锁
互斥锁、自旋锁和读写锁用于解决多线程同步的问题文件锁适用于多个进程同时操作同一文件,这时很容易导致文件中的数据发生混乱。原创 2023-08-20 19:09:13 · 425 阅读 · 0 评论 -
Linux进程调度
所有待执行进程都以vruntime为key放到一个由红黑树组成的队列中,每次被调度执行的进程,都是这个红黑树的最左子树上的那个进程,即vruntime时间最少的进程,这样就保证了所有进程的相对公平。实时进程代表那些需要及时响应的进程,否则用户就会感觉到延时,比如你的终端等待你的输入,你的subline等待你的输入,当你交互的时候,这些进程都需要及时的响应。实时的进程因为是特殊的进程,不能等待太久,所以实时进程的优先级在0-99直接,普通进程的优先级在100-139之前。以什么样的数据结构存储的呢?原创 2023-08-20 18:40:52 · 220 阅读 · 0 评论 -
虚拟内存机制2
转载自公众号:在下小神仙。原创 2023-08-20 18:38:43 · 158 阅读 · 0 评论 -
虚拟内存机制1
Linux 提出 SWAP 的概念,Linux 中可以使用 SWAP 分区,在分配物理内存,但可用内存不足时,将暂时不用的内存数据先放到磁盘上,让有需要的进程先使用,等进程再需要使用这些数据时,再将这些数据加载到内存中,通过这种”交换”技术,Linux 可以让进程使用更多的内存。在进程加载系统库时,总是先分配一块内存,将磁盘中的库文件加载到这块内存中,在直接使用物理内存时,由于物理内存地址唯一,即使系统发现同一个库在系统内加载了两次,但每个进程指定的加载内存不一样,系统也无能为力。原创 2023-08-20 18:31:47 · 149 阅读 · 0 评论 -
五分钟粗略了解Linux内核
很多时候数据是操作的内存的数据,计算机不会频繁的将数据刷到磁盘。你可以把内核看做一个Manager, 这个Manager管理资源的共享和隔离,例如给每个进程分配多大的资源。你可以把内核看作一个库,例如read write这些函数,内核提供了许多系统调用,供我们的应用程序使用。进程之间操作资源的时候,不能相互持有对方的资源而不释放,所以还需要有锁的机制。我们的电脑为什么可以连接usb和手机,是因为我们的内核有设备驱动驱动。当你使用微信的时候,你的第一想法是不是摇一摇,先找下好友哈哈。是不是也是需要管的呀。原创 2023-08-20 18:24:33 · 219 阅读 · 0 评论 -
互斥锁、自旋锁、读写锁和文件锁
开发过程中,最常见的就是互斥锁的了,互斥锁加锁失败时,会用「线程切换」来应对,当加锁失败的线程再次加锁成功后的这一过程,会有两次线程上下文切换的成本,性能损耗比较大。如果我们明确知道被锁住的代码的执行时间很短,那我们应该选择开销比较小的自旋锁,因为自旋锁加锁失败时,并不会主动产生线程切换,而是一直忙等待,直到获取到锁,那么如果被锁住的代码执行时间很短,那这个忙等待的时间相对应也很短。如果能区分读操作和写操作的场景,那读写锁就更合适了,它允许多个读线程可以同时持有读锁,提高了读的并发性。原创 2023-05-04 17:40:18 · 307 阅读 · 0 评论 -
进程内存分布(详解)
由编译器自动分配释放,速度较快用来存储函数调用时的临时信息的结构,存放为运行时函数分配的局部变量函数参数返回数据返回地址等。这些局部变量等空间都会被释放程序运行过程中函数调用时参数的传递也在栈上进行,如递归调用栈当栈过多的时候,就是导致栈溢出(比如大量的递归调用或者大量的内存分配)栈是向低地址扩展的数据结构,是一块连续的内存的区域,空间有限。原创 2023-04-26 22:36:02 · 3169 阅读 · 1 评论 -
Linux -- E37: No write since last change E162: No write since last change for buffer
本文介绍如何解决vim编辑文件时的报错:E37: No write since last change E162: No write since last change for buffer。原创 2023-04-22 14:37:27 · 1252 阅读 · 0 评论 -
Linux access函数
后三种可以使用或“|”的方式,一起使用,如W_OK|R_OK 返回值:成功0,失败-1。mode:指定access的作用,取值如下。pathname 是文件的路径名+文件名。X_OK 值为1,判断对文件是可执行权限。W_OK 值为2,判断对文件是否有写权限。R_OK 值为4,判断对文件是否有读权限。F_OK 值为0,判断文件是否存在。原创 2023-04-17 20:14:46 · 221 阅读 · 0 评论 -
ARM板(树莓派)使用摄像头——fswebcam
在上面的代码语法中,-r代表图像分辨率,--jpeg代表图像的格式类型& 85质量标准,-D代表捕获前的延迟设置。我这边好像看不出来,一般来讲插摄像头之前查看一下,插上摄像头,看那个多出来了,就是那个了一般来讲,是。fswebcam是一款小型摄像头的控制库,我们可以通过它来抓取图片;抓拍一张图,存放与当前目录,并保存为 jpg 格式。原创 2023-04-16 00:04:07 · 1193 阅读 · 1 评论 -
linux运行命令怎么免输入YES和回车?
说明:echo用于显示一行文本,y是要显示的内容的。|是管道符,作用是将管道符左边命令的输出作为管道符右边命令的输入。这样就可以自动安装了。说明:sudo用于提升权限,apt-get是debian系列的包管理程序,install。linux命令免输入yes和回车,可以借助于echo命令。进行安装操作,emacs要是安装的软件。2、要免输入,则可以通过如下命令安装。1、比如现在要安装emacs。原创 2023-04-14 22:31:07 · 558 阅读 · 0 评论 -
linux内核结构介绍
对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。 shell(壳)是一个特殊的应用,也经常被称为 。可以理解为是一个UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的"胶水",让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。一个shell对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像下图一样,是一原创 2023-04-04 19:16:08 · 150 阅读 · 0 评论 -
linux文件系统、文件系统结构、虚拟文件系统
文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法。根分区/根目录windows对于分区的管理较为“随意”,因为其面向普通PC用户。C,D盘随意存放文件。而linux较为严格,按照功能来分区,大多面向开发者。bootloader:启动代码para:启动代码向内核传递参数的位置kernel内核分区(前面内核编译时SD卡映射的data1)根分区/根目录:文件系统结构(前面内核编译时SD卡映射的data2)原创 2023-04-04 14:30:41 · 139 阅读 · 0 评论 -
scp登录The authenticity of host 192.168.0.xxx can‘t be established. 的问题
因学习交叉编译时需要在windows下的虚拟机Linux系统与另外一台Linux直接传输文件,但用scp传输时老是弹出如下错误,折腾了半天总算解决了。原创 2023-04-02 20:45:11 · 726 阅读 · 0 评论 -
linux文件编程—— main函数传参、myCp(配置成环境变量)、修改配置文件、将整数和结构体数组写到文件
其中$PATH也可替换成上面图片所显示的环境变量,即:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin。在此之前,还可以创建一个文件夹,专门用来存放我们自己写的命令,如myCp,myLs等等,方便全局使用,而不仅仅限于所在路径下使用了。打开文件file1,发现像是乱码,不用担心,这只是字符显示形式,不影响程序的执行结果。(1)打开src源文件(要被复制的文件)原创 2023-04-01 23:00:15 · 678 阅读 · 0 评论 -
linux分文件编程、静态库与动态库
库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。静态库:在程序执行之前(编译)就加入到目标程序中动态库:是在程序执行时动态(临时)由目标程序去调用。动态库与共享库是同一个东西(linux上叫共享库,文件后缀.so)(windows上叫动态库,文件后缀.dll。原创 2023-04-01 22:46:04 · 87 阅读 · 0 评论 -
FTP云盘
(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是File TransferProtocol(文件传输协议)。程序运行,服务端不断接收客户端指令,服务端可同时处理多个客户端接入并对指令作出解析,并把执行结果返回给客户端,客户端根据服务端对指令的解析并把由服务端传递过来的处理信息通过客户端呈现给客户,实现文件的各种操作。原创 2023-03-31 20:22:52 · 384 阅读 · 0 评论 -
Linux系统编程-网络编程
前面几篇文章的进程间通讯均基于同一台Linux内核实现的,因此无法实现多机(和手机、单片机、X86架构等)通讯,因此引入网络通讯,入门先学习Socket(又叫做套接字)网络编程。Socket服务器开发步骤1、创建套接字socket();2、为套接字添加信息(IP地址、端口号)bind();3、监听网络连接listen();4、监听到有客户接入,接受一个连接accept();5、数据交互 write()\read();6、关闭套接字,关闭连接close();Socket客户端开发步骤。原创 2023-03-30 12:07:44 · 381 阅读 · 0 评论 -
Linux系统编程-线程
而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。首先有两把锁,当线程1获得一把锁的时候,想要获得第二把锁,而此时线程2获得了线程1想要的第二把锁,同时线程2想获得线程1的锁,造成了两个线程都想获得对方已经获得的锁,这样就造成了死锁。原创 2023-03-28 23:35:21 · 181 阅读 · 0 评论 -
Linux系统编程-进程间通信(管道、消息队列、共享内存、信号、信号量)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)消息队列共享内存、信号、信号量、Socket、Streams等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC。1.信号:对Linux来说就是软中断,与单片机的硬件中断(串口)类似。如在linux中输入 ctrl+c 来停止一个程序。原创 2023-03-28 00:21:17 · 725 阅读 · 0 评论 -
Linux系统编程-进程
创建子进程的目的:复制父进程(此时两个或两个以上进程),父进程等待客户端服务请求,当这种请求到达时,父进程调用fork,让子进程去处理(QQ服务器 客户端 结合Socket网络编程)fork函数调用成功,返回两次:返回值为0,代表当前进程是子进程,非负数为父进程,如果调用失败则返回-1。父进程如果不等待子进程退出 ,在子进程之前就结束了自己的生命,此时的子进程就叫做是孤儿进程。Linux避免系统存在太多的孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。原创 2023-03-26 23:51:55 · 703 阅读 · 0 评论 -
Linux系统编程-文件编程
就是open无缓冲,fopen有缓冲。前者与read, write等配合使用, 后者与fread,fwrite等配合使用。使用fopen函数,由于在用户态下就有了缓冲,因此进行文件读写操作的时候就减少了用户态和内核态的切换(切换到内核态调用还是需要调用系统调用API:read,write);而使用open函数,在文件读写时则每次都需要进行内核态和用户态的切换;表现为,如果顺序访问文件,fopen系列的函数要比直接调用open系列的函数快;如果随机访问文件则相反。原创 2023-03-26 12:40:16 · 95 阅读 · 0 评论 -
做UDEV规则文件实现U盘自动挂载
这条规则的意思是,如果一个设备的内核名称为sda,则条件生效,执行后面的赋值:在/dev下产生一个名为my_root_disk的设备文件,并把设备文件的权限设为0660;规则文件意思:事件是添加设备,子系统名称是usb,子系统名称是block,执行指令mkdir创建文件夹,执行指令mount挂载U盘到路径下。SYSFS{filename}:设备的 devpath 路径下,设备的属性文件 "filename" 里的内容;DRIVER:设备在 devpath 的设备驱动名称,例如:ide-cdrom;原创 2023-03-25 15:37:40 · 867 阅读 · 0 评论 -
Linux守护进程、设备管理器udev
编译完.c文件后运行程序,发现终端并不会被程序所占用,并执行ps -elf |grep tdaemon指令后发现进程已经在系统中运行着,此时在/home/orangepi/路径下发现tdaemon.log文件已经被创建,进入文件发现数据正是想要的数据,证明守护进程已经完美的跑起来了。1、生存周期长【非必须】,一般操作系统启动的时候就启动,关闭的时候就关闭,但并非说你的进程是守护进程,操作系统就知道,然后在操作系统启动时启动它,需要人为的开发工程师在系统启动的时候在开机脚本里去添加脚本去启动这个进程。原创 2023-03-25 15:03:50 · 573 阅读 · 0 评论 -
嵌入式数据库-SQLite
轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据库用于管理多端设备,更加复杂SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDBFirebird是关系型数据库,功能强大,支持存储过程,SQL兼容等。原创 2023-03-22 23:40:09 · 534 阅读 · 2 评论 -
香橙派外设开发,时间函数、超声波、sg90、OLED(i2c)、Linux定时器
安装i2c-tools 指令:sudo apt-get install i2c-tools。从命令运行结果能观察到系统支持I2C-3和I2C-5的驱动,而H616的外设我们看到只有一个IIC接。由 26pin 的原理图可知, Orange Pi Zero 2 可用的 i2c 为 i2c3。:当定时器被设置OK,延时多久时间去执行定时器计时 ,值不能为0!参数1:which指定定时器的定时方式。确认/dev下存在i2c-3的设备节点。一个进程只能创建一个定时器!口,用的是IIC-3。原创 2023-03-22 16:59:59 · 894 阅读 · 0 评论