首页 > 技术知识 > 正文

第一部分 嵌入式Linux简介:

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

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

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

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

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

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

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

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

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

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

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

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

嵌入式开发入门—Linux1

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

嵌入式开发入门—Linux2

从上图可以看出:嵌入式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、视频侦测分析、智能分析、音频捕获及输出、音频编解码等功能。

嵌入式开发入门—Linux3

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

嵌入式开发入门—Linux4

三、海思mpp调试信息

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

嵌入式开发入门—Linux5

嵌入式开发入门—Linux6

嵌入式开发入门—Linux7

心得与建议:

一个优秀程序的表现:

代码可读性要好 程序稳定性高、容错机制强 CPU使用率 内存占用率,一定要控制在合理范围内,下面两个图就是看CPU使用率的,一般是10%~20%。 嵌入式开发入门—Linux8 嵌入式开发入门—Linux9 如何提高自己的个人能力: 解决问题从原理性的角度出发去解决问题,而不是去“试” 多去学习别人的代码、多学习开源项目 保证项目进度的前提下,多思考好的设计方式

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

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

学习书籍或资料推荐:

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

本期学习视频分享:

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

猜你喜欢