1 出发点
- 需求在没有SD卡、EMMC、USB的情况下启动Beaglebone Black。(我自己的板子SD卡槽被撞坏了,焊盘都掉了。查了PCB发现信号线走的中间层,懒得飞线了)
- 某鱼上有很多Beaglebone矿渣板,应该也能同样的方法启动。
流程大概涉及:
- 找一台PC或虚拟机搭建一个
NFS服务端
,利用德州仪器(TI)的开发包弄个根文件系统 - 通过工具串口传输
spl
+uboot
文件,帮助uboot跑起来 - uboot中手工配置加载NFS服务端中的内核
zImage
+设备树dtb
,然后当然是启动内核啦
2 用到的资源
- am335x-evm-linux-sdk-bin-06.03.00.106 TI官方SDK下载链接
- SecureCRT.8.5.4
- (硬件) USB转串口工具、交换机或路由器等
- VMware ( 虚拟机 Ubuntu 系统 )
3 开搞
3.1 硬件连接
- 板子调试端口
J1排针
连接USB转串口工具 - 网线连接交换机或路由器,请保证和 Ubuntu虚拟机
在同一网段
,否则无法网络连接。
3.2 解压SDK
将下载的 am335x-evm-linux-sdk-bin-06.03.00.106解压,找到需要的文件。
文件夹 board-support > prebuilt-images中:
u-boot-spl.bin-am335x-evm
这是接下来串口Xmodem传输所需spl文件u-boot-am335x-evm
这是接下来串口Ymodem传输所需uboot文件
文件夹 filesystem中:
arago-base-tisdk-image-am335x-evm.tar
这是Ubuntu虚拟机中构建NFS根文件系统所需
3.3 构建NFS
如何安装虚拟机Ubuntu、开启NFS服务这里就省略了,反正只要有个正常NFS服务端就行。
下一步,将3.2中解压得到 arago-base-tisdk-image-am335x-evm.tar 传输到虚拟机中,解压到NFS服务开放的文件夹下,示范如下:
注意事项:
- 别跟着网上其他帖子那样将文件权限设置为777,否则后续挂载NFS成功你也没法登陆。现在的文件系统 /etc/下的 passwd 、shadow、securetty都是有保护的,一旦权限设置不正确就无法正常使用。
- 官方SDK中的文件系统占用空间很小,可以复制多个主文件夹,这样一个NFS服务端可以挂载多个Beaglebone板子。
3.4 串口传输启动文件
-
使用
SecureCRT
软件打开USB转串口工具的端口,默认波特率115200 -
连接电源后 Beaglebone 会在一直打印
CCCC
,这就是我们需要的。可以查阅官方手册中的启动顺序部分,AM335X上电后如果依次检测不到SD等一系列外设中的启动文件,最后就到了串口开始请求Xmodem文件。(有的板子可能需要按S2 boot按键)
-
SecureCRT在选项卡选择
传输
>发送Xmodem
并选择3.2节中解压得到的文件u-boot-spl.bin-am335x-evm
-
传输完成后串口继续输出
CCC
,表示开始请求Ymodem文件。SecureCRT在选项卡选择传输
>发送Ymodem
并选择3.2节中解压得到的文件u-boot-am335x-evm
-
传输完成后,uboot开始跑起来(想后续怎么启动就可以配置环境变量自由发挥了),可以按住
空格键
打断自动引导,进入uboot命令行。
3.5 uboot 配置NFS启动相关环境参数
确认3.3节解压得到的NFS文件系统中boot文件夹下的文件:
am335x-boneblack.dtb
这是具体硬件关联的dtb文件,我的板子就是BeagleboneBlackzImage
linux内核压缩镜像文件
修改你的ip地址以及NFS开放路径,根据如下的示例进行调整,然后复制到SecureCRT中uboot命令行
serverip
ubuntu虚拟机(NFS服务端所在)的ip地址clientip
板子将要配置的ip,可以通过输入dhcp命令查看当前的ip地址,然后填充过去就是了gatewayip
网关地址,一般都是当前网段 1号rootpath
NFS服务端开放路径,对应解压文件系统存放的文件夹,可以参考3.3节
set serverip 192.168.1.103
set clientip 192.168.1.106
set gatewayip 192.168.1.1
set rootpath /home/jiangheng/Desktop/nfs/bbb_nfs
set netargs setenv bootargs console=${console} ${optargs} root=/dev/nfs rw ip=${clientip}:${serverip}:${gatewayip}:255.255.255.0::eth0:off nfsroot=${serverip}:${rootpath},v3,tcp
set netloadfdt nfs ${fdtaddr} ${serverip}:${rootpath}/boot/am335x-boneblack.dtb
set netloadimage nfs ${loadaddr} ${serverip}:${rootpath}/boot/zImage
最后,输入启动命令,脚本会自动从NFS下载文件并启动:
run netboot
- load下载出现T代表超时,没啥影响
如下所示:
3.6 结束
- 最后输入登录名root可以免密码直接进入系统,如果提示登陆错误或其他错误,那么有可能是权限设置不正确,参考3.3节注意事项。
- 如果需要使用debian或者 ubuntu等系统,没必要去编译,只需将已有的目标系统的根文件解压到NFS服务端中就行,参考3.5节进行参数替换。