嵌入式Linux学习路线--1

元气小坏坏 提交于 2019-11-28 20:08:36

嵌入式Linux学习路线–1

本文翻译自 Michael Eager的文章
原文:https://www.embedded.com/electronics-blogs/open-mike/4420567/Learning-Linux-for-embedded-systems
译者:forland


作者简介:Michael Eager是位于Palo Alto的Eager Consulting公司的首席顾问。在多种嵌入式架构的编译、调试、仿真方面,有四十年的开发经验,客户包括重要的半导体厂家和系统开发公司。ISO C++ 标准委员会的成员,多个架构的ABI委员会成员,DWARF标准协议(一种广泛应用的debug标准)委员会主席。经常活跃于开源和Linux社区。


  最近总是被问起,具有8位和32位单片机如PIC、PowerPC嵌入式编程经验而没有Linux经验的人,如何学习嵌入式Linux。对于这些具有嵌入式编程经验的人,我的建议是:把嵌入式Linux分成两部分去看,分别是嵌入式部分和Linux部分。首先我们先来看Linux部分。

Linux部分
  嵌入式操作系统种类繁多,Linux就是其中之一。不管你使用Linux、Windows或者Mac进行嵌入式开发,你都要学习如何在目标系统上编程。就这方面讲,使用Linux还是VXworks,WindowCE,或者其他嵌入式系统,没有什么区别。因为你都要从学系统设计思想,如何配置系统,如何使用API开始学习。

  但是学习Linux编程还是比其他嵌入式系统容易的多,因为介绍Linux的书籍和文档众多,同时介绍Unix的书籍和文档也可以用于学Linux。Linux线上资源也十分丰富,相比而言其他嵌入式系统则支持较少,或者仅仅是厂商官方支持。Linux是开源系统,学习者可以通过阅读源代码获得对系统运行机制的精确理解,这是那些以二进制程序发布的OS不可能做到的。(我并不建议通过阅读源代码来学习Linxu编程,这就像是通过学习汽车运动原理去学习驾驶一样,不靠谱)

  Linux区别于其他嵌入式OS的最重要的因素是,不论是嵌入式系统还是桌面系统或者大型服务器系统,都共用一个内核。这一点满足学习者通过桌面环境就可以灵活学习大部分的嵌入式编程,而不必通过,使用复杂接口连接目标板,下载程序再运行程序这种复杂操作进行编程。因为桌面Linux和嵌入式Linux的基本概念和大部分API是一样的。

安装Linux
  你可以把Linux安装到你的电脑里,以替代Windows或者Mac OS,但是这样一来你就要花大量时间去学习如何设置Email,学习新的工具,学习新的桌面接口等等。简单点的办法是,你可以安装双系统,这样当你需要使用Email等等,你可以通过关闭Linux,然后开启另一个系统,这样浪费时间的做法让人十分尴尬。然而,把学习和工作放到一个系统中往往是不可行的。IT公司一般只支持广泛使用的系统,而不是你选择的系统。

  还有一个简单的办法就是在现有系统里创建一个虚拟机,Windows下可以使用VMware或者VirtualBox,Mac下可以使用Parallels或者VMware。当然使用VMware具有更高的灵活性。这样一来你就可以安装一个Linux发行版比如Ubuntu或者Fedora,并且通过它去熟悉Linux的基本概念,学习命令行Shell,学习如何编写并运行程序。你可以配置内核或者下载驱动,而不必担心破坏桌面系统。你也可以编译整个内核和应用环境,就像通过交叉编译在嵌入式目标板上做的那样。

  如果在VM上运行的Linux崩溃了,你只需要简单的重启VM,并不会影响到桌面系统里浏览网页,发送Email,这些操作。

  VM具有snapshot功能,可以设置恢复点,如果发生错误,可以回滚到错误发生之前。这个snapshot功能比挽救崩溃的桌面系统或者唤醒一个无响应的目标板容易的多。

  虚拟机Linux并不是一个嵌入式系统的完美方案,VM模拟桌面系统的硬件,但是有一系列的限制并不与目标板完全匹配。但是我们的目的不是要一个真实的目标环境,而是通过虚拟环境学习Linux的基本概念和简单编程。

译者的话:虚拟机这种操作对初学者而言还是有一定的好处,如果想要深入学习,还是要直接上手Linux才好,使用一台Linux电脑的过程远远比虚拟机复杂的多,但也更能深入理解Linux。一旦上手,你会被Linux迷住。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!