
Linux
文章平均质量分 70
雷电羊
这个作者很懒,什么都没留下…
展开
-
掌握 Linux 调试技术
在 Linux 上找出并解决程序错误的主要方法Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBMSteve Best 目前在做 Linux 项目的日志纪录文件系统(Journaled File System,JFS)的工作。Steve 在操作系统方面有丰富的从业经验,他的着重的领域是文件系统、国际化和安全性。简介: 您可以用各种方法来监控运行着的转载 2011-04-06 15:05:00 · 463 阅读 · 0 评论 -
libconfig - Configuration File Library
libconfig - Configuration File Library完全类脚本化的配置语法,支持注释、包含、简单配置、数组、列表以及非常像类的组。test.conf# Example application configuration filetitle = "Test Application"; // scalar valueversion = 1; //转载 2012-01-12 17:06:01 · 1138 阅读 · 0 评论 -
Linux程序设计——用getopt处理命令行参数
Linux程序设计——用getopt处理命令行参数 一2007年09月13日 星期四 05:52 P.M. Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个转载 2011-07-18 11:18:57 · 436 阅读 · 0 评论 -
Linux 内核编译详解
先把linux-2.6.18.2.tar.bz2 复制到/usr/src/ 的下面tar –jxvf linux-2.6.18.2.tar.bz2cd linux-2.6.18.2 make mrproper 把原来编译产生的垃圾删除 配置内核可以根据需要与爱好使用下面命令中的一个:#make config (基于文本的最为传统的配置界面)转载 2012-01-03 12:39:00 · 393 阅读 · 0 评论 -
Linux 中断学习之小试牛刀篇
原文前言在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入来了解内核中断的执行过程一.内核中断程序 :我们还是来看一看成程序:在看程序之前,要熟悉如何进行模块编程,和了解module_pararm()的用法。如果不熟悉的话请大家看,module_param()的学习 和Linux内核模块编程 ,在此不作解释。1.程序interrup转载 2012-06-01 15:23:01 · 485 阅读 · 0 评论 -
中断之原理篇
原文前言:中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使的CPU纠结在某一个IO上,一直在等待它的响应,如果它不响应,CPU就在原地一直的等下去。这样就导致了其他IO口也在等待CPU的服务,如果某个IO出现了important or emergency affairs,CPU也抽转载 2012-06-01 15:24:19 · 883 阅读 · 0 评论 -
内核启动时间优化
原文前言 为了提高开机时间,我们需要优化的部分有:1) bootloader 启动速度2) Linux 内核启动速度3) 文件系统启动速度4) Nand (假设你的 Storage 使用 nand)的读速度5) 应用框架启动速度等等。 本文的内容为自己最近对某内核做的一个优化。供参考。 背景知识转载 2012-07-04 09:59:50 · 1419 阅读 · 0 评论 -
Linux系统启动时间优化方案
原文(1)首先是对Linux启动过程的跟踪和分析,生成详细的启动时间报告。较为简单可行的方式是通过PrintkTime功能为启动过程的所有内核信息增加时间戳,便于汇总分析。PrintkTime最早为CELF所提供的一个内核补丁,在后来的Kernel 2.6.11版本中正式纳入标准内核。所以大家可能在新版本的内核中直接启用该功能。如果你的Linux内核因为某些原因不能更新为2.6.1转载 2012-07-04 10:15:36 · 1517 阅读 · 1 评论 -
linux系统快速启动十大秘诀
Linux需要重新启动是少有的。可是一旦需要,Linux启动常常是缓慢的。幸好有一些加速的办法。其中一些方法不太难。咱们瞧一瞧吧。 #1: 撤消多余的服务 根据机器的用途,很多服务是不需要的。要是Linux只用作桌面,就不需要sendmail、httpd和另外许多服务。如果你的服务器只是Web服务器,也可以关掉许多服务。为此,可转到管理菜单,检查服务项目。只需撤消所有不想启动的转载 2012-07-04 10:10:27 · 1172 阅读 · 1 评论 -
linux开机启动脚本的顺序
如果服务器重启之后需要手工开启许多服务、工作及以后的维护相对比较繁琐、特地总结了下linux下开机自动启动脚本所涉及的知识和方法、如下:1、相关基础知识点 1)redhat的启动方式和执行次序是: 加载内核 执行init程序 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 /etc/rc.d/rc $RU转载 2011-04-06 15:06:00 · 469 阅读 · 0 评论 -
嵌入式linux开机时间优化小结
Ø 用Image替代zImage,zImage是压缩后的内核镜像文件,所以使用Image就省去的加载时的解压所消耗的时间(大概可以节省2~3秒的启动时间)。但若使用Image则应考虑NandFlash的空间是否够用。Ø 文件系统镜像有ramdisk、jffs2和cramfs三种,内核加载这三种镜像的速率cramfs最快,其次jffs2,最后是ramdisk。其中cr原创 2012-07-04 16:45:37 · 5812 阅读 · 0 评论 -
fork两次如何避免僵尸进程
曾经觉得费解,温故知新一下:/*g++ -o New0001 New0001.cpp */#include #include #include #include int main(void){ pid_t pid; if ((pid = fork()) { fprintf(stderr,"Fork error!/n");转载 2011-07-18 11:38:33 · 569 阅读 · 0 评论 -
Linux内核编程实战经验谈
当前,在国产自主版权的操作系统这面大旗的倡导下,IT界掀起了一浪高过一浪的Linux编程热潮。Linux以其源码开放、配置灵活等不可多得的优越性吸引着越来越多的编程爱好者深入Linux的内核开发。笔者近来实践过一个Linux的实时化改造课题任务,积累了一点Linux内核编程的实战经验,在这里想就编译内核、增加系统调用等方面的问题和感兴趣的爱好者共做切磋。编译内核 在Linux编程的实践转载 2011-07-18 11:37:49 · 438 阅读 · 0 评论 -
创建线程时的几个陷阱
创建线程时的几个陷阱 前几天帮同事查一个多线程的BUG,不到十秒钟我就找到了问题的根源。N年前我曾犯过类似的错误,呵,今天仍然有人在重复。这些问题都比较典型,把它们写出来,供新手参考吧。 l 用临时变量作为线程参数的问题。#include #include #include void* start_routine(void* p转载 2011-07-18 11:34:32 · 375 阅读 · 0 评论 -
makefile写法
目的: 基本掌握了make的用法,能在Linux系统上编程。环境: Linux系统,或者有一台Linux服务器,通过终端连接。一句话:有Linux编译环境。准备: 准备三个文件:file1.c, file2.c, file2.h file1.c: #include #inclu转载 2011-04-06 15:08:00 · 588 阅读 · 0 评论 -
Linux下编程为什么多用进程少用线程
一、Linux内核对多进程和多线程的支持方式Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参数调用do_fork()核内API。 do_fork() 提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CL转载 2011-04-21 13:33:00 · 843 阅读 · 0 评论 -
Memwatch简介
Memwatch简介在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域。请往http://www.linkdata.se/sourcecode.html下载最新版本的Memwatch。安装及使用memwatch很幸运地,memwatch根本是不需要安装的,因为它只是一组C程序代码原创 2011-04-22 09:40:00 · 1569 阅读 · 0 评论 -
使用mtrace检查内存溢出
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用的工具可以帮忙来调试的,这就是mtrace。Mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能。 1.在需要跟踪的程序中需要包含转载 2011-04-22 09:43:00 · 1125 阅读 · 0 评论 -
Linux下共享库(SO)有关的几个环境变量
Linux支持共享库已经有悠久的历史了,不再是什么新概念了。大家都知道如何编译、连接以及动态加载(dlopen/dlsym/dlclose)共享库。但是,可能很多人,甚至包括一些高手,对共享库相关的一些环境变量认识模糊。当然,不知道这些环境变量,也可以用共享库,但是,若知道它们,可能就会用得更好。下面介绍一些常用的环境变量,希望对家有所帮助: LD_LIBRARY_PATH这个环境变量是大转载 2011-07-29 16:32:43 · 428 阅读 · 0 评论 -
Linux下的调试工具
Linux下的调试工具 随着XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿于其中的测试工作,经过这个过程出来的自然是高质量的软件。甚至有人声称XP会淘汰调试器!这当然是有一定道理的,然而就目前的现实来看,这还是一种理想。在日常工作中,调试工具还是必不可少的。在Linux下,调试工具并非只有gdb,还有很多其它调试工具,它们都各有所长,侧重方面也有所不同。本文介绍几种笔者常用转载 2011-07-29 16:35:18 · 429 阅读 · 0 评论 -
Makefile好助手:pkgconfig
你在Unix下开发过软件吗?写完一个程序,编译运行完全正常,在你本机上工作得好好的,你放到源代码管理系统中。然后,告诉你的同事说,你可以取下来用了。这时,你长长的出了一口气,几天的工作没有白费,多么清新的空气啊,你开始飘飘然了。 “Hi,怎么编译不过去?”你还沉浸在那种美妙的感觉之中,双臂充满着力量,似乎没有什么问题能难倒你的。正在此时,那个笨蛋已经冲着你嚷开了。 “不会吧,我这边转载 2011-07-29 16:52:33 · 488 阅读 · 0 评论 -
软中断与硬中断
软中断:软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。例如:ROM BIOS中的各种外部设备管理中断服务程序(键盘管理中断、显示器管理中断、打印机管理 中断等,)以及DOS的系统功能调用(INT 21H)等都是软件中断。软中断有4个执行时机,分别是:从系统调用中返回(arch/i386/kernel/entry.S::ENTRY(ret_from_sys_call)转载 2012-03-23 15:44:50 · 1687 阅读 · 1 评论 -
mmap测试程序
原文mmap测试程序(用户空间与内核空间数据交换&&用户态和内核态的数据交换用例)//////////////////////////////////////////////////// Kernel mode module#include #include #include #include static unsigned long p = 0;转载 2012-04-13 10:02:11 · 836 阅读 · 0 评论 -
在linux内核中操作文件的方法
原文#include linux/kernel.h>#include linux/module.h>#include linux/init.h>#include linux/fs.h>#include linux/string.h>#include linux/mm.h>#include linux/syscalls.h>#include转载 2012-04-13 10:23:31 · 896 阅读 · 0 评论 -
SIGPIPE信号
原文我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连转载 2012-04-13 10:25:26 · 441 阅读 · 0 评论 -
Linux内核和用户空间通信的方式— proc文件和mmap共享内存
原文动态的将内核空间的物理地址和大小传给用户空间。本文也演示了内核空间和用户空间进行通信可以使用的两种常用方法:proc文件系统和mmap共享内存。整个内核模块,在模块插入时建立proc文件,分配内存。卸载模块的时候将用户空间写入的内容打印出来。以下是内核模块的代码和用户空间的测试代码。/*This program is used to allocate mem转载 2012-04-13 11:25:48 · 937 阅读 · 0 评论 -
微内核,单内核和linux
Linux大部分都是单内核的 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: l 微内核(Microkernel kernel)――在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个转载 2011-11-29 13:51:18 · 508 阅读 · 0 评论 -
Udev:介绍现代Linux系统的设备管理
Linux在开机过程中,udev检测到网卡,把网卡的相关信息写到文件/etc/udev/70-persistent-net.rules和/proc/net/dev中,系统创建设备节点eth0。然后使用命令ifconfig -a就能显示设备eth0(注意:若IP未被初始化,则ifconfig命令将不会显示该网卡信息)。现代Linux发行版可以在已经运行的系统里面识别一个新转载 2012-03-22 16:55:19 · 1055 阅读 · 0 评论 -
netfilter与用户空间通信二法
原文:http://blog.youkuaiyun.com/wangxing1018/article/details/42955361 先说明一下环境。Linux 内核代码的运行环境有三种:用户上下文环境、硬中断环境和软中断环境。但三种环境的局限性分两种,因为软中断环境只是硬中断环境的延续。内核态环境介绍局限性用户上下文内核态代码的运行与一用户空间进程相关,转载 2012-03-30 15:20:43 · 762 阅读 · 0 评论 -
Linux下访问内存物理地址
原文Linux内核里提供的/dev/mem驱动,为我们读写内存物理地址,提供了一个渠道。下面讲述2种利用mem设备文件进行物理地址读写的方法,一种是设备驱动的方法,另一种是系统调用的方法。首先我们看下mem这个设备文件,/dev/mem是linux下的一个字符设备,源文件是~/drivers/char/mem.c,这个设备文件是专门用来读写物理地址用的。里面的内容是所有物理内存的地转载 2012-04-12 10:33:08 · 924 阅读 · 0 评论 -
linux 启动详解
原文机器加电启动后,BIOS开始检测参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader.里转载 2012-04-13 10:06:07 · 1127 阅读 · 2 评论 -
使用/proc实现内核与用户空间通信
原文1. 前言 Linux内核空间与用户空间的通信可通过"/proc"目录的文件读写来实现,如果只是控制内核中的参数而不是传输较多数据的话,用“/proc”是很合适的。另外一种内核与用户空间通信方式方式是使用内核设备的读写或IOCTL来实现,以后再介绍。 2. /proc概述 /proc目录是系统模拟出来的一个文件系统,本身并不存在于磁盘上,其中的文件都表示内核参数转载 2012-04-13 10:44:11 · 521 阅读 · 0 评论 -
内核和用户空间共享内存【讨论贴】
原文之所以想写这篇帖子,是有两个方面原因。其一是内核版有一个关于《内核可以从线性地址直接计算物理地址,用来做什么呢?》的讨论,偶说计算出物理地址可以共享给用户空间读写。dreamice兄说能否说一下详细的应用。其二是alb*版主提到wheelz曾经写过这样一个例程,拜读了一把,发现在传递物理地址和内存大小上,wheelz的例程还有些不够灵活。alb*版主提到可以通过文件的方式实现动态的传递转载 2012-04-13 11:12:27 · 708 阅读 · 0 评论 -
嵌入式文件系统 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
原文Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会转载 2012-07-05 14:55:22 · 1040 阅读 · 0 评论 -
linux串口编程
原文在linux下编写终端程序时,有规范模式 ,非规范模式(原始模式特殊的非规范模式)之分。不用于终端,而是在串口这种使用情况下,一般设置为原始模式(非规范的一种特殊情况)。但用read()函数,希望从串口接收指定的数量的字符时,往往接收到的实际字符数,都与指定的不同。如本人用read()希望接收 10 bytes的数据,但实验后发现,分了几次才接收到,俩次接收2bytes ,两次接收转载 2012-02-27 14:48:01 · 573 阅读 · 0 评论 -
Linux驱动修炼之道-DMA框架源码分析
DMA框架源码分析转载 2012-03-23 10:39:47 · 564 阅读 · 0 评论 -
Linux 2.6.19.x 内核编译配置选项简介
Linux 2.6.19.x 内核编译配置选项简介作者:金步国版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。其他转载 2012-03-26 13:23:30 · 1213 阅读 · 0 评论 -
Linux 系统内核空间与用户空间通信的实现与分析
原文:http://www.ibm.com/developerworks/cn/linux/l-netlink/index.html多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 Linux 内核态无法对传统的 Linux 进程间同步和通信的方法提供足够的支持。本文总结并比较了几种内核态与用户态进程通信的实现方法,并推荐使用 netlink 套接字实现中断环境与用户态进程转载 2012-03-30 10:41:26 · 414 阅读 · 0 评论 -
Linux TCP/IP 协议栈源码分析
原文:http://blog.youkuaiyun.com/aaa6695798/article/details/4341627一.linux内核网络栈代码的准备知识 1. linux内核ipv4网络部分分层结构: BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以struct socket结构体现。这一部分的文件 主要有:/ne转载 2012-03-30 14:42:21 · 961 阅读 · 0 评论 -
关于SIGPIPE导致的程序退出
原文:http://www.cppblog.com/elva/archive/2008/09/10/61544.html当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号转载 2012-04-07 14:44:31 · 427 阅读 · 0 评论