嵌入式 Linux 系统,就至关于一套完整的 PC 软件系统。
不少人喜欢从系统启动流程开始学习:先学习裸机,裸机集合起来就是 u-boot,再学习内核移植、驱动开发,接下来学习根文件系统,最后学习 APP 开发。web
学习裸机须要 二、3 个月,学习 u-boot 也须要 二、3 个月,结果工做中 u-boot 基本不用改,而且 u-boot比驱动开发还难!编程
按这套流程下来,学了后面忘了前面,最惨的是:不能快速上手工做,消耗学习热情!多线程
入门讲究的是快速,入门以后再慢慢深刻框架
特别是对于急着找工做的学生,对于业余时间挑灯夜读的在职工程师,必定要快!异步
按学习者的水平,新教程分为 2 部分:快速入门(APP 基础、驱动基础、外加一个综合项目)、提高(更 多项目、驱动大全、各种专题)。
在文档中,它们又被分为若干篇,好比:svg
《第 4 篇 嵌入式 Linux 应用开发基础知识》
《第 5 篇 嵌入式 Linux 驱动开发基础知识》
《第 6 篇 实战项目》
《第 7 篇 驱动大全》
《第 8 篇 调试技术》
《第 9 篇 专题》工具
下图是一个形象化的概述:
学习
以项目为导向,在作项目的过程当中缺啥补啥。.net
这能够学以至用,避免在漫长的学习过程当中失去方向。线程
在 APP 基础、驱动基础的课程中,会先讲解一些必须的知识:不管你之后是作 APP 开发、驱动开发,都必须掌握的知识。
而后就讲解一个项目,把 APP 基础、驱动基础这 2 部分知识活用起来。
好比以 LED、按键为例:
① 先讲 LED、按键的驱动,怎么编写 APP 操做 LED、按键;
② 再讲按键中断,深刻理解 Linux 系统机制:休眠-唤醒、进程-线程、poll、异步通知;
③ 接着讲 APP 怎么进行多线程编程、进程通讯。
④ 最后讲项目时,就会涉及 LCD 编程、电容屏编程、进程通讯、多线程。
经过这样的“交叉讲解”,能够更快速地掌握整个体系,快速造成整体观,快速具有工做能力。
能够学习更多的、更贴合本身须要的项目,也能够深刻钻研驱动程序,或是研究其余专题。
会讲解这样的项目(不限于,请多提建议):
定位为:快速掌握项目开发经验,丰满简历。
涉及的每一部分都会讲,好比若是涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;若是要深刻,能够看后面的蓝牙专题。
包括基础驱动、高级驱动。
这些驱动都是独立成章,深刻讲解。
虽然基础驱动弱化了,可是做为 Linux 系统开发人员,这是必备技能,而且从驱动去理解内核是一个好方法。
在讲解这些驱动时,会把驱动的运行环境,好比内核调度,进程线程等概念也讲出来,这样就能够搭建一个知识体系。
没有这些知识体系的话,对驱动的理解就太肤浅了,等于在 Linux 框架下写裸机,一叶障目,不见泰山。
定位为:工具、字典,用到再学习。
想深刻学习的任何内容,均可独立为专题。
好比 U-boot 专题、内核内存管理专题、systemtap 调试专题。
也许会有人说,是否是由于大家还没录 IMX6ULL 的裸机视频,因此建议咱们不从裸机开始学习?固然不是,裸机操做如此简单,咱们的裸机文档已经有 600 多页,近 30 多个实验,比任何同行的实验都多。
韦东山从 2008 年起开始作嵌入式 Linux 培训(2011 年录视频),引入了不少新的风格:
① 第一个使用画图板,现场画图讲解原理,现场写代码,现场调试;
② 设计了一套全新的体系:在 Linux 下开发裸板、U-Boot、再学习驱动、再到项目;
咱们近 10 年来只作视频,而且只作 Linux,视频质量咱们说第二,应该没人敢说第一。
可是,从 2019 年起,咱们决定所有推倒重来,录制全新视频了。
为何?
有一个学员的话“震惊”了咱们:U-Boot 的学习比驱动还难,可是在工做中 U-Boot 会用就行基本不用改。
就效率来讲,再从裸板、U-Boot、驱动再到项目,这条学习路线太耗时了。学完裸机再到驱动时,可能已经忘了裸机的知识。
若是你符合这些条件之一,那么能够从裸机开始学习:
① 没有硬件基础,好比看不懂原理图,想纯粹地掌握硬件编程;
② 没有单片机开发经验,想顺便掌握单片机的开发技能;
学习 STM32 还不如在 Linux 下学习裸机,Windows 工具封装了太多细节,在 Linux 下学习能够学到更多,而且彻底覆盖 STM32 单片机的知识。
③ 有单片机基础,可是想深刻内部原理的人(MDK 等图形工具屏蔽了太多细节);
④ 想深刻研究 U-Boot,可是 U-Boot 又太复杂,因此先把各个部件按裸机来研究一下;
⑤ 想深刻了解主芯片的人:
在平常开发过程当中,咱们使用 Linux 驱动来操做硬件,不少时候不涉及寄存器。若是你须要微调驱动、解决 BUG,那就须要看芯片手册。在咱们的裸机文档里,有深刻的讲解。
注意:
目前咱们只编写了 100ASK_IMX6ULL 的裸机文档,并非每一个人都要学习裸机,因此咱们把它放到文档最后。
芯片在不断发展,你用 A 芯片学习了,工做中极可能用另外一款 B 芯片。讲课时,咱们必须把通用的知识
归纳出来。若是只用一款芯片来说课,我没法清晰地归纳出通用知识。
好比 IMX6ULL 芯片中没有 GPU,使用它能够讲 Framebuffer 驱动程序。
可是用 STM32MP157 时,就能够讲 GPU 的知识,也能够讲 Framebuffer emulation。
2005 年左右,嵌入式 Linux 在全世界、在中国刚刚兴起。那时候芯片厂家 Linux 开发包不完善,从bootloader 到内核,再到设备驱动都不完善。
因此工做中须要掌握全部知识:U-boot、Linux 内核、Linux 设备驱动、应用、项目。
可是 U-boot 那么难,那就先把它拆解开学习各个裸机程序吧。因此之前的课程就会分为这几部分:裸机、U-boot、Linux 内核、Linux 设备驱动、应用、项目。
如今 15 年过去了,嵌入式 Linux 世界发生了翻天覆地的变化:
芯片厂家都会提供完整的 U-boot、Linux 内核、芯片上硬件资源的驱动。
方案厂家会作一些定制,好比加上某个 WIFI 模块,会添加这个 WIFI 模块的驱动。
你可使用厂家的原始方案,或是使用/借鉴方案商的方案,作出一个“能用”的产品。
基础的驱动,好比 GPIO、UART、SPI、I2C、LCD、MMC 等,有了太多的书籍、视频、示例代码,修修改改老是能够用的。
不少所谓的驱动工程师,实际上就是“调参工程师”。
咱们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的做用。
高级的驱动,好比 USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。
体系很是复杂,不多有人能讲清楚,不少时候只是一笔带过。
配置一下应用层工具就了事,能用就成。
这些高级驱动,工做中须要专门的人来负责,很是专业。
他们是某一块的专家,好比摄像头专家、音频专家。
你到一个公司,目的是把产品作出来,会涉及 APP 到内核到驱动全流程。
中小公司玩不起华为中兴的配置,须要的是全面手。
大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。
因此,若是你不是立志成为某方面的专家,那就作一个全栈工程师吧。
因此,能够先掌握必备的 APP 基础、驱动基础,而后立刻开始学习项目开发。
之后想深刻时,再去学习相关的专题。
QQ交流群(一群):869222007