自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 字符设备之open()与release()函数

open()往往是一个设备操作的发起者,而release()往往是一个设备操作的终结者.    1.open():    当我们要操作一个设备时,往往第一个动作就是open().其原型如下:int (*open)(struct inode *inode,struct file *filp);    其中,两个参数inode和filp由内核根据我们打开的设备节点信息(如主次设备号

2013-11-27 22:11:21 5530

原创 struct inode、struct file和struct file_operations的宏观认识

我们在驱动编程中经常会遇到文件的操作:struct file_operations.比如open()、release()、read()、write()、ioctl()、poll()、select()、fsync()、llseek()等.

2013-11-21 23:31:31 2457

原创 MINI2440+DM9000网络驱动分析之六

在内核网络子系统里面,我们看不到其通过某节点与实际的PHY关联,不像字符设备和块设备,通过某设备节点和具体的物理设备关联起来.虽然像字符设备和块设备中间有可能通过层层子系统到达物理设备的操作层,如输入子系统的流程如下:用户空间-->事件驱动层-->输入设备驱动层-->物理设备操作集    但是我们还是可以看到其开始的起点.实际上,网络子系统是通过"路由信息"完成用户空间与具体的PHY实现交

2013-11-18 11:59:13 1569

原创 MINI2440+DM9000网络驱动分析之五

在字符设备当中,我们比较习惯的一种思维是"一切皆文件".比如说,我们操作一个硬件的时候,首先去open一个设备节点.底层的操作集直接或间接对应用户空间的系统调用的API.但是,在网络子系统里面,我们去操作一个PHY时,并没有直接去操作所谓的节点,如eth0.比如我们通过TFTP下载一个文件到目标机器的时候,只需要执行下面的命令即可:tftp -r YourFile -g 192.168.1.1

2013-11-18 11:58:57 1071

原创 MINI2440+DM9000网络驱动分析之四

从之三的dm9000_probe()函数,到下面代码为止便进入内核网络子系统: ret = register_netdev(ndev);    从大的角度看,此函数有两个功能:一是命名我们的PHY的名字,如eth0、eth1等;二是通过函数register_netdevice(dev)正式入驻内核网络子系统.     1.  err = dev_alloc_name(dev,

2013-11-18 11:58:41 892

原创 MINI2440+DM9000网络驱动分析之三

1. 函数dm9000_probe()函数的执行,DM9000这颗网络IC的驱动正式开始.此函数的执行完毕,即意味着整个DM9000处于准备就绪状态,安静地等待着上层的网络操作./* * Search DM9000 board, allocate space and register it */static int __devinitdm9000_probe(struct pl

2013-11-18 11:58:15 1198

原创 MINI2440+DM9000网络驱动分析之二

作为一颗IC,如果要应用到不同的CPU平台上,是必须考虑其驱动的可移植性.比如DM9000的设备驱动,在LINUX平台下,也必须考虑其可移植性,即平台无关性.否则,如果DM9000只能适用于某个别平台或者厂家提供的驱动移植到别的平台很困难,这本身就会限制DM9000的使用及厂家利益.基于这一点,看看DM9000的设备驱动应该如何规划的?LINUX内核为了实现内核代码与平台无关性、设备驱动与平台无关

2013-11-18 11:58:05 1176

原创 MINI2440+DM9000网络驱动分析之一

1.DM9000硬件接口:    DM9000提供了三组接口:EEPROM Interface、MII Interface和Processor Interface.相对于EEPROM Interface和MII Interface而言,DM9000是最直接的主控,这时候DM9000相当于一颗MCU;相对于Processor Interface(如S3C2440)而言,DM9000就是一个Sla

2013-11-18 11:57:50 2285

转载 Linux 网络编程及底层实现过程

也许学过从事过网络编程的人都知道socket是什么,表示什么?socket的英文原义是“孔”或“插座。但我们用网络术语将它称为“套接字”(见Linux网络编程),但是我习惯叫“套接口”,可能是受Unix网络编程的影响。里面是这样解释的:首先Socket作为网络API之一,跟XTI一样,是应用层或其他协议层访问接口,其次具体使用的套接口是与Unix管道某端口类似的机制,应用程序和内核(实际是内核实现

2013-11-13 16:07:39 1824

转载 网关的定义及作用

关(Gateway)又称网间连接器、协议转换器。网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需

2013-11-10 12:35:05 1778

转载 子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。        子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识,只有掌握它,才能够真正

2013-11-10 12:17:24 1111

原创 LINUX内核设计与实现之kobject与sysfs

2.6内核引入了一个新特性--统一的设备模型.其优点如下:.代码重复最小化;.提供诸如引用计数这样的统一机制;.可以列举系统中所有的设备,观察它们的状态,并且查看它们连接的总线;.将系统中全部设备结构以树的形式完整、有效地展现出来,包括所有的总线和内部连接;.可以将设备和其对应的驱动联系起来,反之亦然;.可以将设备按照类型加以归类,如分类输入设备,而无需要理解设备的拓扑结构

2013-11-10 12:08:16 701

原创 LINUX内核设计与实现之调试

内核调度主要靠经验和对整个操作系统的把握. 18.1 调度前需要准备什么重现BUG. 18.2 内核中的BUG引发内核中的BUG的原因如下:.同步;.定时限制;.竞争条件. 18.3 printk()在终端没有初始化之前,printk()函数是不可用的.比如在setup_arch()函数之前.不过可以用printk()函数的变体--early_pri

2013-11-09 15:00:18 659

原创 LINUX内核设计与实现之可移植性

LINUX系统是一个可移植性非常好的操作系统.一般而言,暴露在外的内核接口往往是与硬件体系结构无关的.例如:调试程序(存放于kernel/sched.c文件中)就是与体系结构无关的.但是其中封装的一些功能函数,如处理器上下文切换和地址空间切换等,是依赖于相应的体系结构完成的.因此,context_switch()用于实现进程切换,而在它内部,会调用switch_to()和switch_mm()

2013-11-09 14:48:13 1114

原创 LINUX内核设计与实现之kobject与sysfs

2.6内核引入了一个新特性--统一的设备模型.其优点如下:.代码重复最小化;.提供诸如引用计数这样的统一机制;.可以列举系统中所有的设备,观察它们的状态,并且查看它们连接的总线;.将系统中全部设备结构以树的形式完整、有效地展现出来,包括所有的总线和内部连接;.可以将设备和其对应的驱动联系起来,反之亦然;.可以将设备按照类型加以归类,如分类输入设备,而无需要理解设备的拓扑结构

2013-11-09 14:40:44 908

原创 LINUX内核设计与实现模块

LINUX内核模块的意义:允许内核在运行时动态地向其中插入或从中删除代码. 16.1 构建模块我们经常做的事情就是往内核源码树添加我们自己的驱动源码,便交付内核去编译.下面以一个例子来说明此流程.比如说,我们有个驱动,涉及到两个源码文件:fishing-main.c和fishing-line.c.而且要独立于一个文件夹下.假设我们的驱动是字符设备.那么,我们可以在/deiver

2013-11-09 13:43:19 649

原创 LINUX内核设计与实现之页高速缓存和页回写

页高速缓存(cache):是LINUX内核实现的一种主要磁盘缓存.它主要用来减少对磁盘的I/O操作.具体而言,通过把磁盘的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问.页高速缓存的价值:磁盘高速缓存的价值在两方面:一、访问磁盘的速度远低于访问内存的速度;二、数据一旦被访问,就很有可能在短期内再次被访问,这些数据会被暂存在高速缓存中,实现快速命中.页高速缓存的实现

2013-11-08 23:53:32 1187

原创 LINUX内核设计与实现之进程地址空间

两个不同的进程可以在它们各自地址空间相同地址内存存放不同的数据.但是进程之间也可以选择共享地址空间,这样的进程我们称之为线程.内存区域:内存地址是一个给定的值,它要在地址空间范围之内的,比如4021f000.这个值表示的是进程32位地址空间中的一个特定的字节.在地址空间中,我们更关心的是进程有权访问的虚拟内存地址区间,比如08048000-0804c000.这些可被访问的合法地址区间谓之内

2013-11-08 23:38:25 1113

原创 LINUX内核设计写实现之块IO层

块设备:系统中能够随机(不需要按顺序)访问固定大小数据片(chunk)的设备.这些数据片称为块.一般而言,块设备都是以安装文件系统的方式使用的.所谓的随机性,是指被读取的块在磁盘上的位置不一定要连续,它能够在介质的不同区间前后移动.字符设备:以字符流的方式有序访问的设备. 13.1 解剖一个块设备扇区:块设备中最小的可寻址单元,是物理设备性质的.扇区是所有块设备的基本单元--块设备

2013-11-08 13:45:17 1192

原创 LINUX内核设计与实现之虚拟文件系统

VFS作为内核子系统,为用户空间程序提供了文件系统的操作接口.VFS是用户空间到具体文件系统(如EXT3)的一个接口中间层. 12.1 通用文件系统接口VFS最大的意义就是使用用户空间可以直接使用open()、read()和write()等等函数而不需要考虑具体的文件系统(如YAFFS,ext2等). 12.2 文件系统抽象层LINUX之所以可以做到对所有类型的文件系统(比

2013-11-08 11:41:26 1037

转载 Linux slab 分配器剖析

Linux slab 分配器剖析了解 Linux 内存管理的方式良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab 分配器背后所

2013-11-07 16:09:28 560

原创 LINUX内核设计思想之内存管理

11.1 页内核把物理页作为内存管理单元.大多数32全体系结构支持4KB的页.从虚拟内存角度来说,页就是最小单位.struct page结构体定义于中: Page结构与物理页相关的,而并非与虚拟页相关.因此,该结构对页的描述只是短暂的.即使页中所包含的数据继续存在,由于交换等原因,它们可能不再和同一个page结构关联.内核仅仅用这个数据结构来描述当前时刻在相关的物理页存放的东西.这种数

2013-11-07 16:04:52 794

原创 LINUX内核设计思想之定时器和时间管理

内核中有大量函数都是基于时间驱动的.例如,屏幕刷新.10.1 内核中的时间概念节拍(tick):连续两次时钟中断的间隔时间,谓之节拍.10.2 节拍率:HZ把上面的节拍取倒数就是节拍率(HZ).内核在文件中定义了HZ的实际值,节拍率等于HZ,周期为1/HZ秒.例如:I386体系结构在include/asm-i386/param.h中对HZ值定义如下:#define HZ 1

2013-11-07 15:15:50 854

原创 LINUX内核设计思想之内核同步方法

9.1 原子操作原子操作是不可分的微粒操作,它可以保证执行过程不被打断.LINUX提供了两组原子操作接口--一组针对整数操作,另一组针对单独的位操作.9.1.1 原子整数操作定义于相关体系结构的文件中.针对整数的原子操作只能对atomic_t类型的数据进行处理.示意代码如下:Atomic_t v; /*定义 v*/Atomic_t u = ATOMIC_INIT(0); /

2013-11-07 14:48:05 732

原创 LINUX内核设计思想之内核同步介绍

并发共享数据是造成不稳定的一类隐患,而且这种错误一般难以跟踪和调度,因此必须给内核同步以高度重视. 8.1 临界区和竞争条件临界区:访问和操作共享数据的代码段.同步:避免并发和防止竞争条件的策略.原子操作:确保每个事务的完整操作,是同步一种笼统策略说法. 8.2 加锁锁提供的就是这样一种机制:它如同一把门锁,门后的房间可想象成一个临界区.在一个指定的时间内,房间里只

2013-11-07 14:27:37 626

原创 LINUX内核设计思想之下半部和推后执行的工作

LINUX内核为解决异常中断的即时响应及大量的数据交互二者之间的矛盾,把中断分为上半部和下半部.上半部保证了异常中断的即时响应,下半部去完成中断引发的大量数据的交互,如从硬盘拷贝数据到内存. 7.1 下半部的实现机制有三种机制可以用来实现将工作推后执行:软中断、tasklet和工作队列.tasklet是通过软中断实现的,而工作队列与它们完成不同.如果某中断需要用到下半部机制,往往在中断

2013-11-07 11:31:58 779

原创 LINUX内核设计思想之中断和中断处理程序

中断,主要分两种:同步中断和异常中断.同步中断是和处理器时钟同步的,是用户可预见的,如编程失误导致的错误指令(例如除0);异常中断是随机的,用户不可预见的,一般由外设引发,如键盘的按下和弹起的动作. 6.1 中断上半部和下半部在实际应用中,我们不得不面对以下情景:处理器能及时响应中断,如果ISR(中断例程)里面包含比较大的数据量要处理的话(例如网卡),ISR里面会因为停留在中断数据处理

2013-11-07 11:11:36 851

原创 LINUX内核设计思想之系统调用

通过系统调用,是用户空间访问内核的唯一手段,除异常和陷入之外,它们是内核唯一的合法入口. 5.1 系统调用的示意代码例如获取当前进程的PID,用户空间只需要调用如下代码:User Space:getpid()实质上,内核是这样响应此系统调用的.Kernel Space:Asmlinkage long sys_getpid(void){Return curre

2013-11-07 11:07:08 826

原创 LINUX内核设计思想之进程调度

调度程序,负责选择下一个要运行的进程.在单处理器上,LINUX系统也许有100多个进程在内存里面,但是只有一个处于可运行状态.调度程序选择下一个要运行的进程的依据是什么呢? 4.1 策略这里所谓的策略,是指决定调度程序何时让什么进程运行.调度程序的执行意味着要从等待执行的进程队列里面选出一个合适的进程来运行.有这样一个情景:有这样一个系统,它拥有两个运行中的进程:一个文字编辑程

2013-11-07 10:56:12 907

原创 LINUX内核设计思想之进程管理

什么是进程?进程是处于执行期的程序以及它所包含的资源的总称. LINUX下进程的特性:1.进程的出生:fork()系统调用.其实现机制是通过复制一个现有的进程来创建一个全新的进程. 2.进程的执行:exec*()函数族创建新地址空间并把新的程序载入执行. 3.进程的死亡:exit() 3.1 进程描述符及任务结构LINUX内核里面用结构体st

2013-11-07 10:08:25 910

原创 LINUX内核设计思想之初识LINUX

2.1获取内核源码:官方网址:http://www.kernel.org 2.1.1 内核源码的安装:内核源码一般安装在/usr/src/linux目录下. 2.1.2 使用内核补丁:在要打内核补丁的目标内核源码目录下,运行:$patch -p1  2.2 内核源码树Arch 特定体系结构的源码Crypto Crypto APIDocumenta

2013-11-06 14:56:07 663

原创 OSI七层模型的了解

OSI是Open Source Initiative是缩写.它是由国际标准化组织ISO提出的一个网络系统互连模型.自上而下分为七层:应用层-->代表层-->会话层-->传输层-->网络层-->数据链路层-->物理层        1.OSI七层模型图:    其示意图如下:        2.网络数据流窜过程:        2-1.对等层通信:

2013-11-06 14:46:41 741

原创 MINI2440+UDA1341TS分析之三

我们已经大体知道与平台相关并且知道内核音频子系统所需要的数据结构.接下来我们将根据函数调用流程看一下平台相关的代码是如何和内核音频子系统交互的.    1.static int s3c24xx_uda134x_probe(struct platform_device *pdev)    MINI2440音频驱动的入口在sound/soc/s3c24xx/s3c24xx_uda1

2013-11-02 14:56:40 1504

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除