不抛弃、不放弃 - 士兵突击

从今天开始我们来扯一扯嵌入式Linux系统优化的那些事儿。。

什么是嵌入式系统?

嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。[1][2]嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。相反,通用计算机如个人电脑则设计灵活,可以智能处理各式各样的运算情况,以满足广大终端用户不同的需要。
现代嵌入式系统通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器(使用外部存储芯片和外设接口电路)也很常见。通用型处理器、专门进行某类计算的处理器、为手持应用订制设计的处理器等,都可能应用到嵌入式系统。常见的专用处理器有数字信号处理器。
嵌入式系统的关键特性是处理特定的任务,因此工程师能对其进行优化,以降低产品的体积和成本,提升可靠性和性能。
嵌入式系统的物理形态包括便携设备如计步器、电子手表和MP3播放器,大型固定装置如交通灯、工厂控制器,大型复杂系统如混合动力汽车、磁共振成像设备、航空电子设备等。它们的复杂度低至单片机,高至大型底盘或外壳内安装有多个部件、外设和网络。

嵌入式Linux ?

嵌入式Linux 是嵌入式系统中比较主流的一种,其以Linux 为嵌入式设备的操作系统,并广泛用于消费电子,移动电话,航天航空电子中。其Wiki上如是描述:
嵌入式Linux(英语:Embedded Linux)是一类嵌入式操作系统的概称,这类型的操作系统皆以Linux内核为基础,被设计来使用于嵌入式设备。这类操作系统被广泛地使用在移动电话、个人数码助理(PDA)、媒体播放器以及众多消费性电子设备中。
比起发行版的Linux 系统,嵌入式Linux 以Linux 为蓝本,进行了大规模的裁剪,只保留目标平台需要用到的东西。其保留了Linux 的开放性,并且也具体嵌入式设备的需求。
但是由于Linux 的庞大以及其为桌面服务器系统的本质,所以在一些性能方面确实是无法达到预期目标,为此还有专门的社区分支基于Linux 开发了支持硬实时的RT分支版本。由于Linux 的兼容性非常的好,所以嵌入式Linux的贱人显然也是完美的。嵌入式设备提供商可以按照自己的需求随意裁剪Linux 源码,并添加自己的功能。

啥?嵌入式设备的用户体验?

不管要做出什么样形态的产品,用户体验总是会被大家推崇到首位,你系统做的在牛逼,架构选的多么的新颖,算法多么的前无古人。假如你的产品用起来体验很烂,照样没有客户埋单。
用户体验又分为了好多类型,比如外观、材质、手感这属于外部的一个感官。俗称颜值。比如玩王者农药是否卡?费电吗?防水吗?能看VR吗?美颜效果如何?这一类体验属于交互体验。交互体验是内在。再比如还有一类人比较关心的就是是否有一些特色功能,比如红外、虹膜、指纹。 这些功能其实对于大多数的消费者而言都是锦上添花。但是对于一些极客而言,确实实打实的可用功能。归到最后其实就是,始于颜值,陷于才华,忠于人品。
那么你如果满足了上述的要求,作为消费产品,又会回归一个比较俗的话题,那就是价格。 恩恩,扯远了。

交互体验的最终目的就是迅速,人机交互的响应很迅速。不过我任务对于大多数泛嵌入式终端产品来讲,大多其实是无人值守的交互状态。所谓无人值守,即是设置好了预期指令,可以在不需要人为交互的情况下,做出响应。比如交换机,路由器,中控器等。这些设备大多是提供协作功能,其本身不需要太多的人机交互,更多的是用来做人机->机或者机->人机 交互的通路。
这些设备的要求,要比单纯的人机交互设备的响应要求更高。 大家可以接受电脑或者手机重启一次,或者死机一次。 但是无法忍受断电,断网。

还要优化什么?

嵌入式系统设备的优化目的大抵可以从下面几个点去概括

  • 增强系统的稳定性
  • 加速系统和程序
  • 减小系统和程序的体积(裁剪)
  • 降低系统的功耗
  • 提供系统的响应能力
  • 成本和组合的优化效果
  • 终极优化的策略

上述总结出自魅族的内核团队大神吴老师总结的,我觉得概括的很全面,也很到位。

增强系统的稳定性

