![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 57
yyt7529
这个作者很懒,什么都没留下…
展开
-
嵌入式linux下jffs2文件系统的实现
1 文件系统 文件系统是一个操作系统中最重要的部分之一,它为操作系统提供了一种结构化存储和管理数据的方式。文件系统的主要功能是对数据的物理存储进行管理,并向用户提供对数据的访问接口。用户程序建立在文件系统上,通过文件系统访问数据,而不需要直接对物理存储设备进行操作。 最初的操作系统一般都只支持单一的一种文件系统,并且文件系统和操作系统内核紧密关联在一起,而linux操作系统的文件系统结转载 2009-07-13 20:20:00 · 1683 阅读 · 0 评论 -
阅读LINUX源码的方法及工具
由于操作系统的内核贴近硬件,需要对计算机的体系结构有所了解,例如CPU的工作原理、接口特性和BIOS调用等。读者千万别因为这些望而却步,这里将介绍一些阅读Linux内核源码必备的技能。 1.获取内核 一般在Linux系统中的/usr/src/linux*.*.*(*.*.*代表的是内核版本,如2.4.23)目录下就是内核源代码(如果没有类似目录,是因为还没安装内核代码)。另外还可转载 2009-06-22 10:37:00 · 780 阅读 · 0 评论 -
深入分析Linux内核源码
http://www.kerneltravel.net/kernel-book/%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90Linux%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81.html原创 2009-06-22 19:14:00 · 640 阅读 · 0 评论 -
linux内核模块编程之入门(一) 模块编程
模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。1.应用程序与内核模块的比较为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较。表一 应用程序与内核模块程序的比较 C语言应用程序内核模块程序使用函数Libc库内核函数运行空间用户空间内核空间运行权限普通用户超级用转载 2009-06-24 15:49:00 · 685 阅读 · 0 评论 -
linux内核模块编程之进阶(三)
在上一部分“编写带有参数的中断模块”中,这个看似简单的程序,你调试并运行以后思考了哪些方面的问题?CPU00: 10655925 IO-APIC-edge timer1: 9148 IO-APIC-edge i80426: 4 I O-APIC-edge floppy7: 0转载 2009-06-24 15:59:00 · 739 阅读 · 0 评论 -
Linux驱动开发学习 第一个驱动程序 hello world
1、关于目录 /lib/modules/2.6.9-42.ELsmp/build/ 这个是内核源码所在的目录 一般使用这样的命令进入这个目录:cd /lib/modules/$(uname -r)/build/ 这个目录实际上指向了:/usr/src/kernels/2.6.9-42.EL-smp-i6862、编译驱动所使用的makefile 实际上编译驱动的时候是使用预转载 2009-06-23 19:15:00 · 714 阅读 · 0 评论 -
linux内核模块编程之入门(二)-编写带参数的中断模块
在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 IRQ 上的一个中断时会调用它。先给出全部代码,读者自己调试,把对该程序的理解跟到本贴后面。—————————————-#include #include #include static int irq;static char *interface;//MODULE_PARM_DESC(interface,”A net转载 2009-06-24 15:55:00 · 719 阅读 · 0 评论 -
基于ARM+Linux 2.6内核的控制系统驱动设计
0 引 言 嵌入式系统的开发都有其特殊的应用场合与特定功能,而嵌入式Linux操作系统因其开源和广泛的处理器支持、易于移植而备受行业青睐。AT91RM9200是Atmel公司针对系统控制、通信领域推出的基于ARM920T内核的32位RISC微处理器,它具有小体积,低功耗,低成本及高性能等特点,其内部集成了SPI、串口、PIO、以太网、EBI、USB、MCI等多种接口。 在Linux系统转载 2009-07-01 15:23:00 · 951 阅读 · 0 评论 -
linux 的任务堆栈,以及用户态和内核态的切换
任务的堆栈每个任务都有两个堆栈,分别用于用户态和内核态程序的执行,并且分别称为用户态堆栈和内核态堆栈。除了处于不同CPU特权级中,这两个堆栈之间的主要区别在于任务的内核态堆栈很小,所保存的数据量最多不能超过4096 - 任务数据结构块个字节,大约为3KB。而任务的用户态堆栈却可以在用户的64MB空间内延伸。(1)在用户态运行时每个任务(除了任务0和任务1)有自己的64MB地址空间。当一转载 2009-07-01 16:55:00 · 3618 阅读 · 1 评论 -
Linux源代码行数已超过1000万 价值5亿美元
【赛迪网讯】10月23日消息,一项分析发现,在最近发布2.6.27版本Linux内核之后,包括Linux内核文件在内的源代码行数已经超过了1000万行。 不过,这个数字包括空白行、注释和整个内核源代码全年检查的文本文件。 采用不同的方法进行计算,实际文本行数刚超过90转载 2009-06-22 11:14:00 · 754 阅读 · 0 评论 -
交叉编译器
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行转载 2009-06-12 13:24:00 · 592 阅读 · 0 评论 -
linux可执行文件的加载和运行之一(2)
用户栈位于进程空间的最高部份.那进程初始化时,用户栈存放的是什么呢?是参数.进程在执行时会到栈中去取运行时所需的参数.这里所谓的参数包含了可执行程序所带的参数和环境变量.例如:在shell上执行”echo hello,eric” .echo程序带有二个参数.argv[0] = “echo”,argv[1] = “hello,eric”即第一个参数为程序名称.其后的参数分别是运行进转载 2009-06-10 14:02:00 · 1745 阅读 · 0 评论 -
linux可执行文件的加载和运行之一(4)
经过一系统的初始化之后,可以寻找该文件的加载module了.这是由search_binary_handler()完成的.在深入到这段代码之前.我们有必要讨论一下linux可执文件模块的组织. 在linux内核,用linux_binfmt结构来表示每一个加载模块.它的定义如下:struct linux_binfmt { //用来构成链表 struct lis转载 2009-06-10 14:05:00 · 1711 阅读 · 0 评论 -
UNIX/LINUX平台可执行文件格式分析
相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用情况以及可扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。研究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的。不管何种可执行文件格式,一些基本的要素是必须的,显而易见的,文件中应包含代码和数据。因为文件可能引用外部文件定义的符号转载 2009-06-10 13:40:00 · 527 阅读 · 0 评论 -
linux可执行文件的加载和运行之一(1)
可执行文件的加载和运行 Execve系统调用可以调用一个可执行文件完全代替当前的进程,它在libc中的封装有几个API:int execl(const charp a t* h n a m e, const char a* rg 0, ... /* (char *) 0 */);int execv(const charp a t* h n a m e, char *consta rgv [] );转载 2009-06-10 14:00:00 · 1777 阅读 · 0 评论 -
linux可执行文件的加载和运行之一(3)
在这里为bprm->mm的初始化下了这么多功夫是为什么呢?它跟进程的mm有什么关系?不急,继续耐着性子看代码,我们会看到它的用途的. 继续分析do_execve()中所调用的子函数.Count()来用计算可执行文件的参数或者环境变量的个数.它的代码如下:static int count(char __user * __user * argv, int max){转载 2009-06-10 14:02:00 · 1384 阅读 · 0 评论 -
linux进程管理之可执行文件的加载和运行之二
在linux内核,用linux_binfmt结构来表示每一个加载模块.它的定义如下:struct linux_binfmt { //用来构成链表 struct list_head lh; //所属的module struct module *module; //加载可执行文件 int (*load_bin转载 2009-06-10 14:07:00 · 1357 阅读 · 0 评论 -
C函数调用机制(x86的linux环境下)
一 C与汇编程序的相互调用为了提高代码执行效率,内核源代码中有的地方直接使用了汇编语言编制。这就会涉及在两种语言编制的程序之间的相互调用问题。本节首先说明C语言函数的调用机制,然后举例说明两者函数之间的调用方法。(一) C函数调用机制在Linux内核程序boot/head.s执行完基本初始化操作之后,就会跳转去执行init/main.c程序。那么head.s程序是如何把执行控制转交给原创 2009-06-10 15:18:00 · 2637 阅读 · 0 评论 -
linux可执行文件的加载和运行之一(5)
int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs){ int try,retval; struct linux_binfmt *fmt;#ifdef __alpha__ /* handle /sbin/loader.. */ { struct exec *转载 2009-06-10 14:06:00 · 914 阅读 · 0 评论 -
C语言的lex和yacc工具说明
Lex工具 ------- Lex工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序,由该程序识别出输入文本中的各个单词。 1、lex程序的结构 -定义部分 -规则部分 -用户子程序部分 其中规则部分是必须的,定义和用户子程序部分是任选的。 (1) 定义部分 定义部分起始于"%{"符号,终止于"%}"符号,其间可以是包括include语句、声明语句在内的C语句。 %{ #include "stdio.h" #includ转载 2010-07-01 12:45:00 · 1107 阅读 · 0 评论