准备工作
1 引言
本篇是嵌入式Linux系统移植开发学习和实战演练的开篇,俗话说,巧妇难为无米之炊,本篇主要介绍进行专栏学习的准备工作。Let’s go!
2 我们需要这些资源
2.1 硬件资源
2.1.1 BeagleBone Black开发板
本专栏的学习,主要依托于一款开源硬件平台——BeagleBone Black,官网链接,庐山真面如下:
BeagleBone 与 Arduino 和 Raspberry Pi可以说是目前应用最广泛的三大嵌入式开源平台。BeagleBone Black是BeagleBone系列的一个开发套件,基于TI公司的AM3358处理器,虽非TI官方开发制作,但TI对其支持力度极大。与Arduino相比,其资源丰富,与 Raspberry Pi相比,其硬件开源,但名气在国内相对于Arduino和Raspberry Pi较低。
使用BeagleBone Black开发板,常见的开发方式有两种
-
基于BeagleBone官方提供了完整的固件镜像,可以运行Debian、Angstrom、Ubuntn、Android等操作系统,然后在其上做应用开发
-
基于TI官方提供的SDK,其对BeagleBone系列开发板进行支持,进行应用开发和系统移植的二次开发
本系列采用后者,即TI官方的SDK,进行Linux系统移植开发的学习。
这里需要提一点的是:实际的工作中,为了降低开发风险和缩短开发周期,嵌入式Linux系统移植都不是从0开始,都是基于芯片厂商提供的SDK进行二次开发,针对公司自研板卡的硬件设计进行软硬件的适配。公司自研的板卡也会很大程度上参考芯片厂商的官方开发板,尤其是最小系统,除非有降本或者其它不得不更换外设硬件的考虑。另外,并不是说做二次开发就没有技术含量了,依然需要了解嵌入式Linux系统移植所涉及的方方面面知识,所以,加油吧!
2.1.2 USB转TTL转换器及其连接线
BeagleBone Black开发板的调试串口是TTL电平的,接口示意图如下所示:
需要一个USB转TTL的转换器及其连接线,按图示接法,连接PC和BeagleBone Black开发板,我选用的转换器如下所示,大家可以根据自己的情况选择,只要能满足USB转TTL即可。
安装对应的转换器驱动后,查看设备管理器出现对应的串口设备即可。
2.1.3 各种扩展板
BeagleBone Black开发板本身所带的外设资源已经比较丰富,包括USB口、以太网口、Mini HDMI接口,以及按键和LED。
另外,如果有其它的外设需求,可以利用引出的两排外扩端子接入其它各种外设。外扩端子的引脚分布如下所示:
BeagleBone官方提供了各种各样的扩展板,可以扣界在BeagleBone Black本体之上,用于扩展BeagleBone Black的功能,适应不同的使用场所。
当然,扩展板并不是必须具备的,如果不是有额外的外设需求,BeagleBone Black本体的资源已经足够了。如果不够,也可以使用杜邦线等连接外设,并不一定非得使用扩展板。我使用的扩展板是微雪电子制作的,购买于2016年(吃灰很久了,汗),目前已经不再生产。需要扩展板的读者,可以在淘宝搜索或者在BeagleBone官网购买,有能力的也可以自己制作。
接下来介绍一下我所使用的扩展板:
-
RS485&CAN总线扩展板,扩展485总线和CAN总线
-
Misc扩展板,扩展按键、LED、蜂鸣器、ADC、E2PROM和RTC
-
LCD屏扩展板,可以外接4.3寸、7寸LCD,只要是RGB接口和4线触摸屏,接口一致均可以
2.1.4 LCD触摸一体屏
LCD屏幕非必须,如果想学习LCD驱动和Linux下的图形化编程(Qt/LVGL等),可以备一块,我使用的LCD触摸屏如下所示,支持4线电阻触摸屏和800x480分辨率的RGB接口LCD。
2.2 软件资源
2.2.1 TI官方SDK
-
登录TI官网,按如下图所示,搜索am335x
-
在搜索结果中,点击PROCESSOR-SDK-AM335X 软件开发套件(SDK),如下所示
-
选择PROCESSOR-SDK-LINUX-AM335X,单击下载选项。
-
单机下载选项后,弹出的界面如下所示,列出了最新的SDK版本,这里我们选择查看全部版本,找一个比较旧的版本进行学习
-
历史版本列表中,选择02.00.00.00版本进行学习。这里你可能要问,为什么要选择旧版本进行学习呢?主要是因为,我第一次接触BeagleBone Black时大概在2016年,也是拿这个版本进行学习的,在这里纪念一下,嘻嘻。
新旧版本之间的差异,主要在:
- 交叉编译器版本
- U-Boot版本
- Linux内核版本
- 集成的根文件系统中各种软件库的版本,比如Qt
-
下载SDK源码,点击02.00.00.00,右边呈现该版本SDK所对应的资源列表,如下所示:
-
标号1为SDK的安装版本,可以直接安装到宿主机Ubuntu系统下,我们使用标号5对应的SDK源码,所以可以不用下载该安装版本
-
标号2为引脚配置工具,后续开发驱动的时候,会使用到,下载
-
标号3为SD卡镜像文件,看右边的说明可知,在制作启动SD卡需要用到,下载
-
标号4为交叉编译工具链,下载
由于这个版本的SDK过于遥远(写文章时是2024年),所以链接失效了,我找到了新的下载链接,在这里下载
-
标号5为SDK的源码版本,内含U-Boot、Linux内核的源码,我们主要使用这个,下载
关于为什么不使用安装版本,而使用源码版本,主要是个人喜好吧,安装版本会有一个安装脚本被执行,做了很多自动化的操作。用源码版本可以自己掌控整个过程。
-
2.2.2 Tera Term
Tera Term是一款界面简洁,功能实用的调试工具,支持串行端口,远程登录和SSH连接,内置的宏脚本语言,同时支持插件机制,允许应用程序创建许多有用的扩展。其软件界面如下,在这里下载。
BeagleBone Black调试串口默认的配置如下,COM1根据实际的串口设备进行选择,关于TeraTerm如何使用,这里不再赘述。
2.2.3 宿主机环境
2.2.3.1 VMVare&Ubuntu
VMVare和Ubuntu的作用、如何安装VMvare以及如何在VMvare下安装Ubuntu,在这里就不再赘述了。可以选择已经搭建好的Ubuntu开发环境,节省时间。
2.2.3.2 安装交叉编译工具链
-
下载完毕后,拷贝到Ubuntu环境下
-
创建目录/usr/local/arm,用于存放一些用于Linux开发的工具
sudo mkdir /usr/local/arm
-
解压交叉编译工具链到刚才创建的目录中
sudo tar xvf gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/
-
添加环境变量并生效
-
修改配置文件,添加红框所示部分
sudo vi ~/.bashrc
-
生效配置文件
source ~/.bashrc
-
-
验证交叉编译工具链是否安装成功
arm-linux-gnueabihf-gcc -v
如果出现如下图所示的版本号4.9.3,则说明交叉编译工具链安装成功
2.2.4 镜像刻录工具
Win32 Disk Imager是一款开源的镜像刻录工具,我们使用它主要是用于制作启动SD卡,将TI官方提供的SD卡镜像文件刻录进SD卡,在这里下载
2.2.5 如果你想一次获取这些资源
如果你不想按照步骤下载准备软件资源(硬件开发板请自备哈),而是想用现成的,尤其是VMvare和Ubuntu。请让子弹飞一会,后面我会将资源统一传到百度网盘,并把下载链接贴出来。
3 让系统先跑起来
3.1 SD启动卡制作
-
准备好SD卡镜像文件
-
安装好Win32 Disk Imager
-
准备一张空间大于4GB的SD卡(如果是高版本的SDK,可能得大于8GB,我手头只有一张4GB的SD卡,这也是选择低版本SDK另一个不得以的原因吧😁)
-
准备一个SD卡读卡器
-
SD卡连接电脑
-
运行Win32 Disk Imager,选择镜像文件,选择设备,执行写入操作,大约20分钟左右,弹出写入成功提示即可
3.2 启动系统
-
插入制作好的SD卡
-
连接好USB转TTL转换器
-
按住Boot按键,从SD卡启动
-
接通电源,BeagleBone Black启动,登录密码为root
-
从启动信息输出中可以看到
- U-Boot使用的版本是2015.07
- Linux内核使用的版本是4.1.6