随着业务的增量变化,没有百分之一百的稳定性,只有百分之99.9的稳定性,我们的目标其实也就是百分之99.9的稳定性,这样的系统才是最健壮的。
根据吴老师的描述,可以通过以下手段来进行稳定性的测试取样,然后做评比。
- 尽量模拟各种潜在的应用场景,需要构造应用场景测试例。
- 使用各种压力测试环境将系统上资源利用到极致,采用Linux 现有的测试工具,可做成一套完整的测试流程。
- 采用标准的测试套件将整个系统的兼容性(是否符合标准)、完整性(功能是否完善)、健壮性(是否容易Crash)。

Linux 标准测试套件

  • Linux Test Project – 可靠性,稳定性。覆盖测试(runalltest.sh),压力测试(ltpstres.sh)。
  • Open Posix Test Suite – 一致性、功能、压力(make tests-pretty)。
  • LSB Platform Specification – Linux App Checker。
  • ELC Platform Specification – 嵌入式Linux 标准测试框架。
  • Phoronix Test Suite – Hardware Platform Test Suite。

Linux 硬件测试工具以及功能测试相关工具

  • 处理器:cpuburn(FPU) + gkrellm + lm_sensor 压力测试
  • 图形处理器:Neocore (3D), NenaMark(OpenGPL ES 2.0)
  • 内存:memtest86+, memtester,CPU厂商自带的bootloaderi/xloader
  • 串口:minicom, cat /dev/ttyS0, cat /dev/ttyUSB0
  • 闪存(NOR/NAND):mtd-utils, flash_eraseall, flashcp
  • 声卡:alsa-utils, amixer, alsamixer, aplay /dev/urandom;mplayer -ao alsa|oss
  • 摄像头:v4l2, mplayer tv://dev/video0
  • USB:usbutils, lsusb; usbstress,可挂载存储设备测试
  • 显卡/LCD: mplayer, directfb, directfb-examples
  • I2C: i2c-tools, i2cdetect -l, i2cget, i2cset, i2cdump
  • RTC:util-linux, date + hwclock -r/-w
  • 传感器:lm-sensors, sensors, gkrellm
  • 键盘/鼠标:showkey; xdotool(simulate)
  • 功能键:/sys/class/input/; HAL+Dbus, hotkey.py
  • 触摸屏:Tslib
  • 触摸板:gpointing-device-settings, tpconfig
  • 磁盘:hdparm; hddtemp; badblocks -s -v /dev/sda1;smartctl -a /dev/ad0,blkid,sg-utils
  • 以太网、无线、蓝牙:/sys/net/, ethtool, dhclient, ifconfig, ping -IethX -s psize -f, netperf -A -l, network-manager, wireshark,netsniff-ng
  • FC,ISCSI: targetcli,lio,iscsitarget

嵌入式Linux 性能优化方向

那么在嵌入式系统中,为了提高设备的响应速度以及稳定性我们应该要优化什么?我觉得可以从下面几个方向入手。

  • 优化系统启动时间
  • 根据特需优化CPU资源的分配
  • 根据特需优化内存资源的分配
  • 根据特需优化控制IO设备的资源
  • 优化并提供系统实时性

上述优化前提是你自己的程序已经在一个比较良好的算法或者调度下已经无法迈出往前一步了,当然我这儿只是类比。具体还要根据生产环境来决定。因为很多人根据无需去优化这些,把自己写的业务代码优化好才是王道。

嵌入式 Linux 业务软件质量控制

  • 设计 – 遵循标准开发规范,参考POSIX,LSB等统一标准。
  • 流程 – 遵循标准开发流程。
  • 编码 – 编码风格参考内核代码风格,风格一致性检查。 scripts/checkpatch.pl。
  • 静态检查 – Sparse,coccinelle,smatch。
  • 编译时检查 – -Wall -Werror -std=c89-pedantic-errors。
  • 运行时诊断和调试 – Debugging/Tracing API

参考资料:

