跳至主要内容

博文

目前显示的是 一月 25, 2009的博文

【转】Linux内核分析方法谈

2001-08-13 19:09 作者:喻锋荣 出处:chinabyte 责任编辑:   Linux的最大的好处之一就是它的源码公开。同时,公开的核心源码也吸引着无数的 电脑 爱好者和程序员;他们把解读和分析Linux的核心源码作为自己的最大兴趣,把修改Linux源码和改造Linux系统作为自己对计算机技术追求的最大目标。   Linux内核源码是很具吸引力的,特别是当你弄懂了一个分析了好久都没搞懂的问题;或者是被你修改过了的内核,顺利通过编译,一切运行正常的时候。那种成就感真是油然而生!而且,对内核的分析,除了出自对技术的狂热追求之外,这种令人生畏的劳动所带来的回报也是非常令人着迷的,这也正是它拥有众多追随者的主要原因: 首先,你可以从中学到很多的计算机的底层知识,如后面将讲到的系统的引导和硬件提供的中断机制等;其它,象虚拟存储的实现机制,多任务机制,系统保护机制等等,这些都是非都源码不能体会的。 同时,你还将从 操作系统 的整体结构中,体会整体设计在软件设计中的份量和作用,以及一些宏观设计的方法和技巧:Linux的内核为上层应用提供一个与具体硬件不相关的平台;同时在内核内部,它又把代码分为与体系结构和硬件相关的部分,和可移植的部分;再例如,Linux虽然不是微内核的,但他把大部分的设备 驱动 处理成相对独立的内核模块,这样减小了内核运行的开销,增强了内核代码的模块独立性。 而且你还能从对内核源码的分析中,体会到它在解决某个具体细节问题时,方法的巧妙:如后面将分析到了的Linux通过Botoom_half机制来加快系统对中断的处理。 最重要的是:在源码的分析过程中,你将会被一点一点地、潜移默化地专业化。一个专业的程序员,总是把代码的清晰性,兼容性,可移植性放在很重要的位置。他们总是通过定义大量的宏,来增强代码的清晰度和可读性,而又不增加编译后的代码长度和代码的运行效率;他们总是在编码的同时,就考虑到了以后的代码维护和升级。 甚至,只要分析百分之一的代码后,你就会深刻地体会到,什么样的代码才是一个专业的程序员写的,什么样的代码是一个业余爱好者写的。而这一点是任何没有真正分析过标准代码的人都无法体会到的。   然而,由于内核代码的冗长,和内核体系结构的庞杂,所以分析内核也是一个很艰难,很需要毅力的事;在缺乏指导和交流的情况下,尤其如此。只有方

【转】FCLK PCLK HCLK

FCLK, HCLK, and PCLK(S3C2410)   http://blog.chinaunix.net/u/21948/showart_362619.html 文章说明:calmarrow(lqm)原创,参考thisway.diy的《S3C2410完全开发》 文章引自: http://piaoxiang.cublog.cn     clock部分比较容易,现在按照datasheet的思路梳理一下。 一、对clock的基本认识     第七部分是"clock & power management",总结如下:     1 s3c2410的clock & power management模块包含三个部分:clock control、usb control、power control。现在的关注点是clock control。     2、s3c2410有两个pll(phase locked loop,锁相环,在高频中学过,可以实现倍频,s3c2410的高频就是由此电路产生的)。其中一个是MPLL,M即为main,用来产生三种时钟信号: Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期)、Hclk(为AHB bus peripherals供给时钟信号,AHB为advanced high-performance bus)、Pclk(为APB bus peripherals供给时钟信号,APB为advanced peripherals bus)。 在这里,需要了解一下AMBA system architecture了。这个可以到官方网站 www.arm.com 下载相关资料。简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(the de facto standard for on-chip fabric communication)。下面给出英文描述:     The AMBA protocol is an open standard, on-chip bus specification that details a stategy f

【转】libcurl note(Http应用)

