嵌入式Linux中文站

在Linux上如何得到一个段错误的核心转储

阅读(106)

本周工作中,我花了整整一周的时间来尝试调试一个段错误。我以前从来没有这样做过,我花了很长时间才弄清楚其中涉及的一些基本事情(获得核心转储、找到导致段错误的行号)。于是便有了这篇博客来解释如何做那些事情! 在看完这篇博客后,你应该知道如何从哦,我的程序出现段错误,但我不知道正在发生什么到我知道它出现段错误时的堆栈、行号了! 。 什么是段错误? 段错误 segmentation fault 是指你的程序尝试访问不允许访问的内存地址的情况。这可能是由于: 试图解引用空指针(你不被允许访问内存地址 0 ); 试图

Linux内核页回收swappiness参数有着什么作用

阅读(132)

这两天看微博上有人讨论swappiness相关问题,mysqlperformanceblog上也有人说将swappiness设成0后MySQL被意外 kill掉,另外自己所在团队线上也遇到过类似问题,大家对这个参数的含义可能还不是很清楚,个人尝试写篇文章详细解释下这个参数。 本文主要尝试解释两个问题: 1. swappiness的确切含义是什么,它对内核进行页回收机制的影响。 2. swappiness设置成0,为什么系统仍然可能会有swap发生。 一. 关于内存分配与页回收(page reclaim)

linux驱动之定时器的使用

阅读(304)

Linux的内核中定义了一个定时器的结构: #includelinux/timer.h struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long); }; 利用这个结构我们可以在驱动中很方便的使用定时器。 一: timer的API函数: 初始化定时器: void init_tim

Linux内核特性之VDSO

阅读(264)

这段时间看Linux内核源码的时候,经常碰到vdso这个东西(像在Feature-fixup中,获取时间等操作时),网上搜了一下,才知道了含义,原来这是Linux为了解决和glibc兼容而想出的绝招

linux kernel内存映射实例分析

阅读(362)

作者:JHJ(jianghuijun211@gmail.com) 日期:2012/08/24 欢迎转载,请注明出处 引子 现在android智能手机市场异常火热,硬件升级非常迅猛,arm cortex A9 + 1GB DDR似乎已经跟不上主流配置了。虽说硬件是王道,可我们还是不禁还怀疑这么强大的硬件配置得到充分利用了吗?因此以后我都会正对ARM平台分析kernel的内容。 正文 在linux内存管理中,有两个资源非常重要,一个是虚拟地址,一个是物理地址。听起来似乎是废话,实际上内存管理主要就是围绕这两个

Linux设备驱动中的并发控制

阅读(222)

并发是多个执行单元同时 并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局变量,静态变量)的访问很容易导致竞态。 主要的竞态有以下三种情况:对称多处理器(SMP)的多个CPU;单个CPU内进程与抢占它的进程;中断(硬中断,软中断,Tasklet 底半部)与

用户空间和内核空间通讯-Netlink 下

阅读(130)

关于Netlink多播机制的用法 在上一篇博文中我们所遇到的情况都是用户空间作为消息进程的发起者,Netlink还支持内核作为消息的发送方的情况。这一般用于内核主动向用户空间报告一些内核状态,例如我们在用户空间看到的USB的热插拔事件的通告就是这样的应用。 先说一下我们的目标,内核线程每个一秒钟往一个多播组里发送一条消息,然后用户空间所以加入了该组的进程都会收到这样的消息,并将消息内容打印出来。 Netlink地址结构体中的nl_groups是32位,也就是说每种Netlink协议最多支持32个多播组。如

用户空间和内核空间通讯- Netlink 中

阅读(255)

今天我们来动手演练一下Netlink的用法,看看它到底是如何实现用户-内核空间的数据通信的。我们依旧是在2.6.21的内核环境下进行开发。 在/usr/include/linux/netlink.h文件里包含了Netlink协议簇已经定义好的一些预定义协议: 点击(此处)折叠或打开 #define NETLINK_ROUTE0/*Routing/device hook*/ #define NETLINK_UNUSED1/*Unused number*/ #define NETLINK_USERSOCK2/