前言.
我是通过阅读赵炯老师编的厚厚的linux内核完全剖析看完LINUX0.11的代码,不得不发自内心的说Linus真的是个天才。虽然我觉得很多OS设计的思想他是从UNIX学来的,但是他自己很周全很漂亮很巧妙地实现了如此庞大一个系统的绝大多数代码。这里面有太多环节需要注意,很难得。。。
读完之后觉得很有收获,虽然版本很低,但是已经对OS有一个很具体的认识了,比理论上的要来得深刻、真实。下面是我自己学习过程的思考和总结,在看完细节之后主要从LINUX各个功能模块其及相互之间和内部的层次关系去考虑的,本文图片均取自该书。我觉得这篇总结性质的文章对还没有接触linux0.11内核的人来说肯定没有什么意义。应该只有读过的代码的人才会有同感吧。另外我看代码的时候使用了VC版的内核源码工程,代码中的注释与书中几乎一样。用VC可以更容易地在函数定义中跳转查看,节约时间,我的方法是看书上代码前给出的知识介绍,然后在电脑上看代码实现,一共用了十天把这本书主要部分看完了。这里给希望阅读代码的人分享一下:http://www.mcuol.com/download/upfile/20071011080428_linux011VC.rar。
一.源码目录
图1
二.系...

>> 阅读全文

本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上:1、u-boot工程的总体结构2、u-boot的流程、主要的数据结构、内存分配。3、u-boot的重要细节,主要分析流程中各函数的功能。4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网络功能。 这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下面主要以smdk2410为分析对象。
一、u-boot工程的总体结构:1、源代码组织对于ARM而言,主要的目录如下:board 平台依赖  存放电路板相关的目录文件,每一套板子对 应一个目录。如smdk2410(arm920t)  cpu 平台依赖  存放CPU相关的目录文件,每一款CPU对应一个目录,例如:arm920t、 xscale、i386等目录lib_arm 平台依赖  存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,如软件浮点。
common通用通用的多功能函数实现,如环境,命令,控制台相关的函数实现。include 通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下 lib_generic通用 通用库函数的实现net 通用 存放网络协议的程序drivers通用 通用的设备驱动程序,主要有以太网接口的驱动,nand驱动。.......2.makefile简要分析所...

>> 阅读全文

