解剖linux内核之工具

Cgroup maintainer李泽帆:解剖Linux内核容器技术 摘要:Cgroup和namespace等内核特性如何出现,在社区处于怎样的开发状况?Docker如火如荼,内核社区是否会因此加紧完善容器技术的隔离性安全性?华为Linux内核高级工程师李泽帆将在2015 Container技术峰会上详细解说。 2015年4月16-18日,由优快云主办、优快云专家顾问团支持的OpenCloud 2015大会将在北京国家会议中心拉开帷幕。为期三天的大会, 阅读详情

 要能够深入到linux内核,需要必备的三个工具:一是编译内核;二是使用qemu+gdb调试内核;三是使用syetmtap探测内核。

一、编译linux内核:

Linux开源的一个重要体现就是用户可以根据自己的实际需要配置自己的Linux系统,一般的Linux发行版本为了能够保证在大多数机器上运行,因此会编译进许多对最终用户没有用的代码或模块。作为一名即将进入linux源代码世界的人,怎能容许有这样的“累赘”呢?因此,我们要根据自己“躯体”来定制自己的“灵魂”。后面你会逐步发现,编译内核是学习linux内核源代码的基础。

现将Linux的编译调节过程简述为(默认主机的环境是32bit ubuntu):

1.下载自己要编译的Linux内核的源代码,这个可以从Linux内核的官方网站上得到:www.kerenl.org。

2.编译内核最主要的便是配置文件.config,为了能够准确的得到结果(第一次不要求编译时间),将本机的config文件直接拷贝到解压后的源代码中,然后重命名为.config。

3.然后进行make操作(可以采用make –j 4来加快编译),这样一般不会出问题,但时间较慢,大约编译一次需要40分钟;更加详细的参考步骤请参加《How tocompile linux kernel 2.6》:http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html。

4.为了降低编译时间,就需要对配置文件进行裁剪,在配置文件中有好多是本机不需要的,尤其是device driver,它占据了编译内核的大部分时间,这就要根据自己的机器配置,将用不到的模块删掉。参考:http://lamp.linux.gov.cn/Linux/kernel_options.html。

5.剪裁的时候采用“逐步瘦身”法,先剪裁掉某个或某几个模块,然后在进行编译,若没错,在进行模块裁剪,这样可以最大程度上保证内核配置的正确性,而且由于进行的是增量编译,所以编译时间会比较快。


二、  使用Gdb+qemu调试内核

你想一步一步的跟踪Linux的启动过程吗?你想像dgb调试程序一样来调试Linux内核吗?如果你有这样的想法,恭喜你,你已经会提问题啦!(有问题总是好的,可怕的便是没有问题)。(以下默认的主机环境是ubuntu 32bit的,在64bit的机子上会有很多问题,若要注意解决发现得不偿失,先调通32bit的再说吧)

1.安装qemu

ubuntu下使用sudoapt-get install 安装的qemu可能会存在bug,使得无法在断点处停下;因此需要在qemu官方网站http://wiki.qemu.org/Download上下载最新的版本的源代码包自己进行编译安装:

l  sudo apt-get install zlib1g-dev libsdl-dev

l  解压源代码后,进入源代码所在目录执行 ./confingure

l  执行make

l  执行sudo makeinstall

2.创建QEMU格式的硬盘

qemu-img create –f  qcow2name.img size

例如:qemu-imgcreate –f qcow2 ubuntu10.04.img 4GB

3. 在创建的硬盘上安装操作系统

qemu  –hda  name.img –cdrom  ~/Download/ubuntu10.04.iso –boot d

说明:使用hda指定硬盘镜像,使用CDROM选定光驱。-boot d指从cdrom启动,-boot a是软盘 ,-boot c 是硬盘;有时安装系统会很慢,这是可以考虑使用kvm来代替。

例如:kvm –hda  ubuntu10.04.img –cdrom./ubuntu-10.04.iso  -boot d

4. 从已经装好操作系统的硬盘启动

qemu –hda ubuntu10.04.img

5.  编译内核,参见一。

6. 使用qemu+gdb调试自己编译的Linux内核

a) 在运行make命令的目录下执行命令或写成shell脚本的形式,

qemu –s –S –hda  ./ubuntu10.04.img –kernel./arch/x86/boot/bzImage –append root=/dev/sda

