linux
文章平均质量分 57
linux
keep study
这个作者很懒,什么都没留下…
展开
-
Linux进程间的通信方式(1)
进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。进程通信的概念进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。进程通信的应用场景数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,一个进程对共享数原创 2021-08-18 15:18:49 · 97 阅读 · 0 评论 -
linux 应用层定时器
一、alarm如果不要求很精确的话,用 alarm() 和 signal() 就够了。unsigned int alarm(unsigned int seconds)专门为SIGALRM信号而设,在指定的时间seconds秒后,将向进程本身发送SIGALRM信号,又称为闹钟时间。进程调用alarm后,任何以前的alarm()调用都将无效。如果参数seconds为零,那么进程内将不再包含任何闹钟时间。如果调用alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。示例:原创 2021-06-04 11:29:04 · 715 阅读 · 0 评论 -
多进程单线程和多线程单进程有何优点,有何缺点
一个大型服务,可以设计成多个进程,每个进程只有一个线程,也可以设计成只有一个进程,而这一个进程就包含了很多线程。这2种不同的设计方法都有何优点,都有何缺点。在什么时候该选择哪种设计方法?欢迎大家来探讨探讨。同进程的多个线程之间关系比较紧密,容易相互通讯和交换数据,也便于管理,相互的影响也比较大。多进程独立性强,相互影响较小,适合于独立工作,对于多个进程都要使用的代码,可以做成DLL的形式,避免浪费资源。...原创 2021-05-13 09:15:42 · 1056 阅读 · 0 评论 -
Linux驱动之定时器
Linux的内核中定义了一个定时器的结构:#include<linux/timer.h>struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long);};利用这个结构我们可以在驱动中很方便的使用定时器。一: t.原创 2021-05-08 16:59:18 · 565 阅读 · 0 评论 -
内核驱动poll使用poll_wait阻塞/唤醒
1. 应用阻塞应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上#include <linux/poll.h>static inline void poll_wait (struct file *filp, wait_queue_head_t *wait_address, poll_table *P);filp:设备文件信息的 struct file.原创 2021-05-08 16:36:43 · 1210 阅读 · 0 评论 -
工作队列(workqueue) create_workqueue/schedule_work/queue_work
项目需要,在驱动模块里用内核计时器timer_list实现了一个状态机。郁闷的是,运行时总报错“Scheduling while atomic”,网上搜了一下:"Scheduling while atomic" indicates that you've tried to sleep somewhere that you shouldn't - like within a spinlock-protected critical section or an interrupt handler.改进程原创 2021-05-08 15:52:05 · 654 阅读 · 0 评论 -
linux线程(9)----linux高级编程之线程间的通信 线程清理处理程序(pthread_cleanup_push和pthread_cleanup_pop)
linux高级编程之线程间的通信(pthread_cleanup_push和pthread_cleanup_pop)线程可以安排他退出时需要调用的函数,这与进程可以用atexit函数安排进程退出时需要调用的函数是类似的。这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说他们的执行顺序与他们注册的顺序相反。pthread_cleanup_push和pthread_cleanup_pop函数原型如下:头文件:#includ...原创 2021-05-08 13:36:51 · 233 阅读 · 0 评论 -
Linux下 /sys/class的读写访问
/dev 下的文件是真实的设备,有UDEV在运行时创建。 /sys/class 是由kernel在运行时导出的,目的是通过文件系统暴露出硬件的层级关系。查看网络状态例如: 通过ifconfig查看网卡情况: ifconfig----------------------------------------------------------------------------wlan7 Link encap:Ethernet HWaddr b4:6b:fc:ba:52:**原创 2021-04-26 16:17:52 · 2339 阅读 · 0 评论 -
有关/proc/uptime这个文件里两个参数所代表的意义:
有关/proc/uptime这个文件里两个参数所代表的意义:[root@app~]#cat /proc/uptime3387048.81 3310821.00第一个参数是代表从系统启动到现在的时间(以秒为单位):3387048.81秒 = 39.20195381944444天,说明这台服务器已连续开机39.20195381944444天第二个参数是代表系统空闲的时间(以秒为单位):3310821.00秒 = 38.3196875天,说明这台机器从开机到现在一共只有38...原创 2021-01-21 11:32:45 · 151 阅读 · 0 评论 -
C语言打印当前所在函数名、文件名、行号
C语言打印当前所在函数名、文件名、行号printf("[%s %s] %s: %s: %d\n", \ __DATE__, __TIME__, __FILE__, __func__, __LINE__);内核驱动中:#ifdef MY_DEBUG printk("[%s] %s: %d\n", \ __FILE__, __FUNCTION__, __LINE__);#endif说明:宏 功能 __FILE__ 当前程序文件名的字符串 __FU原创 2021-01-07 16:17:19 · 2096 阅读 · 0 评论 -
Linux进程 进程间通信 ---- 命名管道(FIFO文件/name pipe)(1)
命名管道出现的背景: 命名管道(FIFO文件/name pipe),之前提到的管道,虽然能够实现进程间的通信,但是局限性也很明显。首先,这个管道只能在具有血缘关系的进程之间通信;第二,他只能实现一个进程写,一个进程读,而如果需要两者同时进行时,就得重新打开一个管道。 为了使任意两个进程之间能够通信,就提出了命名管道命名管道的特点: 1、与管道的区别:提供了一个路径名与之关联,以FIFO文件的形式存储于文件系统中,能够实现任何两个进程之间通信。而匿名管道对于文件系统是不可见的,它...原创 2020-11-25 22:19:03 · 291 阅读 · 0 评论 -
linux多线程 -- 读写互斥锁(7)
一、读写锁是什么?读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的。读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,读写锁的使用规则:只要没有写模式下的加锁,任意线程都可以进行读模式下的加锁; 只有读写锁处于不加锁状态时,才能进行写模式下的加锁; 读写锁也称为共享原创 2020-11-25 14:08:24 · 277 阅读 · 0 评论 -
linux 进程 孤儿进程与僵尸进程产生及其处理(1)
在探讨这个问题之前,我们先来弄清什么是进程。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。通俗点讲,进程是一段程序的执行过程,是个动态概念。一:进程状态程序运原创 2020-11-24 16:06:39 · 316 阅读 · 0 评论 -
SPI 接口(1)
1、什么是SPI?SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。2、SPI优点支持全双工通信通信简单数据传输速率块3、缺点没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。4、特点1):高速、同步、全双工、非差分、总线式2):主从机通信模式5、协议通信时序详解1):SPI的通信原理很简..原创 2020-11-19 20:33:24 · 693 阅读 · 0 评论 -
linux 网络编程 基于arm的网络图像传输(1)
一段程序,两个线程:一个完成usb摄像头图像的采集,另一个借助网络实现远程传输。图像采集线程通过调用获取图像的程序完成采集任务;网络传输就是socket编程了。:-)。/******************************************************* * Filename: soket_image.c * Description:Send image by gprs * Author: ly44770 * History: 1.0 * Date: 07/0.原创 2020-11-19 10:11:22 · 383 阅读 · 0 评论 -
linux网络编程 LINUX网卡驱动框架分析(1)
网卡的驱动很简单,就是填充net_device结构体,其应用层到网络协议层内核已经完成了,我们的工作就是填写这个net_device,然后注册就可以了。像STM32 跑裸机或跑ucos的,因为没有tcp、udp协议栈层,所以要移植LWIP小型协议栈修正一下:上面第三步应该是:register_netdev下面代码实现一个虚拟网卡,这里没有实际的网卡,只是把发出去的数据模拟远程回复过来,把数据转发到接收缓存里面,也就是回环操作。/** 参考 drivers\net\cs89x.原创 2020-11-17 14:54:23 · 209 阅读 · 0 评论 -
linux网络编程 socket常用函数(2)
======== TCP========TCP_Serversocket()bind()listen()accept()write()read()close() 和shutdown()TCP_Clientsocket()connect()send() 和recv()close() 和shutdown()======== UDP========UDP_Serversocket()bind()sendto() 和recvfrom(...原创 2020-11-17 14:32:14 · 189 阅读 · 0 评论 -
Linux 线程同步的三种方法(6)
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。 静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 动态分配:int pthread_mutex_init(pthread_原创 2020-11-17 10:09:26 · 99 阅读 · 0 评论 -
linux下的线程属性(5)
pthread_attr_init,函数,作用是初始化一个线程对象的属性,需要用pthread_attr_destroy函数对其去除初始化。头文件#include<pthread.h>函数声明int pthread_attr_init(pthread_attr_t *attr);返回值返回0,表示函数初始化对象成功。失败时返回一个错误代码。参数说明指向一个线程属性结构的指针,结构中的元素分别对应着新线程的运行属性。属性对象主要包括是否绑定、是否分离、堆原创 2020-11-17 09:38:53 · 77 阅读 · 0 评论 -
Linux线程优先级(4)
Linux内核的三种调度策略: 1.SCHED_OTHER 分时调度策略 2.SCHED_FIFO 实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 3.SCHED_RR实 时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置: 首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即...原创 2020-11-17 09:27:44 · 128 阅读 · 0 评论 -
linux内核启动时间简单优化(5)
之前针对linux启动时间按照celinux上的措施优化了一下,以下是度量数据(和具体硬件相关可能有出入) Kernel->initrd 3950mS Printk打印 在bootldr里面指定quiet启动 -920mS Loops_per_jiffies 计算 在bootldr里面指定lpj= -230mS pty_i..原创 2020-11-16 20:30:12 · 436 阅读 · 0 评论 -
linux启动时间优化措施(4)
在我们进行linux系统优化时,可以从以下几方面入手1、如果有硬性的启动时间要求,比如开机时间要求达到10s以内,那么就必须要硬件上面支持。比如使用一般的 nand flash想达到那么快的速度那是不可能,至少要20秒以上,所以这个时候,就必须要使用inand来实现。2、当硬件确定支持启动时间要求后,软件方面可以由以下方面入手1)bootloader的启动,由于bootloader在启动过程中会有判断是否进入命令模式,这个时候,可以把这个倒数的时 间去掉(建...原创 2020-11-16 20:27:51 · 1179 阅读 · 0 评论 -
linux内核启动优化(3)
原文前言为了提高开机时间,我们需要优化的部分有:1)bootloader启动速度2)Linux内核启动速度3)文件系统启动速度4)Nand(假设你的Storage使用nand)的读速度5)应用框架启动速度等等。本文的内容为自己最近对某内核做的一个优化。供参考。背景知识Linux内核的执行起点在(arch/arm/kernel/head.S),首先会初始化硬件(所做不多...原创 2020-11-16 20:26:18 · 851 阅读 · 0 评论 -
linux启动优化 内核裁剪详细说明(2)
第一部分Linux内核裁减(1)安装新内核:i)将新内核copy到/usr/src下并解压:#tar -zxvf linux-2.6.38.4.tar.gzii) 将名为linux的符号链接删掉,这是旧版本内核的符号链接.#ln -s linux-2.6.38.4 linux(2)设置内核.# cd /usr/src/linux# make mrproper -----删除不必要的文件和目录.#make menucon...原创 2020-11-16 20:12:37 · 6916 阅读 · 0 评论 -
linux 启动时间优化,内核裁剪(1)
linux系统启动优化5个部分:1,开机时钟时序优化;2,Uboot优化;3,Kernel优化;4,Rootfs优化;5,应用程序优化;ROM Code : NAND内固化好的一段代码,主要作用是初始化CPU、DDR等硬件。U-Boot : 初始化串口、网口等硬件设备,并引导系统加载内核镜像到DDR中执行。Kernel : 负责内核子系统初始化,挂载根文件系统,加载各模块的驱动程序。Rootfs : linux内核外围的一个应用环境。Apps : 包括图丁系统以...原创 2020-11-16 19:53:54 · 1828 阅读 · 0 评论 -
linux多线程——linux线程间通信及同步机制总结(3)
线程间的通信有两种情况:1、一个进程中的线程与另外一个进程中的线程通信,由于两个线程只能访问自己所属进程的地址空间和资源,故等同于进程间的通信。2、同一个进程中的两个线程进行通信。本文说的就是第二种情况。关于进程间通信(IPC)可以看我的另一篇博文http://blog.csdn.net/a987073381/article/details/52006729比起进程复杂的通信机制(管道、匿名管道、消息队列、信号量、共享内存、内存映射以及socket等),线程间通信要简单的多。..原创 2020-11-16 10:58:55 · 259 阅读 · 0 评论 -
linux多线程 中pthread_join()与pthread_detach()详解(2)
前言:1.linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。2.unjoinable属性可以在pthread_create时指定,或在线程创建原创 2020-11-16 10:17:24 · 281 阅读 · 0 评论 -
linux 多线程(1)
多线程越深入的学习之后,经常能听到这么一个词----多线程。之前的学习经常会提到多进程,父进程在忙不过来的情况下,会创建子进程进行帮忙,这样就是一个多进程的任务。那么什么是多线程呢?线程概念在传统的操作系统中,进程就是一个运行中程序的描述信息----pcb,控制程序的运行。在Linux操作系统下,pcb是进程,因为Linux下线程是以进程pcb模拟实现线程;也有人称为轻量级进程。但是Linux下没有为线程设计一个pcb来控制线程的运行。上图介绍了线程组是个什么组合。线程组理解原创 2020-11-16 10:07:32 · 147 阅读 · 0 评论 -
WIFI wpa_supplicant的移植和使用(3)
2. 使用WIFI网卡: iw, wpa_supplicant,dhcp2.1 概念: 认证/加密无线加密的多种方法及其区别(WEP WPA TKIP EAP)http://wenku.baidu.com/link?url=DlLntlD490hAeIIbE-CO4QfAzgUC-gOTA7FCwS_XanOJMFzkyhQrFIB38ULKCcQIVFyDqqSWNWyq5kVtYAoJKjjf9pmZLu17-hVQ922WeaG以手机上WIFI热点为例,有4种常用的"认证/加密"a. op原创 2020-11-14 21:57:45 · 658 阅读 · 0 评论 -
WIFI wpa_supplican介绍及使用(2)
一、wpa_supplicant是什么目前越来越多的设备载体开始带有无线功能,而对无线网络的配置现在可以使用wireless-tools或者wpa_supplicant。二者区别如下:1、wpa_supplicant不支持所有驱动,目前也只能连接到已经配置好ESSID的。2、wireless-tools几乎支持所有的驱动,但不能连接到那些只支持WPA的AP。目前有些芯片厂商会定制自己的WIFI协议处理模块,对无线网络的配置一般会基于wireless-tools开发一些私有的iwpri...原创 2020-11-14 21:46:37 · 757 阅读 · 0 评论 -
WIFI的WIFI AP 和 STA的区别(1)
WIFI AP:就是wifi热点模式wifi STA:Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式原创 2020-11-14 21:28:34 · 688 阅读 · 0 评论 -
Linux环境变量配置文件修改
Linux下的环境变量分系统级别和用户级别,所以修改的过程中根据需求来修改。一、系统级别修改1、/etc/profile: 此文件是系统启动时,环境变量加载的第一个文件,是一个全局的。有些人也会修改/etc/bash.bashrc文件,但是你会发现/etc/profile其实就是调用的bash.bashrc文件。2、/etc/environment:此文件时系统加载/etc/profile之前加载设置的环境变量。执行source /etc/profile即可使修改的文件立即生效而不用重新打...原创 2020-11-14 21:25:30 · 1187 阅读 · 0 评论 -
BT656 bt601
ITU-RBT.601和ITU-RBT.656国际电信联盟(International Telecommunication Union)无线通信部门(ITU-R)制定的标准。严格来说,ITU-R BT.656应该是隶属ITU-R BT.601的一个子协议。ITU-R BT.601是演播室数字电视编码参数标准,而ITU-R BT.656 则是ITU-R BT.601附件A中的数字接口标准,用于主要数字视频设备(包括芯片)之间采用27Mhzs并口或243Mbs串行接口的数字传输接口标准。BT.656并行接口除.原创 2020-10-29 17:51:34 · 1225 阅读 · 0 评论 -
rzsz 移植
解压rzsz 文件。使用tar xvzf 命令进行解压。使用-C选项可以解压到指定目录下[root@codeMonkey rzsz]# tar xvzf rzsz-3.48.tar.gz -C /root/ARM/3、修改Makefile 文件。将第3行和第4行修改成如下所示:CC=arm-linux-gccOFLAG= -O -DREGISTERED -stat...原创 2019-07-05 15:58:01 · 448 阅读 · 0 评论 -
ARM移植rz和sz命令
摘要: 本文讲的是ARM移植rz和sz命令, 嵌入式Linux移植rz和sz命令 rz、sz是Linux/Unix 同Windows 进行ZModem 文件传输的命令行工具,windows 端需要支持ZModem 的telnet/ssh 客户端,例如:SecureCRT教程 云栖大会 Mysql 备案 文档 域名 whois查询 PHP教程 备份 互联网大学 云教程嵌入式Linux移植rz...原创 2019-01-22 21:28:25 · 1307 阅读 · 1 评论 -
超详细shell脚本编程快速入门
文章目录1.shell简介 1.1 什么是shell 1.2 shell脚本 1.3 运行shell脚本 1.4 shell注释 1.5 shell编写的基本步骤 2.shell变量 2.1 命名变量 2.2 使用变量 2.3 变量类型 2.4 变量操作 3.shell字符串 3.1 字符串类型 3.2 字符串操作 4.shell数组 4.1 定义数组 4.2 数组操作 5.shell传递参数 6.shell运算符转载 2020-10-29 15:38:08 · 75359 阅读 · 18 评论 -
Shell 入门
1. history 5 # 显示5条历史消息2. !# # 历史替换命令3. !! # 上一条命令4. !1046 # 执行./bash_history中的第1046条命令5. !c # 可能会执行 cat cd等6. * # 星号可以匹配任意个字母,但是不包括原点(.)和斜线(/)7. ? # 问号匹配一个字母8. [] # 一对方括号里面,填的是字符组, # ...原创 2020-10-29 11:39:25 · 148 阅读 · 0 评论 -
linux workqueue
https://www.cnblogs.com/sky-heaven/p/5847519.html1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个 数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化...转载 2019-04-22 16:46:12 · 213 阅读 · 0 评论 -
linux平台下 延迟工作队列实例
http://blog.chinaunix.net/uid-25445243-id-4174402.html 工作队列(work queue)是Linux内核中将操作延期执行的一种机制。因为它们是通过守护进程在用户上下文执行,函数可以睡眠的时间,与内核是无关的。在内核版本2.5开发期间,设计了工作队列,用以替换此前的keventd机制。 这种机制和BH或Tasklet...转载 2019-05-16 09:13:41 · 707 阅读 · 0 评论 -
Linux中文件MD5校验
https://blog.csdn.net/weixin_33748818/article/details/85934971md5sum命令用于生成文件的md5数字摘要,并可以验证文件内容是否发生了改变,间接地还可以检验两个文件内容是否完全相同。因为md5sum是读取文件内容来计算校验码的,因此只能验证文件内容,而无法验证文件属性。[root@xuexi ~]# cp -a /etc/f...转载 2019-05-28 09:39:54 · 944 阅读 · 0 评论