从零开始的嵌入式Linux生活(一) 背景介绍

这篇具有很好参考价值的文章主要介绍了从零开始的嵌入式Linux生活(一) 背景介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

近年来(截至2023年3月),随着各种各样的因素:实体经济、米国制裁、芯片热、智能汽车等, 嵌入式软件开发(Embedded Software)越来越火热,众多的芯片公司、应用方案公司、甚至是代理商公司如雨后春笋般成立; 各大招聘网站上“嵌入式开发”“驱动开发”等岗位也成为了热门高薪急招岗位。

作者我本人毕业于19年,在某大厂从事了约大半年的互联网前端开发后,转向了嵌入式开发的领域。 从51单片机开始、到32位MCU、再到嵌入式Linux、嵌入式安卓,一步一步的坚持下来了。 这其中离不开自己的努力,但更多的还是受益于互联网的分享精神。 所以我打算写这个关于嵌入式Linux的全方位指南,一方面是对自己的总结提升,另一方面也是回馈感谢互联网上各位网友的分享。

本系列文章的主要思想:

尽量广泛的介绍嵌入式开发的各个部分,力求涉及面广泛,但不一定很深入。 各位读者对某个部分感兴趣的话再自行了解。

在阅读本文之前,如果你有嵌入式开发的基础、单片机MCU开发的基础,会更好理解。 如果没有的话也没有关系,建议可以淘宝购买51单片机、STM32单片机开发板进行快速的学习(大约几十~100块),淘宝上的开发板一般都附赠教程。

本系列文章包括:

(一)背景介绍:主要介绍什么是嵌入式开发,其中嵌入式Linux开发属于哪个部分
(二)启动准备:开发板硬件平台、环境搭建
(三)入门:架构介绍,编译uboot、kernel、rootfs
(四)uboot介绍
(五)kernel介绍
(六)驱动介绍
(七)rootfs介绍
(八)用户空间应用程序介绍
(九)总结

一、什么是嵌入式开发

根据百度百科定义:

嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的EDA研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。

其实“嵌入式”是一个历史遗留名词,在以前,“嵌入式“是“通用”的反义词。例如:我们的PC机是通用的,其中的CPU、内存条、硬盘都是可以通用的; 而银行ATM、空调、手机、收音机等这类设备,其中的CPU、内存条、硬盘却不是通用的,称之为“嵌入式系统“。

这个时候会有同学提问了:那为什么ATM、空调这种设备不用通用的PC机,而非要玩点花样出来呢? 主要是因为以下几个因素:价格、功耗/性能、体积。
价格:性能好一点的PC机价格动辄上千; 性能差一点的工控机价格也要好几百。
功耗/性能:很多应用场景的功耗限制,比如收音机,还是使用电池供电的。 使用功耗动辄几十瓦的PC机显然不合适。 再说关于性能,用于空调的系统显然不需要PC机那么高的性能。
体积:性能越好的PC机,所需散热也越大;目前比较小的PC机可以做到一本书的大小。嵌入式系统可以做到很小,甚至是一枚硬币的大小。

嵌入式开发,就是指专门在上述的嵌入式系统中进行各种工作。其中根据工作内容又可细分为了几个子类:

  • 硬件工程师:
    • 硬件工程师:针对特定的需求场景,选型合适的CPU(性能、价格等)、内存、磁盘等器件,并设计出原理图。
    • layout工程师: 基于硬件工程师的原理图,使用专门的设计软件(EDA)画出电路板设计图(PCB)。并将PCB设计图提供给工厂,生产出可以实际使用的实物电路板。

  • 软件工程师:
    • 驱动工程师:基于硬件工程师提供的电路板,使用CPU指定的编程语言(通常是C语言)、编译器,编写出特定的、具备基本功能的代码,能够正常驱动CPU、内存、磁盘工作;也能够间接的通过CPU上的串口、I2C、PCIE等接口控制继电器、红外线、喇叭耳机、有线/无线网卡等设备正常工作。
    • 应用工程师:基于驱动工程师调试好的各个外部设备,配合产品的实际需求,将各个设备组合协同工作起来,例如:接收到红外线开机信号后,通过喇叭播放一个开机语音; 或者开机后通过网络HTTP请求上报给服务器,机器已在线。

本文主要会站在驱动工程师的角度,来介绍驱动工程师的工作内容之一 - 嵌入式Linux的开发,当然或多或少的也会接触到硬件、应用相关的一些内容。




二.从嵌入式单片机 到 嵌入式Linux 再到 Android

