乐于学习与分析
1. PBUF_RAM一次性分配size大小的连续内存2. RBUF_ROM只需要分配小小的管理pbuf的控制管理内存3. PBUF_ROOL分配一个链表,链表上每个元素所管理的内存最大不超过PBUF_POOL_BUFSIZE,它更像linux 中的kmem_alloc内存高速缓...
1 简介 I2C 总线仅仅使用 SCL 、 SDA 两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和 PCB 板布线空间的占用。因此, I2C 总线被非常广泛地应用在 EEPROM 、实时钟、小型 LCD 等设备与 CPU 的接口中。
高性能服务器必须考虑的4个方面:1 数据拷贝2 内存管理3 进程/线程上下文切换4 锁争用 说明:以下文章中会包含一些研究服务器性能的链接,这些链接也是非常重要的文档,本文不再列出,查看下面的文章内容时,可点击文章里面的链接访问。
1. The C10K Problem : 传统的UNIX多进程模型在客户超过10K(即1万)的时候会遇到什么问题,以及解决方案。 (http://www.kegel.com/c10k.html)2. 搜狗实验室关于C10K的介绍(http://www.sogou.com/labs/reports.html):关于如何用epoll解决C10K问题 3. Scalable Network Programming:linux下高性能服务器设计的圣经,媲美stenvens的UNP 4. 如何编写高性能服务器:一个网易的游戏架构师写的,很全面。
如果大家学习了内核中进程的部分就会听说过‘写时复制’ 。 但是从来没有想过在用户态和内核态上‘写时复制’判断的前提条件都不一样。 在进程创建之初,父子进程的数据段和代码段共享并且设置为只读,直到他们之一要将代码和数据段进行修改时才会进行复制即写时复制。
TCP/IP协议族校验和的计算方法相同, 差别在于进行校验的数据. 一 校验和计算方法 1. 将数据流按16bit求和, 存放在32Bit及更大的空间(eg.
ioctl在socket中的一些用法及示例 函数 : ioctl(int fd, int request, void * arg)定义 : 功能 : 控制I/O设备, 提供了一种获得设备信息和向设备发送控制参数的手段.
在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch。此函数根据构架而异,对于ARM构架的详细分析如下: void __init setup_arch(char **cmdline_p) { struct machine_desc ...
BootLoader可以向Linux传递参数,编译内核时也可以配置boot options。 调试中使用的U-Boot bootargs如下: noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M 内核版本: 2.
1.查看当前linux是否打开core,方法是执行命令ulimit -a一般会出现如下的结果core file size (blocks, -c) 00表示当前core被关闭 2.
循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前提是,生产者和消费 都只有一个的情况下,否则也要加锁。
一个简单的累加求和程序: 01.TYPE S=0; 02.for(int i = 0;i < SIZE; i++) { 03. S += a[i]; 04.} 很多人都觉得这个程序写得不好,编译器不能生成很好的汇编代码。
http://unix-school.blogspot.in/2011/07/5-important-things-to-follow-to-become.
http://unix-school.blogspot.in/2011/07/5-important-things-to-follow-to-become.
1.支持一个进程打开大数目的socket描述符(FD) select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显 然太少了。
本次移植使用的是U-boot-2009.11。 先来看看源码目录结构,再按照代码的执行顺序简单地分析源码 1.U-boot源码整体框架 源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件。
源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件。每个子目录中都包括 cpu.c 和 interrupt.c、start.S、u-boot.lds。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
前几天大致分析了u-boot针对smdk2410的源码,了解了启动的流程,但是对板上许多硬件的驱动过程还不太清楚。smdk2410源码中有针对Nor Flash的初始化和读取,但源码中没有对Nand Flash的操作,虽然针对其他型号的板子应该有Nand的源码,但方便起见,我查阅了vivi的源码,它支持从Nand Flash启动,自然有我需要的东西。
掌握 Linux 调试技术在 Linux 上找出并解决程序错误的主要方法 Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语 句,或者添加工具来分析程序。
在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设备号次设备号等等,只需要实现一个file_operations,然后通过debugfs_create_file就可以在debugfs中建立一个文件结点,就像字符设备驱动那样,只需要对这个文件结点进行open就可以进行read、write、ioctl,等等操作,这些操作对应到我们在驱动里为debugfs准备的file_operations。
应该说,uboot的Makefile还是比较简单的,虽然看起来很庞大,但是后面的大部分都是各类型board的config,真正生成u-boot.bin的部分较少。uboot的代码也是如此,代码很多,如果单一的看某个board,代码则不多。
在我的博客中的《如何从应用程序进入linux内核》日志中我详细分析了Unix的socket的创建、发送、接收、关闭的过程,而你看到下边这些文章是基于IPV4的追踪分析的过程。从围绕着服务器端的socket的建立--监听--接收连接--客户端发送连接请求--与服务器对接--数据接收--数据发送整个过程为主线分析。
Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.
linux内核编译流程-基于2.6.26内核 原文地址:http://hi.baidu.com/yuhuntero/blog/item/941042edf3990d4a79f0558a.
文件: smdk2410_align.rar 大小: 538KB 下载: 下载 非常不错的 u-boot ppt 当我们porting u-boot ok 后, 再回过头来复习 u-boot 的时候, 发现它讲的很清楚, 很不错。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
一、基本介绍 tcpdump工具鼎鼎大名,无人不知。tcpdump是网络数据分析中最重要的工具之一,摘一段百度百科对它的介绍(http://baike.baidu.com/view/76504.htm)。
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:前言 Tty这个名称源于电传打字节的简称。
Linux设备模型之tty驱动架构分析 (转载) 转自:http://ericxiao.cublog.cn/ 一:前言TTY这个名称源于电传打字节的简称,在Linux系统表示各种终端。
也许你很少面临这一情况,但是一旦如此,你一定知道出什么错了:可用内存不足或者说内存用尽(OOM)。
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助1.源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。
Linux的计时系统(Timekeeping)在ULK中有专门一章来讲,但ULK第三版是基于2.6.10的,TimeKeeping部分已经有了很大的变化,如NOHZ mode和hrtimer,在ULK中都没有涉及,本文希望能对现在的kernel的Timekeeping部分做较完整的讲述。
1. 引言 从事Linux环境工作2年有余,一直懵懵懂懂,1年前拜读了《莱昂氏UNIX源代码分析》一书,感觉自己的学习道路漫漫且修远。最近受chinaunix的精华文帖启发,拟将近来的部分内核调用分析笔记拿出来与各前辈先进共同探讨学习,以壮个人学习之路。
为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。
在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定。去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上面的方法来配置自己的工程看来不行。
1. QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下: QObject::QObject ( QObject * parent =0,const char * name = 0 ) 创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。
在Qt中,有一种用于对象之间的通信:信号-槽机制,这种机制是Qt的核心机制,也是它区别于其他GUI工具的最主要的特征。信号-槽机制可以携带任意类型、任意数量的参数,而且完全是安全的,不会引起系统的崩溃。
内核中的UDP socket流程(1) 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2443229 相对于TCP,UDP协议要简单的多。
点对点形式,大家应该都知道。那么支持这个形式的协议就是PPP协议。那么这个协议的一些作用和功能大家是否清楚呢?这里我们就针对PPP协议来进行一下详述。想必大家在阅读之后,对这个协议能够有一个新的认识。
在Linux内核的源码中提供了USB设备驱动的框架代码:usb-skeleton.c我们自己的驱动程序可借助这个框架代码,做些修改就能生成我们自己的驱动程序。 首先从USB设备与Linux驱动的匹配说起,当一个USB设备连接到Linux USB总线之后,USB主机控制器会使用USB设备的0号端点EPO对USB查询及设置,用以获取USB设备中提供的相关信息,然后根据这些信息,来决定加载那些驱动程序等。
虚拟内存地址与实际内存地址之间的关系,是如此转换的,逻辑地址-->线性地址-->物理地址。也是从分段单元到分页单元的转换。在 linux中,用户程序所使用的地址与硬件使用的物理地址是不等同的。
在《深入Linux设备驱动程序内核机制》第11章"块设备驱动程序” 11.2节当中给出了ramdisk的两个版本的实现,这个示例的目的除了让读者直观感受一下编写一个块设备驱动程序的大体框架和关键元素之外,还特别提到“这个例子还有一个非常重要的潜在用途,那就是通过ramdisk来研究Linux的文件系统,比如ext3等,因为mkfs.
disable_irq关闭中断并等待中断处理完后返回, 而disable_irq_nosync立即返回. 那么在中断处理程序中应该使用哪一个函数来关闭中断呢? 在中的按键驱动中, 使用disable_irq来关闭中断, 但是我在测试时进入中断后系统会死在中断处理程序, 而改为disable_irq_nosync则能正常退出中断处理程序.
本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍Red Hat Linux安装程序是如何加载驱动的,通过了解这个过程, 我们可以自己将驱动程序放到引导盘中;安装完 系统后,使用kudzu自动配置硬件程序。
Linux网桥模型: Linux内核通过一个虚拟的网桥设备来实现桥接的,这个设备可以绑定若干个以太网接口设备,从而将它们桥接起来。如下图所示: 网桥设备br0绑定了eth0和eth1。
对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。
在linux系统中,其网卡驱动大多通过PCI总线与系统相连,同时,内核对于所有PCI总线上的设备是通过PCI子系统来进行管理,通过PCI子系统提供各种PCI设备驱动程序共同的所有通用功能。
sys_connect对于客户端来说,当创建了一个套接字后,就可以连接它了。 case SYS_CONNECT: err = sys_connect(a0, (struct sockaddr __user ...