学习都是从别人那里学来的,先把链接都发出来,有对应简单的问题直接看链接 TI官方Linux系统移植WiKi: https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black 官方镜像下载:https://rcn-ee.com/ 共享网络连接: https://blog.csdn.net/u012019376/article/details/42267655 扩大根目录: https://blog.csdn.net/zsy19881226/article/details/42585643 配置VNC桌面: https://www.howtoing.com/how-to-install-and-configure-vnc-on-debian-9 BeagleBone Black的用户手册: https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual 后面的内容很多都是对英文文档的翻译和别人的博客的翻译,主要是做了汇总,有一些遇到的问题加了一些解决方案。因为对Linux和嵌入式Linux都是刚刚开始学习,所以一些简单地问题也都用了很长时间。
官网上有Debian的系统映像,同时也有其他人做的ubuntu映像。这里给一个TI的wiki中给的链接:https://rcn-ee.com/rootfs/ 进入rootfs/中, 其中eewiki里面是最小系统,日期内是不同版本的完整映像,我选择的是2018-08-10/版本。 再进入日期组中,里面有flasher和microsd两个目录,分别是自动烧写eMMC和SD卡启动的两种版本。下面分别介绍两种使用方法。
首先下载映像,然后下载Etcher软件。 打开后将映像载入,插入SD卡,烧写。烧写成功后,插入BeagleBone Black中,按住BOOT按键,USB插入电脑,等待四个指示灯全部亮起,又开始分别闪烁后可以松开BOOT。一段时间后四个指示灯会循环闪烁,待四个灯全部亮起又熄灭后,烧写成功。 拔出SD卡,断电,重新上电,则系统即可正常运行。
烧写SD卡方式相同,同样将SD卡插入开发板后,按住BOOT上电,等四个灯同是亮起,一段时间后开始分别闪烁,则启动成功。
下载MobaXterm软件。启动BeagleBone Black,等待启动成功,系统需要一段时间启动,成功后会出现一个网络端口。 创建Session,选择SSH,Remote Host填192.168.7.2,端口号22。 进入Session。 出现login as的提示,则远程登录成功。 Ubuntu系统输入ubuntu,Debian系统输入debian,密码均为temppwd。登录成功后则进入控制台。 对话框左侧部分显示目录,默认是在开机时的用户目录下。可以选择跟随控制台目录。下方有Remote Monitoring,点开后可以在最下显示架构、CPU占用、内存占用、上下载速度等信息。
参考链接:https://blog.csdn.net/u012019376/article/details/42267655 打开设置->网络和Internet->以太网->更改适配器选项。 里面出现各种网络连接。其中一项为BeagleBone Black的端口。在图中是以太网2。现在用来上网的链接是以太网,我们需要将以太网的链接共享到以太网2。在以太网图标右键->属性->共享 勾选允许其他网络用户通过此计算机的Internet连接来连接。并在家庭网络连接里找到以太网2并选中,确定。 此时以太网2会被分配一个地址,需要修改。在以太网2右键->属性->Internet协议版本4(TCP/IPv4) 选择自动获得IP地址和自动获得DNS服务器地址 确定,保存。 重新进入控制台,输入指令
sudo route add default gw 192.168.7.1此处需要输入用户密码temppwd 再修改文件,输入指令
sudo nano /etc/resolv.conf在其中输入
nameserver 127.0.0.1 nameserver 8.8.8.8 nameserver 192.168.1.1Ctrl+O保存,提示文件名,直接回车确认,Ctrl+X退出 此时回到控制台,输入指令
ping www.baidu.com出现以上信息,则网络连接成功,按Ctrl+C退出
每次开机时都需要以上操作来连接网络,我们可以通过一个脚本来完成以上操作。在用户目录里输入指令
sudo nano init.sh出现文本编辑界面,输入以下内容
chmod a+w /etc/resolv.conf echo "nameserver 127.0.0.1 nameserver 8.8.8.8 nameserver 192.168.1.1" > /etc/resolv.conf route add default gw 192.168.7.1保存并退出。第一句内容是给resolv.conf增加写权限,中间部分是写入内容,最后增加默认地址。 在控制台输入
sudo chmod a+x init.sh为文件增加可执行权限。则每次开机后只需要运行
sudo ./init.sh就可以自动连接网络,当然Windows中共享的配置依旧需要手动配置。
链接:https://blog.csdn.net/zsy19881226/article/details/42585643 在SD卡中安装时,根目录只有3G+,但是SD卡一般有8G或者更多,为了安装环境有更加宽裕的空间,我们需要进行根目录扩展。在镜像中有专门用来做这个工作的一个脚本,运行指令
cd /opt/scripts/tools/ sudo ./grow_partition.sh运行结束后重启,则根目录扩展成功
连接网络后,可以开始更新和下载相关环境。我们可以安装VNC远程桌面。 输入指令更新软件列表
sudo apt update提示是否安装时输入Y即可,其他安装同理 安装Xfce桌面系统
sudo apt install xfce4 xfce4-goodies安装TightVNC
sudo apt install tightvncserver安装完成后需要初始化VNCserver,输入
vncserver提示输入密码,输入后回车需要确认密码,确认后提示是否设置只读密码,根据需求输入,再次回车,安装结束 下面配置VNC服务器
vncserver -kill :1 mv ~/.vnc/xstartup ~/.vnc/xstartup.bak sudo nano ~/.vnc/xstartup此时又出现文本编译器,输入以下内容保存退出
#!/bin/bash xrdb $HOME/.Xresources startxfce4 &添加执行权限
sudo chmod +x ~/.vnc/xstartup再次重启VNCserver
vncserverVNCserver安装结束,下面在MobaXterm中创建一个VNC的session 打开后出现图形界面 VNC安装成功,每次使用图形界面前需要输入指令
vncserver来启动VNC服务器,如果需要每次自动进入,则可以将VNC服务器放入系统服务中,具体操作见参考链接第四步内容。
参考链接:https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black 这个链接里的内容是将系统从交叉编译环境,到U-Boot,到内核编译,到根文件系统,最后烧写到SD卡中的流程。最终运行后需要用调试串口来进行登录。下面介绍具体流程
在用户目录下输入指令
wget -c https://releases.linaro.org/components/toolchain/binaries/6.4-2018.05/arm-linux-gnueabihf/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz tar xf gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz export CC=`pwd`/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-下载并解压gcc-linaro 然后测试,输入指令
${CC}gcc --version出现版本号则安装成功
在用户目录下输入指令
git clone https://github.com/u-boot/u-boot cd u-boot/ git checkout v2018.09 -b tmp下载并检查版本,再输入指令
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0002-U-Boot-BeagleBone-Cape-Manager.patch patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch安装相应的补丁适应开发板,最终编译U-Boot
make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig make ARCH=arm CROSS_COMPILE=${CC}在用户目录下,获取内核代码,输入指令
git clone https://github.com/RobertCNelson/bb-kernel cd bb-kernel/检查版本,输入指令
git checkout origin/am33x-v4.9 -b tmp最终编译内核输入指令
./build_kernel.sh编译内核过程会较长,其中会进入到配置界面,可以不做配置,直接Exit退出,然后继续编译。
这里选择的是Ubuntu 18.04LTS。 在用户目录下获取源代码,输入指令
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-18.04.1-minimal-armhf-2018-07-30.tar.xz对安装包进行校验,输入指令
sha256sum ubuntu-18.04.1-minimal-armhf-2018-07-30.tar.xz校验码应为
6b212ee7dd0d5c9c0af49c22cf78b63e6ad20cec641c303232fca9f21a18804c ubuntu-18.04.1-minimal-armhf-2018-07-30.tar.xz将安装包解压,输入指令
tar xf ubuntu-18.04.1-minimal-armhf-2018-07-30.tar.xz至此所有配置完成,需要将U-Boot,内核和根文件系统烧录到SD卡中,我选择的是32G的SD卡。 首先配置环境变量,在用户目录下输入指令
export DISK=/dev/mmcblk0这句话是将DISK设置为你的存储设备目录,mmcblk0是代表SD卡,在BeagleBone Black中插入SD卡会识别成mmcblk,但是由于现在是用读卡器,所以SD卡会被识别成U盘,因此一般会显示sdX,我这里是sdb(可以输入指令sudo fdisk -l来列出磁盘列表。其中sdb代表一块硬盘,sdb0代表硬盘的分区,以此类推)。因此指令改为
export DISK=/dev/sdb然后清空SD卡的分区,输入指令
sudo dd if=/dev/zero of=${DISK} bs=1M count=10将U-Boot映像和MLO拷到SD卡中,输入指令
sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k然后创建分区的布局,输入指令
sudo sfdisk –version会显示出软件版本,如果大于等于2.26.x,则输入指令
sudo sfdisk ${DISK} <<-__EOF__ 4M,,L,* __EOF__如果是其他版本,参考所给链接中的内容 这时候可能会出现信息提示”This disk is currently inuse - repartitioning is probably a bad idea.”,这时候需要将磁盘解除挂载,输入指令
df -h会列出目前的设备,看到有一个磁盘分区sdb0正在使用,则输入
umount /dev/sdb0解除挂载,再用上一个sfdisk的指令,就可以成功了。 接下来要格式化分区,输入指令
sudo mkfs.ext4 -V查看软件版本,我的是1.42,且磁盘为sdX,因此输入指令
sudo mkfs.ext4 -L rootfs ${DISK}1其他情况同样参考所给链接。 然后将磁盘进行挂载,输入指令
sudo mkdir -p /media/rootfs/ sudo mount ${DISK}1 /media/rootfs/然后将U-Boot进行备份
sudo mkdir -p /media/rootfs/opt/backup/uboot/ sudo cp -v ./u-boot/MLO /media/rootfs/opt/backup/uboot/ sudo cp -v ./u-boot/u-boot.img /media/rootfs/opt/backup/uboot/接下来要安装内核和根文件系统 首先还是定义环境变量,先找到内核文件夹/bb-kernel/deploy目录下的镜像文件,我的是4.9.119-bone11.zImage,因此输入指令为
export kernel_version=4.9.119-bone11在用户目录下拷贝根文件系统,输入指令
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/ sync sudo chown root:root /media/rootfs/ sudo chmod 755 /media/rootfs/这时候如果出现提示找不到文件,则说明之前下载根文件系统的地址不对,在自己的用户目录下检查地址,可以选择将根文件系统拷贝到用户目录下,也可以改变自己控制台当前的目录进行操作,或者找到第一条指令的压缩包地址,自己写到指令中。这就是之前每一步要在用户目录下开始的原因。后面的操作出现同样问题都可以这样解决。 然后需要设定u_namer,输入指令
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"接下来是拷贝镜像到SD卡,输入指令
sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}拷贝设备树,这是开发板对应的设备文件
sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/ sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/拷贝内核模块
sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/拷贝文件系统列表
sudo sh -c "echo '/dev/mmcblk0p1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"配置网络
sudo nano /media/rootfs/etc/network/interfaces在文件中加入
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp最后解除SD卡挂载
sync sudo umount /media/rootfs至此SD卡已经烧录成功,官方参考链接里还有关于如何修改为烧写eMMC,如何启动HDMI,如何在U-Boot中禁用一些设备的操作,可以作为参考。
我们将调试串口通过CP2102连接到电脑上,根据官方的用户手册7.5节,给出了调试串口引脚图 根据这个顺序连接串口模块,打开MobaXterm软件,创建出一个Serial的Session,波特率为115200 OK后选择端口 如果没有出现对应的串口,则需要下载串口模块的驱动,如我所用的串口模块CP2102,或者常用的CH340等等。 选择后进入串口界面,按住BOOT键,上电,则串口界面会出现U-Boot启动信息,等到指示灯开始闪烁后,松开按键,可以看到相应启动流程 首先是U-Boot启动,然后内核启动,最终出现登录信息,同样用户名ubuntu,密码temppwd,登录成功