上一页 1 ··· 59 60 61 62 63 64 65 66 67 ··· 71 下一页
摘要: 本节我们讨论一个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) 编辑
摘要: vivi开发笔记【专辑】http://blogold.chinaunix.net/u/21948/showart_344254.html 阅读全文
posted @ 2011-04-11 14:55 hnrainll 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统* Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 阅读全文
posted @ 2011-04-10 15:19 hnrainll 阅读(453) 评论(0) 推荐(0) 编辑
摘要: XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是我平常使用不可缺少的工具。今天没事看了下XShell的帮助,找到了一些很实用的技巧,分享给大家。复制和粘贴由于在linux的Shell下,Ctrl+c是中断当前指令,这个快捷键和windows下的复制快捷键冲突,所以经常犯错误。。。想复制的时候按了ctrl+c,结果中断了当前指令。在Xshell中,提供了其它的快捷键来执行这些操作:复制:Ctrl+Insert粘贴:Shift+Insert粘贴还有一个键就是鼠标中键,另外你还可以设置点鼠标右键就是粘贴,设置选项在这: 将当前Shell中的内容复制到“记事本”中有时候需要 阅读全文
posted @ 2011-04-07 19:07 hnrainll 阅读(957) 评论(0) 推荐(0) 编辑
摘要: 1 #============================================================================= 2 转载请注明出处: http://blog.csdn.net/tge7618291 8 #============================================================================= 9 1. 查看 key 相关信息说明的命令 :help keycodes10 11 #==================================================== 阅读全文
posted @ 2011-04-07 19:02 hnrainll 阅读(2870) 评论(0) 推荐(0) 编辑
摘要: 自从2009-7版本的supervivi,其实是由三个程序组成的: 1. vboot和nboot的混合体, 2. 原来的supervivi 3. eboot 他们使用不同的编译器编译出,最后粘在一起形成supervivi,所以,supervivi并不是单纯的一套代码,而是三套代码。 其中,vboot和nboot的混合体暂且可以成为xboot,它的原始版本是nboot,但做了比较大的修改,以便可以做... 阅读全文
posted @ 2011-03-09 13:43 hnrainll 阅读(3659) 评论(0) 推荐(0) 编辑
摘要: 嵌入式系统 Boot Loader 技术内幕 http://soft.yesky.com/report/115/7538615.shtml Boot Loader的启动流程和开发经验总结 http://www.mcuol.com/tech/117/31157.htm Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色... 阅读全文
posted @ 2011-03-09 13:28 hnrainll 阅读(1547) 评论(0) 推荐(1) 编辑
摘要: BIOS和Bootloader它们都是有基本的初始化系统,USB下载和硬件测试等功能的系统启动程序。不同之处在于中断矢量的定位,由于 bootloader要启动uClinux,因此必须按照uClinux的习惯将中断矢量放在SDRAM的低端地址(0xC000000),BIOS则按照我们通常的习惯把中断矢量放到高端地址(0xC7FF000)。因此,在BIOS下调试下载的程序的ro-base地址都必须设定在 0xC000000,而bootloader下调试下载程序都设定在在0xC008000,因为前面0x8000空间内放置了中断矢量、跳转程序等内容。 所有的SDT实例都是按照BIOS的中断矢量要求. 阅读全文
posted @ 2011-03-09 13:11 hnrainll 阅读(3666) 评论(0) 推荐(0) 编辑
摘要: vivi简介 vivi是韩国MIZI Research公司为其开发的SMDK2410开发板编写的一款Bootloader,目前的版本是0.1.4。vivi也有前面说过的两种工作模式,启动加载模式可以在一段时间(这个时间可更改)后自行启动Linux内核,这是vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过该接口可以使用vivi提供的一些命令,见表4-1。 表4-1 vivi的... 阅读全文
posted @ 2011-03-09 13:08 hnrainll 阅读(385) 评论(0) 推荐(0) 编辑
摘要: //功能:在s1中如果不能找到s2,则返回"Substring is not found.\n",反之.#include <stdio.h>int find_substr(char *s1, char *s2);//函数声明void main(){ if(find_substr("C is fun","un") != -1) { printf("Substring is found.\n"); } else { printf("Substring is not found.\n"); }}int find_substr(char *s1, char *s2){ int t; c 阅读全文
posted @ 2011-02-18 23:40 hnrainll 阅读(269) 评论(0) 推荐(0) 编辑
摘要: //实例4 函数的引用调用#include <stdio.h>void swap(int *x, int *y);//函数申明void main(){ int i, j;//定义两个变量 i = 12;//给变量赋初值 j = 36; printf("i and j before swapping: %d %d\n", i,j); swap(&i, &j); printf("i and j after swapping: %d %d\n", i, j);}void swap(int *x, int *y)//交换函数, 参数为两个指针变量{ int temp;//定 阅读全文
posted @ 2011-02-18 00:50 hnrainll 阅读(420) 评论(0) 推荐(0) 编辑
摘要: //实例3 指针操作符#include <stdio.h>void main(){ int *p;//定义一个指针变量 int begin, end;//定义两个整形变量 begin = 10;//给变量赋初值 p = &begin;//让P指向begin end = *p;//将p指向的地址中的数据赋值给end printf("begin = %d\n", begin); printf("end = %d\n", end);} 阅读全文
posted @ 2011-02-18 00:18 hnrainll 阅读(235) 评论(0) 推荐(0) 编辑
摘要: //实例2 关系和逻辑运算#include <stdio.h>void main(){ int logic; int a = 1; int b = 2; int c = 3; logic = a + b > c && b <= c;//首先计算a+b是3不大于c,为假,就不会计算后面了,输出0 printf("logic = %d\n", logic); logic = a >= b + c || b == c;//b+c是5,a是小于5的,为假;输出0 printf("logic = %d\n", logic); logic = !(a < 阅读全文
posted @ 2011-02-18 00:12 hnrainll 阅读(249) 评论(0) 推荐(0) 编辑
上一页 1 ··· 59 60 61 62 63 64 65 66 67 ··· 71 下一页