l  -s表示运行虚拟机时将1234端口开启成调试端口;

l  -S表示“冷冻”虚拟机,等待调试器发出继续运行命令;

l  -kernel表示要调试的内核镜像;

l  -append root=/dev/sda 表示传递给内核的参数。

b)   在另一个终端上运行gdb命令

l  gdb vmlinux

l  target remote localhost:1234

若到此没什么问题,你就可以发挥自己的聪明才智使用gdb的命令进行内核源代码的调试了。Gdb的命令参考:http://www.yolinux.com/TUTORIALS/GDB-Commands.html.


三、  使用systemtap调试内核

systemtap是内核的调试工具,它是在krobe、jprobe、kretprobe的基础上发展来的,使用systemtap就不用写内核模块,可以高效(快速、准确)的获取我们想知道的内核信息。有关systemtap的详细资料参加官方网站:http://sourceware.org/systemtap/

1.安装systemtap

我的主机系统ubuntu,systemtap的官网上提供了systemtap在ubuntu上的安装方法,在这不再详述。

2.systemtap入门

在systemtap的官网上提供了systemtap的参考文档以及比较多的参考例子,文档看一遍,例子运行一遍,便可以达到入门级。

3.sytemtap提高

systemtap最强大的部分便是可以使用embeddedc的形式,你用kprobe、jprobe、