Linux操作系统内核启动参数详细解析
Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。
如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。
Linux的内核参数是以空格分开的一个字符串列表,通常具有如下形式:
name[=value_1][,value_2]...[,value_10]
“name”是关键字,内核用它来识别应该把“关键字”后面的值传递给谁,也就是如何处理这个值,是传递给处理例程还是作为环境变量或者抛给“init”。值的个数限制为10,你可以通过再次使用该关键字使用超过10个的参数。
首先,内核检查关键字是不是 `root='',`nfsroot='', `nfsaddrs='', `ro'', `rw'', `debug''或 `init'',然后内核在bootsetups数组里搜索于该关键字相关联的已注册的处理函数,如果找到相关的已注册的处理函数,则调用这些函数并把关键字后面的值作为参数...

>> 阅读全文

U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。
U-BOOT的下载地址: http://sourceforge.net/projects/u-boot我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败。1.1.6是没问题的。
u-boot源码结构 解压就可以得到全部u-boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分为3类。 第1类目录与处理器体系结构或者开发板硬件直接相关; 第2类目录是一些通用的函数或者驱动程序; 第3类目录是u-boot的应用程序、工具或者文档。u-boot的源码顶层目录说明目 录 特 性 解 释 说 明board 平台依赖 存放电路板相关的目录文件, 例如:RPXlite(mpc8xx)、 smdk2410(arm920t)、 sc520_cdp(x86) 等目录cpu 平台依赖 存放CPU相关的目录文件 例如:mpc8xx、ppc4xx、 arm720t、arm920t、 xscale、i386等目录lib_ppc 平台依赖 存放对PowerPC体系结构通用的文件, 主要用于实现PowerPC平台通用的函数lib_arm 平台依赖 ...

>> 阅读全文

想了解一下JTAG原理,在网上看到一篇文章,里面已经把相关内容写得非常详细了,这里分享一下:
http://www.mcuol.com/download/upfile/20080327030215_JTAG原理及sjf2410源码分析.pdf
这篇文章并没有把所有的源码列出来,我看的是windows下面的sjf2410源码,首先我并不想把源码细节全部弄懂,尤其是FLASH操作的过程和时序。我只是想了解JTAG的原理和烧写程序的工作原理。建立在已经看过比较细致的JTAG原理介绍的前提下,下面我对JTAG大致的理解:
JTAG的结构图
JTAG TAP 状态图:
TCK上升沿时TMS电平确定状态机的转换。
TCK上升沿TDI数据移入JTAG内部数据或指令寄存器
TCK下降沿时TDO数据移出到PC
不同的指令决定连接在TDI与TDO之间的寄存器。当前指令决定当前TDI与TDO之间连接的寄存器级,并且直到一下次写入新指令前连接都有效。指令输入是通过slect-ir-scan--update-ir状态转换完成的。
边界扫描寄存器BSR是全部串行地连在一起的单元(cell)组成,每个cell连接一个引脚,一个cell能控制对应引脚的输出电平,也能读入当前引脚的电平。
sjf2410软件的...

>> 阅读全文

这两天就忙这一件事情了,本来想在LINUX下面做这件事情,还是不太习惯切换系统的时候要重启机器.。于是就决定试试cygwin。
所有的过程都是在网上学的,但是也发现不少人在编译过程中出现问题。所以我就特别小心。采取了几个网页上面比较成功的方案。
1、安装cygwin
我选择先下载再安装的办法。下载的过程也是特别艰难的,我这里网速特别慢,第一次下到13%的时候就不动了,后来我也采用别人用过的办法,ping一下所有的服务器,选择一下回显延时比较短的下。
下载的时候Devel和Base两项选Install,其余的Default。
第二次下到85%又不动了。郁闷啊!!但是我没有重新全部下载,我找到最后一个下载的文件,然后第三次下载的时候从它开始下载,整个过程终于在一下午的时间里面完成了。我把两次下的东西拷一起,然后开始从本地文件夹Setup。除了时间慢点,没什么说的。安装完后试了一下常用的命令,没有问题。
2、下载需要的源码包:
我按照这些版本下载交叉编译需要的包:
安装包
下载地址
crosstool-0.42.tar.gz
http://kegel.com/crosstool
>> 阅读全文


ELF文件格式(中文)(一)创建时间:2001-05-16文章属性:翻译文章来源:Http://www.patching.net文章提交:alert7 (sztcww_at_sina.com)elf文件格式-- 另一文本方式的elf文档write by breadbox Email:breadbox@muppetlabs.com译:alert7 from m4in security teamhttp://www.patching.net isearthling 19:45 2001-5-16译者注: 由于翻译者水平有限(包括技术水平和翻译水平:(),所以 有些地方或许比较难懂,可能还有理解错误的地方,如果有 任何的问题,欢迎email:alert7@21cn.com 我们会虚心接受的,会在以后的修订中更正过来。 (总不能误导后来的读者,所以如果你英文比较好的话,还 是看原版吧:),不要丢鸡蛋啊^_^) 这份文档和原始的那份ELF文件格式的文档有以下一个不同:1. 忽略了分页记数 。2. 因为上述原因,在这篇内容目录中去掉了页号,索引完全被忽略。 (不象Postscript文档,txt文本可以用来搜索)3. 页标题的内容和文章的页脚已经在开始的时候被换掉了。4. 文章的排版也已经修正过了。5. 如果必要,不同的字体已经被忽略了。大部分地方,这片文档能让你 充分的理解。然而,很小的地方,原始的文档使用了斜体字来指出文 章中的字符变量。在那种情况下...

>> 阅读全文


最近在看CS8900datasheet和FS2410 TFTP源码,把源码全部注释了一遍,本来也就CS8900芯片的资料我能用得上,但是学习一下网络协议的简单实现也是一件高兴的事情。整理一下思路:
一、源码结构:
从底层到高层的顺序是:
CS8900.h :定义了CS8900芯片内部寄存器地址,各寄存器的主要的位的掩码。
CS8900.c :定义了CS8900的基本操作:访问寄存器宏定义,检测(Probe),复位reset,初始化init,接收一帧RcvPkt,发送一帧TransmitPkt,作为查询方式的操作是否收到帧CS8900DBG_IsReceivedPacket。
mac.h :声明了mac层的操作,这些操作在CS8900.c中实现。board_eth_init芯片初始化,board_eth_send发送一帧,board_eth_rcv接收一帧,这些函数是芯片基本函数的简单调用而已,board_eth_get_addr设置本地MAC地址。
skbuff.c/h : 定义和实现了关于缓冲区的操作。所有的协议的封装与拆解都是在sk_buff中实现的。这个数据结构在协议栈的实现中起了关键作用。
skbuf结构对应操作:skb_put,skb_push,skb_pull,alloc_skb,skb_reserve,主要用来申请缓冲,调整*data位置和len长度。
et...

>> 阅读全文