2006年12月28日

摘要: 1)操作系统分为两种:micro kernel & monolithic kernel2)module 是在内核空间运行的程序。3)内核模块的编写:#include <linux/module.h>int init_module(void);void cleanup_module(void);4)实现机制4.1内核符号表 结构:内存地址 符号名称 [所属模块]4.2模块的引用计数器4.3模块的依赖关系4.3数据结构(根据以上三点构造的) /include/linux/module.h 模块名字和数据结构的相对位置4.4内核本身可以看作是一个名字为null模块,在系统启动的时 阅读全文

posted @ 2006-12-28 01:52 Teddy Yan 阅读(228) 评论(0) 推荐(0) 编辑


2006年12月24日

摘要: 输入模块的Code Path,看来主要的分析还是在demux和access模块的分析。现在的code path只是大致的模块input_CreateThread2 ---> Create() ---->Run() ---->Init() vlm.c input.c input.c input.c ---->input_EsOutNew() input.c ---->[1]InputSourceInit input.c 1)-->demux2_New --->__demux2_New -->module_Need( p_demux, "a 阅读全文

posted @ 2006-12-24 21:37 Teddy Yan 阅读(199) 评论(0) 推荐(0) 编辑

摘要: DOS,Mac使用硬中断,Linux使用软中断,在硬中断到来时处理任务调度(发出软中断)启动后的滴答数来统计——全局变量jiffies基本概念:系统调用:内核提供的,功能强大的一些函数。内核模式和用户模式:每个模式都有自己的堆栈,用户栈和核心栈。较低级别的进程不会影响其他进程地址空间:地址保护,每个用户都有核心进程的地址入口,但不能进入。只有进入系统调用后,才可以。通过,copy_to_user, copy_from_user()来交换数据bottom half,任务延迟处理机制。中断处理过程是不可被打断的,就是独占系统的top half 必须关掉中断运行,bottom half 可以打开中断 阅读全文

posted @ 2006-12-24 15:27 Teddy Yan 阅读(210) 评论(0) 推荐(0) 编辑

摘要: 1.内核初始化过程,所有的函数列表。P262.在用户态初始化阶段init程序在每个tty端口上创建一个进程以支持用户登陆。每个进程都运行一个getty程序的拷贝。getty负责验证口令,进入shell3.Shell的几大功能: 3.1 后台运行 if ((pid= fork() ==0) execv(buffer, arg); else{ if (is_back ==0) waitpid(pid,&status,0); } 3.2 I/O重定向 每个进程都在内核有自己的文件描述表(fileDescriptor) 用if (dup2(fd_out,STDOUT_FILENO)==-1) 阅读全文

posted @ 2006-12-24 15:26 Teddy Yan 阅读(341) 评论(0) 推荐(0) 编辑


2006年12月20日

摘要: 1.访问控制:public, private, protected2.友元:struct X{private: int i;friend void g(X*, int); //Global friendfriend void Y::f(X*);// Struct member friendfriend structZ; //Entire struct};void g(X* x, int i){ x->i=i;}3.不完全的类型声明。时刻想着编译器怎么处理程序的。例如Y::f() 就只能用指针引用。struct X;struct Y{ void f(X*);};struct X {priv 阅读全文

posted @ 2006-12-20 16:21 Teddy Yan 阅读(105) 评论(0) 推荐(0) 编辑


2006年12月8日

摘要: 1.delete和 new 与 malloc() 和 free()一样都是在堆中申请内存。无论申请的内存付值给了哪个变量,都要释放一下2.delete [] 是释放对象数组3.C++中必须所有函数都要先声明,然后再引用。所以头文件很重要。C编译时会出现问题,对于每个翻译单元,编译器创造一个目标文件,这些文件连同启动代码,由连接器连接,生成可执行代码。4.名字冲突,导致了C++。5.C++允许将任何类型的指针赋给void*, 但不允许将void指针赋与给任何其他类型的指针。必须显示的类型转换6.C和C++都允许重声明函数,只要两个声明匹配即可,但是二者都不允许声明结构。为了防止重复声明,用预处理 阅读全文

posted @ 2006-12-08 15:49 Teddy Yan 阅读(103) 评论(0) 推荐(0) 编辑

摘要: 1.&语法糖2.Make 编译控制 //{L} Global2 带有Global2名字的文件要被连接进来(很像xdoclet)3.变量的定义:extern, static(两种含义:作用域内不变,指定作用域) and automatic4.Link: internal linkage 和 external linkage 5.C++ 显示转换 l=static_cast<long>(i); const int i=0;const_cast<int *>(&i);X x;int* xp = reinterpret_cast<int *>(&am 阅读全文

posted @ 2006-12-08 14:49 Teddy Yan 阅读(108) 评论(0) 推荐(0) 编辑


2006年11月29日

摘要: 最近分析peercast的时候发现,它的框架很有意思。他的core是一个与操作系统无关的codes。peercast 把与操作系统有关的部分提出了一个接口(框架)。针对不同的操作系统,再实现不同的接口。这样,就可以单独编译出和OS相关的lib。其实这个并不难,但是他把界面也作成了这样。core需要调用GUI的东西的话,只要调用自己声明过的extern 的变量就可以了。(core在lib中,gui是一个exe的文件)。在界面的实现类中,可以new 在lib中的class 使用lib提供的方法。1.为了防止重复编译,每个header文件,都要用宏来声明#ifndef __INCvxWorksh#d 阅读全文

posted @ 2006-11-29 16:55 Teddy Yan 阅读(177) 评论(0) 推荐(0) 编辑


2006年8月28日

摘要: 概述代码从两大部分入手,一个telnet 的deamon。还有就是rtsp的实现部分。结果发现,他们通过了一个桥梁vlm的media进行沟通。 当受到newMEDIANAME vod enabled 就建立一个media。 如果受到setup MEDIANAME input filename.mpg 就读入流准备分析,建立input流 当受到rtsp的请求后,就建立这个output流 这样,vod就和别的模块一致了。rtsp只是一种output流的module。代码分析 1. /modules/control/telnet.c/**********************... 阅读全文

posted @ 2006-08-28 16:59 Teddy Yan 阅读(198) 评论(0) 推荐(0) 编辑


2006年8月23日

摘要: 1.vlc.c只是入口程序2.Libvlc.c 是各个模块的结合点,这要是对接口编程 Vlc_Create(): 两个重要的数据结构:libvlc_t & vlc_t , 所有的参数传递都在这里面 Vlc_Init(): 初始化参数, module_bank Vlc_AddInf(): 添加module 3./src/misc/configure.c 命令行参数和参数文件分析参数文件是~/.vnc/vlcrc。其中可以设置log文件的位置4./include/ 所有头文件的集合5./src/interface/Interface.h 所有module的集合6./src/m... 阅读全文

posted @ 2006-08-23 16:26 Teddy Yan 阅读(165) 评论(0) 推荐(0) 编辑


Copyright © 2024 Teddy Yan
Powered by .NET 9.0 on Kubernetes