Loading...
嵌入式开发入门—Linux
奔跑的蜗牛 发布于 07/17 16:50 浏览 142

第一部分 嵌入式Linux简介:

首先,不知道大家知不知道嵌入式linux设备运行的话一般需要哪几个组成模块?

一、嵌入式Linux设备如何在运作——Uboot

第一部分是BootLoader,它是作为一个刚刚开机的引导程序。Uboot也是BootLoader的一种,主要有以下几个作用:

  • Uboot本质上是一个裸机程序(没有操作系统的程序,开机只能单一运行)
  • Uboot主要是用来启动操作系统的内核
  • Uboot负责部署整个计算机系统,例如传参、分配OS内存
  • Uboot负责硬件初始化。例如串口打印、擦除、烧写flash等
  • Uboot提高一个命令行界面供人来操作

总之,Uboot的作用就是启动内核,内核运行起来后,它的任务也就完成了。

二、嵌入式Linux设备如何在运作——Kernel

Uboot加载成功后就到了Kernel这一步,kernel的作用就是将软硬件联系起来。大家都知道光光靠一个CPU硬件是没有什么用的,必须要靠内核去支配。

Kernel(内核)的5个子系统:

  • 进程调度:多线程操作以为是并行的,实际上是串行的,根据优先级进行调度,约10ms调度一次
  • 内存管理:CPU提供内存管理,操作系统将这块的物理地址和虚拟地址之间做一个映射,我们平时开发的程序操作都是虚拟地址,只有到驱动层开发的时候才是物理地址。
  • 虚拟文件系统:嵌入式设备中有很多的文件系统,不过对我们开发者来说,这些文件系统不需要关心怎么去操作,一般都是通过虚拟文件系统来统一操作。
  • 网络接口:主要包括网络通信协议和网络设备驱动。
  • 进程通信:方式很多,如文件和记录锁定、管道、FIFO、消息队列、信号灯,共享内存。

总之,Kernel(内核)是软件和硬件之间连接的“桥梁”,有了内核才能做应用程序的开发。

三、嵌入式Linux设备如何在运作—— rootfs(文件系统)

平时打包一个设备,发布一个固件、文件系统等一般都是自己独立去做的。比如bin文件,就是做一些二进制文件,像最简单的ios等等就是放在bin文件里面的。再比如dev,他就是动态生成的,像串口和其他的设备会生成在dev里面。还要重点说一下proc,内核以及进程信息的虚拟文件系统都是存在这个里面的。其他的介绍大家可以参考下图:

四、嵌入式Linux软件开发环境

从上图可以看出:嵌入式Linux软件开发环境基本是从PC端开始写软件,编译过后,通过U盘或者网络文件系统放到嵌入式设备中运行。

五、代码编译的流程

  • 预处理:展开头文件、宏替换、去掉注释(test.i main .i)
  • 编译:检查语法,生成汇编 (test.s main .s)
  • 汇编:汇编代码转换机器码 (test.o main.o)
  • 链接:接到一起生成可执行程序 (a.out)

六、嵌入式开发的方向

(1)底层驱动的开发(大方向):开发出硬件设备然后调试 (2)中间件的开发:可划分为应用程序里面的一种。海思这块,就是属于中间件的开发。 (3)应用程序的开发

  •  界面类 Qt、minigui等
  •  流媒体协议RTSP、RTMP、GB28181等
  •  行业协议 104/376规约、JT1078/808等
  •  算法类 opencv等

第二部分 海思平台简介:

一、海思平台概述

海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),可支持应用软件快速开发。该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供MPI(MPP Programe Interface)接口完成相应功能。该平台支持应用软件快速开发以下功能:输入视频捕获、H.264/MJPEG/JPEG/MPEG4 编码、H264/H.265/VC1/MPEG4/MPEG2/AVS 解码、视频输出显示、视频图像前处理(包括去噪、增强、锐化)、编码码流叠加 OSD、视频侦测分析、智能分析、音频捕获及输出、音频编解码等功能。

二、海思媒体处理平台架构

三、海思mpp调试信息

做海思应用开发的时候,这块会用的比较多。

心得与建议:

一个优秀程序的表现:

  • 代码可读性要好
  • 程序稳定性高、容错机制强
  • CPU使用率
  • 内存占用率,一定要控制在合理范围内,下面两个图就是看CPU使用率的,一般是10%~20%。

如何提高自己的个人能力:

  • 解决问题从原理性的角度出发去解决问题,而不是去“试”
  • 多去学习别人的代码、多学习开源项目
  • 保证项目进度的前提下,多思考好的设计方式

开发过程中遇到问题怎么办?

  • 多思考、多琢磨
  • 遇到问题先要自己思考下,每次解决问题的时候要有个积累,需要记笔记
  • 用搜索引擎,很多问题网上能找到相似的答案,思路类似

学习书籍或资料推荐:

  • C/C++ 经典书籍(必读)
  • 鸟哥的Linux私房菜(不熟悉linux的必读)
  • Unix环境高级编程(必读)
  • C++ GUI Qt4 编程(选读)
  • 韦东山的嵌入式linux 学习教程(选看)

本期学习视频分享:

下期学习预告:git使用入门,想要学习的同学可以在评论区留言,告诉我们想听的课程!

*本文仅代表作者观点,不代表易百纳技术社区立场。系作者授权易百纳技术社区发表,未经许可不得转载。

点赞3
收藏8
分享

精彩评论

内容存在敏感词
确定要删除此文章、专栏、评论吗?
确定
取消

详细的问题描述有助于平台快速解决问题

屏幕截图
问题描述