![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
肉冬瓜
linux 内核
linux 协议栈
无线局域网
展开
-
Linux 内核中打印当前进程名称和进程ID
当前进程名称和PID原创 2022-08-15 15:36:18 · 2692 阅读 · 1 评论 -
LINUX内核模块strip用法
编译一个内核时,习惯性的在install目标下加了命令:$(STRIP) --strip-all --remove-section=.note --remove-section=.comment test.ko结果在insmod test.ko时出现错误:test: module has no symbols (stripped?).................. 上网查了以下,发现内核模...转载 2018-05-08 10:00:38 · 2477 阅读 · 0 评论 -
linux内存屏障浅析
内存屏障主要解决了两个问题:单处理器下的乱序问题和多处理器下的内存同步问题。为什么会乱序现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行”之前的阶段上。相反,流水线是并行的,多个指令可...翻译 2018-08-28 10:04:02 · 184 阅读 · 0 评论 -
LINUX 内核中的计时器和列表
本文着重讨论计时器应用程序编程接口(API)和针对所有任务延迟模式的一个核心元素:内核列表构造体。本文还将探索内核列表 API,计时器和其他任务延迟机制(比如工作队列)都要使用这个 API。计时器是所有操作系统的一个必要组成部分,您将发现多个计时器机制。我们将首先简要介绍一些 Linux 计时器模式,然后深入研究它们的运行方式。(Linux)时间的起源在 Linux 内核中,时间由一个...转载 2019-02-28 10:07:04 · 943 阅读 · 0 评论 -
系统级性能分析工具 — Perf
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/zhangskd/article/details/37902159从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。perfPerformance analysis tools for Linux.Performan...转载 2019-03-06 09:28:42 · 268 阅读 · 0 评论 -
linux处理目标文件的工具
ar:创建静态库,插入、删除、列出和提取成员。strings:列出目标文件中所有可打印的字符串。strip:从目标文件中删除符号表信息。nm:列出一个目标文件的符号表定义的符号。size:列出目标文件中节的名字和大小。readelf:显示一个目标文件的完整结构,包括elf头中编码的所有信息。包含size和nm的功能。objdump:所有二进制工具之母。能够显示一个目标文件中...原创 2019-03-06 10:21:34 · 225 阅读 · 0 评论 -
linux 查找所有文件包含指定内容,并替换
很容易忘,记录下:find -name "*.xml"| grep "rCN" | xargs grep 测试字符1 -l | xargs sed -i "s/测试字符1/测试字符2/g"find 就不说了;第一个grep,不需要xargs,为何?因为这个grep查找的不是文件内容,而是路径本身,检查find的取得的文件路径是否包括"rCN";第二个grep,需要xargs,为...转载 2019-03-07 21:25:21 · 3125 阅读 · 0 评论 -
linux BOOTIME、MONOTONIC以及REALTIME之间的关系
HRTIMER_BASE_BOOTTIME=HRTIMER_BASE_MONOTONIC+timekeeper.total_sleep_time=HRTIMER_BASE_REALTIME+timekeeper.wall_to_monotonic+timekeeper.total_sleep_time=timekeeper.xtime+timekeeper.wall_to_monoto...原创 2019-04-27 18:41:10 · 1265 阅读 · 0 评论 -
shell 判断文件夹或文件是否存在
文件夹不存在则创建 1 2 3 4 5 if[ ! -d"/data/"];then mkdir/data else echo"文件夹已经存在" fi 文件存在则删除 1 2 3 4 5 if[ ! -f"/...原创 2019-06-25 11:26:59 · 387 阅读 · 0 评论 -
linux shell遍历目录下每个文件
#!/bin/bashfunction read_dir() {for file in `ls $1`do if [ -d $1"/"$file ] then read_dir $1"/"$file else echo $1"/"$file fidone}使用示例:readdir xxx(目录)...原创 2019-06-24 14:24:21 · 5538 阅读 · 0 评论 -
常见的Linux内核中内存(buddy/slab)分配
1. 原理说明Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示。四级页表分别为:l 页全局目录(Page Global Directory)l 页上级目录(Page Upper Directory)l 页中间目录(Page Mi...转载 2018-05-04 10:18:23 · 789 阅读 · 0 评论 -
spinlock用法总结
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量。在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心。在Linux kernel中执行的代码大体分normal和interrupt context两种。tasklet/softirq可以归 为normal因为他们可以进入等待;nested interrupt是interrupt context的一转载 2018-03-27 17:37:16 · 3645 阅读 · 0 评论 -
检测内核的堆栈溢出
内核堆栈溢出通常有两种情况。一种是函数调用栈超出了内核栈THREAD_SIZE的大小, 这是栈底越界,另一种是栈上缓冲越界访问,这是栈顶越界。检测栈底越界以arm平台为例,内核栈THREAD_SIZE为8K,当调用栈层次过多或某调用栈上分配过大的 空间,就会导致它越界。越界后struct thread_info结构可能被破坏,轻则内核 panic,重则内核数据被覆盖仍继续运行。转载 2017-11-29 10:52:57 · 3531 阅读 · 0 评论 -
linux Loadavg和CPU利用率是如何算出来的
相信很多人都对Linux中top命令里“load average”这一栏困惑过,到底什么是Load,Load代表了什么含义,Load高会有什么后果?“%CPU”这一栏为什么会超过100%,它是如何计算的?带着这些问题,我们通过一些测试,来探索下其中的不解之处。首先,我们通过实验来大概确定其计算方式:测试服务器:4核Xeon处理器测试软件:MySQL 5.1.40服务器上除了转载 2015-11-22 14:45:40 · 3010 阅读 · 0 评论 -
linux /proc/loadavg(平均负载)
from : http://hi.baidu.com/mengyun8/blog/item/bd424531451b98e71a4cffc0.html一、什么是系统平均负载(Load average)?在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。转载 2015-11-22 14:53:37 · 322 阅读 · 0 评论 -
linux 软中断和tasklet
1. 软中断是什么 ? 软中断是一种延时机制,代码执行的优先级比进程要高,比硬中断要低。相比于硬件中断,软中段是在开中断的环境中执行的(长时间关中断对系统的开销太大), 代码是执行在中断/线程上下文的,是不能睡眠的,虽然每个cpu都有一个对应的ksoftirqd/n线程来执行软中断,但是do_softirq这个函数也还会在中断退出时调用到,因此不能睡眠(中断上下文不能睡眠的原因是由于调度系转载 2015-11-23 21:37:41 · 438 阅读 · 0 评论 -
undefined reference to `__udivdi3'
【问题】编译Linux下面的代码,经常会遇到这种错误:undefined reference to `__udivdi3'【解决过程】之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):(1)当a为32位,Linux 内核中,常用uint转载 2015-11-24 20:41:20 · 655 阅读 · 0 评论 -
linux内核sk_buff的结构分析
我看的内核版本是2.6.32. 在内核中sk_buff表示一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head,在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头,现在在2.6.32里面这个域已经被删除了。 而sk_buff的内存布局可以分作3个段,第一个就是sk_buff自身,第二个是linear-data buff,第三转载 2016-03-23 18:36:46 · 338 阅读 · 0 评论 -
in_irq() in_softirq() in_interrupt()
#define hardirq_count() (preempt_count() & HARDIRQ_MASK)#define softirq_count() (preempt_count() & SOFTIRQ_MASK)#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \ | NMI_MA原创 2016-09-05 11:41:49 · 997 阅读 · 0 评论 -
Linux内核编程遍历所有进程PID
01.#include 02.#include 03.#include 04.#include 05.#include 06. 07.static __init int print_pid(void)08.{09.struct task_struct *task,*p;10.struct list_head *pos;11.int原创 2016-12-12 14:37:38 · 3743 阅读 · 0 评论 -
无锁(lock-free) 数据结构
提到并行计算通常都会想到加锁,事实却并非如此,大多数并发是不需要加锁的。比如在不同电脑上运行的代码编辑器,两者并发运行不需要加锁。在一台电脑上同时运行的媒体播放放器和代码编辑器,两者并发运行不需要加锁(当然系统调用和进程调度是要加锁的)。在同一个进程中运行多个线程,如果各自处理独立的事情也不需要加锁(当然系统调用、进程调度和内存分配是要加锁的)。在以上这些情况里,各个并发实体之间没有共享数据,所以转载 2016-12-03 15:25:54 · 551 阅读 · 0 评论 -
栈帧详解
一、 什么是栈帧? 什么是栈帧,相信很多从事C编程的童鞋还是没有搞明白,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...二、 栈(用户转载 2017-02-06 16:46:58 · 623 阅读 · 0 评论 -
uboot 的内存命令使用 mw (修改) md (显示)
修改:mw [内存地址] [值] [长度]例如:mw 0x02000000 0 128表示修改地址为0x02000000~0x02000000+128的内存值为0.显示:md [内存地址] [长度]例如:md 0x02000000 128表示显示0x02000000的内存数据,长度为128个32bit.注意[长度]的取值,例如:# md 020000转载 2015-11-03 17:35:50 · 1520 阅读 · 0 评论