kretprobe做的任何事情均可以转化成systemtap embedded c的形式,这里可以参见《systemtap使用日记》。
深度解剖Linux内核源码调度器原理 当我们向虚拟机透传超线程信息后,虚拟机会形成2层调度域(SMT 与 MC域),而在唤醒负载均衡的时候,CFS 会倾向于将业务调度到空闲的 sg 上(即空闲的物理 CORE,而不是空闲的 CPU),这个时候业务在 CPU 利用率不高(没有超过40%)的时候,可以更加充分的利用物理CORE的性能(还是老问题,一个物理CORE上的超线程对,它们同时运行 CPU 消耗型业务时,所获得的性能增益只相当于单线程1.2倍左右。所以 smt 域的负载均衡就是执行超线程间的进程迁移,这个负载均衡的时间最短,条件最宽松。 阅读详情

相关推荐

深度解剖Linux内核【网卡设备驱动】

Linux设备驱动分三种,包括字符设备驱动、块设备驱动和网络设备驱动。字符设备只能按字节流先后顺序访问设备内存,不能随机访问。鼠标、触摸屏、LCD等是字符设备的代表。块设备可以随机访问设备内存的任意地址,硬盘、SD卡、NAND FLASH是块设备的代表。网络设备指的是网卡一类使用socket套接字进行通信的设备。本文以字符设备为例讲述相关知识。Linux字符设备驱动剖析Linux 设备文件的创建和mdev从可以看出,应用层访问设备驱动非常简单,即是通过open接口来最终获得设备驱动的操作接口集struct

m0_74282605的博客 816

Linux内核调试的方式以及工具集锦

https://blog.youkuaiyun.com/gatieme/article/details/68948080

二进制模----细微行动改变影响世界 1795

网络术语、接口与协议:Linux内核视角的实战解剖

网络术语不是抽象概念,而是可定位到内核结构体(如in_ifaddr)、抓包字段(如ip.src)和系统调用参数(如AF_INET)的技术实体;接口不仅是物理端口,更是net_device对象、veth虚拟对和ethtool可操作的MDIO寄存器;协议栈亦非黑盒,TCP分段、Modbus TCP报文格式、Ethernet/IP生产者模型等均需在Wireshark字节流与内核源码间双向验证。理解这些底层映射,才能真正排查LAN侧ARP广播异常、USB无线网卡驱动加载失败、OpenWRT多网段策略路由等高频工程问

weixin_34216107的博客 418

Linux0.11内核的学习——工具的准备

实现操作系统引导程序的前置工作 一 . 用到的命令 1.nasm nasm boot.asm -o boot.bin 实现汇编代码的编译 2.bximage bximage a.img -q -fd -size=1.44 -fd是创建虚拟软盘,大小为1.44M 3.dd dd if=boot.bin of=a.img bs=512 \count=1 conv=notrunc 将二进制虚拟码写入软盘 if:代码的是输入,编译后的结果 of:代表的是输出,输出到a.img bs=512:写入的大小 conv=n

孤独旅客的博客 281

linux内核源码阅读及相关工具介绍

linux下内核源码阅读及相关工具介绍,一些学习方法及一些基本知识

最全,最经典的人体解剖图.

最全的人体解剖图 彩色图谱。 都是最重要的

将eBPF作为LINUX内核学习的工具

纯粹写一些LINUX内核学习的体会。 近段时间,断断续续的温习一些LINUX内核的知识。一直苦于没有找到一个可以实践的着力点。不过,最近看到eBPF相关的资料,我觉得可以将它作为一个实践的项目来推进LINUX内核的学习。具体的方向主要包括两方面,将eBPF作为内核追踪的工具,另一方面是学习,分析XDP是如何PK DPDK的。 另外,发现一个有趣的事实。最近我比较关注的技术,包括raft,etcd,tidb,eBPF,都是一些5到6年左右的开源技术。我想可能有2方面的原因,第一是对于一个路线正确的开源项目,5

gzyuan86的博客 606

JProbe使用指南

JProbe是针对JAVA/J2EE应用进行性能优化的工作,本文档讲解从JProbe安装到使用该工具查找性能热点和内存泄露的方法

从Oops到Fix:用Crash工具解剖Linux内核转储文件全流程

本文详细介绍了如何使用Crash工具分析Linux内核转储文件,从Oops信息提取到最终问题修复的全流程。通过实战案例和高级调试技巧,帮助开发者快速定位和解决内核崩溃问题,提升系统稳定性。文章涵盖了kdump配置、vmcore生成、反汇编分析以及典型崩溃场景的解决方案。

xk7n92h3p5m的博客 707

数字IC后端实现 | Innovus各个阶段常用命令汇总

数字IC后端设计实现之Innovus常用命令汇总

weixin_37584728的博客 7312

如何使用obspy下载地震波形数据

如果你是地震研究学者,或者需要进行地震方面的研究,那么地震数据下载是一个必不可少的流程,本文将告诉你如何使用obspy下载想要的地震数据

monsterk1的博客 2074

解剖linux内核之进程

HaiPeng(lzuzhp@gmail.com)        一台PC机,CPU是核心,对于操作系统,管理CPU的那部分便是OS的核心,这就是进程管理,我就认为“得进程管理者得linux内核”,OS的其他资源(内存、磁盘、网络等)都要提供该该资源的操作函数来供进程来使用。 打印内核中的所有进程 通过ulk我们知道,linux内核的所有进程是通过双向链表串在一起的,而且每一个进程都有一

1909

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1580

【Linux内核解剖】内核问题之softlockup以及应对之法

操作系统(Operating System, OS)是管理计算机硬件和软件资源、协调计算机系统中各个任务执行的基本软件。操作系统的核心组件是内核(Kernel),它负责处理系统调用、内存管理、进程调度等基本功能。内核是操作系统的基石,其稳定性和性能对整个系统至关重要。Linux内核中有两种类型的lockup:softlockup和硬lockup。它们都会导致系统无响应,但原因和表现有所不同。softlockup通常是由于内核中的一个或多个任务长时间占用CPU,导致其他任务无法得到执行;

weixin_43965970的博客 4346

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2930

redhawk-sc使用简介

数据完整性对结果的准确性有很大影响,所以一定要保证数据完整性,Redhawk-sc在跑完后,Report里有Data Integrity界面,在这个界面会看到设计数据和库文件的数据完整性,在相应的报告中会有没有覆盖到的数据情况,要对每一项仔细检查,保证输入数据没有问题。文件一般加密,用户唯一需要选择的是文件的corner。其中,cell lef除了常规的standard cell,还有如DTCD,BTSV和clamp等cell的lef,不可缺失,否则data integrity将不是100%。

weixin_48518726的博客 3136

【Linux仓库】Linux内核:深度解剖Makefile如何管理百万行代码?

本文介绍了Linux下make和Makefile的使用方法。Makefile通过定义编译规则实现自动化构建,提高开发效率。文章解析了Makefile的基本语法,包括目标文件、依赖关系和执行命令,并解释了.PHONY伪目标的作用(强制执行某些操作)。通过实例演示了从源代码到可执行文件的完整编译过程,包括预处理、编译、汇编和链接各阶段。最佳实践建议将clean标记为.PHONY,而可执行目标则根据文件修改时间决定是否需要重新编译。最后介绍了使用自动化变量$@和$^简化Makefile编写的方法。

egoist2023的博客 1716

基于Python的网贷平台数据爬虫实战:Scrapy+Selenium+反反爬策略

python复制下载# items.py本文详细介绍了如何使用Python构建一个完整的网贷平台数据爬虫系统,涵盖了从基础爬取到高级反反爬策略的全套解决方案。我们使用了Scrapy框架作为基础,结合Selenium处理动态内容,实现了多种反反爬策略,并探讨了分布式爬虫的实现方式。机器学习识别验证码基于深度学习的网页结构变化检测自动化行为模拟的更精细控制基于Kubernetes的弹性爬虫集群。

2201_76125261的博客 1560

解剖linux内核之内存

结束了对内核进程的剖析,接下来将要开始对内核资源(从os角度)的剖析。OS为了更好地管理资源,会对真实的资源进行虚拟化,例如针对内存有虚拟内存(虚拟线性地址空间),针对与文件系统有虚拟文件系统(VFS层);为了更好的使用该资源会首先对资源进行抽象(即定义资源的数据结构)然后基于此在定义操作(函数)。因此,我们读内核,要遵从“虚实结合,一动一静”的原则,虚与实的结合往往便是掌握内核的关键,动与静可以

1318

使用HART Server PC软件进行HART设备的组态、调试和分析的完整指南

HART协议是一种用于工业自动化中的双向通信协议,能够在4-20mA模拟信号的基础上叠加数字信号,从而实现设备的远程监控和管理。HART协议兼具模拟和数字通信的优点,被广泛应用于过程控制系统中。设备组态:通过软件可以对HART设备进行组态,配置设备参数。设备调试:支持设备的在线调试和故障诊断,方便快速解决问题。数据分析:提供设备运行数据的实时监控和历史数据分析功能。报表生成:支持生成各类报表,便于数据记录和管理。

qq_38334677的博客 2468

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

深入 Linux 内核启动:从按下电源到用户登录的全景解剖

本文深入解析了Linux内核从开机到用户登录的完整启动过程。按下电源键后,BIOS/UEFI首先初始化硬件,随后引导加载器GRUB接管,加载压缩内核映像vmlinuz和小型解压器。内核通过早期初始化建立基本运行环境,而initramfs临时系统则破解了"先有驱动还是先有根文件系统"的悖论。当切换至真正的根文件系统后,PID 1进程(如systemd)启动,管理服务并行加载。最终通过getty或图形登录管理器完成用户登录。整个过程展现了硬件初始化、内核自举、临时系统过渡到用户空间构建的精密

htw250056的博客 1322

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux内核级权限验证:从文件访问到IPC安全的深度解剖

本文剖析Linux内核三级安全架构(DAC-能力模型-LSM),重点探讨:1)文件访问控制中inode_permission()的九层防御链,包括能力特权、所有权匹配和LSM二次验证;2)IPC通信的权限验证机制,涵盖SystemVIPC绑定、信号发送规则及命名空间隔离;3)内核空间隔离通过能力细粒度控制(40+独立能力)和设备硬隔离实现。文章揭示现代容器安全三要素(用户命名空间、能力白名单、Seccomp沙箱),并指出性能优化技术如RCU凭证保护、LSM策略预编译等。最终提出云原生时代"隔离×权

小李独爱秋的博客 2461

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

解剖linux内核之文件系统

虚实结合 文件系统主要分为两个部分:vfs和ext2(以ext2为例),一虚一实,vfs是在机子启动的时候在内存中建立的,机子关掉便不存在了,是虚的;ext2是在磁盘介质上的,是磁盘在格式化的时候确定的,机子关机后仍然在磁盘上存在。 在磁盘上的ext2文件系统那个的格式如下: Ext2中与superblock对应的结构体是   struct ext2_super_bloc

1672

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Ubuntu下gcc安装及使用
下一篇: ibus的设置及极点五笔的安装
常用技术
博客等级 码龄17年 91粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值