本文的标题中有“嵌入式Linux”的字样,那么这个时候有好奇的同学就会问了:什么是嵌入式Linux?除了嵌入式Linux难道还有嵌入式Windows? 答案是Yes,其实在嵌入式开发的领域中,是这样的:

正如上文所说,嵌入式设备价格、功耗等各方面的考虑,其系统组成可能极其简单。 以最简单的51单片机为例:
从零开始的嵌入式Linux生活(一) 背景介绍

如上述图片所示,这个嵌入式系统的组成就是一个单片机(图中方形的那个芯片)、一个晶振、几个电阻,其中可能只执行一个while(1)无限循环。 而这个单片机的内部组成也十分简单,如下图所示:
从零开始的嵌入式Linux生活(一) 背景介绍

不要看这个图片花里胡哨的,这可是我国的核心科技STC51单片机的官网:http://www.stcmcudata.com。无数的嵌入式人才、芯片人才都是从STC一步一步培养出来的。

如上图绿框所示,这个单片机内置了大容量的”12KB”RAM内存,“128KB”ROM(类似于PC机的硬盘)。 看到这里相信你已经有一些体会了,嵌入式系统真的节约啊~;对比起来,我们常用的PC机,都是8G RAM内存,1TB硬盘的高端配置。 在这么有限的资源情况下,显然并不能将Linux、Windows这样的操作系统放上去运行,一个Windows安装包都得4个G,这哪够啊。

因此在嵌入式系统中,根据系统资源的由少到多,可能会运行一些其他的系统,通常所用的操作系统如下:

资源数量 操作系统 备注 代表芯片
极少(CPU频率20Mhz RAM20KB ROM64KB) 裸机,无操作系统 整个程序就是while(1)循环,单线程,无屏幕 STC 51单片机
少(CPU频率300Mhz RAM128KB ROM1MB) 实时操作系统RTOS 有多线程,可接单色小分辨率屏幕 STM32 意法半导体单片机
中(CPU频率1Ghz RAM 2G ROM 4G) 嵌入式Linux 有多线程、有内核和用户空间隔离,可接1080P屏幕 NXP IMX6 IMX7系列 地平线自动驾驶芯片等
多(CPU频率 3Ghz RAM 8G ROM 64G) 安卓Android 安卓是嵌入式Linux的升级版本 瑞芯微rockchip3399 各种安卓手机

裸机编程一般需要自学一个月即可入门,教程请各位自行百度。
RTOS编程可能需要3个月才能入门,教程可前往国内最出名的RTOS系统:https://www.rt-thread.org/ 这里查看。 也可以淘宝购买开发板,一般都附送教程。
Linux编程可能需要9个月才能入门,教程可阅读本系列文章(自卖自夸一波),或者也可以淘宝搜索嵌入式Linux开发板,也会有对应的教程 。
Android编程就更困难了,作者我也不太会。


感兴趣的同学可以自行搜索各个操作系统的代表芯片,看一下其芯片介绍、价格等




三.一个嵌入式开发的例子

这个时候可能有读者又会说了: 你说的我大致明白了,但我还是不知道什么是嵌入式开发。 所以接下来我就以实际的例子来说明:

一个假设:

现在我们想做一台收音机,上面有5个按键12345,可以用来选台。 像这样:
从零开始的嵌入式Linux生活(一) 背景介绍
其设计思路如下图所示:
从零开始的嵌入式Linux生活(一) 背景介绍
主要有5个部分:

  1. CPU,用来执行代码,检测开关有无被按下,如果有,则立即控制对应的射频电路。
  2. 电源,5V电池供电
  3. 开关,五个按键开关,按下后对应的电路会被接通,CPU能够检测到
  4. 射频电路,用于接收声音信号
  5. 喇叭,播放射频电路接收的声音

简简单单的写点代码

假设除了1中的CPU执行的代码以外,2345都有硬件工程师帮我们准备好了,那么接下来我们只需要参考CPU厂家提供的方法,写代码即可。

假设我们使用的是上文所说的神器:STC单片机:

  • 型号:STC32G
  • 官网:http://www.stcmcudata.com/
  • 芯片手册:http://www.stcmcudata.com/STC8F-DATASHEET/STC32G.pdf
  • 长相:
    从零开始的嵌入式Linux生活(一) 背景介绍

接下来我们开始写程序… 咦? 怎么芯片手册中都帮我们把程序写好了,STC果然是神器啊 哈哈。
不难看出,下面的程序实际上只有一个while循环,芯片不停的执行while里面的代码就行了

