博文

Linux 文件系统剖析(转)(2008-07-17 10:53:00)

摘要: 经过将近一个月的迷茫,奋斗,…………,终于把u-boot移植上去了,即使自己基本没有写什么 驱动,都是在网上找的,我做的工作只是组合组合。但其中的过程也是相当辛酸的。现在准备引导linux了,转关于文件系统的文章 原谅地址:http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/           中国 [选择]      使用条款     dW 全部内容-----------------  AIX and UNIX  Information management  Lotus  Rational  Tivoli  WebSphere-----------------  Grid computing  Java 技术  Linux  Open source  Security  SOA & Web services  Web development  XML-----------------IBM 全部内容             首页      产品      服务与解决方案      支持与下载      个性化服务        develo......

阅读全文(2053) | 评论:0

linux常用解压,压缩命令总结(2008-07-15 16:15:00)

摘要:对于linux系统中,对文件的解压缩可不是像windows中一个winrar就能解决的问题,对其做个大总结,相信对像我们这样的新手会有好处。 文章参考了一些网友的总结资料,如有侵权,请通知我,我将立即删除。   tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
-------......

阅读全文(1728) | 评论:0

关于code, text, bss(2008-07-09 10:18:00)

摘要:关于code, text, bss
以下文章转自http://hi.baidu.com/sansiloudeyu/blog/item/aca5eb3d35ebacc29f3d62b2.html
armar -sizes libmjb2.a

Code    RO Data    RW Data    ZI Data      Debug   Object Name

       292         96       2615         40        168   jblend_AMXVideo.o
       316          0          0          0       1836   jblend_AamsAppInfoUtil.o
      &nb......

阅读全文(4457) | 评论:0

sed命令使用详解(2008-07-09 08:33:00)

摘要:sed命令使用详解 文章作者:红箭 发布时间:2006-04-28 文章转自http://flierlh.javaeye.com/blog/132809 sed 编辑器是 Linux 系统管理员的工具包中最有用的资产之一, 因此,有必要彻底地了解其应用 Linux 操作系统最大的一个好处是它带有各种各样的实用工具。存在如此之多不同的实用工具,几乎不可能知道并了解所有这些工具。可以简化关键情况下操作的一个实用工具是 sed。它是任何管理员的工具包中最强大的工具之一,并且可以证明它自己在关键情况下非常有价值。 sed 实用工具是一个“编辑器”,但它与其它大多数编辑器不同。除了不面向屏幕之外,它还是非交互式的。这意味着您必须将要对数据执行的命令插入到命令行或要处理的脚本中。当显示它时,请忘记您在使用 Microsoft Word 或其它大多数编辑器时拥有的交互式编辑文件功能。sed 在一个文件(或文件集)中非交互式、并且不加询问地接收一系列的命令并执行它们。因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器。它可以用来将所有出现的 "Mr. Smyth" 修改为 "Mr. Smith",或将 "tiger cub" 修改为 "wolf cub"。流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间。其参数可能和一次性使用一个简单的操作所需的参数一样有限,或者和一个具有成千上万行要进行编辑修改的脚本文件一样复杂。sed 是 Linux 和 UNIX 工具箱中最有用的工具之一,且使用的参数非常少。 sed 的工作方式 sed 实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。 该实用工具的语法为: sed [options] '{command}'......

阅读全文(2541) | 评论:0

linux/Unix环境下的make和makefile详解(2008-07-04 15:25:00)

摘要:linux/Unix环境下的make和makefile详解
创建:2005-10-26 16:53:59
作者:Unlinux
来自: http://www.Unlinux.com

  无论是在linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。
  但令人遗憾的是,在许多讲述linux应用的书籍上都没有详细介绍这个功能强大但又非常复杂的编译工具。在这里我就向大家详细介绍一下make及其描述文件makefile。
Makefile文件
  Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。
  在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:
  $ make -f Makefile.debug
  例如,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c......

阅读全文(1617) | 评论:0

arm-linux交叉编译配置(2008-07-03 20:59:00)

摘要:这条命令挺有用,也贴出来了rm -dfr abc man rm (删除abc文件夹,其中abc文件夹中含有子文件夹,且子文件夹中也含有文件)
我原来把crosstools_3.4.1_softfloat.tar.bz2交叉编译工具链解压到/tmp的目录下了,后来不想放到此目录下,就要把它整体删除了,这个命令就可以做到 下面来详细说明整个交叉编译环境的建立的过程
先说一下我个人的配置环境
主机:Windows XP sp2
虚拟机:vmvare 5.5
从机:RedHat 9.0
建议:在安装Linux的时候希望你同时把所有的软件全给装上,这样能给你在日后的使用中省下很多特别麻烦的事
 本文所描述的前提是在安装RedHat 9.0时已经把C开发环境安装好,这样就省去了这一步. 一: 解压交叉编译的工具链
 整个过程先切换到root权限下(su命令)
 先切换到cd /usr/local 目录下
 mkdir arm 建立一个名为arm目录
 命令 tar jxvf crosstools_3.4.1_softfloat.tar.bz2 -C /usr/local/arm 
 当然你也可以不解压到/usr/local/arm目录下,后面那个你自己想放哪就放哪
 在此注意,如果你用的交叉编译工具为cross 2.95.3则不能解压到任意目录,只能解压到根目录
 也就是说你得使用命令tar jxvf cross 2.95.3.tar.bz2 -C /  ,如果不解压到根目录,将会出现一系列莫名奇妙的问题。这是好多前辈已经 遇到过的, 二:把交叉编译器的路径加入到PATH。(两种方法a,b) a、 export PATH=$PATH:/usr/local/arm/opt/EmbedSky/crosstools_3.4.1_softfloat/arm-linux/gcc-3.4.1-glibc-2.3.3/bin         注:(这只能在当前的终端下才是有效的,是即时的) b、修改/etc/profile ......

阅读全文(3086) | 评论:0

bashrc与profile比较(2008-07-03 20:59:00)

摘要:登录Linux的console操作环境后,会出现一个提示符号,在这个提示符号之后可以输入命令,Linux根据输入的命令会做回应,这一连串的动作是由一个所谓的 Shell 来做处理。
Shell是一个程序,最常用的就是Bash,这也是登录系统默认会使用的Shell。

profile与bashrc都是Shell的启动设置档,角色类似Microsoft DOS/Windows下的autoexec.bat文件,以下就是这二种文件自己个别的文字叙述。

针对个别用户
用户家目录/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
用户家目录/.profile
# ~/.profile: executed by Bourne-compatible login shells.

针对全体用户
/etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells.
/etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))

由以上叙述可以知道,差异在于:
1.bashrc
系统启动后就会自动运行。
2.profile
用户登录后才会运行。 3.进行设置后,可运用source bashrc命令更新bashrc 也可运用source profile命令更新profile 通常我们修改bashrc,有些linux的发行版本不一定有profile这个文件......

阅读全文(1360) | 评论:0

关于arm中断地址解析函数的一段代码完全解析(2008-06-26 15:24:00)

摘要:先把指令给出 下面是三星公司附带的init.s程序中的一个宏定义,用于中断地址解析 MACRO $HandlerLabel HANDLER $HandleLabe;这是带了两个参数的宏定义,具体语法不明白可参看相关的ARM指令的汇编手册 $HandlerLabel Sub    sp,sp ,#4; stmfd sp!,{r0}; ldr   r0,=$HandleLabel ldr   r0,[r0]; str  r0 {sp #4}; ldmfd   sp!,{r0,pc} 首先第一条指令,sub sp,sp,#4,费减了我大半天时间,为什么压栈前非得减4,弄了好长时间才把整段代码看明白,人比较笨,没办法,只得一步一步爬着走。 先解释第一条,将堆栈指针的内容减去4是有原因的,是为了给PC留4个字节, stmfd sp!,{r0};这条指令是一条压栈操作,执行它后sp的指向的地址将会自动加或者减,具体加还是减得取决于你所定义的堆栈操作方式。我在前边用的是满递减方式,故在此执行这条指令将会导致SP的值自动减 ldr   r0,=$HandleLabel ldr   r0,[r0]; 这两条批令不解释,很简单,是将中断服务函数的地址装入了r0 str  r0 {sp ,#4};这条指令,首先明白它并不是一条压栈的指令,却做到了压栈的作用,他将r0中的内容保存到sp+4指向的堆栈空间。 ldmfd   sp!,{r0,pc}这条指令也让我想了很长时间,后来想想自己太笨了,这是一条出栈指令,同时也会使堆栈指针自动更新,便是使用得注意顺序,得按后进先出原则的堆栈操作规则来,在此虽然此指令ldr   r0,[r0](存入的是ISR地址)后存入进去,但是它的地址却比先存入进去的原寄存器r0的地址高,(stmfd sp!,{r0};),也就是说当前SP是指向stmfd sp!,{r0}这条令压入栈后的地址,所以出栈时先出来的是这条指令压入的内容,后一个是ISR的地址,将其出栈后给予PC,这样就可以处理中断服务函数子程序了。 这是我个人的理解,具体是否有错......

阅读全文(2436) | 评论:0

arm异常处理(转)(2008-06-23 08:47:00)

摘要:刚接触ARM,对它的异常返回理解不是很好,总认为丢了两条指令没有执行,看了这个明白了,后面有一个PC的修正过程,修正的偏移量根据异常的类型不同!
ARM的异常处理        对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理程序进行处理。        ARM核异常处理的一般过程是:        (1)保存异常返回地址到r14_<exception_mode>(确切的说是当前PC);        (2)保存当前CPSR到SPSR_<exception_mode>;        (3)改写CPSR以切换到相应的异常模式和处理器状态(ARM状态);        (4)禁止IRQ(如果进入FIQ则禁止FIQ);        (5)跳转到相应异常向量表入口(例如IRQ跳转到IRQ_Handler入口);        【注】复位异常处理会禁止所有中断,另外由于不用返回,因此不需要作(1)(2)步。          上面的异常处理操作都是由ARM核硬件逻辑自动完成的,软件则需要完成以下工作:        (1)为ARM核建立异常向量表。ARM体系结构中定义了各种异常的入口地址,例如复位异常的入口地址为0x0,发生复位时,ARM核自动跳转到0x0处开始执行。因此,需要在各入口地址处放一条跳转指令,跳转到相应的异常处理服务程序。因此,异常向量表就是从0x0地址开始的8个字(除了7条跳转到上述异常处理程......

阅读全文(3130) | 评论:0

关于arm中的字对齐(2008-06-22 17:09:00)

摘要:原文地址:http://blog.ednchina.com/cllzs/49740/message.aspx 首先说说,什么叫对齐。如果一个数据是从偶地址开始的连续存储,那么它就是半字对齐,否则就是非半字对齐;半字对齐的特征是bit0=0,其他位为任意值。字对齐的特征是bit1=0,bit0=1,其他位为任意值。如果一个数据是以能被4 整除的地址开始的连续存储,那么它就是字对齐,否则就是非字对齐。举例说明四字节对齐: 对内存进行操作时,被访问的地址必须为4的倍数。如果分配到的地址的地址不是4的倍数时,CPU实际访问的地址还是按照字对齐的方式来操作。也就是自动屏蔽bit1和bit0.          用ADS的ARM C Complier下Optimization Level可能引起问题,其中的一个问题就是字节对齐的问题。下面讲讲问题的现象及实质。        当时问题的现象是:程序使用一公共变量Buf创建队列,如果ADS编译优化选项采用Minium则软件工作正常;源码不变,如果采用ALL优化,则不正常,数据紊乱且无法工作。为了发现问题,我们分别用Minium和ALL编译,在反汇编条件下单步跟踪程序,观察CPU寄存器和内存变量的变化情况。发现在Minium模式下,编译器把队列内存块Uart0TxBuf分配到的地址是0x400015cc,这个地址是一个4字节对齐的地址,而在ALL模式下,编译器把Buf分配的地址是0x400015c2,这个地址是一个非4字节对齐的地址。正是由于这个非4字节对齐的地址导致了问题的发生。
问题发生在QueueCreate(void *Buf, uint32 SizeOfBuf, uint8 (* ReadEmpty)(), uint8 (* WriteFull)())这个函数里,问题是如何发生的,
        在了解问题发生的机理前,先了解QueueCreate这个函数的工作原理。QueueCreate工作原理是,首先把buf指向的内存初始化为DataQueue格式的结构体。  DataQueu......

阅读全文(2891) | 评论:0