嵌入式Linux中文站

开发专区

valgrind简介以及在ARM上交叉编译运行

valgrind简介以及在ARM上交叉编译运行

阅读(105)

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 关于valgrind的具体使用网上有很多。这里记录一下在ARM上的交叉编译及使用过程中的一些问题。 1、下载及编译准备 wget http://valgrind.org/downloads/valgrind-3...

Linux内核设备树操作常用API

Linux内核设备树操作常用API

阅读(162)

一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在 include/of.h 中声明。 device_node 内核中用下面的这个结构描述设备树中的一个节点,后面的API都需要一个device_node对象作为参数传入。 //include/of.h 46 struct device_node { 47 const char *name; 48 const char *type; 49 phandle phandle; 50 const char *full_name...

Linux下内存泄漏工具

Linux下内存泄漏工具

阅读(202)

概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。 内存泄露可以分为以下几类: 1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2. 偶发性内存泄漏。发生内存泄...

linux内存映射mmap原理分析

linux内存映射mmap原理分析

阅读(84)

内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间----用户空间两者之间需要大量数据传输等操作的话效率是非常高的。 以下是一个把普遍文件映射到用户空间的内存区域的示意图。 图一: 二、基本函数 mmap函数是unix/linux下的系统调用,详细内容可参考《Unix Netword programming》卷二12.2节。 mmap系统调用并不是完全为了用于共享内存而...

linux ptrace

linux ptrace

阅读(171)

ptrace提供让一个进程来控制另一个进程的能力,包括检测,修改被控制进程的代码,数据,寄存器,进而实现设置断点,注入代码和跟踪系统调用的功能。 这里把使用ptrace函数的进程称为tracer,被控制的进程称为tracee。 使用ptrace函数来拦截系统调用(system call) 操作系统向上层提供标准的API来执行与底层硬件交互的操作,这些标准API称为系统调用,每个系统调用都有一个调用编号,可以在unistd.h中查询。当进程触发一个系统调用时它会把参数放入寄存器中,然后通过软中断进入内核模式...

LINUX内核CPU负载均衡机制

LINUX内核CPU负载均衡机制

阅读(185)

还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是load_balance触发的,怀疑当时的核间调度出现了问题,在某个负责场景下产生了多核互锁,后面看了一下CPU负载平衡下的代码实现,写一下总结。 内核代码版本:kernel-3.0.13-0.27。 内核代码函数起自load_balance函数,从load_balance函数看引用它的函数可以一直找到sched...

理解Linux操作系统中的块设备

理解Linux操作系统中的块设备

阅读(208)

块设备也就是存储以块为单位存储数据的设备,比较典型的如磁盘设备、光盘或者优盘。本文首先集中在磁盘设备的相关内容的分析,其他设备类型很类似,暂时不做介绍。 在Windows操作系统下磁盘设备似乎是一个实实在在的设备,我们可以通过图形界面对磁盘设备进行管理。如图1是Windows下的磁盘管理界面,可以通过这个界面清晰的看到磁盘设备,并且可以对其进行格式化等操作。 图1 Windows磁盘设备 Linux操作系统的磁盘设备并不直观,在LInux系统中一切皆文件的理念下,磁盘设备其实是一个文件,只不过是一个比较特...

linux arm mmu基础

linux arm mmu基础

阅读(134)

ARM MMU页表框架 先上一张arm mmu的页表结构的通用框图(以下的论述都由该图来逐渐展开): 以上是arm的页表框图的典型结构:即是二级页表结构: 其中第一级页表(L1)是由虚拟地址的高12bit(bits[31:20])组成,所以第一级页表有4096个item,每个item占4个字节,所以一级页表的大小为16KB,而在第一级页表中的每个entry的最低2bit可以用来区分具体是什么种类的页表项,2bit可以区分4种页表项,具体每种页表项的结构如下: 简而言之L1页表的页表项主要有两大类: 第一大...