从零开始的嵌入式Linux生活(一) 背景介绍
接下来我们把程序编译、烧录下载到芯片里面去。 如何编译、烧录一般芯片的官方都会有文档,STC也有非常详细的说明:

详情请见: http://www.stcmcudata.com/STC8F-datasheet/STC-TOOL.pdf
从零开始的嵌入式Linux生活(一) 背景介绍
到这里似乎一个嵌入式系统的基本流程就已经跑通了,到这里,其实就是叫做bring up OK了,以后你会听到很多次bring up这个术语。

后续的工作都在bring up的基础之上修修补补, 可能过一会儿发现射频部分信号又不好了,要配合硬件工程师调试一下; 可能再过一会儿,产品经理又提了个需求,要调节音量的大小; 甚至再过一年,公司要新开发一个收音机2.0。

越来越过分 - RTOS系统

果然过了一年,公司要新开发一个收音机2.0。产品经理越来越过分,要求我们的收音机要能够做到:

  1. 有红黄绿3个指示灯:
    a. 红灯是电源灯,每1秒闪烁一次提示有电
    b. 黄灯是警告灯,电池电压小于4V时开始每0.7秒闪烁一次
    c. 绿灯是正常运行灯,只要程序在运行,就每0.3秒闪烁一次

  2. 增加一个声音分贝传感器,每10秒采集一次周边环境声音,如果环境声音大于50分贝,则认为此时播放了声音用户也听不见,此时关闭扬声器。

这么多需求,一个while循环写不下了啊。

有需求就会有解决方案,此时小型操作系统 RTOS 出现了,其为单个CPU提供了多线程的能力(其原理是分时复用)还挺有意思,感兴趣的读者欢迎下来自行了解。 我们就可以用一个线程闪烁红灯,再用另外一个线程闪烁黄灯…程序设计又变得简单清晰了。

融资成功 - 嵌入式Linux系统

咱们的收音机2.0越卖越好了,公司也从原来的3个人,增长到了30个人。 咱们老板现在融了点资金,不差钱了,想要做个高级、智能、物联网收音机, 不考虑成本,只考虑功能高大上。 于是提出了以下几个要求::

  • 要能够接屏幕,最好还是1080P的屏幕,上面可以看电视节目。
  • 能够通过手机APP进行控制,使用HTTP网络协议。
  • 当然也要接入网线,即以太网。
  • 用户能够插入U盘,播放自己U盘上的内容。

这几个要求一提出来,你就懵逼了,咋搞啊。 别急,我来一个一个分析一下:

  • 接1080P屏幕,有大量的图像运算,需要高性能的CPU或者内置GPU。
    • 关于UI界面可以用QT库来实现,虽然比较丑,但将就能用。
  • HTTP、以太网等网络协议,比较复杂,代码量大,只能考虑使用开源的库。
  • U盘涉及到USB协议,播放上面的内容更涉及到了USB 存储协议,也只能考虑使用开源的库。

综上考虑,RTOS系统中对以太网、USB协议的支持很少,有的也需要花至少1个月时间移植修改代码。

此时便可以考虑Linux系统,Linux是最大的开源操作系统之一,上述提到的所有各种协议,Linux都完美支持。 并且有很多的开发者大家一起使用、一起维护。

老板飘了 - 安卓系统

在你成功的做出了Linux系统的收音机之后,公司成功上市了。 你们的收音机也成了人手一个的热门产品。 这个时候老板开始飘了: 咱们公司的收音机不再是一个收音机,而是一个智能平台:

  • 现有的LinuxQT界面不好看,必须改了。
  • 用户购买了我们的收音机后,可以使用微信、bilibili等第三方APP。

这个时候就需要上安卓系统了。

















本文到这里就结束了,嵌入式开发的世界很广阔,没个3、5年学不完,精通更是得10年以上。 这有好有坏:好处是经常能看到35+ 40岁以上的嵌入式工程师,不会早早的失业; 坏处是经常能看到半夜10点还在查软件BUG,最后发现是硬件问题的苦逼嵌入式工程师。 但是总而言之,作为一名嵌入式工程师,当调试出一块板子、开发出一件产品、交付给用户时,那种成就感是无可比拟的。 预祝各位读者在嵌入式的路上披荆斩棘、创造辉煌。

欢迎阅读我的下一篇文档:
从零开始的嵌入式Linux生活(二)启动准备:开发板硬件平台、环境搭建文章来源地址https://www.toymoban.com/news/detail-407097.html

