大二下学期时,因为一个叫电脑鼠(MicroMouse)的竞赛开始接触32位的单片机。电脑鼠是一个轮式机器人,主要就是用单片机读取很多传感器的信息,然后利用这些信息通过单片机去控制两个电机运转,最终让这个轮式机器人稳定的行走,我在这个竞赛中负责的是软件编程的工作。这个轮式机器人的主控芯片用的是Cortex-M3核心的STM32系列芯片,因此我刚开始起步的时候到网上买了相同主控芯片的开发板用于学习单片机编程。想在看来,对于自动化的学生来说,用这些竞赛来入门是个相当不错的选择,可以很快的对单片机相关的软件代码结构和硬件电路有一些了解,通过这些竞赛也能知道平时学的一些课程都有什么用处。
在大三下学期,好多同学都在找暑期实习,我抱着试试看的态度就想去学校的实习招聘会试一试,希望能找到一个专业相关的实习。然而找工作的时候发现会个单片机根本不算什么,现在STM32系列芯片相当的火,很多人做个国创,买个开发板,简单的用了下单片机的GPIO输入输出,找工作的时候也说自己会单片机。在找全职工作的时候也是,会个单片机只能算作温饱技能。我就开始觉得,仅仅做到熟练使用单片机的程度,远远不够找到一个好工作。抱着这样的心态,我决定开始往Linux和Android方向发展。
我决定学Linux系统编程作为起步,然后进一步学习Linux的驱动编程,最后研究Linux的系统移植,简单了解Android的相关图形界面,简单了解Linux服务器相关知识。按照这样的顺序开始学习。一开始,我开始在网上了解一些关于Linux的知识,到图书馆接一些嵌入式Linux相关的书了解了解,后来觉得这样学速度太慢,还是要像学单片机那样,买一个开发板入手学习才会比较快。后来我在知乎上看到了这篇文章,如何选择单片机和Android-LInux-ARM开发板?决定三星Exnoys4412这个主控芯片的开发板,到淘宝上找到讯为TOPEET的iTOP4412开发板资料最全,所以就入手了这款开发板。
我没有选择树莓派、Beaglebone Black这样的开发板来学习嵌入式,因为我觉得这些板子都是国外的,资料不够齐全,软硬件的开源程度都比不上这个开发板。因为我学习嵌入式的打算从底层学起,所以在比对了很久之后还是觉得入手讯为iTOP4412开发板。
我是四月底购买的这款开发板,五月初开始研究这款开发板。比起STM32单片机,搭建Linux开发环境要麻烦许多,光所需的软件和镜像我就下载了好几天。
VMware Workstation是一个用于在Windows平台运行各种虚拟器的软件,所以要先安装VMware Workstation,才能在VMware Workstation中安装Linux虚拟机。
Ubuntu是一个基于Linux的OS,安装Ubuntu虚拟机有两个作用:1、熟悉Linux系统中的相关操作指令。2、利用Ubuntu虚拟机来编辑代码然后将编译完成的代码安装到开发板上运行。
要安装虚拟机,首先要下载Ubuntu系统的镜像文件。在安装了VMwareWorkstation之后,在文件->新建虚拟机目录下,可以通过向导安装虚拟机。安装虚拟机的过程中,有一些虚拟机内存、硬盘、处理器、网络等相关信息的设置。
然后运行Ubuntu虚拟机,进入Ubuntu系统。
Ubuntu虚拟机中,主要用到的功能就是CTRL+ALT+T打开的Linux命令行模式。通过命令行模式,熟悉sudo passwd,su root,clear,ifconfig,ls,mkdir,rm,pwd,cd,tar,cp,man等shell命令。
在命令行中输入apt-get install vim安装Vim编辑器,通过vim+文件名新建或打开文件,Vim编辑器有三种模式:指令模式、底行模式和输入模式。打开文件之后默认进入指令模式;指令模式下shift+:进入底行模式,底行模式下输入wq或q退出文件,按esc退回指令模式;指令模式下,按Insert或i进入输入模式,输入模式下可以编辑文件,然后按esc切换到指令模式。
通过SSH软件,可以实现主机与虚拟机之间的通信,主要作用是:在后面的系统编程中,主要在Windows环境下编辑代码,然后通过SSH拷贝到Ubuntu虚拟机中编译,编译之后,在通过SSH把编译好的文件拷贝到Windows环境中。
Source Insight主要用于阅读Linux源码。安装完毕之后,在Source Insight中新建工程,建立Linux代码工程,阅读Linux源码。前期入门一般没必要阅读源码。
ADB驱动安装在Windows平台上,用于电脑和开发板之间通讯,可以通过ADB驱动,在Windows的CMD命令行中控制开发板,在开发板上安装apk,通过ADB驱动烧写程序到开发板上。电脑设备管理器上面的Android CompositeADB Interface证明ADB驱动已经安装。
常见的ADB命令有 adb decvice,adb service,adb shell 等命令。
超级串口用于电脑和开发板相通讯,通过超级串口终端,电脑可以通过串口线,在命令行模式下控制开发板,开发板也通过串口打印一些必要的信息。
初步的Linux开发环境的搭建就到这里。