存档

文章标签 ‘Linux’

Linux下的套接口选项SO_LINGER

2012年10月7日 没有评论 1,213 次浏览

Linux提供了一个套接口选项SO_LINGER,可以改变在套接口上执行close()函数时的默认行为,对于改变之后的行为如何,网上有大量的资料人云亦云的对其进行了说明,但是事实上却并非如此。
选项SO_LINGER用到的相关参数主要是一个linger结构体:

Linux acpi

2012年6月18日 没有评论 1,084 次浏览

ACPI的介绍能Google到很多,今天遇到一个与此相关的问题。一同事说设备nmi中断不触发,凌动D425的CPU芯片,2.4.37的linux内核,把设备拿来启动看看,发现启动参数里acpi=off,而/proc/cpuinfo显示为1个cpu,查看/proc/interrupts,发现中断类型皆为最原始的XT-PIC,想到nmi需要apic支持,难道是apic被连带的禁用了?试试将内核参数改为acpi=on,结果还真成了,nmi能够得以触发,/proc/cpuinfo显示出2个cpu,原来D425是单核心双线程,/proc/interrupts里显示的各个中断类型为IO-APIC-edge或IO-APIC-level。
试了2.6的内核,禁用acpi貌似并不会导致apci也无法使用,不知是否是因为2.4的内核太矬了?嘛,算了,贴一下相关内核参数:

分类: *nix技术, 内核技术 标签: ,

Linux direct io使用

2012年5月16日 5 条评论 2,353 次浏览

在linux 2.6内核上使用direct io不难,只需按照如下几点来做即可:
1,在open文件时加上O_DIRECT旗标,这样以通告内核我们想对该文件进行直接io操作。
2,在源文件的最顶端加上_GNU_SOURCE宏定义,或在编译时加在命令行上也可以,否则将提示:

Linux 2.6.36正式加入的RPS RFS特性介绍

2012年5月9日 1 条评论 1,709 次浏览

之前写在CU的博客上的文章,今天又看了看,转过来。
Linux 2.6.35于2010年8月1号发布,新增特性比较多,而其中最引我注意的为第一点:Transparent spreading of incoming network traffic load across CPUs。
关于此点改进的详细介绍可以查看LWN上的两篇文章:”Receive packet steering” and “Receive flow steering“。
下面我就自己的理解来做一下阐述,不当之处,多多包涵。

Linux下应用程序内测量时间的各种方法

2012年3月17日 没有评论 1,867 次浏览

在linux下统计时间有很多种方法,在内核代码里,最简单方便的方法自然是利用全局变量jiffies,这个字段记录了自系统启动以来产生的节拍总数,而系统每1秒钟将产生HZ次节拍,HZ是个常数,在内核2.6版本,编译时可选择,100/250/300/1000,可以查看内核编译选项:

Linux Kernel Stack Overflow/Linux 内核栈溢出(续)

2012年2月7日 没有评论 1,363 次浏览

前面曾提到Linux 2.6.x内核在X86 32位架构上可以配置内核栈大小(在进行内核编译时,Kernel hacking下进行配置,默认8K,配置之后对应的宏为CONFIG_4KSTACKS),具体生效代码可以看:
http://lxr.linux.no/#linux+v2.6.36/arch/x86/include/asm/page_32_types.h

Linux Kernel Stack Overflow/Linux 内核栈溢出

2012年1月15日 没有评论 2,214 次浏览

不同于Linux应用程序的栈能够动态增长,Linux内核栈是固定的,并且比较小,比如Linux 2.6.x内核,在X86 32位架构上一般是4K或8K(在进行内核编译时,Kernel hacking下进行配置,默认8K),而在X86 64位架构上固定为8K。Linux内核会分配一页(4K stack)或两页连续(8K stack)不可交换(non-swappable)内存来作为内核栈使用。Linux 2.4.x内核在X86位架构上,内核栈固定为8K。

理解ELF文件

2012年1月13日 没有评论 1,194 次浏览

关于ELF(Executable and Linking Format)文件格式的基本介绍无需多说,这里直接进入正题。ELF格式文件有好几种类型:
1,可重定位文件(Relocatable file),也就是通常所说的编译中间文件,这些文件包含有代码和数据,但尚未进行形成最终的可执行文件或库。比如如下的test.o文件,另外内核模块.ko也属于此类ELF。

分类: *nix技术, Shell命令 标签: ,

Linux下逆向工具

2012年1月12日 2 条评论 1,726 次浏览

Windows下有很多逆向工具,Linux下也有,当然,和Windows平台有所不同的是,Linux下的逆向工具主要是用来定位和分析程序的问题,比如当应用程序崩溃之后,如何从core文件里给出的信息查出原因所在。
曾经用过的一些命令如下(只列出主要功能):
addr2line:根据一个代码地址,定位到对应的源文件与代码行。
nm:列出程序里的符号。
objdump:反汇编。
readelf:显示任何ELF格式目标文件里的相关符号信息。
等等。

Linux X86-64 进程内存空间布局

2011年12月28日 没有评论 2,412 次浏览

随着硬件的快速发展,大多数操作系统都已经在使用64位系统,对于Linux下X86-64的进程内存空间布局并没有Google到很好的资料,而对于32位系统倒有不少描述得非常清晰的文档,比如:【图解】Linux下C程序进程地址空间布局,linux 下 C 程序(进程) 内存布局,等等。对于Linux X86-64,刚好利用现成的系统环境做了一下简单的对比测试。测试的代码:

Linux环境下查看硬件信息

2011年12月7日 没有评论 1,189 次浏览

由于相关工作的关系,在Linux环境下查看硬件信息是经常的事情,陆陆续续也有了一些经验,这里总结一些。
一般而言,在Linux下查看硬件信息的最基本方法就是利用/proc文件系统,这个动态文件系统里提供了很多相关的信息,比如: