摘要: 程序1(test1.l):%{#include <stdio.h>%}%% begin printf("Started\n");hello printf("Hello yourself!\n");thanks printf("Your welcome\n");end printf("Stopped\n");%%在linux中:第一步:flex test1.l第二步:gcc -o test1 lex.yy.c -lfl第三步:运行./test1 输入begin 程序将在屏幕上打印Started.程序2:( 阅读全文
posted @ 2011-04-12 21:58 hnrainll 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 源地址: http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.htmlLex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。LexLex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次 阅读全文
posted @ 2011-04-12 21:08 hnrainll 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标。伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1.避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2.提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心。以下就这两个问题我们进行分析讨论:1.如果我们需要书写这样一个规则:规则所定义的命令不是去创建目标文件,而是使用make指定具体的 阅读全文
posted @ 2011-04-12 20:56 hnrainll 阅读(17218) 评论(0) 推荐(3) 编辑
摘要: 用途生成一个与输入流的简单语法分析相匹配的 C 或 C++ 语言程序。语法lex [ -C ] [ -t ] [ -v| -n ] [ File... ]描述lex 命令读取 File 或标准输入,生成 C 语言程序并将它写到一个名为 lex.yy.c 的文件中。这个文件,lex.yy.c ,是一个兼容的 C 语言的程序。一个 C++ 编译器也能够编译 lex 命令的输出。-C 标志将输出文件重命名为 lex.yy.C 供 C++ 编译器使用。由 lex 命令生成的 C++ 程序可使用 STDIO 或 IOSTREAMS。如果在 C++ 编译中,cpp 定义 _CPP_IOSTREAMS 是真 阅读全文
posted @ 2011-04-12 20:23 hnrainll 阅读(2208) 评论(0) 推荐(0) 编辑
摘要: 摘要:本期的目的是向大家介绍shell的概念和基本原理,并且在此基础上动手做一个简单shell解释器。同时,还将就用到的一些 linux环境编程的知识做一定讲解。本文适合的读者对象 对linux环境上的c语言开发有一定经验;对linux环境编程(比如进程、管道)有一点了解。概述本章的目的是带大家了解shell的基本原理,并且自己动手做一个shell解释器。为此,首先,我们解释什么是shell解释器。其次,我们要大致了解shell解释器具有哪些功能;最后,我们具体讲解如何实现一个简单的 shell 解释器,并对需要用到一些 linux环境编程的知识做一定讲解,并提醒你如果想深入掌握,应该去看哪些 阅读全文
posted @ 2011-04-12 19:52 hnrainll 阅读(3504) 评论(0) 推荐(0) 编辑
摘要: 下面列举相关文件/etc/sysconfig/i18n$ cat /etc/sysconfig/i18nLANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"复制代码我的是英文环境,所以整体语系是en_US.UTF-8,可以在修改相关的环境变量进行设定。有人会纳闷?为什么会是i18n呢?internationalization,不过这个单词太长啦。所以把中间18个单词用18来代替了。/etc/profile这个文件比较有统一性。几乎所有版本的*NIX都会有。同时对所有的用户都有效。里面设置了一些比较重要的环境变量。PA 阅读全文
posted @ 2011-04-12 15:13 hnrainll 阅读(3178) 评论(0) 推荐(0) 编辑
摘要: 四、 关于串口终端 在 boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。(2) 运行在 host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。 此外,有时也会碰到这样的问题,那就是:在 boot loader 的运行过程中我们可以正确地向串口终端输出信息,但当 boot loader 启动内核后 阅读全文
posted @ 2011-04-12 14:12 hnrainll 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 三、Boot Loader 的主要任务与典型结构框架 在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像都被加载到 RAM 中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在 ROM 或 Flash 这样的固态存储设备中直接运行。但这种做法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。 另外,由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结 阅读全文
posted @ 2011-04-12 14:11 hnrainll 阅读(602) 评论(0) 推荐(0) 编辑
摘要: 作者:詹荣开 (zhanrk@sohu.com) 本文选自:IBM DW 2003年12月30日 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。 一、引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系 阅读全文
posted @ 2011-04-12 14:09 hnrainll 阅读(941) 评论(0) 推荐(0) 编辑
摘要: Phony TargetsPHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如: clean: rm *.o temp因为"rm"命令并不产生"clean"文件,则每次执行"makeclean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会执行;为避免这 阅读全文
posted @ 2011-04-12 10:46 hnrainll 阅读(61453) 评论(1) 推荐(6) 编辑