
Linux Develop
文章平均质量分 79
drizztzou
这个作者很懒,什么都没留下…
展开
-
DMA
Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。转载 2007-06-01 10:43:00 · 451 阅读 · 0 评论 -
Linux内核NAPI机制分析
NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有 E1000 系列网卡,RTL8139 系列网卡,3c50X 系列等主流的网络适转载 2007-06-11 23:25:00 · 1135 阅读 · 0 评论 -
网络处理的软中断机制分析
内核默认软中断机制分析(process_backlog)首先需要介绍的就是netif_rx(在net/core/dev.c中定义)函数,这个函数在网卡驱动程序与linux内核之间建立了一道桥梁,将网卡接收上来的数据包(sk_buff形式)插入内核维护的接收缓冲区队列当中:int netif_rx(struct sk_buff *skb){ int this_cpu =转载 2007-06-11 23:30:00 · 1115 阅读 · 0 评论 -
ARM汇编语言面试题
What registers are used to store the program counter and linker register? A: r15 and r14 are used to store the program counter and linker register, respectively. What is r13 ofter转载 2007-06-13 23:26:00 · 3377 阅读 · 0 评论 -
什么是堆?什么是栈?
一 英文名称 堆和栈是C/C++编程中经常遇到的两个基本概念。先看一下它们的英文表示:堆――heap栈――stack二 从数据结构和系统两个层次理解 在具体的C/C++编程框架中,这两个概念并不是并行的。深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的。这两个概念可以从数据结构和系统两个层次去理解:1、从数据结构层次理解,栈是一种先进转载 2007-06-13 23:48:00 · 1583 阅读 · 0 评论 -
C语言嵌入式系统编程修炼之内存操作
数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下几种情况: (1) 某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址; (2) 两个CPU之间以双端转载 2007-06-13 23:51:00 · 956 阅读 · 0 评论 -
Linux内核内存池管理技术实现分析
一、Linux系统内核内存管理简介 Linux将物理内存也划分成固定大小的页面,由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成一个数组mem_map[]。slab:在操作系统的运作过程中,经常会涉及到大量对象的重复生成、使用和释放问题。对象生成算法的改进,可以在很大程度上提高整个系统的性能。在Linux系统中所用到的对象,比较典型的例子是inod转载 2007-06-14 14:52:00 · 1575 阅读 · 0 评论 -
Linux内核&驱动学习笔记(二)
2007.6.14 pmLinux是如何管理内存的?今天系统的整理一下这个问题。 物理内存是如何组织的 如何分配和释放物理内存 虚拟内存到物理内存的映射 进程的地址空间是怎么样的 虚拟内存是如何组织的 如何分配和释放虚拟内存 启动时内存的分配 什么是slab 什么是页缓存 物原创 2007-06-14 16:49:00 · 1472 阅读 · 0 评论 -
Linux slab 分配器详解
良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab 分配器背后所采用的思想,并介绍这种方法提供的接口和用法。内存管理的目标是提供转载 2007-06-14 22:03:00 · 1124 阅读 · 0 评论 -
大内高手--对内存的认识与使用
我一直认为作为一个在linux下工作的C程序员,若对内存有深刻的认识,不但程序的性能会更高,运行更稳定,编程速度也会更快。反之亦有相反的效果,有时一些内存错误让你摸不着头脑,不但大大降低开发速度,开发出来的软件稳定性也值得怀疑。 为了提高组员的编程水平,去年我制定了一系列的培训计划,并负责主讲部分重要课程,其中基础类课程中,有一堂关于内存的课程。当时的讲稿写得很粗略,后来的新同事说看不明白转载 2007-06-11 22:52:00 · 4040 阅读 · 0 评论 -
Linux主要shell命令详解
shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。 本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。 什么是shell Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、 命令解释程序及程序设计语言的统称。 shell是用户和Linux内核之间的接口程序,如果把L转载 2007-06-11 23:21:00 · 2200 阅读 · 0 评论 -
Linux2.6 驱动设计――从 2.4 到 2.6
由于 2.6 内核在驱动框架,底层调用上和 2.4 内核有很多差别,所以本文主要是为程序员提供 2.4 到 2.6 迁移的指导。 2.6 和 2.4 主要的不同在于 ? 内核的 API 变化,增加了不少新功能(例如 mem pool ) ? 提供 sysfs 用于描述设备树 ? 驱动模块从 .o 变为 .ko 移植 hello word 下面是一个最简单的 2.4 驱动:转载 2007-06-14 14:44:00 · 1472 阅读 · 0 评论 -
Linux内核网络设备操作部分阅读笔记
一、网络设备的初始化网络设备初始化就是调用具有__init 前缀的net_dev_init函数完成的,网络设备初始化包含两个部分(在linux内核2.4办源代码分析大全一书的第550页有详细说明),就是:在系统初始化期间对系统已知的网络设备进行初始化过程,也就是,我们在编译内核时选择编入内核的那部分网卡设备就会在这个时候逐个进行初始化工作。系统中已知的网络设备都存储在一个全局表中,转载 2007-06-14 14:59:00 · 1281 阅读 · 0 评论 -
Linux设备轮询机制分析
一、设备轮询机制的基本思想所谓的设备轮询机制实际上就是利用网卡驱动程序提供的NAPI机制加快网卡处理数据包的速度,因为在大流量的网络环境当中,标准的网卡中断加上逐层的数据拷贝和系统调用会占用大量的CPU资源,而真正用于处理这些数据的资源却很少。一个基本的想法是对于大流量网络,如果发现一个DMA传输中断(这表明一个网络数据通过DMA通道到达了DMA缓冲区),则首先关闭网卡的中断模式,转载 2007-06-14 16:44:00 · 2554 阅读 · 0 评论 -
使用kgdb调试linux内核及内核模块
1. 几种内核调试工具比较kdb:只能在汇编代码级进行调试; 优点是不需要两台机器进行调试。gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核函数。kgdb:能很方便的在源码级对内核进行调试,缺点是kgdb只能进行远程调试,它需要一根串口线及两台机器来调试内核(也可以是在同一台主机上用vmware软件运行两个操作系统来调试)使用kdb和g原创 2007-06-11 23:16:00 · 1034 阅读 · 1 评论 -
udev与硬件抽象层HAL的实现原理
相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user space,dev是指device,udev是用户空间的设备驱动程序吗?最初我也这样认为,调试内核空间的程序要比调试用户空转载 2007-06-11 22:44:00 · 3607 阅读 · 1 评论 -
零拷贝技术研究与实现
一.基本概念零拷贝(zero-copy)基本思想是:数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除CPU在这方面的负载。实现零拷贝用到的最主要技术是DMA数据传输技术和内存区域映射技术。如图1所示,传统的网络数据报处理,需要经过网络设备到操作系统内存空间,系统内存空间到用户应用程序空间这两次拷贝,同时还需要经历用户向系统发出的系统调用。而零转载 2007-06-11 22:21:00 · 1272 阅读 · 0 评论 -
跟我一起写 Makefile
Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则转载 2007-06-07 10:53:00 · 821 阅读 · 0 评论 -
IBM POWERPC405 CPU lINUX下GPIO操作笔记
STB02500是一款嵌入IBM PPC405 CPU的面向视频,音频应用的SOC芯片,集成外围丰富,特别适合用户构建IPTV机顶盒系统。由于笔者以前惯用ARM系统,初次使用powerpc大端cpu还真是有点不适应,还有就是IBM的PPC系统GPIO操作起来要比起ARM系统要复杂些,这些新的特点给笔者的初次power pc之旅带来些额外的烦恼,好在经过一番研究笔者已经对PPC405的GPIO有了初转载 2007-05-31 16:54:00 · 2072 阅读 · 1 评论 -
关于GPIO的操作
GPIO是通用输入输出端口,芯片数据说明里有个端口的地址,你可以通过这个地址来访问他!GPIO可以用来跟外部不件进行通信,比如你可以把一个闪烁灯连到GPIO,通过读写GPIO得位数来进行控制外部部件,一般来说,如果一GPIO口有32位,那它可以控制32个外部部件,你就取得某个GPIO口后对他进行位读写操作就行了。int showLed(int state){unsigned int *p;un转载 2007-05-31 16:56:00 · 832 阅读 · 0 评论 -
在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使用。本文是该系列文章的第一篇,它介绍了内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink,并结转载 2007-06-07 10:35:00 · 680 阅读 · 0 评论 -
把linux kernel 2.4 上的driver 移植到 2.6 kernel
随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要 进行改写。为了方便各位Linux爱好者我把自己整理的这分文档share出来。该文当列举 了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个 函数的用法。 特别声明:该文档中的内容来自http://lwn.net,该网也上也有各个函数的较为详细的 说明可供各位参考。如果需要该文档的转载 2007-06-07 10:41:00 · 622 阅读 · 0 评论 -
Linux 2.6.19.x 内核编译配置选项简介
Code maturity level options代码成熟度选项Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 General setup常规设置Local version - append to kernel release 在内核版本后面加转载 2007-06-07 10:48:00 · 500 阅读 · 0 评论 -
Linux网卡数据包的接收
一、从网卡说起这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动程序使用来描述这些寄存器的标识符。如下:转载 2007-06-07 10:30:00 · 3148 阅读 · 0 评论 -
汇编语言超浓缩教程
对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必转载 2007-06-07 10:46:00 · 515 阅读 · 0 评论 -
如何为嵌入式开发建立交叉编译环境
随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc 几转载 2007-06-07 10:51:00 · 417 阅读 · 0 评论 -
创建ARM Linux交叉编译环境实践
创建ARM Linux交叉编译环境实践 一、准备工作 首先需要一台运行Linux操作系统的PC以完成我们的编译工作。 其次要准备如下一些源文件。 1、源文件准备 binutils-2.14.tar.gz ftp://ftp.gnu.org/gnu/binutils/binuti转载 2007-06-07 10:52:00 · 491 阅读 · 0 评论 -
在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
本系列文章包括两篇,它们文详细地地介绍了Linux系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使用。本文是该系列文章的第二篇,它介绍了procfs、seq_file、debugfs和relayfs,并结合给出的例子程序转载 2007-06-07 10:38:00 · 737 阅读 · 0 评论 -
基于PCI总线的中断机制研究
1 概述 高性能PC机一般以PCI总线为系统总线。由于PCI总线协议较为复杂,因此在开发PCI扩展卡时常采用专用的PCI接口芯片。常见的PCI接口芯片有AMCC公司的S59XX系列和PLX公司的PLX905X系列,其中PLX9052(文中称为9052)使用广泛。 在应用开发中,常常使用中断作为CPU和外设间交换数据的方式。但由于PCI总线具有即插即用特性,即PCI设备的存储器空间、I转载 2007-06-07 10:39:00 · 1235 阅读 · 1 评论 -
Linux 内核软中断(softirq)执行分析
今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),可以说改动很大。连 softirq 的调用点都不一样了,以前是三个调用点,今天搜索了一下源代码,发现在多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该不算是系统中转载 2007-06-07 10:42:00 · 488 阅读 · 0 评论 -
用U-BOOT构建嵌入式系统的引导装载程序
1 U-BOOT简介 U-BOOT是由德国的工程师Wolfgang Denk从8XXROM代码发展而来的,它支持很多处理器,比如PowerPC、ARM、MIPS和x86。目前,U-BOOT源代码在sourceforge网站的社区服务器中,Internet上有一群自由开发人员对其进行维护和开发,它的项目主页是http://sourceforge.net/projects/U-BOOT。U-BOOT转载 2007-06-07 10:53:00 · 774 阅读 · 0 评论 -
IA32上Linux内核中断机制分析
中断是计算机与外界联系的唯一途径。本文将分析在IA-32体系结构上的Linux内核对待中断系统的处理,针对的是2.6内核,引用的代码则具体则是2.6.14的。一。几个相关概念的澄清1, 中断信号:在电路级别来说,中断就是输送到CPU的INTR引脚上的电平信号。2, 可编程中断控制器(PIC,Programmable Interrupt Controller):PIC是在计算机外部设备与CPU之间的转载 2007-06-07 10:43:00 · 781 阅读 · 0 评论 -
Linux 调试技术
您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起。 本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet A转载 2007-06-11 23:17:00 · 719 阅读 · 0 评论