随笔分类 -  Linux

摘要:转自 http://www.mcuos.com/thread-3822-1-10.html一.文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件系统是为用户反... 阅读全文
posted @ 2016-04-10 03:02 woainilsr 阅读(303) 评论(0) 推荐(0)
摘要:转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0######虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不同的目录结构(因为它们可能挂载了不同的文件系统 阅读全文
posted @ 2014-03-09 21:50 woainilsr 阅读(2582) 评论(0) 推荐(0)
摘要:看到一篇讲Netfilter框架的,如果有一点基础了的话对于捋清整个框架很好帮助,转下来细细阅读。转自http://aichundi.blog.163.com/blog/static/7013846220084910397396/#####一、概述1. Netfilter/IPTables框架简介 Netfilter/IPTables是继2.0.x的IPfwadm、2.2.x的IPchains之后,新一代的Linux防火墙机制。Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables连接到Netfilter的架构中,并允许使用者对数据报进行过滤、地址转换、处理等操作 阅读全文
posted @ 2014-03-08 19:06 woainilsr 阅读(1436) 评论(0) 推荐(0)
摘要:1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认真研究一下这个链表结构。2、offsetof宏 使用offsetof宏需要包含stddef.h头文件,实例可以参考:http://www.cplusplus.com/reference/cstddef/of.. 阅读全文
posted @ 2013-12-13 08:54 woainilsr 阅读(4476) 评论(0) 推荐(1)
摘要:先引用一篇博文,再总结一下相关问题。所谓上下文切换,实质就是寄存器堆的切换过程。这其中一部分需要硬件来切换,一部分需要软件来处理。当在用户空间发生中断时,首先由 x86 CPU 从硬件角度进行处理,然后才是 linux 内核的处理。当中断处理完毕,返回到用户空间时,最后的步骤也是交给 CPU 硬件来处理的。1、 X86 CPU 对中断的硬件支持CPU 从中断控制器取得中断向量根据中断向量从 IDT 中找到对应的中断门根据中断门,找到中断处理程序在进入中断处理程序前,需要将堆栈切换到内核堆栈。也就是将 TSS 中的 SS0、ESP0装入SS、ESP然后将原来的用户空间堆栈(SS, ESP)、EF 阅读全文
posted @ 2013-07-23 18:00 woainilsr 阅读(459) 评论(0) 推荐(0)
摘要:一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由硬件设备产生的。异常的产生源有两种:一种是由程序的错误产生的,内核通过发送一个Unix程序员都熟悉的信号来处理异常;第二种时内核必须处理的异常条件产生的,此时内核执行恢复异常需要的所有步骤,例如缺页,或对内核服务的一 阅读全文
posted @ 2013-07-23 17:58 woainilsr 阅读(3283) 评论(2) 推荐(0)
摘要:进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可 阅读全文
posted @ 2013-07-23 16:11 woainilsr 阅读(334) 评论(0) 推荐(0)
摘要:1、gcc-Wallhello.c-ohello//编译源文件,显示警告信息2、./a.out//运行程序3、gcc-Wallcalc.c/usr/lib/libm.a-ocalc//绝对路径包含库4、gcc-Wallcalc.c-lm-ocalc//使用参数包含库5、Gcc默认搜索库文件的目录:/usr/local/lib/;/usr/lib/6、Gcc默认搜索头文件的目录:/usr/local/include/;/usr/include/7、Gcc-I与-L参数:前者将路径加到搜索包含头文件的搜索路径列表;后者将路径加到搜索包含库文件的搜索路径列表。8、C_INCLUDE_PATH添加c语 阅读全文
posted @ 2013-07-20 23:29 woainilsr 阅读(510) 评论(0) 推荐(0)
摘要:C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关。比如常见的X86处理器是小端模式;ARM处理器默认是小端模式,当然也可以通过配置,改为大端模式;Moto的68000、DEC的SPARC是大端模式。 1.什么是大小端? 定义:一个内存对象由多个字节组成;同时,内存存放... 阅读全文
posted @ 2013-07-20 23:20 woainilsr 阅读(715) 评论(0) 推荐(0)
摘要:1.Linux网络栈下两层实现 1.1简介 VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示: 这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备,只要注册一个s... 阅读全文
posted @ 2013-07-17 22:35 woainilsr 阅读(12017) 评论(0) 推荐(1)
摘要:GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。本章中的示例,除非特别注明,否则均采用Gcc版本为4.0.0。GCC入门基础表3.6 Gcc所支持后缀名解释后 缀 名所对应的语言后 缀 名所对应的语言.cC原始程序.s/.S汇编语言原始程序.C/ 阅读全文
posted @ 2013-07-12 15:36 woainilsr 阅读(12361) 评论(0) 推荐(0)
摘要:一、为VMware虚拟机添加硬盘1. 首先在VMware虚拟机的VM->Setting子菜单中为虚拟机添加一块15G大小的SCSI类型的硬盘(注意:如果原来为IDE硬盘,SCSI类型的硬盘可能添加不成功,则可以添加IDE类型的硬盘)。2. 下面是为VMware虚拟机添加额外硬盘完整的命令:[root@localhost GemOcean]# fdiskUsage: fdisk [-l] [-b SSZ] [-u] deviceE.g.: fdisk /dev/hda (for the first IDE disk)or: fdisk /dev/sdc (for the third SCS 阅读全文
posted @ 2013-07-11 11:06 woainilsr 阅读(1340) 评论(0) 推荐(0)
摘要:Linux有自己一套完整的启动体系,抓住了Linux启动的脉络,Linux的启动过程将不再神秘。阅读之前建议先看一下附图。本文中假设inittab中设置的init tree为:/etc/rc.d/rc0.d/etc/rc.d/rc1.d/etc/rc.d/rc2.d/etc/rc.d/rc3.d/etc/rc.d/rc4.d/etc/rc.d/rc5.d/etc/rc.d/rc6.d/etc/rc.d/init.d1. 关于Linux的启动init是所有进程之父init读取/etc/inittab,执行rc.sysinit脚本(注意文件名是不一定的,有些unix甚至会将语句直接写在initta 阅读全文
posted @ 2013-07-11 10:59 woainilsr 阅读(2659) 评论(0) 推荐(0)
摘要:在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装! 我们都知道源码包安装分为这么几个阶段, 1、 Tar:解压这个源码软件包。 2、 Cd:进入到这个源码包。 3、 ./configure:“configure”会在你的系统上测试存在的特性(或者bug!)然后来建立Makef... 阅读全文
posted @ 2013-07-10 22:32 woainilsr 阅读(534) 评论(0) 推荐(0)
摘要:★概要: 这片文档从程序员的角度讨论了linux的ELF二进制格式。介绍了一些ELF执行 文件在运行控制的技术。展示了如何使用动态连接器和如何动态装载ELF。 我们也演示了如何在LINUX使用GNU C/C++编译器和一些其他工具来创建共享的 C/C++库。 ★1前言 最初,UNIX系统实验室(USL)开发和发布了Executable an... 阅读全文
posted @ 2013-07-10 22:24 woainilsr 阅读(782) 评论(0) 推荐(0)
摘要:Linux支持动态连接库,不仅节省了磁盘、内存空间,而且可以提高程序运行效率[1]。不过引入动态连接库也可能会带来很多问题,例如动态连接库的调试[4]、升级更新[5]和潜在的安全威胁[6][7]。这里主要讨论符号的动态链接过程,即程序在执行过程中,对其中包含的一些未确定地址的符号进行重定位的过程[3][8]。 本篇主要参考资料[3]和[8],前者侧重实践,后者侧重原理,把两者结合起来就方便理解程序的动态链接过程了。另外,动态连接库的创建、使用以及调用动态连接库的部分参考了资料[1][2]。 下面先来看看几个基本概念,接着就介绍动态连接库的创建、隐式和显示调用,最后介绍符号的动... 阅读全文
posted @ 2013-07-10 22:18 woainilsr 阅读(5637) 评论(0) 推荐(0)
摘要:Tips of Linux C programming(转自 http://rdc.taobao.com/blog/cs/?p=1675)1. 优雅地使用链表 链表是编程中经常要用到的数据结构,结构体描述时分为数据域和指针域,本没有什么好讲。但有没有想过教科书上的这种方式有什么问题?通过这种方式定义和使用链表,对于不同的链表类型,都要定义各自的链表结构,繁琐的很。linux kernel中链表的用法才应该是教科书中出现的。 基本思想:在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。1) 链表定义:struct list_head { struc... 阅读全文
posted @ 2013-05-02 10:52 woainilsr 阅读(268) 评论(0) 推荐(0)