设置Callback function处理Http头,返回内容,进度 CURLOPT_WRITEFUNCTION CURLOPT_WRITEDATA CURLOPT_HEADERFUNCTION CURLOPT_HEADERDATA CURLOPT_NOPROGRESS CURLOPT_PROGRESSFUNCTION CURLOPT_PROGRESSDATA 设置连接等待时间,传输等待时间: CURLOPT_TIMEOUT: CURLOPT_CONNECTIONTIMEOUT: 设置重定位URL: CURLOPT_FOLLOWLOCATION 实现断点续传: CURLOPT_RANGE: CURLOPT_RESUME_FROM: 注: 在我的测试中 这两个参数无效。 设置RANGE后 下载全部数据,而不是后续数据;设置RESUME_FROM后,程序无响应。 Http头设置: Range: bytes=xx-       [可以用来实现断点续传] User-Agent: xx Location:              [网页重定位 url] Set-Cookie:            [Cookie] Content-Length:        [报文长度] Content-Type :            [报文类型] 例程: test ( ) {         CURL * curl ;         CURLcode res ;          struct curl_slist * slist_header = NULL ;                                                                                           FILE * pFile_error = fopen ( CURL_ERROR_FILE , "w+" ) ;                                                                                          curl = curl_easy_init ( ) ;          if ( curl )  

【转】cURL 中文用户手册

Joomla! 开源天空   作者:web20  2008-09-02 23:52 摘要: 本文翻译了部分curl的用户手册 NAME curl - transfer a URL   语法    curl [options] [URL...] 描述       curl是一个向服务器或者从服务器下载数据的传输工具,它支持 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE等协议,这个命令设计为不需要用户的干预来执行。      curl提供了非常多有用的功能,比如代理支持,用户认证,HTTP POST ,FTP Upload,断点续传等等,接下来你会看到,多的会是你头晕目眩。      curl所有传输相关功能都基于libcurl ,详细信息请看 libcurl 3 URL      url 语法遵循协议,RFC 3986中你可以看到详细的内容。      http://site .{one,two,three}.com  你可以指定多个url,或者通过用大括号设置url中的一部分而设定url集合       ftp://ftp.numericals.com/file [1-100].txt   ftp://ftp.numericals.com/file [001-100].txt (with leading zeros)   ftp://ftp.letters.com/file[a-z].txt      同样你可以采用数字字母的序列来指定一系列url,你可以混合使用这两种方式,比如  http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html     在命令行中可以指定任意数量的url,这些url可以按指定顺序逐一获得。      curl 7.15.1版本以后,你可以指定步长,   http://www.numericals.com/file [1-100:10].txt   http://www.letters.com/file[a-z:2].txt      如果未指定协议前缀,curl将猜测协议,默认是http,但是将根据host名称猜测协

【转】用curl下载大文件

Joomla! 开源天空   作者:管理员  2008-09-16 15:16 摘要: 本文给出了简单的shell脚本,利用curl 下载大文件。 # 连接断掉后,会自动恢复 cd ~; while ! curl -C - -O ' http://download.parallels.com/GA/Parallels%20Desktop%203186%20Mac%20en.dmg '; do sleep 10; done # ftp 协议支持断点自动恢复 cd ~; while ! curl -L -C - -O ' http://mirror.ctan.org/systems/mac/mactex/MacTeX.dmg '; do sleep 10; done

【转】curl c/c++ api接口使用例程

Joomla! 开源天空   作者:joomla  2008-10-30 08:57 摘要: 本文说明了如何使用curl 的c/c++ api接口开发相关的应用程序。 先总结一下本站与curl相关的文章: linux下php扩展cURL的安装 cURL 中文用户手册(一) cURL中文用户手册(二) curl中文用户手册(三) [转帖] php cURL函数扩展文档 php cURL扩展使用的例子 用curl下载大文件  除以上这些curl也提供一套网络c/c++ api的使用接口,以下是一个源代码例程: 来源: http://bbs.chinaunix.net/viewthread.php?tid=586014 前两天看到有人求客户端socket 发HTTP包的代码,受flw版主启发找了一些perl的资料,不过对perl 还是不太熟悉。也没有深入的研究。无意中发现了libcurl.so 这个库。去google上搜索发现它是处理客户端发送HTTP请求的库 以及可以处理web服务器回送回来的包。研究了两天将研究的成果,共享出来给大家一起研究。 参考: http://curl.haxx.se/   这是curl开发者的首页。 利用libcurl.so库 我们能轻松的连接某个web站点。获得某个首页的html代码 或者是http 请求的头部。 还可以提交表单, 此外它还支持ftp,https, /usr/include/curl/curl.h 中。 1 CURLcode curl_global_init(long flags); 描述: 这个函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用) 如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动完成。 参数:flags CURL_GLOBAL_ALL    //初始化所有的可能的调用。 CURL_GLOBAL_SSL    //初始化支持 安全套接字层。 CURL_GLOBAL_WIN32  //初始化win32套接字库。 CURL_GLOBAL_NOTHING     //没有额外的初始化。 2 void curl_global_cleanup(void); 描述:在结束libcurl使用的时候,用来对curl_gl

【转】LibCurl编程手册以及代码实例

Joomla! 开源天空   作者:管理员  2008-11-03 21:57 摘要: 本文详细说了了如何使用curl,libcurl进行网络程序的编写,并给出了代码实例。 2.1 LibCurl编程流程 在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时libcurl将调用用户的回调函数实现特定功能。下面是利用libcurl完成传输任务的流程: 1.       调用curl_global_init()初始化libcurl 2.       调用 curl_easy_init()函数得到 easy interface型指针 3.       调用curl_easy_setopt设置传输选项 4.       根据curl_easy_setopt设置的传输选项,实现回调函数以完成用户特定任务 5.       调用curl_easy_perform()函数完成传输任务 6.       调用curl_easy_cleanup()释放内存 在整过过程中设置curl_easy_setopt()参数是最关键的,几乎所有的libcurl程序都要使用它。 2.2 重要函数 1.CURLcode curl_global_init(long flags); 描述: 这个函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用) 如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动完成。 参数:flags CURL_GLOBAL_ALL                      //初始化所有的可能的调用。 CURL_GLOBAL_SSL                      //初始化支持 安全套接字层。 CURL_GLOBAL_WIN32            //初始化win32套接字库。 CURL_GLOBAL_NOTHING         //没有额外的初始化。 2 void curl_global_cleanup(void); 描述:在结束libcurl使用的时候,用来对curl_global_init做的工作清理。类似于close的函数。 3 char