嵌入式Linux系统优化的那些事儿相关推荐

  1. 嵌入式Linux 系统的优化策略和方法

    嵌入式Linux 系统启动优化的那些事儿 嵌入式Linux 系统优化的那些儿事之系统启动时间的优化方法.. 嵌入式Linux 系统时间测量工具以及用法 Printk Times – 用于显示每个 pr ...

  2. 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究

    [摘要] 嵌入式系统功能的提高,占用了较大内存空间,继而时常出现运行无响应.基于用户方面看,由于系统内存问题影响运行,针对系统内存与进程应用状态研究,可以调整系统数值与执行文件elf分析,进行系统优化 ...

  3. 利用Yocto构建嵌入式Linux教程3_1--Yocto构建系统的配置文件

    本教程选用的Yocto版本为3.0.4,我使用的Linux发行版为Ubuntu 18.04 (LTS),图中所有示例为实际测试截图,有问题请给我留言.微信公众号: 嵌入式Linux那些事儿 1 Yoc ...

  4. 利用Yocto构建嵌入式Linux教程02--Yocto的一些基本概念介绍

    本教程选用的Yocto版本为3.0.4,使用的Linux发行版为Ubuntu 18.04 (LTS),图中所有示例为实际测试截图,有问题请给我留言.微信公众号:嵌入式Linux那些事儿 在Yocto项 ...

  5. 利用Yocto构建嵌入式Linux教程01--第一个Yocto项目构建

    大家好,从今日开始,计划写一个利用Yocto构建嵌入式Linux的教程,算是对个人工作和学习的一个总结. 本教程选用的Yocto版本为3.0.4,我使用的Linux发行版为Ubuntu 18.04 ( ...

  6. 【嵌入式Linux】学习路径

    太久没有做过相关的开发和学习了,技术这东西,一段时间不用就容易忘记,再加上本来就不熟悉,忘得更快.大学时候在tb买了某原子的一块开发板,就开始的时候学习了一段时间,后面因为毕业工作等原因,就放那吃灰了 ...

  7. 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)

    ###你好!这里是风筝的博客, ###欢迎和我一起交流. 前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案. Linux早期时候,一个驱 ...

  8. 《嵌入式linux内存使用与性能优化》读书笔记

    <嵌入式linux内存使用与性能优化>读书笔记 前言 本书的重点分为系统内存和性能优化,前4章着重内存使用,尽量减少进程的内存使用量,定位和发现内存泄漏:后5章着重与如何让系统性能优化,加 ...

  9. 嵌入式大牛详解:嵌入式linux开发流程总结

    很多的小伙伴都私信问了小编在嵌入式学习的过程中都能学到什么,这次小编就顺从大家的意思来一篇嵌入式linux开发的流程,嵌入式linux的学习是不可少的,可以说嵌入式linux是学习比较困难的,会遇到各 ...

  10. 嵌入式Linux小项目之图片编解码播放器(1)

    目录 前言 一.项目展示与整体规划 二.环境搭建和基础确认 三.开始动手写代码 四.framebuffer基本操作代码 五.图片显示原理和实践 前言 首先非常感谢大家来阅读我的文章,在这里特别感谢朱老 ...

最新文章

  1. 功能之前,感叹号有什么作用?
  2. Dubbo负载均衡原理
  3. 【腾讯面试题】SQL语句优化方法有哪些?
  4. linux屏保配置文件夹,Linux下屏保设置
  5. jdba访问mysql_mysql连接出现问题记录
  6. 【elasticsearch系列】安装elasticsearch-head插件
  7. 语音识别软件哪个好?好用的语音识别软件盘点
  8. IIS错误 ‘80040e21‘ ODBC 驱动程序不支持所需的属性
  9. 利用python selenium+cv2破解qq空间登录滑动验证码(无法获得完整图情况)(上)
  10. 什么是Python爬虫?一篇文章带你全面了解爬虫
  11. 加入7654联盟,一次装机,终身领工资!
  12. Visual Leak Detector使用方法
  13. 微信表情的字符编号完整版【图文并茂哦 】
  14. 16组Sony索尼系列相机Slog2和Slog3常用Vlog电影LTUS调色预设 Slog2 Slog3视频灰片调色预设
  15. C++ “switch“ 语句的简单讲解
  16. 【Power Automate】日期格式化函数formatDateTime详细说明及示例
  17. 猿代码浅谈Python|猿代码科技
  18. SQL-SQL函数(二)Scalar 函数
  19. Android12 支持高斯模糊及高斯模糊原理
  20. Release notes for VPP 22.10

热门文章

  1. P1125 [NOIP2008 提高组] 笨小猴 java
  2. (CVPR 2020) RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
  3. 队列同步器(AbstractQueuedSynchronizer)源码简析
  4. 51单片机,485,测试03/05/06
  5. [译] 为什么加密货币泡沫会破裂?
  6. 苹果好用的测试软件,四款主流苹果设备管理软件横向评测
  7. 第1.5 章 elasticsearch备份过程记录
  8. c语言 桌面下雪程序,[Lazarus]使用Lazarus编写的桌面下雪小程序
  9. Ubuntu、ros快速安装
  10. linux打开笔记本摄像头驱动程序,Linux下使用Opencv打开笔记本摄像头