乐于学习与分析
配置之前先了解一下比较重要的一些配置信息,有助于我们得心应手地驾驭服务器: samba允许单独加载的用户配置文件:include = /etc/samba/%G.smb.confinclude = /etc/samba/%U.
获取broadcom软件开发包文件(refsw-YYYYMMDD-PLATFORM.tgz) 登陆Linux操作系统,建立开发目录 cd /root mkdir b...
前面已经说了阻塞与非阻塞的访问方式,这里我们就继续说下异步通知的机制。 什么是异步通知呢?异步通知的意思就是,一旦设备就绪,则主动通知应用程序,应用程序 根本就不需要查询设备状态,类似于中断的概念,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。
作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性 和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题, 本章从系统入手,重点讲述由于系统软、硬件配置不当可能造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程。
mtdchar.cMTD字符设备的文件 notifier MTD字符设备的notifier static struct mtd_notifier notifier = { add: mtd_notify_add, ...
struct device { struct device *parent; struct device_private *p; struct kobject kobj; const char *init_name; /* i...
Linux 内核调试器(KDB)允许您调试 Linux 内核。这个恰如其名的工具实质上是内核代码的补丁,它允许高手访问内核内存和数据结构。KDB 的主要优点之一就是它不需要用另一台机器进行调试:您可以调试正在运行的内核。
如果你是一个硬件系统管理员或者Linux工程师,你可能会记得大多数Linux命令行技巧。下面的这些Linux命令行技巧通常不被Linux用户所使用。 1.使用pgrep快速查找一个PID pgrep遍历目前正在运行的进程然后列出符合查找规则的进程ID(PID)。
如何理解一个基于ARM内核的微处理器 可以从两方面来理解基于ARM内核的微处理器,一方面是由ARM公司设计的ARM内核,另一方面是由芯片设计厂家在ARM内核上整合的各种外围设备和外围接口控制器。
4. UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。
http://blog.chinaunix.net/uid-20671839-id-3032468.html1.1.1 进程的基本知识 1. 调度类型 每个Linux进程总是按照下面的调度类型被调度: l SCHED_FIFO 这是先进先出的实时进程。
嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。这样,应用程序在嵌入式目标系统上运行,而gdb调试在Host端,所以要采用远程调试(remote)的方法。
今天偶然又看到了typeof这个东西,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多, 这里大概叙述了typeof是一个什么东西,怎么用,实际上可以用简单的话来重述。
详解神秘内核 转载于http://www.it168.com 来源:Chinaunix 作者:Chinaunix 【IT168 技术文档】在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。
作者:冯建,华清远见嵌入式学院讲师。 Linux内核给开发者提供了灵活的模块加载方式,开发者可根据需要适当地选择静态或动态的方式将模块加入内核当中。静态加载的时候我们只需将驱动文件添加到对应的文件夹中并修改相应的Makefile和Kconfig即可,但是通过动态加载模块的方式,如果只是编译一个小的驱动文件而对内核大动干戈,那样编译的时间不仅长而且修改内核配置文件也是一件多余的工作。
中断、异常、抢占内核====================中断信号分类-------------------中断信号是一个统称,统称那些改变CPU指令执行序列的事件。但它又分为两种:一种是同步的,没那么突然,因为它只在一个指令的执行终止之后才发生,书中依从Intel的惯例,称为异常(Exception)。
当Power on PC时,BIOS的代码开始执行,然后是Linux初始化的代码,这其中大约很长一段时间Linux都没有进程这一概念,但是这不影响CPU执行它的二进制代码。如果不是多任务以及进程调度的需要,Linux内核可以一直这样走下去。
Linux系统中的init进程(pid=1)是除了idle进程(pid=0,也就是init_task)之外另一个比较特殊的进程,它是Linux内核开始建立起进程概念时第一个通过kernel_thread产生的进程,其开始在内核态执行,然后通过一个系统调用,开始执行用户空间的/sbin...
5. typeof和0指针这个在大名鼎鼎的container_of就有出现,事实上一些面试题有时候也喜欢跟这个沾点边。 点击(此处)折叠或打开 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 点击(...
在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发:1. 类型检查比如module_init的宏定义: 点击(此处)折叠或打开 #define module_init(initfn) ...
关于Linux内核中的mutex机制,一篇很重要的文档来自内核源码中的Documentation/mutex- design.txt,由Ingo molnar同学起头,标题是"Generic Mutex Subsystem",这篇文档开宗名义,直接将1楼中最后一个问题给端了出来...
看过Linux内核的同学都知道,Linux内核中除了有semaphore之外,还有一个mutex lock。前者我们的操作系统教科书称之为信号量,后者不知道教科书有没有具体的名称,但是在Linux内核中,它的称谓是"互斥锁"或者“互斥体”(总 之,称谓不是问题)。
POSIX 线程是提高代码响应和性能的有力手段。在此三部分系列文章的第二篇中,DanielRobbins 将说明,如何使用被称为互斥对象的灵巧小玩意,来保护线程代码中共享数据结构的完整性。
类UNIX下C/C++开发,代码调试比较麻烦,最原始的加跟踪调试很土,也很费时,特别是一个庞大的项目,代码行数非常大的时候调试起来非常费劲,当core dump时定位也不容易,这里介绍几个常用工具: gdb、dbx调试工具,valgrind内存检查工具(Linux) 。
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行...
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
前几天在学习内核源码的时候,无意中看到了Linux内核中有中断栈的概念。这个是我以前没有注意到的,为了深入理解这个知识,我查找了一些资料: Linux内核中的中断栈与内核栈的补充说明 《深入Linux内核构架》第14章 内核活动 14.1 中断 P695 这些资料都是针对X86构架的。
对于ARM中内核如何在启动的时候设置高低端内存的分界线(也是逻辑地址与虚拟地址分界线(虚拟地址)减去那个固定的偏移),这里我稍微引导下(内核分析使用Linux-3.0): 首先定位设置内核虚拟地址起始位置(也就是内核逻辑地址末端+1的地址)的文件:init.
在学习Linux内核中断栈的时候发现的资料,备份转载如下: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://www.embexperts.
在学习Linux进程内核栈的时候,看到这篇好文,在这里转载下: (注意:数据结构针对的是早期的2.4内核,2.6以后的内核数据结构和处理方法稍有不同,但是基本原理相同) 作者: 曹国辉 南京凌嵌教育嵌入式Linux金牌讲师 专题研究一 进程的深入理解与分析 进程是程序的一次执行过程。
这个坑其实很大很大。。。。。。 虽然这名字很长,但其实就是一码事,试问你做内存跟踪不是为了看泄露?试问你看到了泄露和碎片不回去优化?哈哈 理论知识咱不具备,所以现实点,从实践出发好了。
系统对外提供的Solr查询接口,在来自外部调用的压力加大之后,就会出现solr查询报Read Timed Out的异常,从表面现象上看是此时solr核压力过大,无法响应过多的查询请求。
select()和poll()系统调用的本质一样,前者在BSD UNIX中引入的,后者在System V中引入的。 一、select 应用程序中最广泛用到的是BSD UNIX中引入的select()系统调用,其原型如下: int select(int maxfdp, fd...
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2.
转自 http://www.cnblogs.com/xuxm2007/archive/2011/08/15/2139809.html http://my.chinaunix.net/space.php?uid=20196318&do=blog&id=366042 http://blog.endlesscode.com/2010/03/27/select-poll-epoll-intro/ linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。
http://blog.chinaunix.net/uid-26495963-id-3086553.html一:生成当前目录下所有的源文件的目标文件 CC = gcc CFLAGS = -Wall -g #SRCS所有的.
本文链接:http://codingstandards.iteye.com/blog/805778 (转载请注明出处) 用途说明 hexdump命令一般用来查看”二进制“文件的十六进制编码,但实际上它的用途不止如此,手册页上的说法是“ascii, decimal, hexadecimal, octal dump“,这也就是本文标题为什么要将”十六“给引起来的原因,而且它能查看任何文件,而不只限于二进制文件了。
| 参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为几个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。
1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
ARM体系结构下面内存和i/o映射区别 (1)关于IO与内存空间: 在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。
http://bbs.2beanet.com/boot-f31/s3c6410-uboot-t3135.
修改:mw [内存地址] [值] [长度]例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址] [长度]例如:md 0x02000000 128 表示显示0x02000000的内存数据,长度为128个32bit.
研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程。我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这促使我这次仔细地研究内核的启动代码。
理解poll_wait poll_wait()是用在select系统调用中的. 一般你的代码会有一个struct file_operations结构, 其中fop->poll函数指针指向一个你自己的函数, 在这个函数里应该调用poll_wait() 当用户调用selec...
static和volatile的用法 volatile volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。
注: u-boot 使用的是打上: http://www.hhcn.com/cgi-bin/topic.cgi?forum=3&topic=651&show=0 上keety大侠提供的补丁生成的u-boot-1.1.3 这段时间不断有人问我u-boot启动内核的问题,记得在上次提供的u-boot源码中提到了go的方案,不过其实u-boot本来有一种更好的方案: bootm花了不少时间,查看了论坛上不少的帖子,认真阅读了bootm的源码,终于使用bootm把内核给跑起来了, 现把解决方法介绍如下: 一、在开始之前先说明一下bootm相关的东西。
一、udp.c实现的函数 1、void udp_input(struct pbuf *p, struct netif *inp) 说明:处理接收到的udp数据包。 参数:p数据包缓存区;inp网络接口。
1. PBUF_RAM一次性分配size大小的连续内存2. RBUF_ROM只需要分配小小的管理pbuf的控制管理内存3. PBUF_ROOL分配一个链表,链表上每个元素所管理的内存最大不超过PBUF_POOL_BUFSIZE,它更像linux 中的kmem_alloc内存高速缓...