
Linux
文章平均质量分 84
流水mpc
这个人不是特别懒,不过他什么也没说。
展开
-
Linux Platform驱动模型(二) _驱动方法
在Linux设备树语法详解和Linux Platform驱动模型(一) _设备信息中我们讨论了设备信息的写法,本文主要讨论平台总线中另外一部分-驱动方法,将试图回答下面几个问题:如何填充platform_driver对象? 如何将驱动方法对象注册到平台总线中?正文前的一点罗嗦写驱动也有一段时间了,可以发现,其实驱动本质上只做了两件事:向上提供接口,向下控制硬件,当然,这里的向上并不是直接提供接口到应用层,而是提供接口给内核再由内核间接的将我们的接口提供给应用层。而写驱动也是有一些套路可寻的...转载 2020-07-27 16:13:06 · 421 阅读 · 0 评论 -
如何在Ubuntu上检查一个软件包是否安装
如果你正在管理Debian或者Ubuntu服务器,你也许会经常使用dpkg 或者 apt-get命令。这两个命令用来安装、卸载和更新包。在本篇中,让我们看下如何在基于DEB的系统下检查是否安装了一个包。要检查特定的包,比如firefox是否安装了,使用这个命令:dpkg -s firefox示例输出:Package: firefox Status: install ok installed Priority: optionalSection: web Installed-Size: 9.转载 2020-06-15 16:47:07 · 904 阅读 · 0 评论 -
深度分析mmap:是什么 为什么 怎么用 性能总结
目录mmap基础概念mmap内存映射原理mmap和常规文件操作的区别mmap优点总结mmap相关函数mmap使用细节性能总结mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回...转载 2020-04-13 16:22:18 · 216 阅读 · 0 评论 -
Android输入设备配置文件(.idc文件)
1. 何为idc?idc(Input Device Configuration)为输入设备配置文件,它包含设备具体的配置属性,这些属性影响输入设备的行为。对于touch screen设备,总是需要一个idc文件来定义其行为。Android基于输入设备驱动汇报的事件类型和属性来检测和配置大部分输入设备的能力。然而有些分类是模棱两可的,如:多点触摸屏(multi-touch touch s...转载 2020-04-04 00:25:59 · 898 阅读 · 0 评论 -
Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)
日期 内核版本 架构 作者 GitHub 优快云2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度1 前言1.1 进程调度内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.调度器面对的情形就是这样, 其任务是...转载 2020-04-03 23:55:27 · 319 阅读 · 0 评论 -
Linux ftrace框架介绍及运用
目录:1. ftrace背景2. 框架介绍3. 主要代码分析4. ftrace的配置和使用5. ftrace相关工具在日常工作中,经常会需要对内核进行Debug、或者进行优化工作。一些简单的问题,可以通过dmesg/printk查看,优化借助一些工具进行。但是当问题逻辑复杂,优化面宽泛的时候,往往无从下手。需要从上到下、模块到模块之间分析,这时候就不得不借助于...转载 2020-04-02 15:21:01 · 1506 阅读 · 0 评论 -
completion和wait_for_event的区别
mutex和completion是一种同步机制,用于在两个进程之间其同步作用:A进程调用wait_for_completion(&data->prev_finished);等待其他进程对data->prev_finished执行complete操作。B进程调用complete(&next->prev_finished);通知等待在next->p...转载 2020-04-02 10:38:00 · 1104 阅读 · 0 评论 -
wait_event与wait_event_interruptible的区别
wake_up与wake_up_interrupt有什么区别?wait_event与wait_event_interruptible有什么区别?最近在项目,被报了一个log,然后就思考到了这个问题:wait_event_interruptible将当前进程的状态设置成TASK_INTERRUPTIBLE。wait_event将当前进程的状态设置成TASK_UNINTERRUPTIBLE。...转载 2020-04-02 10:32:21 · 2026 阅读 · 0 评论 -
Android电容屏一些重要说明
1. 触摸屏设备分类1.1 多点触摸满足以下两个条件为多点触摸设备:1)输入设备驱动报告了ABS_MT_POSITION_X和ABS_MT_POSITION_Y存在2)输入设备没有任何手柄按钮1.2 单点触摸满足以下两个条件为单点触摸设备:1)输入设备不被归类为多点触摸设备2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码1.3...转载 2020-03-31 18:22:54 · 397 阅读 · 0 评论 -
tasklet与workqueue的区别及底层实现区别
softirq和tasklet都属于软中断,tasklet是softirq的特殊实现;workqueue是普通的工作队列。1、softirq软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被动态的注册或去除。kernel/softirq.c中定义了一个包含32个softirq_ac...转载 2020-03-30 14:06:05 · 801 阅读 · 0 评论 -
ioctl等
设备驱动程序的一个基本功能就是管理和控制设备,同时为用户应用程序提供管理和控制设备的接口。我们前面的“Hello World”驱动程序已经可以提供读写功能了,在这里我们将扩展我们的驱动以支持设备控制接口,在Linux中这个接口是通过ioctl函数来实现的。设备控制接口(ioctl 函数)回想一下我们在字符设备驱动中介绍的struct file_operations 结构,这里我们将介绍转载 2013-03-19 23:58:35 · 550 阅读 · 0 评论 -
Hello,Kernel!
学习内核模块编程,第一个小程序当然是hello,kernel!了,这应当算是一个惯例了。以前大三的时候在实验课上做过模块编程,记得当时还是许师兄带我们的实验,不过现在又忘了。晚上试了试,很快就运行成功了,不过还是出现了一些问题。现在将我的步骤记录如下,供和我一样的初学者学习。1.首先编写hello.c文件01#include转载 2013-05-03 21:34:01 · 438 阅读 · 0 评论 -
Linux下Apache的安装
近日学习利用C/C++进行CGI编程,下面是我找到的可行的安装Linux下apache服务器方法。本人的系统为Fedora,版本号为Linux-2.6.35~一、软件环境1、系统:CentOS release 5.62、Apache:httpd-2.4.2.tar.bz23、依赖包:apr-1.4.6.tar.bz2、apr-util-1.4.1.tar.bz2(下转载 2013-05-07 21:02:06 · 366 阅读 · 0 评论 -
进程、线程与多线程
线程、进程和多线程是面试过程中很容易遇到的问题,去年百度三面的时候就遇到这个问题,当时百度hr问到:线程和进程的区别是什么?你写过多进程或者多线程的程序吗?在你看来多线程和多进程程序那种程序比较难写?第一个问题很常规,但是要完全答对却不是那么容易,现在想来,第二个问题和第三个问题实际是一个问题,因为第三个问题是验证第二个问题是否说实话的最好的方式。另外,在今年4月6号微软的笔试中,也考到了转载 2013-06-09 09:42:50 · 876 阅读 · 0 评论 -
linux网络服务器模型
学习过《软件工程》吧.软件工程可是每一个程序员"必修"的课程啊.如果你没有学习过, 建议你去看一看. 在这一章里面,我们一起来从软件工程的角度学习网络编程的思想.在我们写程序之前, 我们都应该从软件工程的角度规划好我们的软件,这样我们开发软件的效率才会高. 在网络程序里面,一般的来说都是许多客户机对应一个服务器.为了处理客户机的请求, 对服务端的程序就提出了特殊的要求.我们学习一下目前最常用的服务转载 2013-06-02 13:25:43 · 521 阅读 · 0 评论 -
UDP通讯方式及编程实现步骤
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。目前较为流行的网络编程模型是客户机/服务器(Client/Server)结构,即通信双方一方作为服务器等待客户提出请求并予以响应,客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。UDP协转载 2013-06-02 13:25:15 · 663 阅读 · 0 评论 -
Linux寻找和杀掉僵尸进程
linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进程的方法首先,我们可以用top命令来查看服务器当前是否有僵尸进程,在下图中可以看到僵尸进程数的提示,如果数字大于0,那么意味着服务器当前存在有僵尸进程下面,我们用ps和grep命令寻找僵尸进程ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'命转载 2013-06-09 00:57:48 · 700 阅读 · 0 评论 -
linux 下 进程和线程的区别
1、进程与线程进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享转载 2013-06-09 09:38:06 · 582 阅读 · 0 评论 -
BS和CS对比
BS和CS对比牛腩新闻发布系统已经开始了不短的时间了,CS的项目也算是接触了下,接下来对比下CS和BS CS和BS是什么? C/S结构即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销(客户端和服务器端的通信),可以充分利用两端硬件环境的优转载 2013-08-30 09:23:32 · 714 阅读 · 0 评论 -
Linux模式设计1-数据大小
-------------------------------------------本文系作者原创, 欢迎大家转载!转载请注明出处:netwalker.blog.chinaunix.net------------------------------------------- 内核为了保持最大的兼容性和代码灵活性,不可能直接对某个数据类型定义它的大小范围。但是很多时候又要用转载 2014-03-05 15:02:38 · 643 阅读 · 0 评论 -
Linux模式设计2-数据比较
-------------------------------------------本文系作者原创, 欢迎大家转载!转载请注明出处:netwalker.blog.chinaunix.net------------------------------------------- 由于Linux代码采用Gcc编译器编译,所以它可以采用Gcc对C语言的扩展特性,以实现高效的代转载 2014-03-05 15:03:17 · 567 阅读 · 0 评论 -
在Ubuntu系统中安装RPM格式软件包的方法
Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb。 sudo apt-get install alien #alien默认没有安装,所以首先要安装它 sudo alien xxxx.rpm #将rpm转换位deb,完成后会生成一个同名的xxxx.deb sudo dpkg -i xxxx.deb #安装 注意,用alien转换的deb包转载 2014-03-19 15:04:58 · 526 阅读 · 0 评论 -
Makefile中常用的函数
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$( )或是${ }这里,就是函数名,make支持的函数不多。是函数的参数,参数转载 2014-09-10 09:34:23 · 437 阅读 · 0 评论 -
linux压缩及解压命令
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg转载 2014-08-28 17:37:28 · 378 阅读 · 0 评论 -
不可重入函数与线程安全函数
在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或状态不会被破坏,行为确定。那么这个函数就被称做"可重入"的. 补充:函数是可重入(reentrant)的,是指对于相同的(并且合法的)函数参数(包括无参函数的情况),多次调用此函数产生的行为是可预期的,即函数的行为一致,或者结转载 2014-11-24 16:01:27 · 436 阅读 · 0 评论 -
读代码细学内核中断机制-中断的响应
在内核中断初始化完成并且设备注册了响应的中断后,内核就可以响应相应的中断了。 首先要确定如果一个外设发出中断请求,它到底做了什么,设备是不能直接发出中断的,而是借助中断控制器,设备向中断控制器请求中断,这就是IRQ的来历。 对于龙芯1B处理器来说,中断控制器有四条输出线接在了处理器上,也就是四条中断线,INT0~INT3,每条中断线对应32个中断源,而中断控制器寄存器的转载 2014-12-05 19:24:15 · 470 阅读 · 0 评论 -
深入分析 Linux 内核链表
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,转载 2015-01-13 20:01:47 · 343 阅读 · 0 评论 -
Linux内核多线程(一)
Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFS转载 2014-12-08 19:00:57 · 451 阅读 · 0 评论 -
Linux内核多线程(三)
接上 一篇文章 ,这里介绍另一种线程间通信的方式:completion机制。Completion机制是线程间通信的一种轻量级机制:允许一个线程告诉另一个线程工作已经完成。为使用 completion, 需要包含头文件 。可以通过以下方式来创建一个 completion :DECLARE_COMPLETION(my_completion);或者, 动态创建和初始化:转载 2014-12-08 19:04:23 · 415 阅读 · 0 评论 -
Linux内核多线程(四)
自己创建的内核线程,当把模块加载到内核之后,可以通过:ps –ef 命令来查看线程运行的情况。通过该命令可以看到该线程的pid和ppid等。也可以通过使用kill –s 9 pid 来杀死对应pid的线程。如果要支持kill命令自己创建的线程里面需要能接受kill信号。这里我们就来举一个例,支持kill命令,同时rmmod的时候也能杀死线程。 #include #inclu转载 2014-12-08 19:05:04 · 396 阅读 · 0 评论 -
详解Linux2.6内核中基于platform机制的驱动模型
【摘要】本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型。首先介绍了Platform总线的基本概念,接着介绍了platform device和platform driver的定义和加载过程,分析了其与基类device 和driver的派生关系及在此过程中面向对象的设计思想。最后以ARM S3C2440中I2C控制器为例介绍了基于platform总线的驱动开发流程。转载 2015-01-13 21:05:12 · 390 阅读 · 0 评论 -
Linux内核多线程(二)
内核多线程是在项目中使用到,自己也不熟悉,遇到一个很囧的问题,导致cpu运行100%。这是写的第一个内核线程程序,通过全局变量来实现两个内核线程之间的通信。但是这里遇到致命错误,就是:每当 wait_event_interruptible()被wake_up_interruptible 唤醒之后线程就进入死循环。后面发现是线程不会主动的自己调度,需要显式的通过schedule 或者 sch转载 2014-12-08 19:03:52 · 435 阅读 · 0 评论 -
Linux内核多线程——补充(各种平台下的多线程)
这里主要实现两个线程间通信,当flag = 10 之后通知另外一个线程(也就是“Linux内核多线程(二)”中的程序的各种平台实现)。首先是C++ 11 的方式:#include #include #include #include #include #include using namespace std;const int M = 10;int main转载 2014-12-08 19:05:45 · 370 阅读 · 0 评论 -
Linux时间子系统之三:时间的维护者:timekeeper
本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法,但是对于真实的用户来说,我们感知的是真实世界的真实时间,也就是所谓的墙上时间,clocksource只能提供一个按给定频率不停递增的周期计数,如何把它和真实的墙上时间相关联?本节的内容正是要讨论这一点。1. 时间的种类内核管理着多种时间,它们分别是:RTC时间wall转载 2015-02-05 16:10:14 · 445 阅读 · 0 评论 -
Linux时间子系统之四:定时器的引擎:clock_event_device
早期的内核版本中,进程的调度基于一个称之为tick的时钟滴答,通常使用时钟中断来定时地产生tick信号,每次tick定时中断都会进行进程的统计和调度,并对tick进行计数,记录在一个jiffies变量中,定时器的设计也是基于jiffies。这时候的内核代码中,几乎所有关于时钟的操作都是在machine级的代码中实现,很多公共的代码要在每个平台上重复实现。随后,随着通用时钟框架的引入,内核需要支持高转载 2015-02-05 16:11:27 · 429 阅读 · 0 评论 -
Linux时间子系统之五:低分辨率定时器的原理和实现
利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽转载 2015-02-05 16:12:13 · 361 阅读 · 0 评论 -
Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时器的实现代码几乎没有借用低分辨率定时器的数据结构和代码,内核文档给出的解释主要有以下几点:转载 2015-02-05 16:13:06 · 490 阅读 · 0 评论 -
linux的HZ, Tick, Jiffies
Linux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。(1)HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 HZ可在编译核心时设定,具体查询设定方法可参转载 2015-01-05 13:53:10 · 495 阅读 · 0 评论 -
Linux信号、信号处理和信号处理函数
信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据。一、信号的来源信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两种。1、 硬件方式当用户在终端上按下某键时,将产生信号。如按下组合键后将产生一个S转载 2015-02-26 17:09:59 · 424 阅读 · 0 评论 -
linux - vi/vim编辑器-高级用法
作者:zccst 10,全局替换(2013年12月1日) :from,tos/old/new/g from是起始行 to是终止行用$表示到文件最后一行 s是替换的意思 old是想被替换的文本 new是你的新文本 g表示全局 例如: :1,$s/yanyan/amy/g 就是将一个文件的第一行到最后一行,也就是整个文件的yanyan这个字串替换成amy转载 2015-02-27 16:51:16 · 692 阅读 · 0 评论