以前以为自己把自己的BeagleBone Black(简称 BBB)板子玩坏了,然后项目上又给了一个 BBB 板子,后来发现上面的 Linux 系统是不全的,连 sudo, apt-get 指令都识别不出来,一怒之下就开始老老实实学习如何升级 BBB 的固件了…… 结果发现其实也并不难……
在 BeagleBone Black 自带的网页说明上,基本上已经把固件升级步骤说的比较详细了。地址如下(连接 BBB 到 PC 机上之后才能访问): http://192.168.7.2/bone101/Support/BoneScript/updates/
上述界面中有如下说明:
While there are many possible ways to boot your Beagle, every BeagleBoard and BeagleBone is capable of booting off an SD (or microSD) card. To utilize the latest software from the BeagleBoard.org community, it is recommended you program an SD card with the latest image, try it out and then commit the image to your on-board flash if your board has one and you are happy with the functionality of this new software. Note that not all of the provided images consume the same amount of space. It is important to note the size of the image and the amount of space consumed within the image to know if it will fit within the space of your SD card and potentially your on-board eMMC flash. 虽然有多种方式可以引导启动你的 Beagle 电路板,但每个 BeagleBoard 和 BeagleBone 都可以使用 SD(或 microSD 卡)进行启动。如果想要使用 BeagleBoard.org 社区的最新软件,而且您的电路板上有一个板载内存并且您乐于使用新软件的功能的话,建议您将最新的镜像文件烧写进 SD 卡,然后尝试将镜像提交到电路板的板载内存。 请注意,并不是所有的镜像都占用同样的空间。重要的是要注意镜像文件大小以及镜像消耗的空间,这样才可以了解该镜像是否适合 SD 卡的空间与板载 eMMC 内存。
所以,固件升级有两种合适的方法:一是将烧写有最新镜像文件的 SD 卡插在 BBB 板上,每次上电就从 SD 卡中读取镜像中的系统,并加载(类似于平常的 U 盘启动);二是将 SD 卡的镜像文件直接烧写进 BBB 内部(类似于重新做系统)。
从官网下载最新的 Debian 镜像文件。如果不想使用图像用户界面(即 GUI),可以使用标有 “loT” 的镜像,省出更大的内存空间。下载的镜像文件解压缩,解压缩后的文件将具有 .img.xz 扩展名,这是 SD 卡压缩扇区的镜像。 官网最新镜像文件下载网址:http://beagleboard.org/latest-images
进入官网之后,后面的内容就值得注意了。
上图中是官网的推荐 Debian 镜像,这些都是最新更新的系统镜像,建议烧写的镜像就从这里面选择,而且选择的镜像一定要支持 BeagleBone Black (如图中红线提示)。 但之前好几次笔者烧写前面的文件,都没有成功将镜像烧写进去,主要就是没有注意到上图中用红框圈中的部分。该部分将在后面第 6 步中重点说明。
另外,官网也保存有之前发布的系统镜像,即 Older Debian Images 部分。(注:笔者使用的镜像就是图中的Debian 8.7 2017-03-19 4GB SD LXQT)该部分又被区分为两种大类(如下图红线中标注所示):without flashing the eMMC,以及 eMMC flasher。
对于 without flashing the eMMC 类别的系统镜像,从字面意义上可以看出就是不可以烧写到 BeagleBone 板中。但其实实际上经过一些对镜像文件的改变之后,镜像文件是可以烧写进 BBB 板中的,该部分将在第 6 步中叙述。 对于 eMMC flasher 类别更加简单,不需要改变镜像文件内容,按照正常流程就直接把镜像烧写进 BBB 板中。但该类别中的唯一一个系统镜像是 2014 年版本的 Debian 镜像,也就是 BBB 板的出厂时系统自带的初始镜像,比较陈旧,所以建议更换其他镜像。
这里可以选择和笔者一样的 Debian 8.7 2017-03-19 4GB SD LXQT 版本镜像,也可以选择 Recommended Debian Images 中的推荐镜像。
下载安装 Win32 DiskImager。 烧写 SD 卡的通用帮助可以在 Ubuntu 镜像烧写帮助中找到。
注:新版本的 BBB 电路板建议使用 Etcher 进行烧写,但笔者使用 Win32 DiskImager 比较习惯,所以依旧用较为习惯的软件。
用 USB 线连接 BBB 到电脑上。连接完成的标志是可以通过电脑端的浏览器访问网址:http://192.168.7.2
把下载好的镜像解压出来,然后用 Win32 DiskImager 将解压后的镜像文件烧写进 SD 卡中。烧写大致如下图所示:
将新烧写的 SD 卡从电脑中弹出。
该步骤对烧写系统的成功十分重要,也许很多人烧写失败就是因为忽略了该步骤的操作。 前面第一步图片的红框中内容,即为该步骤的核心。
To turn these images into eMMC flasher images, edit the /boot/uEnv.txt file on the Linux partition on the microSD card and remove the ‘#’ on the line with ‘cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh’. Enabling this will cause booting the microSD card to flash the eMMC. Images are no longer provided here for this to avoid people accidentally overwriting their eMMC flash. 如果要将这些镜像转换为 eMMC 闪存镜像,请编辑 microSD 卡上 Linux 分区上的 /boot/uEnv.txt 文件,并将 ‘cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh’ 一行前面的 ‘#’ 删去。删掉 ‘#’ 就使烧写镜像到 eMMC 闪存的操作变得有效。这里不提供可以直接烧写的镜像,以避免用户意外重写了他们的 eMMC 闪存。
首先将 SD 卡插入电路板,并将 BBB 电路板断电,将 SD 卡插入到 BBB 板中,准备给 BBB 板上电。 此时上电之后,此时并没有把镜像烧写进 BBB 电路板中,而是读取了烧写进 SD 卡中的系统到 BBB 板中,然后再运行。此时,尽量用 root 权限登录,如果不能用 root 权限,可以使用用户名为 debian 的用户登录,初始密码是 temppwd。(建议用 PuTTY 进行终端的操作) 登进了 debian 用户之后,输入以下指令,进入 /boot/uEnv.txt 文件:
cd /boot
vim uEnv.txt
用 vim 打开文档,找到 uEnv.txt 的最后一行:
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
将前面的 ‘#’ 去掉,内容变成:
cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
之后 vim 保存退出,该步骤便完成了。 注:vim 的操作此处不再赘述,请在网上自行搜索。
将 BBB 板断电,并准备重新上电。 上电之前,按下 Boot 键(即在插入 SD 卡的卡槽附近的按键,如下图所示的 Boot Button)。
按住 Boot 键后上电,上电后保持按住 15 秒后即可松开,这时候已经正在进行烧写 eMMC 的步骤,期间板子上的四个 LED 灯会交替闪烁。大概等待 15 分钟后(官网上说 40 — 50 分钟,其实用不了那么长时间),四个 LED 灯同时亮起,然后同时熄灭,就表示 BBB 电路板已经烧写完毕并且关机了。 此时我们将卡槽中的 SD 卡弹出,重新上电,用 PuTTY 登录板子上的 debian 用户。 登录成功后,PuTTY 上会显示 BBB 运行的系统。比如笔者使用的系统镜像是 Debian 8.7 2017-03-19 4GB SD LXQT ,那么在 PuTTY 上就显示了系统的制作日期 2017-03-19 之类的字样。看到这种日期字样,就意味着烧写系统已经成功了。