嵌入式linux系统应用开发
关于嵌入式系统
平时大家说的嵌入式其实范围比较广的,是一种软硬件可裁剪,以应用为中心开发的专用系统,硬件平台可以是单片机,或者以ARM系列的处理器。单片机一般直接裸奔程序,不过现在有了好多基于单片机的系统,最近比较火的开源系统RT-Thread,做的还是不错的;基于ARM架构的处理器大部分用的是linux系统作为软件平台,也有部分设备用的是安卓系统(内核也是linux);
嵌入式linux系统应用开发
简介
嵌入式系统开发包括内核、驱动、应用三大部分,今天主要说应用开发,内核与驱动就不多说了。嵌入式linux系统就是移植的linux内核,使用对应的编译器,把linux内核编译后下载到存储芯片,然后还需要做一个基本的根文件系统,这样系统就可以跑起来了,相对于PC上的系统,还是比较简单的。
应用开发环境
现在网上有好多视频教程,一般第一节课都会教你怎么搭建开发环境。我这里简单罗列一下:
- 安装一个linux系统的虚拟机,我用的是Ubuntu。
- 然后给虚拟机安装对应的交叉编译工具。
- 安装常用工具,并配置:nfs、tftp、ftp、ssh服务、samba服务、vi必要的配置。
- 在板子上面使用nfs,还需要给板子的linux内核配置上nfs-client和nfs文件系统支持;
- 我喜欢在板子上移植一些好用的工具,比如:ftp、ssh服务(终端登录和传文件用)、crontab等
虚拟机登录:安装ssh服务, 后可以用一些终端软件通过ssh登录,这样不用在虚拟机的桌面里使用terminal了
共享文件:我喜欢通过samba与windows共享目录, 在windows下把共享目录映射为网盘,使用起来也比较方便;我觉得这种共享很方便,比使用一些共享软件要方便。挂载为网盘后和操作本地磁盘一样,比较直观。
一般开发流程
在一些视频教程中,一般介绍的开发流程是这样的:在windows下编辑好代码,在虚拟机里使用交叉编译器对代码进行交叉编译,然后通过tftp/ftp下载到板子里,或者nfs挂载后运行测试; 入门时是这样,但是如果是在公司做实际的产品开发,这样效率就会很低的。
下面是我常用的流程:
- 在windows下或者虚拟机里编辑代码,代码编辑器一般用sourceInsight、VSCode、Eclipse等。
- 代码在写的时候,注意把与底层硬件交互的地方加编译选项,这样是通过编译开关控制硬件访问的代码是否启用(这里面也有好多技巧的)。
- 第二步所做的工作,在这一步就起到了作用,在Makefile里,会写上根据不同的编译选项,选择不同的编译器,如果是使用Ubuntu里的编译器,那么就把硬件相关的交互屏蔽,这样编译出来的程序,可以直接在Ubuntu上运行了,这样一来,我们可以在Ubuntu上做代码单元测试、程序的逻辑验证、运行性能测试等。80%的问题可以在Ubuntu里解决。
- 在Ubuntu里测试没问题后,在交叉编译,通过nfs共享目录,在板子里运行调试。
这样其实是减少下载程序到板子上这个过程,把逻辑验证、代码单元功能验证放在Ubuntu里来验证测试,而且Ubuntu里使用GDB调试也比较板子上方便。
调试
最常用,也是最有效的方式就是加打印信息,记日志!基本上可以解决80%的问题。如果遇到程序异常挂掉(比如段错误等),程序挂掉一般没有任何提示信息,也不确定是在那里挂掉的,这种问题一般使用GDB跟踪,或者在代码里加入backtrace信息输出的代码。
结束语
嵌入式linux系统应用开发,相对于内核、驱动开发,入门可能是比较容易的,毕竟应用层的开发,没有那么多高深的东西。应用层与具体业务关联比较大,因此也就导致应用开发的工作量比较大,需求也会有经常变更风险,但是应用开发里会有好多技巧,可以大大提高工作效率;linux应用可以使用C++进行开发,利用C++的面向对象思想,以及现在C++11之后的新特性功能,提供了好多类似于Java里的一些好用的功能,可以大大提高应用的开发效率。
个人微信公众号:
嵌入式linux系统应用开发的更多相关文章
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...
- 【嵌入式】安装Linux系统到开发板
一.开发板基本介绍 Flash --相当于硬盘 RAM -- 内存 Micro USB或232串口 连电脑 USB 接口连摄像头 启动方式 选择开关 :SD卡启动或NAND FLASH 启动 USB转 ...
- 014安装Linux系统到开发板
SD卡----->开发板 1.安装准备: 硬件连接 USB下载线,一端连到开发板,另一端连到PC机: 串口线连好: 电源线连好: 设置开发板从SD卡启动: 2.打开开发板进入选单界面: 进入选单 ...
- 基于s5pv210嵌入式linux系统sqlite3数据库移植
基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...
- 嵌入式linux系统的构建
前期工作:a.配置好tftp服务器:在嵌入式的童年中有介绍 b.开发板可以pc,linux 三者可以互相ping通 c.配置好nfs服务器:同样在嵌入式的童年中有介绍 一.嵌入式linux内核的制作( ...
- 4种用于构建嵌入式linux系统的工具_转
转自:4种用于构建嵌入式linux系统的工具 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备.令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 嵌入式Linux应用程序开发详解------(创建守护进程)
嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...
随机推荐
- Tomcat更改错误页面指向,改变404,500错误页面
在公司工作了一段时间,也被安排做了一个App,而且后台也是我来写和布置的,由于一次安全检查,需要我把tomcat默认页(管理页面)关闭,于是我只能进行默认指向变更,但是后面我又想到要是用户输入不存在的 ...
- 数据可视化之powerBI基础(十三)熟练使用Power BI的日期切片器
https://zhuanlan.zhihu.com/p/64416522 交互式设计可以让用户使用的过程中更具参与感,在PowerBI中经常用到的交互方式就是切片器,利用它可以从不同维度查看数据,切 ...
- 数据可视化之PowerQuery篇(十八)Power BI数据分析应用:结构百分比分析法
https://zhuanlan.zhihu.com/p/113113765 本文为星球嘉宾"海艳"的PowerBI数据分析工作实践系列分享之二,她深入浅出的介绍了PowerBI ...
- hihoCoder 1041 国庆出游 最详细的解题报告
题目来源:国庆出游 解题思路(下面是大神的写的): 把题目中的序列称作S,树称作T.那么对于S中的任意节点x,x的子孙节点如果在S出现的话,那么这个子孙节点的位置是有一定要求的:x的所有子孙节点在S中 ...
- Vue你不得不知道的异步更新机制和nextTick原理
前言 异步更新是 Vue 核心实现之一,在整体流程中充当着 watcher 更新的调度者这一角色.大部分 watcher 更新都会经过它的处理,在适当时机让更新有序的执行.而 nextTick 作为异 ...
- day2:Number,tuple,str,list,set,dict
# ### Number ( int float bool complex) 1.int 整型 (正整数 0 负整数)intvar = 1print(intvar) # type 获取值的类型res ...
- Kafka 信息整理
请说明什么是传统的消息传递方法? 传统的消息传递方法包括两种: ·排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人. ·发布-订阅:在这个模型中,消息被广播给所有的用户. 为 ...
- 为什么大家都在用Fiddler?
在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具.常用的抓包工具有fiddler.wireshark ...
- Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区
Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...
- python多线程之Threading
什么是线程? 线程是操作系统内核调度的基本单位,一个进程中包含一个或多个线程,同一个进程内的多个线程资源共享,线程相比进程是“轻”量级的任务,内核进行调度时效率更高. 多线程有什么优势? 多线程可以实 ...