Beaglebone Black 折腾笔记(二) 搭建环境
听说最近推出了5美元的树莓派,一度被黄牛抢光然后卖到了50美元。
之前在逛Kali社区的时候发现的Beaglebone Black (BBB),第一次了解这种嵌入式开发板,简直像看到了新大陆,爱不释手。买了开发板可以做一些很好玩的东西和很牛逼的项目等各种有意思的事情。
5美元的树莓派估计明年在国内才能买到,对于现在来说,BBB应该是一个很不错的解决方案:嵌入式平台选择:树莓派 or BeagleBone Black(BBB)
安装BBB
准备好各个版本的Linux for BBB
- BeagleBoard.org Latest Firmware Images:BBB官方页面的下载链接,我在这下载了bone-debian-8.2-tester-2gb-armhf-2015-11-12-2gb.img.xz,刷到Flash以后,发现没有LXDE桌面环境。
- Beagleboard:BeagleBoneBlack Debian:Embedded Linux。在Debian Releases里可以下载到各种版本的Image。
- Kali Linux Downloads – Custom Images:Kali Linux,可是官网的2.0.1版好像有个USB的Bug,在下文中有提出。
- Kali Linux Features|Generating Kali Raspberry Pi Images|Kali Linux ARM build scripts:Kali Linux,这三个网站好像是教你怎么自己编译镜像的
要注意的是,BBB 现在推出了有4G eMMC 的 Rev C,所以下载之前一定要看好版本号(Rev)
;还有要注意的是要主意microSD/Standalone
和lxde/console
。
注意,有些网站在天朝被墙了,请参照之前的文章用Lantern翻墙。
安装Image到microSD卡
分别在插入/拔出SD卡的时候输入命令ls /dev
,查看SD卡的磁盘名称,我的是disk2
。
//警告!如果不知道dd命令是干嘛的,或者不知道我上面说的`disk2`是怎么来的
//在你baidu清楚之前,不要执行下面那行代码。
dd if=BBB-eMMC-flasher-debian-7.9-lxde-armhf-2015-11-03-2gb.img of=/dev/rdisk2 bs=1m
- 如果提示
dd: bs: illegal numeric value
,把bs=1m
改为bs=1M
。 - 如果提示
Resource busy
,记得Unmount SD卡
将Image写入eMMC
镜像写入SD卡后,修改/boot/uEnv.txt
,把下面第二行前面的”#”去掉。
##enable BBB: eMMC Flasher:
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
重新启动,就会看到BBB的四个LED灯像流水一样闪烁。刷完以后BBB会自动关机。等它刷新完eMMC以后,记得拔出microSD卡,否则下次开机后会重新刷一遍- -
安装LXDE
在官网下载了Debian8.2的Image,安装完毕后发现没有桌面环境。输入以下命令手动安装LXDE桌面环境:
aptitude install --without-recommends lxde //安装简化版的LXDE
apt-get install xorg xserver-xorg //如果不安装这个,没有startx命令
安装完毕后,执行startx
运行桌面环境。启动后的桌面环境会报错no session for pid ****
,不知道是什么原因耶。
因为板载eMMC只有2G,最后我放弃了这种方式,选择了直接使用4G-SD卡的Image。
串口调试
在嵌入式开发和单片机开发,串口是必不可少是外设设备。当你的BBB出问题无法启动时,你可以通过串口对它进行调试。
今天研究的是如何在Linux 下使用串口调试。Windows 的之前已经尝试过,要在ftdichip下载驱动,然后安装一个串口调试软件即可。
###准备串口驱动
Kali Linux 已经自带了串口驱动,执行dmesg | grep tty
看到了满屏幕的ttyUSB0
root@kali:~# dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 196.623578] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 260.219668] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 261.507543] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 515.250387] ftdi_sio ttyUSB0: failed to get modem status: -71
[ 517.252789] ftdi_sio ttyUSB0: error from flowcontrol urb
[ 526.263896] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity
[ 527.264684] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[ 529.267373] ftdi_sio ttyUSB0: urb failed to clear flow control
[ 533.273013] ftdi_sio ttyUSB0: failed to get modem status: -71
[ 535.275199] ftdi_sio ttyUSB0: error from flowcontrol urb
[ 559.407134] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 747.635485] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 871.627615] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 886.630016] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 947.461802] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 962.820144] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 3345.864141] ftdi_sio ttyUSB0: error from flowcontrol urb
[ 3345.864523] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 3387.249864] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 6856.149365] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
[ 8138.331832] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 8144.025392] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
###准备Minicom
Kali Linux 已经给装好了Minicom,执行一下
minicom -s
,按照下面命令配置好串口A - Serial Device : /dev/ttyUSB0
linux超级终端minicom的使用方法,这篇文章还说要“将 Hardware Flow Control 设 为 NO”,“修改Modem and dialing, 将Init string, Reset string, Hang-up string设置为空”
设置完成后选择Save setup as dfl将当前设置保存为默认设置
已知问题
移动鼠标时会卡死
很开心的进入GUI界面以后,移动鼠标准备点击输入密码,然后BBB居然卡死了。卡死以后,敲击鼠标、键盘没有反应,LED 灯也不闪了。又试了几次,只要不移动鼠标,通过键盘输入root/toor
正常进入Desktop;不论在什么状态下,只要一碰鼠标,等三秒钟电脑就卡死了。
第一次尝试解决
Google了一下,还真有人碰到了这个问题:0002510: Beaglebone mouse crash;继续Google,看到了这个:
BeagleBone Black Ubuntu 13.10 with desktop… another UBUNTU FAILURE!!,上面balabala一大堆没怎么看懂,后面有一个人给了解决方案:According to armhf we must rebuild the modules dependency list. run depmod -a -v “3.8.13-bone30” as root. http://www.armhf.com/index.php/boards/beaglebone-black/
root@kali:~# uname -a //查看版本号
Linux kali 3.8.13-bone53 #1 SMP Thu Aug 13 23:27:51 CDT 2015 armv7l GNU/Linux
root@kali:~# depmod -a -v "3.8.13-bone53"
运行以后重启电脑,发现并没有什么卵用,继续卡死。
第二次尝试
然后又翻到了这篇:stackoverflow: BeagleBone Black freezes,回复说是TI的这个芯片里面的中断控制器设计问题,会导致“babble”中断响应;AM335X USB babble interrupt when DP and DM are both high in full-speed mode当一个full-speed USB 的 DP 和 DM 信号都在高电平时就会产生这种中断响应。
看到这,貌似无解了,可是我在用官方的Debian, 并运行lxde GUI的时候,并不会卡死。
我在用串口调试的时候发现,虽然对USB进行插拔的时候会出现“babble”中断,可是这并不是导致系统锁死的原因。因为我在用官方镜像的时候也会出现“babble”中断,可是并没有任何卡死。
第三次:更新内核
又看到了一篇文章,这个问题只出现在3.8.13版本的kernel中。可是Kali Linux 只提供这个版本的Kernel,明天我试一下安装官方4.0版本的Kernel
0002610: Cannot change wireless MAC with Ralink 3070 and Beaglebone Black 3.8.13 kernel这里好像有介绍。
更新内核失败了:(
最后的解决方案
很丢脸的解决方案:我安装了1.0.9的Image,然后dist-upgrade升级到sana。