摘要:
转自:http://zhangwenxin82.blog.163.com/blog/static/114595956201071934831530/进来分析libata模块,颇有所感,记录如下,希望能对大家有所帮助,同时也对自己的理解进一步深入。linux版本:linux-2.6.24.3注:因完全是个人理解,理解不当难免,恳请批评指正!!!!大家知道驱动程序在初始化sata controller后, 并初始化ata_host结构体后,会调用函数ata_host_activate进入libata的初始化,我们从这里开始分析。下面是freescale mpc8315平台的sata驱动代码。lin 阅读全文
摘要:
S.M.A.R.T.(自监测、分析、报告技术):这是现在硬盘普遍采用的数据安全技术,在硬盘工作的时候监测系统对电机、电路、磁盘、磁头的状态进行分析,当有异常发生的时候就会发出警告,有的还会自动降速并备份数据。 早在上个世纪九十年代,人们就意识到数据的宝贵性胜于硬盘自身价值,渴望有种技术能对硬盘故障进行预测并实现相对安全的数据保护,因此S.M.A.R.T技术应运而生。目前,虽然大多数硬盘的平均无故障时间(MTBF)已达30000~50000小时以上,然而对于不少用户,特别是商业用户而言,一次普通的硬盘故障便足以造成灾难性后果,所以时至今日,S.M.A.R.T技术仍为我们所用。S.M.A.R... 阅读全文
摘要:
1、vi的帧场数据格式为VIDEO_FIELD_INTERLACED(3) 顶场底场数据按行交错排列。 top line0 bot line0 top line1 bot line1 ... 1700输出的1D1,16个通道,通道0~7在顶场,8~15在底场 所以从vi获取ch0的yuv数据时,需要丢弃偶数场2、VO的帧场数据格式为VIDEO_FIELD_TOP或者VIDEO_FIELD_BOTTOM 先顶场再底场 top line0 top line1 ... bot line0 bot line1 ... 所以从v0获取ch0的yuv数据时,不需要丢弃偶数场3、YUV的数据格式,st... 阅读全文
摘要:
转自:http://blog.chinaunix.net/space.php?uid=774458&do=blog&id=2044897第二部分:运行initinit的进程号是1,从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序,。init程序需 要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。在Redhat系统中,inittab的内容 如下所示(以“###"开始的中注释为笔者增加的): # # inittab This file describes how 阅读全文
摘要:
pid_t wait(int * statloc);pid_t waitpid(pid_t pid, int *statloc, int options); 两 个函数都返回两个值:函数的返回值和终止的子进程ID,而子进程终止的状态则是通过statloc指针返回的。wait&waitpid的区别是显而易见 的,wait等待第一个终止的子进程,而waitpid则可以指定等待特定的子进程。这样的区别可能会在下面这种情况时表现得更加明显:当同时有5个客户 连上服务器,也就是说有五个子进程分别对应了5个客户,此时,五个客户几乎在同时请求终止,这样一来,几乎同时,五个FIN发向服务器,同样的,五个 SI 阅读全文
摘要:
简单来说,在复制一个对象时并不是真的在内存中把原来对象的数据复制一份到另外一个地址,而是在新对象的内存映射表中指向同原对象相同的位置,并且把那块内存的 Copy-On-Write 位设为 1。在对这个对象执行读操作的时候,内存数据没有变动,直接执行就可以。在写的时候,才真正将原始对象复制一份到新的地址,修改新对象的内存映射表到这个新的位置,然后往这里写。这个技术需要跟虚拟内存和分页同时使用,其好处是在复制对象的时候因为并不是真的复制,而只是建了一个“指针”,因而大大提高性能。但这并不是一直成立的,前提是在复制新对象之后,进行的写操作只是在一小部分的内存分页上,大部分分页不会用到或者只是读取。不 阅读全文
摘要:
《unix环境高级编程》是这么说的:标准IO流操作读写普通文件是使用全缓冲的,默认缓冲区长度是该文件系统优先选用的IO长度(从stat结构得到的st_blksize值)//读取st_blksize的例子:int main(int argc, char* argv[]){ if(argc!=2) { printf("2 argment\n"); return 0; } struct stat buf; stat(argv[1], &buf); printf("st_blksize=%d,st_blocks=%d\n", (int)buf.st_bl 阅读全文
摘要:
一、/proc/pid/statmpid/statm包含了在此进程中所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。/proc/1 # cat statm550 70 62 451 0 97 0输出解释CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:参数 解释 /proc/1/statusSize (pages)= 550 任务虚拟地址空间的大小 VmSize/4Resident(pages)= 70 应用程序正在使用的物理内存的大小 VmRSS/4Shared(pages)= 62 共享页数 Trs(pages)= 451 程序所拥有的可执行虚拟内存 阅读全文
摘要:
转自:http://hyt19860117.love.blog.163.com/blog/static/127773729201042435553852/随着人们生活水平的提高,我们用到的USB设备也越来越多,但是Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和使用他们,也越来越成为困扰我们的一大问题;本文的目地是使大家了解怎样编制USB设备驱动,为更好地配置和使用USB设备提供方便;对于希望开发Linux系统下USB设备驱动的人员,也可作为进一步学习USB驱动的大体架构进而编写出特殊USB设备的驱动程序。USB基础知识USB是英文Universal Serial Bu 阅读全文
摘要:
http://blog.chinaunix.net/u1/41113/showart_494044.html1).volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如:volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须 阅读全文