Linux
qwaszx523
努力成长的小菜鸟
展开
-
Linux work queue工作队列小结与使用
转自 http://www.linuxidc.com/Linux/2012-09/70979.htm1、linux内核中断处理的工作队列workqueue机制工作队列(workqueue)是另外一种将工作推后执行的形式。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。 这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的转载 2016-12-19 16:22:46 · 713 阅读 · 0 评论 -
linux kernel current宏
1,先看个示意图吧.2,每个进程在内核态下都会开辟一个内核栈,一般就是8KB,一般把thread_info这个结构体和 内核栈放在一起,这样内核就可以很方便从ESP寄存器中获取当前CPU上正在运行的thread_info 结构体的首地址,通过thread_info就可以找到PCB了。这个PCB就是当前进程的PCB。 将esp中的值屏蔽掉末尾的1转载 2016-12-19 16:10:05 · 1243 阅读 · 0 评论 -
wait_event_interruptible()
转自http://blog.chinaunix.net/uid-29054367-id-3809059.html点击(此处)折叠或打开#define wait_event_interruptible(wq, condition) \({ \ in转载 2016-12-19 15:38:59 · 1445 阅读 · 0 评论 -
Linux内核里的DebugFS
转自http://www.cnblogs.com/wwang/archive/2011/01/17/1937609.htmlDebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据。类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上,而是Linux内核运行起来后才建立起来。通常情况下,最常用的转载 2016-12-22 10:06:25 · 294 阅读 · 0 评论 -
内核代码中注册的概念
代码中的注册就是把信息或者信息的指针保存到某个数据结构实例中。经常用到的用于保存信息的数据结构有双链表、数组、二叉树(红黑树、基数树)等。原创 2016-12-09 10:24:04 · 500 阅读 · 0 评论 -
tar
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通转载 2016-11-23 20:33:17 · 982 阅读 · 0 评论 -
tar.gz和gz
转自http://www.pythontab.com/html/2013/linuxkaiyuan_0110/117.htmltar.gz和.gz文件是两种不同的文件,需要区别对待,解压命令当然也不同咯,下面来分享一下他们各自的解压方法。1. .tar.gz文件,这种文件是tar文件的压缩文件,可以使用tar命令进行解压。例如:解压:tar zxvf pyt转载 2016-11-23 20:30:30 · 3760 阅读 · 0 评论 -
mount
1、mountmount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。命令格式:mount [-t vfstype] [-o options] device dir其中原创 2016-11-23 20:08:35 · 241 阅读 · 0 评论 -
scp
scp 命令 ================== scp 可以在 2个 linux 主机间复制文件; 命令基本格式: scp [可选参数] file_source file_target ====== 从 本地 复制到 远程 ====== * 复制文件: * 命令格式: scp原创 2016-11-23 19:59:32 · 320 阅读 · 0 评论 -
kthread_work和kthread_worker机制
转自http://blog.csdn.net/cq062364/article/details/39647907Kernel中提供的kthread_work和kthread_worker机制和经典的work_struct和workqueue_struct的关系有点类似.通过一个kthread_worker可以处理多个kthread_work,其实就是利用了工人在流水线上工作的形式.先来看看这两转载 2016-12-19 19:39:00 · 753 阅读 · 0 评论 -
task_struct结构描述
转自http://www.cnblogs.com/hanxiaoyu/p/5549212.html 1. 进程状态(State)进程执行时,它会根据具体情况改变状态 。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。 内核表示含义TASK_RUNNING可运行转载 2016-12-20 09:27:11 · 291 阅读 · 0 评论 -
linux的system () 函数执行命令
转自http://www.cppblog.com/prayer/archive/2009/05/05/81955.htmlsystem(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #i ncl转载 2017-03-01 13:55:36 · 1554 阅读 · 0 评论 -
Nano编辑器
1.在Linux操作系统中,有很多的文本编辑器,最为重要的就是vi文本编辑器,下面来介绍一个简单的nano文本编辑器。2.nano的使用简单,我们可以直接加上文件名就能够打开一个旧文件或新文件,我们可以打开一个旧文件编辑它,也可以打开一个新文件,即不管这个文件存不存在都是可以打开的!(1).下面,我们在终端输入命令nano xg.txt后,如下图所示:从上图可以看到,第一行是在声明nano的版...原创 2018-03-20 11:19:35 · 416 阅读 · 0 评论 -
修改Linux内核的printk缓冲区(log缓冲区)大小
我们可以用printk打印kernel的日志信息(即log信息),根据时间戳可以判断内核新打印的log会覆盖掉以前打印的log。原因是内核用环形缓冲区存放打印的log信息。那么如何增大缓冲区的大小呢?我们看kernel/printk.c的代码#define LOG_ALIGN __alignof__(struct printk_log) #define _转载 2017-08-17 10:41:25 · 2196 阅读 · 0 评论 -
ACCESS_ONCE宏
它的定义很简单,在 include/linux/compiler.h 的底部:#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))仅从语法上讲,这似乎毫无意义,先取其地址,在通过指针取其值。而实际上不然,多了一个关键词 volatile,所以它的含义就是强制编译器每次使用 x 都从内存中获取。原创 2017-06-26 15:17:16 · 677 阅读 · 0 评论 -
SYSCALL_DEFINE
在include/linux/syscall.h里有下面一组宏:点击(此处)折叠或打开#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARG原创 2017-06-06 14:30:44 · 1017 阅读 · 0 评论 -
linux source 命令
source命令:source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。用法: source filename 或 . filename原创 2017-06-16 11:14:15 · 302 阅读 · 0 评论 -
修改PS1环境变量让shell只显示最后一个目录名而不显示完整的路径
PS1是linux里头的一个默认的环境变量,用来设置命令提示符的环境变量。 \d :代表日期,格式为weekday month date,例如:"Mon Aug 1" \H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux \h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略 \t :显示时间为24小时格原创 2017-06-16 11:12:27 · 4641 阅读 · 0 评论 -
Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别
转自http://blog.csdn.net/qiao1245/article/details/44650929①/etc/profile: 该文件登录操作系统时,为每个用户设置环境信息,当用户第一次登录时,该文件被执行。也就是说这个文件对每个shell都有效,用于获取系统的环境信息。# /etc/profile# System wide environment and s转载 2017-02-22 17:14:54 · 351 阅读 · 0 评论 -
限制log打印速率
dev_err_ratelimited原创 2017-01-22 18:32:43 · 983 阅读 · 0 评论 -
结构体字节填充
在结构体中经常会定义一个无意义的变量用于填充,从而达到字节对齐的要求。通常会在最后定义一个变量type pad;pad是填充的意思原创 2016-10-20 11:39:14 · 1157 阅读 · 0 评论 -
用户与内核空间数据交换的方式(3)-seq_file
转自:http://www.embeddedlinux.org.cn/html/yingjianqudong/201304/17-2551.html一般地,内核通过在procfs文件系统下建立文件来向用户空间提供输出信息,用户空间可以通过任何文本阅读应用查看该文件信息,但是procfs 有一个缺陷,如果输出内容大于1个内存页,需要多次读,因此处理起来很难,另外,如果输出太大,速度比较慢,有时会转载 2016-10-14 11:39:47 · 300 阅读 · 0 评论 -
用户与内核空间数据交换的方式(2)-procfs
转自:http://www.embeddedlinux.org.cn/html/yingjianqudong/201304/17-2552.htmlprocfs是比较老的一种用户态与内核态的数据交换方式,内核的很多数据都是通过这种方式出口给用户的,内核的很多参数也是通过这种方式来让用户方便设置的。除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的。实际上,很多应转载 2016-10-14 11:38:40 · 258 阅读 · 0 评论 -
linux taskset命令详解
SYNOPSIS taskset [options] [mask | list ] [pid | command [arg]...] OPTIONS -p, --pid operate on an existing PID and not launch a new task -c, --cpu原创 2016-09-20 17:22:18 · 7389 阅读 · 0 评论 -
request_threaded_irq----中断线程化
int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags,const char *devname, void *原创 2016-09-23 10:48:16 · 15343 阅读 · 0 评论 -
Linux kernel Low Level debug
------以下内容转自:http://blog.csdn.net/cpuwolf/article/details/4492822------ 如果你运气不太好,那么第一次启动kernel,最多看见: uncompressing linux...ok, booting the kernel 从串口ttyS0出来,然后你什么都没了。这总情况遇见的机会还是很多的。多数原因是内核卡转载 2016-09-06 16:19:58 · 659 阅读 · 0 评论 -
uboot详解——时钟分频
转自http://blog.csdn.net/lee244868149/article/details/49962203时钟则是计算机的心脏,时钟频率决定了处理器运算的快慢,它的每一次“跳动”都驱动着处理器不停的执行命令。不同的是,人的各个部位心率是一样的,但计算机却有多个频率,而且每个部位可能有不同的频率,比如“大脑”有一个频率,“手“有一个频率,“脚”使用的是另外一个频率,这样就产生了两个转载 2016-08-26 15:14:07 · 1110 阅读 · 0 评论 -
dd命令使用详解
1.命令简介 dd 的主要选项:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number mif=file #输入文件名,缺省为标准输入。 of=file #输出文件名,缺省为标准输出。 ibs=bytes #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 obs=bytes #一次原创 2016-09-14 20:04:43 · 581 阅读 · 0 评论 -
Linux Kernel UAPI
转自http://tinylab.org/linux-kernel-uapi/问题描述从3.5开始,Linux Kernel 里多了一个 uapi 文件夹,里面放了很多 Linux Kernel 各个模块的头文件。如果是第一次碰到,可能会对这个不是很了解。问题分析Linux Kernel 中新增的这些 uapi 头文件,其实都是来自于各个转载 2016-09-13 15:11:05 · 4819 阅读 · 0 评论 -
linux 模块机制
一、背景linux内核框架庞大,如果把所有需要的功能都编译到linux内核中,会导致两个问题:1、生成的内核非常大。2、新增或删除功能需要重新编译内核。linux为了解决上述问题,引入了模块机制,使得编译出的内核并不需要包含所有功能,而在这些功能需要被使用的时候,动态加载加载相应代码到内核中。模块具有这样的特点:1、模块本身不被编译入内核映像,从而控制住了内核大小。2、原创 2016-09-01 15:13:30 · 2209 阅读 · 0 评论 -
设备驱动的probe、remove以及shutdown的顺序
转自http://blog.chinaunix.net/uid-29955651-id-5175102.html系统中存在很多设备,每个设备在kernel中都有对应的驱动,那么这些驱动初始化设备以及关闭设备的顺序是怎样的呢?本文试图解答这个问题。1 驱动probe/remove执行时机probe的执行有两个时机,一是设备创建时,二是驱动注册时;remove相对也有两个执行时机,一是设备转载 2016-09-01 15:09:21 · 9470 阅读 · 0 评论 -
linux驱动中probe函数的返回值
转自http://blog.csdn.net/a254373829/article/details/8124760 在一个驱动的probe函数中,如果返回值为0的话,上层的核心层会认为驱动的初始化函数成功,此后驱动的一些回调函数将在适当的时候被调用,例如suspend类的回调函数,如果一个probe函数探测失败,驱动向系统申请的有关资源都会被释放,如中断号,申请的内存等,因转载 2016-09-01 11:04:38 · 1300 阅读 · 0 评论 -
source命令
在当前bash环境下读取并执行FileName中的命令。*注:该命令通常用命令“.”来替代。使用范例:source filename. filename(中间有空格) source命令是bash shell的内置命令。点命令,就是个点符号,是source的另一名称。这两个命令都以一个脚本文件名为参数,该脚本将在当前shell的环境执行,不会启动原创 2016-08-31 19:41:32 · 1948 阅读 · 0 评论 -
linux 休眠唤醒流程
Linux Suspend主要有以下三步: 1) 冻结用户态进程和内核态任务 2) 调用注册的设备的suspend的回调函数,顺序是按照注册顺序 3) 休眠核心设备和使CPU进入休眠态。 冻结进程(suspend_freeze_processes)是内核把进程列表中所有的进程的状态都设置为停止,并且保存所有进程的上下文。 当这些进程被解冻(suspend_tha原创 2016-09-24 17:09:51 · 8046 阅读 · 0 评论 -
Linux 休眠唤醒(一)
转自http://blog.csdn.net/dwyane_zhang/article/details/7099710一、项目power相关的配置目前我手上的项目的linux电源管理方案配置如下,.config文件的截图,当然也可以通过make menuconfig使用图形化来配置:## CPU Power Management## CONFIG_CPU_IDLE is n转载 2016-09-24 21:15:20 · 727 阅读 · 0 评论 -
用户与内核空间数据交换的方式(1)-debugfs
转自:http://www.embeddedlinux.org.cn/html/yingjianqudong/201304/17-2553.html 内核开发者经常需要向用户空间应用输出一些调试信息,在稳定的系统中可能根本不需要这些调试信息,但是在开发过程中,为了搞清楚内核的行为,调试信息非常必要,printk可能是用的最多的,但它并不是最好的,调试信息只是在转载 2016-10-14 11:35:16 · 262 阅读 · 0 评论 -
Read-only file system
1、adb remountadb root adb remount,这条命令的功能是重新装载Android文件系统,使文件系统可读可写,但是有些手机不能用这条命令。2、mount -o rw,remount /systemadb rootadb shellmount -o rw,remount /system操作完之后,把文件改回只读属性:mount -o原创 2016-10-24 19:03:04 · 422 阅读 · 0 评论 -
ARM MMU工作原理剖析
转自http://blog.chinaunix.net/uid-20698426-id-136197.html一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀转载 2016-09-24 22:00:03 · 254 阅读 · 0 评论 -
dpm_list链表
dpm_list是内核中用于设备电源管理的链表,设备注册时通过一系列的调用 device_register() -> device_add() -> device_pm_add() 最后在device_pm_add()中将设备加入dpm_list链表中:[cpp] view plain copy print?// 设备创建时都会调用的函数原创 2016-09-24 21:50:51 · 707 阅读 · 0 评论 -
android 休眠唤醒机制分析(三) — suspend
转自http://blog.csdn.net/g_salamander/article/details/7988340前面我们分析了休眠的第一个阶段即浅度休眠,现在我们继续看休眠的第二个阶段 — 深度休眠。在深度休眠的过程中系统会首先冻结所有可以冻结的进程,然后依次挂起所有设备的电源,挂起顺序与设备注册的顺序相反,这样保证了设备之间电源的依赖性;直至最后进入省电模式,等待用户或者RTC唤醒;在转载 2016-09-24 21:49:43 · 1593 阅读 · 0 评论