自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(57)
  • 收藏
  • 关注

原创 Linux内核&驱动学习笔记(三)

Linux是如何处理中断的呢?今天系统的整理一下这个问题。 中断系统的初始化 中断到来时的处理流程 软中断 Linux对Arm和X86在中断处理上的不同中断系统的初始化 中断到来时的处理流程 软中断 Linux对Arm和X86在中断处理上的不同  

2007-06-19 11:11:00 1048

原创 Arm学习笔记(二)

三、Arm CPU内核探秘   四、调试方法 五、Arm汇编技巧与内嵌汇编  

2007-06-19 11:05:00 1079

转载 Linux slab 分配器详解

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

2007-06-14 22:03:00 1078

原创 Linux内核&驱动学习笔记(二)

2007.6.14  pmLinux是如何管理内存的?今天系统的整理一下这个问题。 物理内存是如何组织的 如何分配和释放物理内存 虚拟内存到物理内存的映射 进程的地址空间是怎么样的 虚拟内存是如何组织的 如何分配和释放虚拟内存 启动时内存的分配 什么是slab 什么是页缓存 物

2007-06-14 16:49:00 1441

转载 Linux设备轮询机制分析

一、设备轮询机制的基本思想所谓的设备轮询机制实际上就是利用网卡驱动程序提供的NAPI机制加快网卡处理数据包的速度,因为在大流量的网络环境当中,标准的网卡中断加上逐层的数据拷贝和系统调用会占用大量的CPU资源,而真正用于处理这些数据的资源却很少。一个基本的想法是对于大流量网络,如果发现一个DMA传输中断(这表明一个网络数据通过DMA通道到达了DMA缓冲区),则首先关闭网卡的中断模式,

2007-06-14 16:44:00 2511

转载 Linux 内核调试器内幕

调试内核问题时,能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内核调试器 KDB 提供了这种功能。在本文中您将了解如何使用 KDB 所提供的功能,以及如何在 Linux 机器上安装和设置 KDB。您还将熟悉 KDB 中可以使用的命令以及设置和显示选项。Linux 内核调试器(KDB)允许您调试 Linux 内核。这个恰如其名的工具实质上是内核代码的补丁,它允许高手

2007-06-14 15:03:00 923

转载 Linux内核网络设备操作部分阅读笔记

一、网络设备的初始化网络设备初始化就是调用具有__init 前缀的net_dev_init函数完成的,网络设备初始化包含两个部分(在linux内核2.4办源代码分析大全一书的第550页有详细说明),就是:在系统初始化期间对系统已知的网络设备进行初始化过程,也就是,我们在编译内核时选择编入内核的那部分网卡设备就会在这个时候逐个进行初始化工作。系统中已知的网络设备都存储在一个全局表中,

2007-06-14 14:59:00 1237

转载 Linux内核内存池管理技术实现分析

一、Linux系统内核内存管理简介 Linux将物理内存也划分成固定大小的页面,由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成一个数组mem_map[]。slab:在操作系统的运作过程中,经常会涉及到大量对象的重复生成、使用和释放问题。对象生成算法的改进,可以在很大程度上提高整个系统的性能。在Linux系统中所用到的对象,比较典型的例子是inod

2007-06-14 14:52:00 1541

转载 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 1441

原创 Arm学习笔记(一)

一、概述Arm芯片具有RISC体系的一般优点,比如: 具有大量的寄存器 绝大多数操作都在寄存器中进行,通过Load/Store的体系结构在内存和寄存器间传递数据 寻址方式简单 采用固定长度的指令格式  Arm体系采用了一些特别的技术,在保证高性能的同时尽量减小芯片体积,降低芯片功耗: 在同一条数据处理指令中包含算术逻辑处理

2007-06-14 10:27:00 1102

转载 C语言嵌入式系统编程修炼之内存操作

数据指针  在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下几种情况:  (1) 某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址;  (2) 两个CPU之间以双端

2007-06-13 23:51:00 922

转载 什么是堆?什么是栈?

一 英文名称     堆和栈是C/C++编程中经常遇到的两个基本概念。先看一下它们的英文表示:堆――heap栈――stack二 从数据结构和系统两个层次理解     在具体的C/C++编程框架中,这两个概念并不是并行的。深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的。这两个概念可以从数据结构和系统两个层次去理解:1、从数据结构层次理解,栈是一种先进

2007-06-13 23:48:00 1520

转载 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 3335

转载 2.6内核Makefile简单语法与应用

1.1        概述2.6 的Makefile的写法和应用相对于2.4有了一些变化,可能对于很多人来说,因为找不到相关的文档,都是模仿内核中已有的文件来写自己的 Makefile。其实,在内核的Documentation / kbuild目录下面,还是有对内核Makefile语法的详细说明的。在这里就2.6内核中Makefile最常见的应用情况做一个简单的翻译和归纳介 绍。 2.

2007-06-12 16:19:00 1138

转载 网络处理的软中断机制分析

