精华内容
下载资源
问答
  • linux项目实践介绍。
  • 包括3个大项目和若干衍生项目,涵盖:数码相框、电子书、指针、链表、Makefile、网络编程Socket、USB摄像头、CMOS摄像头、视频监控、WIFI、3G网卡、ALSA声卡、便携式视频监控(局域网通信)和电源管理。总体格调:...
  • 项目目标:使用BOA、CGIC、SQLite搭建嵌入式web服务器一、嵌入式web服务器BOA简介在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成...

    项目目标:使用BOA、CGIC、SQLite搭建嵌入式web服务器

    一、嵌入式web服务器BOA简介

    在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,使用极为方便。

    目前嵌入式设备中所使用的web服务器主要有:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。

    BOA是Paul Philips在1991年开发的开源的嵌入式web服务器,BOA功能强大,支持认证,CGI等,应用广泛,特别适合于嵌入式设备。与传统的web服务器为每个访问连接开启一个进程不同,BOA是一个单任务的web服务器,不会为多个连接开启多个任务进程。BOA对所有的活动的http连接在内部进行处理,而且只为每个CGI连接(独立的进程)开启新的进程。因此,BOA在同等硬件条件下显示出更快的速度。测试表明boa在Pentium 300MHZ下能够每秒钟处理几千次点击,在20 MHz 386/SX下能够每秒钟处理几十次点击访问。

    BOA与apache等高性能web服务器主要区别是,BOA是单进程的服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并发响应,在嵌入式设备的应用场合里已经足够。

    BOA是一个非常小巧的Web服务器,可执行代码只有约60KB,是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求;但BOA支持CGI,能够为CGI程序fork出一个进程来执行。

    BOA的设计目标是速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。可以添加SSL来保证数据传输中的保密和安全。在其站点公布的性能测试中,BOA的性能要好于Apache服务器。

    二、嵌入式BOA服务器编译

    1、下载BOA源码

    从www.boa.org下载boa-0.94.13.tar.gz源码

    2、生成配置文件

    在BOA顶层目录src下运行./configure

    3、修改Makefile文件

    修改Makefile文件中的交叉编译工具选项

    CC = arm-linux-gcc

    CPP = arm-linux-gcc–E

    LDFLAGS = -static

    4、修改boa.c文件

    将boa.c文件中的一下内容注释

    if ( setuid ( 0 ) != - 1 ) {

    DIE ( "icky Linux kernel bug!" );

    }

    5、修改compat.h文件

    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

    修改成

    #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

    6、修改config.c文件

    将if(!server_name){..........}内容注释,位于266-286行

    不注释会报错:gethostbyname:: Resource temporarily unavailable

    7、修改log.c文件

    注释掉以下内容

    if (dup2(error_log, STDERR_FILENO) == -1) {

    DIE("unable to dup2 the error log");

    }

    不注释会报错:unable to dup2 the error log:bad file descriptor

    8、编译

    make

    9、去除调试信息

    arm-linux-strip boa

    10、修改执行权限

    chmod 777 boa

    三、BOA服务器配置

    1、boa.conf文件解析

    #监听的端口

    Port 80

    #服务器绑定的IP地址,注释掉表示绑定到INADDR_ANY,适配服务器所有的IP

    #Listen 192.68.0.5

    #服务器运行的用户和组

    #User o

    User 0

    #Group o

    Group 0

    #当服务器发生问题时发送报警的email地址

    #ServerAdmin root@localhost

    #错误日志文件

    ErrorLog /var/log/boa/error_log

    #访问日志文件

    AccessLog /var/log/boa/access_log

    #是否使用本地时间。如果没注释掉,则使用本地时间。注释掉则使用UTC时间

    #UseLocaltime

    #是否记录CGI运行信息

    #VerboseCGILogs

    #服务器名字

    #是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服务器

    #VirtualHost

    #非常重要,HTML文档的主目录

    DocumentRoot /var/www

    #如果收到一个用户请求的话,在用户主目录后再增加的目录名

    UserDir public_html

    #HTML目录索引的文件名

    DirectoryIndex index.html

    #一个连接所允许的HTTP持续作用请求最大数目

    KeepAliveMax 1000

    #HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接

    KeepAliveTimeout 10

    #指明mime.types文件位置

    MimeTypes /etc/mime.types

    #文件扩展名没有或未知的话,使用的缺省MIME类型

    DefaultType text/plain

    #提供CGI程序的PATH环境变量值

    CGIPath /bin:/usr/bin:/usr/local/bin

    #为路径加上别名

    Alias /doc /usr/doc

    #指明CGI脚本的虚拟路径对应的实际路径

    ScriptAlias /cgi-bin/ /var/www/cgi-bin/

    2、其他文件移植

    从linux的etc目录拷贝mime.types、passwd、group文件到开发板系统的etc目录

    创建web服务器HTML文档的主目录/var/www

    创建CGI脚本所在目录/var/www/cgi-bin/

    四、BOA移植过程中错误的解决方案

    1、gethostbyname:: No such file or directory

    解决办法: 修改boa.conf   去掉ServerName www.your.org.here 前的注释符号(#)

    2、util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]

    解决办法:

    修改src/compat.h

    #defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff

    修改成

    #defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

    3、boa.c:211 - getpwuid: No such file or directory

    解决办法: 修改src/boa.c

    注释掉下面这段程序:

    if (passwdbuf == NULL) {

    DIE(”getpwuid”);

    }

    if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

    DIE(”initgroups”);

    }

    即修改为:

    #if 0

    if (passwdbuf == NULL) {

    DIE(”getpwuid”);

    }

    if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

    DIE(”initgroups”);

    }

    #endif

    4、boa.c:228 - icky Linux kernel bug!: No such file or directory

    解决办法:

    修改src/boa.c,注释掉下面语句:

    if(setuid(0) != -1) {

    DIE(”icky Linux kernel bug!”);

    }

    即修改为:

    #if 0

    if(setuid(0) != -1) {

    DIE(”icky Linux kernel bug!”);

    }

    #endif

    5、log.c:73 unable to dup2 the error log:bad file descriptor

    解决方法:

    修改src/log.c

    注释掉

    if(dup2(error_log, STDERR_FILENO) == -1) {

    DIE("unableto dup2 the error log");

    }

    即修改为:

    #if 0

    if (dup2(error_log, STDERR_FILENO) == -1) {

    DIE("unable to dup2 the error log");

    }

    #endif

    6、执行boa程序报错not found

    解决方法:

    修改Makefile

    LDFLAGS = -static

    展开全文
  • 嵌入式linux项目开发常用免费工具: DLT:windows下log查看工具 SQLiteSpy:sqlite3数据库查看工具 teraterm:串口查看工具 WinSCP:scp板子传输文件工具 putty:ssh连接板子工具 VSCode:编码IDE VMware player:...
  • 01.C_basic(C基础代码) 02.linux_c(Linux基础代码) 03.data_structure(顺序表,链表,栈,队列,二叉树,算法等代码) 04.IO(文件IO, 标准IO, UNIX环境编程代码) ...Apps(项目代码) docs(相关文档)
  • 韦东山第3期嵌入式Linux项目-视频监控-1-v4l2视频框架分析-附件资源
  • 嵌入式Linux项目。 外设 <--> Raspberry <--> Android 应用程序 用户应能够在 android 应用程序中无线控制/监视外围设备。 使用的库:rpi_ws281x: ://github.com/jgarff/rpi_ws281x
  • 本书围绕一个典型的嵌入式系统项目——农业信息采集控制系统的设计过程展开介绍,首先进行系统整体的软硬件设计,然后分嵌入式Linux系统移植和嵌入式Linux的应用开发两大部分对系统进行详细设计。嵌入式Linux系统...
  • 嵌入式Linux应用程序开发详解教程,适用于初学者,共十二章,知识点很全,每章一个知识点都有例子加解析,知识点写的很透彻,很好学习资料
  • 嵌入式linux项目开发(一)——web数据交互 本文讲解如何在移植好BOA、CGIC、SQLite的嵌入式web服务器上通过数据交互web网页配置个人信息,由CGI程序将配置的信息保存到SQLite数据库。一、嵌入式web服务器工作原理...

    嵌入式linux项目开发(一)——web数据交互

        本文讲解如何在移植好BOACGICSQLite的嵌入式web服务器上通过数据交互web网页配置个人信息,由CGI程序将配置的信息保存到SQLite数据库。

    一、嵌入式web服务器工作原理

        服务器软件BOA)始终在HTTP 端口守候客户的连接请求,当客户向服务器发起一个连接请求后,客户和服务器之间经过“三步握手”建立起连接。在接收到客户端的HTTP 请求消息后,服务器对消息进行解析,包括:读取请求URL、映射到对应的物理文件、区分客户端请求的资源是静态页面还是CGI 应用程序等。如果客户请求的是静态文件,那么服务器读取相应的磁盘文件,并将其作为HTTP响应消息中的实体返回给客户端,如果客户端请求的是CGI 应用程序,那么服务器将创建相应的CGI 应用程序进程,并将各种所需信息(客户端请求信息、服务器端相关信息等)按CGI 规范传递给CGI 应用程序进程,此后由CGI 应用程序接管控制。

            CGI应用程序读取从Web 服务器传递来的各种信息,并对客户端的请求进行解释和处理,如使用SQL 语句来检索或者更新数据库,或者将从客户端获得的数据,按与被监控对象所定义的通信协议重新组帧,从UART 口发送到被监控对象。最后CGI 应用程序会将处理结果按照CGI 规范返回给Web 服务器,Web 服务器会对CGI 应用程序的处理结果进行解析,并在此基础上生成HTTP 响应信息返回给客户端。

        嵌入式web服务器所要实现的功能是让客户端使用浏览器向服务器发送 HTTP请求,服务器响应客户端的请求后,并引导到指定的脚本程序,对命令进行解析,将信息交给后台——CGI去处理。CGI解析信息后,向远程设备发出控制信息。设备响应后,返回给CGI控制信息,CGI再将信息解析成变量输出到Web Server上,最后客户端得到WebServer发回的页面消息(HTML),就能得到现场设备的运行状态,实现对现场设备的远程监控。

        BOA 服务器的的主要功能如下图所示:

    wKioL1eWtqeCJZZ1AAIzW1lJZSA067.png

        服务器中主要包括BoaCGI两部分,其中Boa管理着返回客户端的WEB页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。

            CGI的程序编写包括两个部分:HTML代码和C代码;CGI程序与Boa Web服务器之间通过环境变量、命令行参数和标准输入等方式进行通信。一般采用表单编码信息通过环境变量QUERY_STRING传递。在编写CGI程序时,需要注意

        AREQUEST_METHOD

        请求方法有两种:GETPOST

    <form method=get action=/cgi-bin/config.cgi>

        B环境变量

        在选用不同的方法时,所对应的环境变量也不同。选择GET时,所对应的环境变量是QUERY_STRING,通过调用库函数getenv()来得到环境变量的具体值,即querystring=getenv(QUERY_STRING)。系统功能框架图如下:

    wKiom1eWts2zRnThAAD-P4GtkgA709.png

            本文主要使用表单实现个人信息的提交,通过CGI程序处理将信息数据存储到SQLite数据库,其余摄像头信息采集和GPRS模块由于没有相关硬件设备,不在本文实现。

    二、HTML数据交互网页设计

    wKioL1eWturhZeUyAAAmMX16wqU975.png

    Config.html:

    <!doctype html><head><meta http-equiv="Content-Type" content="text/html "><title>系统参数配置</title></head> <body><h3>配置选项</h3> <form enctype="multipart/form-data" action="cgi-bin/config.cgi" method="post">    <fieldset style='width:300px' >    <table>    <legend>个人信息</legend>        <tr>            <td><label for="name">姓名:</label></td>            <td><input type="text" id="name" name="name" /></td>        </tr>        <tr>            <td><label for="age">年龄:</label></td>            <td><input type="text" id="age" name="age" /></td>        </tr>        <tr>            <td><label for="sex">性别:</label></td>            <td><input type="radio" name='sex' value='boy' />男 <input type="radio" name='sex' value='girl'/>女</td>        </tr>        <tr>            <td><label for="company">单位:</label></td>            <td><input type="text" id="company" name="company" /></td>        </tr>        <tr>            <td><label for="profession">职业:</label></td>            <td><input type="text" id="profession" name="profession" /></td>        </tr>        <tr>            <td><label for="idnumber">身份证号码:</label></td>            <td><input type="text" id="idnumber" name="idnumber" /></td>        </tr>        <tr>            <td><label for="qq">QQ码:</label></td>            <td><input type="text" id="qq" name="QQ" /></td>        </tr>        <tr>            <td><label for="email">Email:</label></td>            <td><input type="text" id="email" name="email" /></td>        </tr>        <tr>            <td><label for="telephone">联系电话:</label></td>            <td><input type="text" id="telephone" name="telephone" /></td>        </tr>        <tr>            <td>            <center>                <input type="submit" id="ok" name="ok" value="确定"/></td>            </center>            </td>        </tr>    </table>    </fieldset>    <br></form>  </body>

    三、CGI程序设计

        将接收的配置信息返回给客户端浏览器,同时将配置信息写入SQLite数据库。

    config.c源码:

    #include <stdio.h>   #include <string.h>   #include <unistd.h>   #include <fcntl.h>   #include <sys/stat.h>   #include <stdlib.h>#include "cgic.h" #include "sqlite3.h" #define SQL_SIZE 256 int cgiMain(int argc, char **argv){char name[64];char age[4];char sex[8];char company[64];char profession[16];char idnumber[24];char qq[24];char email[64];char telephone[16];//回显信息到HTML网页cgiHeaderContentType("text/html"); printf("<html>\n\n");printf("<p>\n\n");//获取表单中的name的值,存入name缓冲区if(cgiFormString("name", name, sizeof(name)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function name failed");exit(-1);}printf("姓名:%s\n\n",name);printf("<br>\n\n");if(cgiFormString("age", age, sizeof(age)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function age failed");exit(-1);}printf("年龄:%s\n\n",age);printf("<br>\n\n");if(cgiFormString("sex", sex, sizeof(sex)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function sex failed");exit(-1);}printf("性别:%s\n\n",sex);printf("<br>\n\n");if(cgiFormString("company", company, sizeof(company)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function company failed");exit(-1);}printf("单位:%s\n\n",company);printf("<br>\n\n");if(cgiFormString("profession", profession, sizeof(profession)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function profession failed");exit(-1);}printf("职业:%s\n\n",profession);printf("<br>\n\n");if(cgiFormString("idnumber", idnumber, sizeof(idnumber)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function idnumber failed");exit(-1);}printf("身份证号码:%s\n\n",idnumber);printf("<br>\n\n");if(cgiFormString("email", email, sizeof(email)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function email failed");exit(-1);}printf("Email:%s\n\n",email);printf("<br>\n\n");if(cgiFormString("telephone", telephone, sizeof(telephone)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function telephone failed");exit(-1);}printf("Telepone:%s\n\n",telephone);printf("<br>\n\n");if(cgiFormString("qq", qq, sizeof(qq)) != cgiFormSuccess){fprintf(stderr, "cgiFormString function qq failed");printf("cgiFormString function qq failed");exit(-1);}printf("QQ号码:%s\n\n",qq);printf("<br>\n\n");printf("</p>\n\n");printf("</html>\n\n");//数据存储到数据库sqlite3 *db;int result;result = sqlite3_open("person.db", &db);    if(result != SQLITE_OK)    {        printf("Fail to sqlite3_open person.db: %s.\n", sqlite3_errmsg(db));        exit(-1);    }char *errmsg;char sql[SQL_SIZE];bzero(sql, SQL_SIZE);strcpy(sql, "CREATE TABLE person(ID varchar(24) PRIMARY KEY,name text,age text, sex text, company text, profession text, qq text, email text, telephone text);");    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0)    {        printf("Fail to exec sql: %s.\n", errmsg);        printf("\n%s\n",sql);        exit(-1);    }    bzero(sql, SQL_SIZE);strcpy(sql, "INSERT INTO person values('1234567899876543', '天山老妖', '30', 'boy', '天山', '嵌入式工程师', '123455678', 'hello@qq.com', '123344');");if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0)    {        printf("Fail to exec sql: %s.\n\n", errmsg);        printf("\n%s\n",sql);        exit(-1);    }result = sqlite3_close(db);    if(result != 0)    {        fprintf(stderr, "Fail to sqlite3_open person.db : %s.\n", sqlite3_errmsg(db));        exit(-1);    }return 0;}

        注意:程序需要使用CGIC库的接口函数、SQLite数据库的接口函数,因此编译时需要包括相关文件sqlite3.ccgic.c,同时需要SQLite数据库的动态链接库支持,因此需要将编译后SQLite数据库的lib目录下的文件拷贝到交叉编译工具的lib目录中,编译时需指定-lsqlite3

    编译程序:arm-linux-gcc -o config.cgi config.c  sqlite3.c cgic.c -lsqlite3

    将编译后的config.cgi程序拷贝到开发板的www目录下的cgi-bin目录

    打开客户端浏览器:http://192.168.6.210/config.html

    输入配置信息,提交将会显示配置的内容信息

    查看数据库中的内容:

    sqlite> select * from person;

    1234567899876543||30|boy|||123455678|hello@qq.com|123344

    sqlite>

    wKioL1eWtxWhXcdDAAAzmRqGxSE301.png

        至此,在BOA搭建的嵌入式WEB服务器上,使用CGIC处理HTML网页表单提交的信息,存储到SQLite数据库的简单项目已经完成。本项目只是简单的介绍的整个过程,是一个入门级的项目。如果有实际项目需求需要更精细的学习相关知识。


    本文出自 “生命不息,奋斗不止” 博客,转载请与作者联系!

    展开全文
  • 首先介绍下项目开发中个人经常使用到的开源免费软件: 1、虚拟机 虚拟机使用VMware player,个人发现使用Virtualbox ubuntu虚拟机会经常崩溃,选用免费的VMware player完全能满足需求 2、ubuntu 操作系统选用...

    工欲善其事,必先利其器。首先介绍下项目开发中个人经常使用到的开源免费软件:

    1、虚拟机

    虚拟机使用VMware player,个人发现使用Virtualbox ubuntu虚拟机会经常崩溃,选用免费的VMware player完全能满足需求

    2、ubuntu

    操作系统选用ubuntu,使用比较常用版本不太高的ubuntu16.04.2

    3、编码IDE

    编码IDE选用VSCode,这个不用多说了

    4、串口工具

    串口工具选用teraterm:比较好用的串口查看工具,其中Log和Macro等功能比较方便

    5、log查看工具

    项目log使用GENIVI DLT,因此用DLT viewer查看log

    6、数据库查看工具
    数据库查看工具选用SQLiteSpy,查看sqlite3数据库

    7、ssh、scp工具

    选用putty、WinSCP进行对目标板子进行ssh连接和scp文件传输

     

    已经提供打包好的下载:https://download.csdn.net/download/weixin_49007484/18930301

    展开全文
  • [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】是【创科之龙】团队aiku嵌入式视频教程系列制作的现有的音乐播放器。 主要功能实现:带歌词,界面美工很好,mp3 可快进和暂停,等...
  • 创建该项目是为了开发的非官方嵌入式Linux嵌入。 该嵌入程序着重于嵌入式Linux系统用例。 它还基于Windows的Flutter桌面实现,并且具有一些独特的功能可在嵌入式系统中使用。 目的与目标 我们的目标是在嵌入式系统...
  • 基于QT4.8的仓库管理系统实现功能,支持导出 excel 表格 支持查看商品操作日志 支持高精度浮点运算 支持同一商品以不同价格入库 该软件已开源。
  • 基于S3C2440的嵌入式Linux开发实例
  • [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】 之前忘记传了,补充pc端播放器,可以直接播放
  • 很好的嵌入式linux视频教程 (进程通讯) (编程基础) ...嵌入式Linux高级项目班 1.嵌入式体验入门班 (移动图像监控系统) (嵌入式MP3播放器)(H.264远程视频监控) (安全文件传输系统) 高级项目SDK
  • 学习路线:Linux入门、C语言、linux应用开发、linux系统开发、linux驱动 误区:今天学这、明天学那,资料太多,只看资料不动手 2什么是嵌入式系统 别动,你已经被嵌入式设备包围了 我们生活已经处处可见嵌入式系统...

    1嵌入式系统学习路线

    1. 主要招聘的行业企业:智能家居、消费电子、医疗、工业自动化、通信设备、汽车电子
    2. 学习路线:Linux入门、C语言、linux应用开发、linux系统开发、linux驱动
    3. 误区:今天学这、明天学那,资料太多,只看资料不动手

    2什么是嵌入式系统

    别动,你已经被嵌入式设备包围了
    我们生活已经处处可见嵌入式系统,医疗电子、智能家居、物流管理、电力控制、所有带数字接口和程序控制的设备,如电子手表、数码相机、汽车、飞机、卫星都离不开嵌入式系统
    (小米手机芯片是:骁龙TM四核2.5GHz处理器)

    嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统
    以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。(还要背诵呜呜呜)

    嵌入式系统应用

    家用电器

    是嵌入式系统最大的应用领域,如手机、数码相机、电视、冰箱、空调等的网络化、智能化将引领人们的生活步入一个崭新的空间。

    工业控制

    如工业过程控制、数字机床、电力系统、电网安全、电网设备监测、石油化工系统。就传统的工业控制产品而言,低端型采用的往往是8位单片机。但是随着技术的发展,32位、64位的处理器逐渐成为 工业控制设备的核心,在未来几年内必将获得长足的发展

    POS网络

    公共交通无接触智能卡(Contactless Smartcard, CSC)发行系统,公共电话卡发行系统,自动售货机,各种智能ATM终端将全面走入人们的生活,到时手持一卡就可以行遍天下。

    3嵌入式处理器

    嵌入式微控制器(EMCU)

    嵌入式微处理器又称单片机,也就是在一块芯片中集成了整个计算机系统。
    代表性的通用系列有8051、P51XA、MCS-251、MCS-96/196/296、MC68HC05和C166/167等。

    嵌入式微处理器(EMPU)

    嵌入式微处理器是由通用计算机中的CPU“演变而来的。它的特征是具有32位以上的处理器。具有较高的性能,当然其价格也相应比较高。主要的嵌入式处理器类型有Am186/88/386EX、SC-400、Power PC、68000、MIPS、ARM/StrongARM系列等。

    嵌入式数字信号处理器(EDSP)

    数字信号处理器对系统结构和指令进行了特殊设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也快。
    最为广泛应用的是TI的TMS320C2000/C5000系列,另外如Intel的MCS-296和Siemens的TriCore也有各自的应用范围。

    嵌入式片上系统(ESOC)

    片上系统SOC则是在一个硅片上实现一个更为复杂的系统。各种处理器内核将作为SOC设计公司的标准库,成为VLSI设计中的一种标准器件,用标准的VHDL语言描述,存储在器件库中。
    比较典型的SOC产品是Philips的Smart XA。少数通用系列如Siemens的TriCore,Motorola的M-Core。

    ARM

    ARM芯片是嵌入式微处理器中的佼佼者,是很多数字电子产品的核心。如今95%的手机里面的核心处理器使用的都是ARM芯片,而ARM在整个手持市场上占有90%以上的份额。
    ARM公司的成功除了其卓越的芯片设计技术以外,还源于其创新的商业模式:提供技术许可的知识产权,而不是制造和销售实际的半导体芯片。

    MIPS

    MIPS CPU是一种RISC结构的CPU,从生产专用集成电路的核心(ASIC Cores)的厂家到生产低成本CPU的厂家,从低端64位处理器生产厂家到高端63位处理器生产厂家。

    Power PC

    POWER是1991年,Apple、IBM、Motorla组成的AIM联盟所发展处的微处理器架构。PowerPC是整个AIM平台的一部分,并且是到目前为止唯一的一部分。PowerPC的历史可以追溯到早在1990年随RISC System/6000一起被介绍的IBM POWER架构。该设计是从早期的RISC机构(比如IBM 801)与MIPS架构的处理器得到灵感的。

    Motorola 68000

    Motorola 68000(68K)是出现得比较早的一款嵌入式处理器,68K采用的是CISC结构。68K最初用在苹果二代上,比Intel的8088还要早。

    ARM9处理器

    ARM9被广泛用于智能手机、PDA、机顶盒、PMP、电子玩具、数码相机、数码摄像机等产品解决方案,可为要求苛刻、成本敏感的嵌入式应用提供可靠的高性能和灵活性。丰富的DSP拓展使SoC设计不再需要单独的DSP。

    ARM11处理器

    ARM11处理器系列可用于当前生产领域中的大多数智能手机,还广泛用于消费、家庭和嵌入式应用领域。改处理器的功耗非常低,软件可以与以前所有ARM处理器兼容。

    Cortex A8处理器

    从高端特色的手机到上网本、DTV、打印机和汽车信息娱乐,Cortex-A8处理器都提供了可靠的高性能解决方案。NEON技术主要应用于某些音频、视频和图形工作负荷可以减轻跨SoC支持多个专用加速器的负担,并且使系统可以支持将来的标准。

    Cortex A15处理器

    Cortex A15和Cortex A9/A8同样采用了ARMv-A Cortex架构,处理器内核数量最多为4个,处理核心之间通过AMBA 4技术互联支持一系列ISA,能够在不断下降的功耗、散热和成本预算基础上提供高度可拓展性解决方案,广泛适用于下一代智能手机、平板机、大屏幕移动计算设备、高端数字家庭娱乐终端、无线基站、企业基础架构产品等。

    4嵌入式操作系统

    从20世纪80年年代开始,出现了各种各样的商业用嵌入式操作系统。这些操作系统大部分都是为专有系统而开发,从而形成了目前多种形式的商用嵌入式擦偶做系统百家争鸣的局面。
    如Linux、VxWorks、pSOS、PalmOS和Windows CE等。

    Linux
    嵌入式Linux现在已经有许多的版本,包括强实时的嵌入式Linux(如新墨西哥工学院的RT-Linux和堪萨斯大学的KURT-Linux等)和一般的嵌入式Linux版本(如uCLinux和PocketLinux等。

    RTlinux
    RTLinux(AReal-Time Linux,亦称作实时Linux)是Linux中的一种实时操作系统。它由新墨西哥矿业及科技学院的V. Yodaiken开发。目前,RTLinux有一个由社区支持的免费版本,称为RTLinux Free,以及一个来自FSMLabs的商业版本,称作RTLinux Pro。

    VxWorks
    1984年WRS公司推出它的第一个版本VxWorks1.0.1,在1997年推出了VxWorks 5.3.1。VXWorks是一个运行在目标机的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

    WInCE
    Windows CE的多线程、多任务、全优先的操作系统环境是专门针对资源有限而设计的。这种模块化设计使嵌入式系统开发者和应用开发者能够定做各种产品,例如家用电器、专门的工业控制器和嵌入式通信设备。

    Palm
    3COM公司的Palm操作系统在掌上电脑和PDA市场上占有很大的市场份额。它有开发的操作系统应用接口,开发商可以根据需要自行开发所需的应用程序。

    μC/OS-II
    由于μC/OS-II 仅是一个实时内核,这就意味着它不像其他实时操作系统那样,它提供给用户的只是一些API函数接口,有很多工作往往需要用户自己去完成。把μC/OS-II 移植到目标硬件平台上也只是系统设计工作的开始,后面还需要针对实际的应用需求对μC/OS-II 进行功能拓展,包括底层的硬件驱动、文件系统和用户图形接口(GUI)等,从而建立一个实用的RTOS。

    eCOs
    eCos(embedded Configurable operating system),中文翻译为嵌入式可配置操作系统或嵌入式可配置实时操作系统。适合于深度 嵌入式应用,主要应用对象包括电子消费、电信、车载设备、手持设备以及其他一些低成本和便携式应用。

    5嵌入式系统结构

    嵌入式系统与传统的计算机一样是一种由硬件软件组成的计算机系统。硬件包括了嵌入式微控制器和微处理器,以及一些外围元器件和外部设备,软件包括嵌入式操作系统和应用软件。

    中间层
    中间层为硬件层与系统软件层之间的部分,有时也成为硬件抽象层(Hard Abstract Layer,HAL)或者板级支持包(Board Supper Package, BSP)。

    系统软件层
    系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户界面接口(Graphic User Interface, GUI)、网络系统及通用组件模块组成。

    应用软件层
    应用软件层则是开发设计人员在系统软件层的基础之上,根据需要实现的功能,综合系统的硬件环境所开发的应用软件。

    常用开发工机具
    GNU Tools
    Linux环境下流行的开发工具是GNU Tools,利用GNU Tools完全可以控制编译行为,在嵌入式Linux环境中同样具有广发的应用。

    GNU Tools包括vi/vim GCC GDB make CVS SVN diff patch binutils

    Qt
    Qt是一个跨平台的C++应用开发开发框架

    Eclipse
    Eclipse可以说是发展极为迅速,它不仅是一个以java为主的开发平台,其功能强大的插件体系结构使得它可以被当做各种应用程序来使用。

    交叉开发环境
    嵌入式系统通常是一个资源受限的系统,因此不可能直接在嵌入式系统的硬件平台上编写软件。
    目前一般采用的解决方法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。

    交叉调试
    交叉调试(Cross Debug)又常常被称为远程调试(Remote Debug),是一种允许调试器以某种方式控制目标机上呗调试金蝉的运行方式,并具有查看和修改目标机上内存单元、存储器以及被调试进程中变量值等各种调试功能的调试方式。

    系统测试
    内存分析工具
    Valgrind /proc/meminfo atop free GNOME System Monitor
    性能分析工具
    Intel VTuneOprofileGprof Google Perf Tools

    覆盖分析工具
    c/c++:gcc+gcov+lcov:(单元测试:CUnit、CPPUnit、Google GTest等)
    java:Maven cobertura插件、Clover、 EMMA、Jtest;
    Python:PyUnit+coverage.py;
    PHP:phpunit±coverage-html+Xdebug;
    Perl:Test::Class 和 Devel::Cover;
    Shell:shUnit2+shcov;

    展开全文
  • Flutter的嵌入式Linux嵌入该项目的创建是为了开发Flutter的非官方嵌入式Linux嵌入。 该嵌入程序专注于Flutter的嵌入式Linux嵌入。创建该项目是为了开发Flutter的非官方嵌入式Linux嵌入。 该嵌入程序着重于嵌入式...
  • 嵌入式Linux在机器人中的应用.pdf
  • 基于Yocto项目的新版嵌入式Linux平台.pdf
  • 用于嵌入式Linux调试的Clion示例项目项目演示了如何交叉编译和调试Raspberry Pi(RPi)的应用程序。 此处还实现了功能请求解决方法。 Raspberry Pi配置为具有IP地址192.168.0.110, sshd将在启动时启动。 交叉...
  • 如何学习嵌入式Linux_韦东山

    万次阅读 多人点赞 2020-05-13 16:30:07
    从事嵌入式Linux培训12年来,我们写过很多《关于如何学习linux》的文章,这是最新的,本文将不断更新。 第1章 单片机和Linux的区别 1.1 有哪些产品使用单片机或Linux 所有的电子产品,所用技术都可以认为要么是...
  • 嵌入式Linux开发,开源项目

    千次阅读 2017-09-28 15:35:55
    我认为作为嵌入式Linux开发者,要非常熟悉的几个开源项目: 1 d-bus  dbus是freedesktop下开源的Linux IPC通信机制 2 gstreamer  是一个创建流媒体应用程序的框架 3 gconf GConf 简化了 ...
  • 嵌入式Linux C编程入门(第2版) PPT

    热门讨论 2011-03-11 20:48:34
    第2章 嵌入式linux c语言开发工具 32 2.1 嵌入式linux下c语言概述 32 2.1.1 c语言简史 33 2.1.2 c语言特点 33 2.1.3 嵌入式linux c语言编程环境 34 2.2 嵌入式linux编辑器vi的使用 35 2.2.1 vi的...
  • 本文的题目是教大家学习嵌入式,可能我所理解的嵌入式和大家在网上看到的嵌入式的概念不一样,网上一说到嵌入式基本上指的是嵌入式Linux开发,而我理解的嵌入式则是一个更广泛的概念,只要是那种小型专用设备的开发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,639
精华内容 25,055
关键字:

嵌入式linux项目

linux 订阅