卖东西的网站怎么建设,南昌seo方案,佛山网站优化质量好,网站制作沈阳文章目录前言本系列文章的主要思想#xff1a;本系列文章包括#xff1a;一、什么是嵌入式开发二.嵌入式开发 - 由便宜到贵三.嵌入式开发的基本原理一个美好的假设#xff1a;再来一个美好的假设美好的假设被打破了 - RTOS系统美好的假设又被打破了 - 嵌入式Linux系统老板飘…
文章目录前言本系列文章的主要思想本系列文章包括一、什么是嵌入式开发二.嵌入式开发 - 由便宜到贵三.嵌入式开发的基本原理一个美好的假设再来一个美好的假设美好的假设被打破了 - RTOS系统美好的假设又被打破了 - 嵌入式Linux系统老板飘了 - 安卓系统前言
近年来截至2023年3月随着各种各样的因素实体经济、米国制裁、芯片热、智能汽车等 嵌入式软件开发Embedded Software越来越火热众多的芯片公司、应用方案公司、甚至是代理商公司如雨后春笋般成立 各大招聘网站上“嵌入式开发”“驱动开发”等岗位也成为了热门高薪急招岗位。
作者我本人毕业于19年在某大厂从事了约大半年的互联网前端开发后转向了嵌入式开发的领域。 从51单片机开始、到32位MCU、再到嵌入式Linux、嵌入式安卓一步一步的坚持下来了。 这其中离不开自己的努力但更多的还是受益于互联网的分享精神。 所以我打算写这个关于嵌入式Linux的全方位指南一方面是对自己的总结提升另一方面也是回馈感谢互联网上各位网友的分享。
本系列文章的主要思想
尽量广泛的介绍嵌入式开发的各个部分力求涉及面广泛但不一定很深入。 各位读者对某个部分感兴趣的话再自行了解。
本系列文章包括
一背景介绍主要介绍什么是嵌入式开发其中嵌入式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”的字样那么这个时候有好奇的同学就会问了什么是嵌入式Linux除了嵌入式Linux难道还有嵌入式Windows 答案是Yes其实在嵌入式开发的领域中是这样的
正如上文所说嵌入式设备价格、功耗等各方面的考虑其系统组成可能极其简单。 以最简单的51单片机为例
如上述图片所示这个嵌入式系统的组成就是一个单片机图中方形的那个芯片、一个晶振、几个电阻其中可能只执行一个while(1)无限循环。 而这个单片机的内部组成也十分简单如下图所示 不要看这个图片花里胡哨的这可是我国的核心科技STC51单片机的官网http://www.stcmcudata.com。无数的嵌入式人才、芯片人才都是从STC一步一步培养出来的。 如上图绿框所示这个单片机内置了大容量的”12KB”RAM内存“128KB”ROM类似于PC机的磁盘。 看到这里相信你已经有一些体会了嵌入式系统真的节约啊~。 在这么有限的资源情况下并不能将Linux、Windows这样的操作系统放上去运行一个Windows安装包都得4个G这哪够啊。
因此在嵌入式系统中根据系统资源的由少到多其并不一定会运行windows系统而是可能会运行一些其他的系统通常所用的操作系统如下
资源数量操作系统备注代表芯片极少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可以用来选台。 像这样 其设计思路如下图所示 主要有5个部分
CPU用来执行代码检测开关有无被按下如果有则立即控制对应的射频电路。电源5V电池供电开关五个按键开关按下后对应的电路会被接通CPU能够检测到射频电路用于接收声音信号喇叭播放射频电路接收的声音
再来一个美好的假设
假设除了1中的CPU执行的代码以外2345都有硬件工程师帮我们准备好了那么接下来我们只需要参考CPU厂家提供的方法写代码即可。
假设我们使用的是上文所说的神器STC单片机
型号STC32G官网http://www.stcmcudata.com/芯片手册http://www.stcmcudata.com/STC8F-DATASHEET/STC32G.pdf长相
接下来我们开始写程序… 咦 怎么芯片手册中都帮我们把程序写好了STC果然是神器啊 哈哈。 接下来我们把程序编译、烧录下载到芯片里面去这部分STC也有非常详细的说明
详情请见 http://www.stcmcudata.com/STC8F-datasheet/STC-TOOL.pdf 到这里似乎一个嵌入式系统的基本流程就已经跑通了到这里其实就是叫做bring up OK了以后你会听到很多次bring up这个术语。
后续的工作都在bring up的基础之上修修补补 可能过一会儿发现射频部分信号又不好了要配合硬件工程师调试一下 可能再过一会儿产品经理又提了个需求要调节音量的大小 甚至再过一年还是使用相同的芯片公司要新开发一个收音机2.0。
美好的假设被打破了 - RTOS系统
随着产品经理越来越过分要求我们的收音机要能够做到 有红黄绿3个指示灯 a. 红灯是电源灯每1秒闪烁一次提示有电 b. 黄灯是警告灯电池电压小于4V时开始每0.7秒闪烁一次 c. 绿灯是正常运行灯只要程序在运行就每0.3秒闪烁一次 增加一个声音分贝传感器每10秒采集一次周边环境声音如果环境声音大于50分贝则认为此时播放了声音用户也听不见此时关闭扬声器。
这么多需求一个while循环写不下了啊。 能写是能写但是写起来很蛋疼。 while循环每1毫秒执行一次然后判断到了1秒就闪烁红灯判断到了0.7秒就闪烁黄灯。 想想这程序都蛋疼啊。
有需求就会有解决方案此时小型操作系统 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生活二启动准备开发板硬件平台、环境搭建