内核默认软中断机制分析(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 1074

转载 Linux内核NAPI机制分析

NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有 E1000 系列网卡,RTL8139 系列网卡,3c50X 系列等主流的网络适

2007-06-11 23:25:00 1089

转载 Linux主要shell命令详解

shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。 本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。  什么是shell Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、 命令解释程序及程序设计语言的统称。 shell是用户和Linux内核之间的接口程序,如果把L

2007-06-11 23:21:00 2135

转载 Linux 汇编语言开发指南

一、简介 作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件

2007-06-11 23:20:00 1127

转载 Linux 调试技术

您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起。 本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet A

2007-06-11 23:17:00 692

原创 使用kgdb调试linux内核及内核模块

1. 几种内核调试工具比较kdb:只能在汇编代码级进行调试;     优点是不需要两台机器进行调试。gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核函数。kgdb:能很方便的在源码级对内核进行调试,缺点是kgdb只能进行远程调试,它需要一根串口线及两台机器来调试内核(也可以是在同一台主机上用vmware软件运行两个操作系统来调试)使用kdb和g

2007-06-11 23:16:00 1008 1

转载 创建线程时的几个陷阱

前几天帮同事查一个多线程的BUG,不到十秒钟我就找到了问题的根源。N年前我曾犯过类似的错误,呵,今天仍然有人在重复。这些问题都比较典型,把它们写出来,供新手参考吧。 l         用临时变量作为线程参数的问题。 #include stdio.h> #include

2007-06-11 23:01:00 538

转载 大内高手--对内存的认识与使用

我一直认为作为一个在linux下工作的C程序员,若对内存有深刻的认识,不但程序的性能会更高,运行更稳定,编程速度也会更快。反之亦有相反的效果,有时一些内存错误让你摸不着头脑,不但大大降低开发速度,开发出来的软件稳定性也值得怀疑。 为了提高组员的编程水平,去年我制定了一系列的培训计划,并负责主讲部分重要课程,其中基础类课程中,有一堂关于内存的课程。当时的讲稿写得很粗略,后来的新同事说看不明白

2007-06-11 22:52:00 3996

转载 udev与硬件抽象层HAL的实现原理

相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user space,dev是指device,udev是用户空间的设备驱动程序吗?最初我也这样认为,调试内核空间的程序要比调试用户空

2007-06-11 22:44:00 3538 1

转载 零拷贝技术研究与实现

一.基本概念零拷贝(zero-copy)基本思想是:数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除CPU在这方面的负载。实现零拷贝用到的最主要技术是DMA数据传输技术和内存区域映射技术。如图1所示,传统的网络数据报处理,需要经过网络设备到操作系统内存空间,系统内存空间到用户应用程序空间这两次拷贝,同时还需要经历用户向系统发出的系统调用。而零

2007-06-11 22:21:00 1244

转载 用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 749

转载 跟我一起写 Makefile

Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则

2007-06-07 10:53:00 790

转载 创建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 465

转载 如何为嵌入式开发建立交叉编译环境

随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc 几

2007-06-07 10:51:00 383

转载 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 479

转载 汇编语言超浓缩教程

对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必

2007-06-07 10:46:00 488

转载 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 759

转载 Linux 内核软中断(softirq)执行分析

今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),可以说改动很大。连 softirq 的调用点都不一样了,以前是三个调用点,今天搜索了一下源代码,发现在多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该不算是系统中

2007-06-07 10:42:00 466

转载 把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 602

转载 基于PCI总线的中断机制研究

1  概述    高性能PC机一般以PCI总线为系统总线。由于PCI总线协议较为复杂,因此在开发PCI扩展卡时常采用专用的PCI接口芯片。常见的PCI接口芯片有AMCC公司的S59XX系列和PLX公司的PLX905X系列,其中PLX9052(文中称为9052)使用广泛。    在应用开发中,常常使用中断作为CPU和外设间交换数据的方式。但由于PCI总线具有即插即用特性,即PCI设备的存储器空间、I

2007-06-07 10:39:00 1162 1

转载 在 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 681

转载 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink

本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使用。本文是该系列文章的第一篇,它介绍了内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink,并结

2007-06-07 10:35:00 637

转载 Linux网卡数据包的接收

一、从网卡说起这并非是一个网卡驱动分析的专门文档,只是对网卡处理数据包的流程进行一个重点的分析。这里以Intel的e100驱动为例进行分析。大多数网卡都是一个PCI设备,PCI设备都包含了一个标准的配置寄存器,寄存器中,包含了PCI设备的厂商ID、设备ID等等信息,驱动程序使用来描述这些寄存器的标识符。如下:

2007-06-07 10:30:00 3081

转载 XScale PXA270在Linux下的FPGA设备驱动

摘要 以ACEX1K50为例,介绍FPGA在Intel XScale PXA270微处理器系统上的应用。通过内存映射机制实现ACEX1K50在Linux下的设备驱动;通过用户应用程序实现对ACEX1K50设备的操作,为FPGA在嵌入式领域的应用提供一种方法。引言  Intel公司推出的XScale采用ARM V5TE结构,是Strong ARM的升级换代产品。XScale PXA270处理器最

2007-06-05 16:13:00 856

原创 Linux内核&驱动学习笔记(一)

2007.6.4.am今天讨论到内核启动阶段对外部设备初始化的过程,于是粗略的看了一下相关代码,得到以下一些印象(未必正确,希望大家指正):1.对外部设备初始化代码出现的地方应该是init()进程  (bootloader->start汇编->decompress->start_kernel()->rest_init()->kernel_thread()->init()

2007-06-04 15:12:00 497

转载 嵌入式Linux内核启动部分代码分析

本文通过整理之前研发的一个项目(ARM7TDMI +uCLinux),分析内核启动过程及需要修改的文件,以供内核移植者参考。整理过程中也同时参考了众多网友的帖子,在此谢过。由于整理过程匆忙,难免错误及讲解的不够清楚之处,请各位网友指正,这里提前谢过。本文分以下部分进行介绍:1. Bootloader及内核解压2. 内核启动方式介绍3. 内核启动地址的确定4. arch/armnommu/kerne

2007-06-04 13:49:00 688

空空如也

空空如也

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

TA关注的人

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