随笔分类 -  Embedded

技术让梦想更伟大
摘要:填空1指令含义列出文件列表的ls命令切换目录的cd命令创建目录的mkdir命令删除目录的rmdir命令复制文件的cp命令删除文件或目录的rm命令让显示画面暂停的more命令连接文件的cat命令移动或更换文件,目录名称的mv命令显示当前所在目录的pwd命令2 做移植操作系统的三步:下载bootload... 阅读全文
posted @ 2015-06-30 15:11 技术让梦想更伟大 阅读(2559) 评论(0) 推荐(1) 编辑
摘要:今晚来整理一下消息队列,消息队列是一条由消息连接而成的链表,存在内核里面,通过消息对了的引用标识符来访问,每个消息队列都有一个msqid_ds结构与之对应,这个结构保存了消息队列的当前状态参数,这个结构的定义如下: 1 steuct msqid_ds 2 { 3 struct ipc_perm ... 阅读全文
posted @ 2015-01-14 21:39 技术让梦想更伟大 阅读(569) 评论(0) 推荐(0) 编辑
摘要:在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串 口通信时相关参数与属性的设置。嵌入式Linux的串口编程时应注意,若在根文件中没有串口设备文件,应使用mknod命令创建,这这里假设串口设备是 /dev/ttyS0,介绍一下串口的编程过程。#mknod /dev/ttyS0 c 4 641、打开串口打开串口设备文件的操作与普通文件的操作类似,都采用标准的I/O操作函数open()。fd = open("/dev/ttyS0",O_RDWR|O_NDELAY|O_NOCTTY); op 阅读全文
posted @ 2013-12-14 00:12 技术让梦想更伟大 阅读(911) 评论(0) 推荐(0) 编辑
摘要:目录:1. Linux系统调用原理2. 系统调用的实现3. Linux系统调用分类及列表4.系统调用、用户编程接口(API)、系统命令和内核函数的关系5. Linux系统调用实例6. Linux自定义系统调用1.系统调用原理系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待 阅读全文
posted @ 2013-12-13 09:24 技术让梦想更伟大 阅读(695) 评论(0) 推荐(0) 编辑
摘要:共享内存是允许多个进程共享一块内存,由此来达到交换信息的进程通信机制;它很快没有中间介质,唯一的不足就是需要一定的同步机制控制多个进程对同一块内存的读/写,,它的原理如下:每个共享内存段都有一个shmind_ds结构,定义如下:struct shmid_ds{ struct ipc_perm shm_perm; int shm_segsz; ushort shm_lkcnt ; pid_t shm_cpid; pi... 阅读全文
posted @ 2013-12-12 17:21 技术让梦想更伟大 阅读(1360) 评论(0) 推荐(1) 编辑
摘要:守护进程常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,所以是在后台运行的,linux大部分服务器就是用守护进程实现的,守护进程的编程也不复杂,下面来说一下守护进程的特征、编程规则、出错处理等。守护进程的特征:1.所有守护进程都以超级用户(ID=0)的优先权运行;2。没有一个守护进程具有控制终端—终端名称设置为问号(?)、终端前台进程组I D设置为-1。缺少控制终端可能是精灵进程调用了s e t s i d的结果。3.除u p d a t e以外的所有精灵进程都是进程组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。u p d a t e是它所在进程组和对话期(... 阅读全文
posted @ 2013-12-12 13:36 技术让梦想更伟大 阅读(401) 评论(0) 推荐(0) 编辑
摘要:首先我得检讨一下自己,这几天有些颓呀,打不起精神,板子出了点问题,果真自学还是很困难呀,硬件方面难解决呀,理想与现实还是很有差距的,伤透了,凌乱了。 一直在理解进程间通信的问题。发现上次忽略了一个问题,就是命名管道,命名管道和一般的管道有一些显著的不同:1.FIFO是在文件系统中作为一个特殊的设备文件而存在的;2.不同祖先的进程之间可以通过管道共享数据;3.当共享管道的进程执行完所有的I/O操作后,FIFO将继续保存在文件系统中以便以后使用。 这里需要注意一下:管道只能由相关的进程使用,它们共同的祖先进程创建了管道,但是通过FIFO,不相关的进程也能交换数据。 FIFO的创建:#in... 阅读全文
posted @ 2013-12-11 22:48 技术让梦想更伟大 阅读(609) 评论(0) 推荐(0) 编辑
摘要:MMU 是内存管理单元,在现代的处理器中扮演重要角色,它是CPU用来管理虚拟存储器、物理存储器的控制路线,先举个例子来说明一下MMU的相关概念: ---地址范围、虚拟地址映射为物理地址以及分页机制 地址范围是一个计算机上的一个程序能够产生地址的集合,这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (16E).这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地... 阅读全文
posted @ 2013-12-10 10:24 技术让梦想更伟大 阅读(939) 评论(0) 推荐(0) 编辑
摘要:管道是linux的一种通信方式,一种两个进程间进行单向通信的机制,它提供了简单的流控制机制,系统提供了pipe生成一个管道并返回两个描述符,一 个用来读管道,一个用来写管道,因此它们可以共享访问文件,这样每个管道就可以有很多个读进程和写进程,然而实际上进程不知道它正在读或写的是一个管道, 它有以下局限性: 由于管道传递数据的单向性,决定其使用的局限性:数据的单向流动;有亲缘关系的进程间的通信;没有名字;缓冲区大小受限制(传送的是无格式的字节流) 管道就是一个存在于内存的特殊文件,进程就是通过读写该文件进行通信的(内存中的某个页面作为数据缓冲区) 如果要建立两个进程的数据通路,首... 阅读全文
posted @ 2013-12-09 23:28 技术让梦想更伟大 阅读(1555) 评论(0) 推荐(0) 编辑
摘要:在之前大概的概述了进程之间的通信,下面笔者具体述说一下进程通信中最古老的一种通信方式之一---信号(Signals ),信号是用户进程之间通信和同步的一种原始机制,操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个) 一、 在一个信号的生命周期中有两个阶段:生成和传送。当一个事件发生时,需要通知一个进程,这时生成一个信号。当进程识别出信号的到来,就采取适当的动作来传送或处理信号。在信号到来和进程对信号进行处理之间,信号在进程上挂起(pending)。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在.. 阅读全文
posted @ 2013-12-08 16:19 技术让梦想更伟大 阅读(313) 评论(0) 推荐(0) 编辑
摘要:ARM体系结构简介新一代的ARM9处理器,能达到两倍ARM7的处理能力,它们的区别如下:ARM微处理器的工作状态(可切换):第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令第二种为Thumb状态,此时处理16位的半字节对齐的Thumb指令ARM体系结构的存储方式大端格式:字数据的高字节存储在低地址,反之也是;小端格式:与上相反ARM微处理器模式(7种),这里笔者不详细说明了,一些资料上就就有解释说明。支持MMUMMU是内存管理单元,他把内存以“页(page)”为单位来进行处理。一页内存是指一个具有一定大小的连续的内存块,通常4096或8192B。操作系统为每个正在运行的程序建立并维 阅读全文
posted @ 2013-12-07 13:14 技术让梦想更伟大 阅读(660) 评论(0) 推荐(0) 编辑
摘要:一个大型的应用系统,往往需要众多进程协作,进程间通信的重要性显而易见。进程间通信有如下一些目的: 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,... 阅读全文
posted @ 2013-12-06 23:44 技术让梦想更伟大 阅读(379) 评论(0) 推荐(1) 编辑
摘要:这篇文章主要是讲解到Linux进程的控制,包括程序和进程、守护进程、守护进程的出错处理。1、程序和进程 程序(program)是存放在磁盘文件中的可执行文件,程序的执行实例被称为进程(process)。init进程 每个linux进程都一定有一个唯一的数字标识符,称为进程ID(process ID),进程ID总是一非负整数,进程ID为1通常是init进程,在自举过程结束时由内核调用。init进程绝不会终止,它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程),但是它以超级用户特权运行。 Linux系统是一个多进程的系统,进程之间具有并行性、互不干扰的特点。linux中进程... 阅读全文
posted @ 2013-12-06 11:27 技术让梦想更伟大 阅读(1144) 评论(0) 推荐(0) 编辑
摘要:如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑、编译、调试等功能集成在一个桌面环境上,这样就大大方便了用户。IDE一般包括代码编辑器、编译器、调试器和图形界面用户工具。linux下IDE很多,这里笔者要说的是CodeBlocks,CodeBlocks是一个开放源码的全功能的跨平台C/C++语言集成开发环境,其本身不提供编译功能,但能通过调用第三方编译代码,它与Windows下的Visual Studio来发界面非常类似,下面笔者来具体介绍一下开源IDE CodeBlocks的下载安装、配置以及简单编程。 在Ubuntu下,输入下列命令就睡自动安装Cod... 阅读全文
posted @ 2013-12-05 17:48 技术让梦想更伟大 阅读(554) 评论(0) 推荐(1) 编辑
摘要:在此之前先说一下autooconf在linux下安装的问题,因为不知道怎么安装,我就直接在终端上输入autoconf,结果它会提示是否安装它,下面还有指定安装的方法,我 就直接输入,是什么命令记不住了,反正很简单,然后说要额外大概2M的内存就够了,之后就需要等待安装了,安装完成之后就可以 运用以下的一些功能了。 如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile, 这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了. Makefile经... 阅读全文
posted @ 2013-12-02 11:22 技术让梦想更伟大 阅读(2448) 评论(0) 推荐(0) 编辑
摘要:Linux系统中包含了GNU 调试程序gdb,它是一个用来调试C和 C++ 程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。 GDB提供了一下一些功能:(1)监视程序中变量的值;(2)设置断点以使程序在制定的代码上上运行;(3)一行一行的执行代码。 gdb程序调试的对象是可执行文件,,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb 利用这些信息使源代码和机器码相关联。 启动gdb后,可以在命令行制定很多选项,也可以用下面的方式在命令行中指定想要... 阅读全文
posted @ 2013-11-30 16:28 技术让梦想更伟大 阅读(574) 评论(0) 推荐(0) 编辑
摘要:makefile里的变量就像一个变量,变量的作用主要如下:(1)保存文件名列表。(2)保存编译器的参数。 makefile中的变量是用一个字符串在makefile中定义的,这个文本串就是变量的值。只要在一行的开始写下这个变量的名字,后面跟一个‘=’,然后跟要设定的这个变量的 值即可定义变量,下面是定义变量的语法: 变量名=字符串使用时 ,把变量把括号括起来。并在前面加上“$”符号,就可以引用变量的值: $(变量名)make解释规则时“变量名”在等式右端展开为定义它的字符串,变量一般在makefile的头部定义。先让我们看看edit的规则:e... 阅读全文
posted @ 2013-11-30 10:20 技术让梦想更伟大 阅读(1729) 评论(0) 推荐(0) 编辑
摘要:在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则:最基本的编写规则的方法是从最终的源程序文件一个一个的查看源码文件。把它们要生成的目标文件作为目标,而C语言源码文件和源码文件包含的头文件作为依赖文件生成规则。但是必须去分析源码文件的嵌套关系,如需要把某些头文件包含的头文件也作为依赖文件,当头文件很多时,这样很繁琐,正确性也不高。 gcc编译器可以自动的从源码文件中产生文件的相互依赖关系,当编译器编译每一个源码文件时,它知道包含怎么样的头文件。 当使用gcc时,用-M开关可以为每一个输入的C语言源文件输出一个依赖规则,把gcc将要生成的目标文件作为Make... 阅读全文
posted @ 2013-11-29 22:11 技术让梦想更伟大 阅读(366) 评论(0) 推荐(0) 编辑
摘要:Linux编程可以分为Shell(如BASH、TCSH、GAWK、Perl、Tcl和Tk等)编程和高级语言(C语言,C++语言,java语言等)编程,Linux程序需要首先转化为低级机器语言即所谓的二进制代码以后,才能被操作系统执行。 例如编程时,先用普通的编程语言生成一系列指令,这些指令可被翻译为适当的可执行应用程序的二进制代码。这个翻译过程可由解释器一步步来完成,或者也可以立即由编译器明确地完成。Shell编程语言都利用自己的解释器,用这些语言编制的程序尽管是应用程序文件,但可以直接运行。编译器则不同,它将生成一个独立的二进制代码文件然后才可以运行。 许多流行的Linux实用程序如... 阅读全文
posted @ 2013-11-29 20:07 技术让梦想更伟大 阅读(611) 评论(0) 推荐(0) 编辑
摘要:开始...首先,我们应该知道如何调用编译器。实际上,这很简单。我们将从那个著名的第一个C程序开始。#include int main(){ printf("Hello World!\n");}View Code把这个文件保存为lxy.c,保存到当前目录下,在命令行下编译它:gcc game.c在默认情况下,C编译器将生成一个名为a.out的可执行文件。 你可以键入如下命令运行它:a.outHello World每一次编译程序时,新的a.out将覆盖原来的程序。你无法知道是哪个 程序创建了a.out。我们可以通过使用-o编译选项:gcc –o lxy lxy.c //对文件进 阅读全文
posted @ 2013-11-29 18:04 技术让梦想更伟大 阅读(758) 评论(0) 推荐(0) 编辑