到了这里,关于从零开始的嵌入式Linux生活(一) 背景介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

    学习嵌入式 Linux,首先我们得知道什么是Linux,什么是嵌入式Linux,有一些基本概念就先得先了解。 基本的说明介绍完,我们第一篇先来了解一下 Linux 的文件结构。 本文就简单的说明一些必要的基本概念,以及介绍一下 Linux 的文件结构。但是呢,既然是自己写博文,除非专

    2024年04月13日
    浏览(45)
  • 实时嵌入式Linux设备基准测试快速入门1介绍

    工业4.0已经到来,生产线需要新技术来应对客户日益增长的新功能需求,使用配备嵌入式 Linux 的单板计算机来处理所需的许多功能是大势所趋。这样大多数工业控制系统都需要实时性能,开发人员不得不面对这样一个事实:Linux原本并不适用于实时环境。不过多年来很多人都

    2024年02月15日
    浏览(40)
  • 嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

    现在开始正式在开发板上进行开发,仍然看的是正点原子的资料 使用的是Cortex-A7 点击芯片名字打开介绍,主要参考的手册是: 以及数据手册: 对于一般的STM32来说,IO的表现形式为: 管教名为PA1,管脚的功能在倒数第二列 对于IMX6ULL,IO形式在参考手册里面,且没有上面的表

    2024年02月07日
    浏览(66)
  • Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等

    Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍 Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等 Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限 Linux嵌入式学习之Ubuntu入门(四)Makefile Linux嵌入式学习之Ubuntu入门(五

    2023年04月11日
    浏览(70)
  • 【ARM 嵌入式 编译系列 4 -- linux 编译属性 __read_mostly 介绍】

    请阅读 【ARM GCC 编译专栏导读】 上篇文章:【ARM 嵌入式 编译系列 3.3 – gcc 动态库与静态库的链接方法介绍】 下篇文章:【ARM 嵌入式 编译系列 4.1 – GCC 编译属性 likely与unlikely 学习】 __read_mostly 是一个在Linux内核编程中用到的宏定义,这是一个gcc编译器的属性,用于告诉编

    2024年02月13日
    浏览(57)
  • 嵌入式一开始要怎么学?

    今日话题,嵌入式一开始要怎么学?废话不多说,我认为学习嵌入式编程无需观看视频,拥有好的文档比视频更有帮助。掌握一门编程语言是学好嵌入式的关键。现今有许多计算机编程语言可供选择,比如C语言和C++等。如果你刚刚入门,我建议先学好C语言。学好C语言后,你

    2024年01月16日
    浏览(44)
  • 嵌入式一开始该怎么学?学习单片机

    学习单片机: 模电数电肯定必须的,玩单片机大概率这两门课都学过,学过微机原理更好。 直接看野火的文档,芯片手册,外设手册。 学单片机不要纠结于某个型号,我认为stm32就OK,主要是原理和感觉。 看 野火文档 的时候,可以做笔记(记忆力好的人可以忽略),各种手

    2024年02月14日
    浏览(57)
  • 详解从0开始的嵌入式学习路线,学什么、怎么学?

    嵌入式是个大筐,什么都可以往里面装,电子、机械、计算机、自动化、测控、通信、物联网……很多很多专业都和嵌入式沾边,硬件、驱动、操作系统、网络、应用、算法……很多同学越学越迷糊,越学越感觉什么也不会。 首先要记住一句话,嵌入式学习奥义: 先观其广

    2024年02月02日
    浏览(63)
  • 从何着手OpenHarmony?从这里开始认识嵌入式开源鸿蒙操作系统

    首先,我们需要知道HarmonyOS与OpenHarmony是不同的概念,我们需要知道它们的区别:         HarmonyOS是华为独家开发的,但华为在2020、2021年分两次 将HarmonyOS的基础能力全部捐献给了开放原子开源基金会,形成了OpenHarmony开源项目 ,华为对开源鸿蒙没有控制权,当然华为仍将

    2024年02月04日
    浏览(61)
  • 【计算机三级嵌入式】考试自学笔记(三)——嵌入式系统硬件组成、嵌入式处理芯片以及存储器介绍

    常考知识点: 嵌入式最小硬件组成 嵌入式处理芯片 嵌入式系统的存储器 I/O接口及常用I/O设备 ARM内核典型嵌入式处理芯片 嵌入式系统外部通信接口 嵌入式最小硬件系统的组成如下: 嵌入式硬件系统≠嵌入式最小硬件系统 电源电路 :为整个嵌入式系统提供能量 时钟电路 :

    2023年04月12日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包