野⽕i.MXLinux开发实战指南
1. 为什么学习Linux开发
本章主要从Linux的应⽤场景,程序员的技能学习,职业⽅向来 讨论为什么需要学习Linux开发并对如何学好Linux开发提出了⼀些建议。
1.1. Linux的应⽤场景
对于⼀般⽤户来说,因为经常接触PC、⼿机,可能会知道Windows、iOS、Andorid系统,但对Linux系统却知之甚少,这是因为 Linux的应⽤场景主要是服务器和嵌⼊式设备,在直⾯消费者的桌⾯系统领域并不占据优势。不过,从某种程度来说,Android系统也属于Linux的⼀种,毕竟它是基于Linux内核进⾏开发的,只是由于它规避了Linux的开源协议,不被Linux社区接纳。
Linux的应⽤场景主要是由其特点决定的,其特点主要有:开源、安全、稳定、⽹络功能强⼤、⽀持多种不同平台的处理器。
1.1.1. 服务器
服务器是指提供计算服务的设备,如⽹页服务器、⽂件 服务器、数据库服务器、邮件服务器、域名服务
器和代理服务 器等。可以说我们在互联⽹上的所有操作,背后都是在跟服务 器打交道。例如我们访问⽹页、⽹上购物、聊天、运⾏⽹络 游戏、观看在线视频等⼀切需要联⽹才能正常进⾏的应⽤,其背 后都由服务器作为⽀撑。
服务器的实体各种各样,⼩到单板电脑,⼤⾄计算机集,实际上你 正在使⽤的个⼈电脑,安装上对应的服务软件,通过⽹络给其它计算机提 供资源,它也就变⾝成了⼀个服务器。服务器的本质也是计算机,只是通 常来说它们没有显⽰器,不需要⿏标键盘。
在商业应⽤中,在服务器运⾏的操作系统主要有Linux、Windows和UNIX,其中 由于Linux系统开源、使⽤成本低⽽且安全稳定,所以Linux在服务器使⽤的系统中占据了绝⼤多数。
感兴趣的读者可以访问Netcraft ⽹站 ,可以查询 到其它⽹站是运⾏在什么操作系统上的,具体见下图。
特别地,超级计算机也是特殊的服务器,⽬前全球TOP500的计算机运⾏的操作系统都是Linux。
1.1.
2. 嵌⼊式设备
嵌⼊式设备是Linux系统的另⼀个主战场,这也是本书主 要讲解的Linux应⽤⽅向。嵌⼊式设备的定义⽐较模糊,不过基本上把PC、集服务器、超级计算机排除后,具有处理器(包括微控制器等)的,按设定程序运⾏ 的电⼦设备⼤都可以归类为嵌⼊式设备。
嵌⼊式设备种类⾮常丰富,包括⽇常⽣活中的⼿机、智能⼿表、各 种家电、玩具、路由器、车载电⼦系统,⼯业应⽤中包括电⼒系统监控、环境 监测、⼯业机器⼈、智能快递柜、⼿持POS机、地铁闸机系统、停车场管理、卫星、⽉球车等。
从嵌⼊式设备的种类就可以知道它们的应⽤场景是碎⽚化的,它们内 部的电⼦系统⼀般会针对设备的
功能做专⽤的控制。部分嵌⼊式设备不使⽤ 操作系统;部分使⽤freeRTOS等实时操作系统;⽽另⼀些⾼性能的嵌⼊式设备 使⽤Linux系统。使⽤Linux系统的的嵌⼊式设备,往往是看中Linux系统的如下特性:
嵌⼊式设备使⽤的处理器多种多样,⽽Linux系统⽀持运⾏在x86、ARM、PowerPC、MIPS等不同平台的处理器上。
由于代码开源,可裁剪,⾮常适合针对特定场景进⾏定制,裁剪后的Linux内核加上⽂件系统可以做到50MB以内,这能够节省硬件资源和成本。
对各种编程语⾔、类库、编程框架⽀持良好,如python、java、C++等编程语⾔,Opencv、TensorFlow等类库和框架,使⽤freeRTOS等实时操作系统往往很难做到直接⽀持。
应⽤程序丰富,如⾳乐播放器、数据库等现成的应⽤可以直接使⽤。
⽹络功能强⼤,使得编写需要联⽹的应⽤程序⾮常⽅便。
1.2. Linux职业⽅向
根据Linux的应⽤场景,社会对Linux技术⼈员主要分为服务器运维、应⽤软件开发及设备驱动开发⽅向。
1.2.1. 服务器运维
服务器运维⼯程师主要是负责搭建起运⾏环境,让服务器应⽤程序更⾼效、稳定、安全地运⾏在服务器上。如安装操作系统、部署代码运⾏环境、修复漏洞、监控服务器压⼒、分析⽇志等。
1.2.2. 应⽤软件开发
Linux应⽤软件开发就是开发基于Linux系统的应⽤程序。具体⽽⾔,应⽤程序也分服务器、桌⾯和嵌⼊式⽅向,服务器⽅向如⽹站后台、数据库系统等。服务器⽅向的应⽤程序开发通常跟操作系统的关系并不是很⼤;桌⾯开发就如同开发Windows系统下的QQ、WPS、串⼝调试助⼿等应⽤程序;嵌⼊式⽅向的软件⽅向主 要是针对设备应⽤场景做针对性的开发,如扫地机器⼈、路由器的控制程序等。
1.2.3. 设备驱动开发
设备驱动,它的本质也是软件程序,不过它介于硬件与操作系统之间的层级,是硬件和操作系统之间的桥梁,具体见下图。
对于不使⽤操作系统或使⽤⼩型实时操作系统(如freeRTOS)的设备来说,与硬件相关的驱动 程序与应⽤程序往往混合在⼀起,因此常常不会对驱动与应⽤进⾏严格的区分,这也导 致更换硬件平台时,应⽤程序移植困难。
使⽤了Linux系统的设备,硬件会由操作系统接管。Linux系统的⼀个重要设计哲 学是⼀切皆⽂件。包括硬件设备,对于系统来说也是⼀个⽂件,所以系统向上层应⽤程 序提供open、write、read、close等统⼀的⽂件操作接⼝,应⽤程序可以利⽤这些接⼝对 设备⽂件进⾏访问,从⽽实现对硬件设备的初始化、写 ⼊、读取以及关闭等操作。
当系统接收到应⽤程序的这些访问请求时,它会向下查询对应设备具体的操作函数,然后调 ⽤相应的函数处理请求,⽽这些针对不同设备具体的操作函数就是设备驱动程序。因此,设备驱 动就是这样⼀种把硬件与操作系统连接在⼀起的程序,Linux系统会提供统⼀的格式,设备驱动开 发⼯程师根据具体的设备按照系统格式要求实现相应 的设备操作函数。
本书主要针对嵌⼊式设备驱动开发的讲解,对于志在应⽤软件开发的⼯程师,也可通过本书的 内容掌握Linux底层的相关知识,这对应⽤开发也是⼤有裨益。
1.3. 程序员的宝库
Linux可谓是公开的宝库,它是开源世界的代表作,它的内核源代码是完全公开的,只要你 愿意沉浸其中,必定收获丰富。通过学习Linux 开发,会熟悉命令⾏的使⽤;可以了解到操作 系统原理;学习常⽤数据结构,如链表、红⿊树、哈希表等;了解开源社区的⽂化,学习各⾃优 秀的代码实现,如常⽤的C语⾔库libc等;熟悉 各种常⽤开发⼯具,如Git版本管理系统、GCC编译器。
并不是说从事传统MCU开发或Windows开发时不能学习到这些,只是这些内容往往被包装起 来,要么直接⽆法追根溯源,要么隐藏起来了。但在进⾏Linux开发时,相关的内容是直 接暴露给⽤户的,只要钻得够深,永远有惊喜等待着我们。例如,使⽤Keil或IAR开发时, 我们不知道调⽤C语⾔库的printf函数后, 具体究竟执⾏了什么;点击编译按钮时,集成的⼯具⼜为我们处理了⼀些什么内容,这些我们都很难了解到。
对于长期从事MCU开发的程序员来说,学习Linux开发会让⼈感叹,原来代码的世界⼀直在这⾥等着我!
1.4. 推荐书单
《只是为了好玩》/《Just For Fun》,Linus的⾃传,通过它可了解Linux的发展史以及了解Linus其⼈的⽣活态度。
《奔跑吧Linux内核》,分上下两册,建议初学者仅学习上册。
《鸟哥的Linux私房菜》,该书主要针对Linux服务器运维⼈员,主要学习上册,了解Linux的⽇常应⽤。
野⽕ ,快速上⼿MCU开发并巩固C语⾔相关的知识。
野⽕ ,i.MX 6ULL的外设与i.MX RT系列基本相同,可以通过它学习i.MX系列芯⽚的裸机开发进⾏过渡。
野⽕ 和 针对嵌⼊式实时操作系统讲解,通过它们可掌握操作系统相关的概念。
2. 如何学习linux开发
2.1. 嵌⼊式linux学习路线
我们⽴⾜于树莓派的开发⽅式,借鉴其⼀系列先进的设计理念和软件架构,⼒求为电⼦爱好者提供强⼤、好⽤的DIY平台, ⽅便实现各种天马⾏空的想法。与此同时,所有的软件和芯⽚⼿册将全部开源,为有志于从事嵌⼊式linux⾏业者后续深⼊学习各种软件架构和驱动程序扫清障碍。
2.1.1. 适合哪些⽤户体
嵌⼊式linux学习者⼤体可以分为两类,⼀类是进阶⽤户,主要指已经有⼤量mcu⼯作经验的开发者, 他们希望进阶到更有难度,薪资更⾼的mpu开发中去。另⼀类则是学⽣⽤户,主要是刚开始接触嵌⼊式开发的⼤学⽣体。
对于前者⽽⾔,出于⼯作的压⼒和升职加薪的需求,通常会⽐较关注课程学习的深度,关注学习完成后,能不能顺利地利⽤学习的知识来跳槽升职加薪。 但是对于后者,他们没有⾏业经验,没有⼯作压⼒,更加注重的是课程的有趣性,功能性,想知道通过这个课程我有能⼒做出什么东西来。
本教程兼顾两种⽤户的需求,⾸先,最⼤程度上降低⼊门门槛,这主要指两个⽅⾯,⼀⽅⾯简化开发环境的搭建,尽可能避免各种各样的软件版本问题, 以及各种电脑系统的兼容性问题。另⼀⽅⾯是先学习嵌⼊式linux的⾼频技能,所谓⾼频技能,就是指在⼤部分实际开发⼯作中都较为频繁地使⽤的技能。 其次,是尝试使⽤这些⾼频技能去开发⼀些炫酷、⾃⼰感兴趣的产品,进⼀步去了解嵌⼊式linux各式各样的产业,体验嵌⼊式linux在⼈类实际⽣活中的影响。 最后,在对嵌⼊式linux有整体了解后,根据⾃⼰的个⼈兴趣和实际⼯作需求,选择嵌⼊式linux的某⼀个⽅⾯深⼊研究。
通常,国内传统的嵌⼊式linux学习路线⼤体为:
开发网站需要什么软件1. linux基本操作+c语⾔进阶
2. ARM裸机开发
3. linux系统移植(u-boot移植、kernel移植、构建根⽂件系统)
4. linux驱动开发
5. linux应⽤编程
6. 项⽬实战
按照上⾯的学习路线⾛下来,⼀⽅⾯,需要耗费巨⼤的学习精⼒,哪怕全天学习,⼀般也要4个⽉以上的时间。这对于还没有确定职业⽅向的学⽣⽤户, 想玩嵌⼊式linux的门槛太⾼。
另⼀⽅⾯,不贴合进阶⽤户实际⼯作需求,因为⼤部分课程在设计的时候充斥了许多低频技能,这些技能在⼤部分嵌⼊式linux⼯作中很少⽤上(⽐如ARM裸机开发)。 ⽽当⼯作中真正遇到系统性能问题的时候,往往⼜没有能⼒去实际解决问题,因为你所学习的linux系统移植,不过是⽤芯⽚公司团队做好的系统镜像, ⾃⼰复制粘贴⼀些⽂件,修改⼀些配置,然后重新编译安装到系统⾥⾯去,真正⾼阶的技能其实没学到多少。
2.1.2. 为什么选择树莓派教育理念
树莓派(Raspberry Pi)是尺⼨仅有信⽤卡⼤⼩的⼀个⼩型电脑,您可以将树莓派连接电视、显⽰器
、键盘⿏标等设备使⽤, 它的设计⽬标是⽤较为低廉的价格和⼤量开源软件,为青少年提供⼀个计算机教育平台,⽤于培养计算机程序设计的兴趣和能⼒。
现在树莓派已经拥有全球100万⽤户的作品展⽰社区,这意味着树莓派有海量的应⽤可以参考和模仿。 下⾯是它们的⼀些DIY案例:
考虑到开发者技术⽔平参差不齐,树莓派做了很多软件架构上的优化和开发了很多⽅便好⽤⼯具。 这是树莓派⼴受好评和便于在社区推⼴的⼀⼤原因,⾮常值得我们去借鉴学习。
但是树莓派也有它的不⾜之处,那就是它的底层的bootloader和核⼼数据⼿册是闭源的,普通⽤户⽆法获取。 所以树莓派往往更被学⽣体或者其他⼀些创客体所青睐,⽽不太适合嵌⼊式linux从业者的进阶学习,闭源的部分导致它在⼯程项⽬中使⽤也带来诸多不便。
3. i.MX系列芯⽚简介
本章简要介绍⼀下为什么我们采⽤i.MX系列应⽤处理器进⾏讲解,使⽤该系列芯⽚学习Linux开发有什么优势。
3.1. i.MX 系列应⽤处理器
i.MX 应⽤处理器包括i.MX8、i.MX7、i.MX6及i.MX28系列,被⼴泛应⽤于⼯业控制、汽车电⼦领域,久经市场考验。⽽且它的产品线⾮常丰富,⽤户熟悉其中⼀款产品后就能⾮常⽅便地迁移⾄不同的平台。它们的前⾝是Freescale旗下的产品,⽬前属于NXP公司,所以在查阅资料和代码时, 在看到Freescale的⼀些标签时不要奇怪。NXP承诺对这些产品供货周期持续10年以上。学习应⽤处理器的驱动程序开发时,芯⽚原⼚的技术⽀持是⾮常重要的,NXP官⽅提供的资料包含uboot、Linux内核的Yocto定制⽰例⼯程,完善的裸机SDK软件库等,相⽐之下部分芯⽚⼚商甚⾄连寄存器⼿册都遮遮掩掩,个⼈ 难以获取,这⽆疑提⾼了学习的门槛。
所以应⽤领域⼴泛、产品供货稳定、官⽅⽀持的资料丰富,这是我们选择它们作为学习平台的原因。
其中i.MX6系列应⽤处理器包含基于Cortex的单核、双核和四核系列的的产品,其架构有,主要采⽤Cortex-A7,Cortex-A9作为内核,部分型号采⽤Cortex-A9+Cortex-M4的双核⼼⽅案。主频从528MHz~1.2GHz不等。该系列芯⽚主要应⽤在车载多媒体系统、数字标牌电⼦阅读 器、⼈机界⾯、物联⽹⽹关、智能⼯业控制系统等轻量、低功耗的领域,在物联⽹推进的⼤潮下,该芯⽚定有⼀番作为。
本书讲解主要采⽤的是i.MX6ULL系列处理器,它包含⼀个Cortex-A7内核,主频有528MHz、792MHz和900Mhz,具体芯⽚的特性可参考图 i.MX6的命名规则图说明进⾏区分。如型号为MCIMX6Y2CVM0
8AB的芯⽚,它属于i.MX6ULL系列,是主频为792MHz、芯⽚封装为BGA,尺⼨为14x14mm,焊盘间距为0.8pitch的⼯业级芯⽚。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论