beagleboneblack(BBB)开发板使用NFS挂载根文件系统,tftp下载镜像与设备树

news/2024/11/19 13:18:08/

一、文件下载

交叉编译工具链下载地址

wget -c https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-i686_arm-linux-gnueabihf.tar.xz

beagleboneblack内核kernel下载地址,切换到tag为4.19.94-ti-r42的分支下载

git clone -b 4.19.94-ti-r42 git://github.com/beagleboard/linux.git

uboot下载地址,切换到v2021.01-bb.org-am335x-am57xx或者v2021.10-bbb.io-am335x分支进行下载

git clone -b v2021.10-bbb.io-am335x https://github.com/beagleboard/u-boot.git

根文件系统下载地址

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-10.3-minimal-armel-2020-02-10.tar.xz

以上四个文件,我是通过windows直接去网站下载的,因为直接通过ubuntu下载的速度很慢。下载完成之后使用FileZilla传输到ubuntu上面。

解压文件

tar -xvf debian-10.3-minimal-armhf-2020-02-10.tar.xz
unzip linux-4.19.94-ti-r42.zip
unzip u-boot-2021.01-bb.org-am335x-am57xx.zip

二、安装交叉编译工具链

linux下arm交叉编译工具链的安装_wang@xing的博客-CSDN博客

三、编译uboot

进入uboot目录

cd u-boot-2021.01-bb.org-am335x-am57xx

am335x_evm_defconfig配置

sudo apt-get update
sudo apt-get install flex bison lib32z1 libssl-dev
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_defconfig

编译uboot

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

至此,uboot编译完成

四、编译内核kernel源码

进入内核源码目录

cd ../linux-4.19.94-ti-r42/

配置内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bb.org_defconfig

编译生成uImage和zImage,设备树

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage dtbs LOADADDR=0x80008000 -j8

编译模块

sudo apt-get install lzop u-boot-tools
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j8

至此,内核编译完成

五、NFS配置

创建NFS挂载的文件夹,以后所有的需要使用NFS服务的文件都放在这个文件夹里面,路径自己指定

cd ~/study/linux
mkdir nfs
mkdir nfs/rootfs

安装NFS服务

sudo apt-get install nfs-kernel-server rpcbind

配置NFS

sudo vi /etc/exports

添加上图白色字体的内容,其中/home/lemonhack/study/linux/nfs为刚才自己创建的NFS文件夹目录

如果是ubuntu18版本,在之后开发板挂载NFS根文件系统时,串口打印信息会提示VFS: Unable to mount root fs via NFS, trying floppy.或者或者报错 Loading:*ww ERROR:File lookup fail 的,或者 mount.nfs: mount system call failed。使得NFS根文件系统挂载不成功,所以还需要修改NFS文件。第一张图片为原始内容,第二张图片为修改后的内容

sudo vi /etc/default/nfs-kernel-server

重启NFS服务

sudo /etc/init.d/nfs-kernel-server restart

至此,NFS服务配置完成

六、TFTP配置

创建TFTP文件夹以存放TFTP文件

cd ~/study/linux/
mkdir tftpboot
chmod 777 tftpboot

搭建TFTP服务器

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

配置TFTP

新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建

sudo vi /etc/xinetd.d/tftp

然后在里面输入如下内容

server tftp
{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /home/lemonhack/study/linux/tftpboot/disable = noper_source = 11cps = 100 2flags = IPv4
}

启动TFTP服务

sudo service tftpd-hpa start

打开/etc/default/tftpd-hpa 文件

sudo vi /etc/default/tftpd-hpa

将其修改为如下所示内容

# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/lemonhack/study/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。

重启TFTP服务器

sudo service tftpd-hpa restart

至此,TFTP服务搭建完成

七、解压根文件系统到NFS文件夹下面,并安装模块,同时将内核镜像与设备树复制到TFTP文件夹下面

进入根文件系统文件夹

cd ~/study/linux/bbb/
cd debian-10.3-minimal-armhf-2020-02-10/

解压根文件系统到NFS下的指定目录,使用-C命令来指定目录

sudo tar -xvf armhf-rootfs-debian-buster.tar -C ~/study/linux/nfs/rootfs/

进入内核源码目录

cd ~/study/linux/bbb/linux-4.19.94-ti-r42/

安装模块到根文件系统,找不到交叉编译器的时候,使用source命令来导入交叉编译器的路径,比如我的交叉编译器安装路径为/usr/local/arm/gcc-linaro-6.5.0-2018.12-i686_arm-linux-gnueabihf/bin/,并且将路径变量写入/etc/profile文件的末尾,那么使用source /etc/profile来导入。

su
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bb.org_defconfig//如果不做这一步,则会找不到交叉编译器
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/lemonhack/study/linux/nfs/rootfs/ modules_install

复制内核镜像与设备树到tftp文件夹下面

su lemonhack
cd ~/study/linux/bbb/linux-4.19.94-ti-r42/
sudo cp arch/arm/boot/zImage arch/arm/boot/dts/am335x-boneblack.dtb ~/study/linux/tftpboot/

八、SD格式化并分区

这里使用从外网找到的脚本来对SD卡进行格式化与分区,脚本内容如下

#! /bin/sh
# mkcard.sh v0.5
# (c) Copyright 2009 Graeme Gregory <dp@xora.org.uk>
# Licensed under terms of GPLv2
#
# Parts of the procudure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Formatexport LC_ALL=Cif [ -z `which bc` ]; thenecho "no bc binary found"exit 1;
fiif [ $# -ne 1 ]; thenecho "Usage: $0 <drive>"exit 1;
fiDRIVE=$1dd if=/dev/zero of=$DRIVE bs=1024 count=1024SIZE=`fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}'`echo DISK SIZE - $SIZE bytesCYLINDERS=`echo $SIZE/255/63/512 | bc`echo CYLINDERS - $CYLINDERSsudo sfdisk $DRIVE << EOF
8192,63MiB,0x0C,*
137216,4GiB,,-
EOFsleep 1if [ -b ${DRIVE}1 ]; thenumount ${DRIVE}1mkfs.vfat -F 32 -n "boot" ${DRIVE}1
elseif [ -b ${DRIVE}p1 ]; thenumount ${DRIVE}p1mkfs.vfat -F 32 -n "boot" ${DRIVE}p1elseecho "Cant find boot partition in /dev"fi
fiif [ -b ${DRIVE}2 ]; thenumount ${DRIVE}2mkfs.ext4 -L "rootfs" ${DRIVE}2
elseif [ -b ${DRIVE}p2 ]; thenumount ${DRIVE}p2mkfs.ext4 -j -L "rootfs" ${DRIVE}p2elseecho "Cant find rootfs partition in /dev"fi
fi

创建脚本,输入脚本内容

cd ~/study/linux/bbb
vi mkcard.sh

赋予权限

chmod 777 mkcard.sh

插入SD卡,并使用脚本,其中/dev/sdb为sd卡设备,根据自己实际情况设定

sudo ./mkcard.sh /dev/sdb

打开文件夹可以看见SD创建了两个分区,分别为boot分区用来存放uboot启动文件。rootfs分区用来存放根文件系统,在本文中不使用这个分区,因为我打算使用NFS挂载根文件系统。

查看SD卡自动挂载的位置,可以看到SD卡被分为两个分区/dev/sdb1、/dev/sdb2。boot分区所在的位置为/media/lemonhack/boot

df -h

将uboot编译生成的MLO、u-boot.img放在SD卡的boot分区里面。

cd ~/study/linux/bbb/u-boot-2021.01-bb.org-am335x-am57xx/
sudo cp MLO /media/lemonhack/boot/
sudo cp u-boot.img /media/lemonhack/boot/

至此,SD卡可以拔下,然后插入到beagleboneblack里面。

九、ubuntu设置静态ip地址

修改网络文件

sudo netplan generate

自动生成的文件可能在桌面,服务器,云实例等(例如01-network-manager-all.ymal或01-netcfg.yaml)上有不同的文件名,但是/etc/netplan/*.yaml下的所有文件将被netplan读取,sudo vim /etc/netplan/xxxx.ymal

sudo vi /etc/netplan/01-network-manager-all.yaml

输入一下内容

network:ethernets:ens33:addresses:- 192.168.123.150/24dhcp4: falsegateway4: 192.168.123.1nameservers:addresses:- 8.8.8.8search: []version: 2

使用以下netplan命令应用最近的网络更改

sudo netplan apply

ifconfig查看ens33网卡,发现ip地址已经变更成我们想要的地址

关闭VMware,将虚拟机内的网卡设置为桥接模式(主要为了使得开发板能ping通虚拟机)

重启虚拟机即可,

十、串口启动beagleboneblack(BBB)开发板

所需硬件如下:

beagleboneblack开发板
购买beagleboneblack开发板自带的USB线
配置好的SD卡
网线一根
杜邦线三根
USB转TTL模块,这里使用CH340芯片

因为直接使用购买beagleboneblack开发板自带的USB线来作为串口终端的话,看不见uboot的启动画面。作为一个小白的我猜测,应该是没启动内核,所以USB串口的驱动没有加载,无法显示uboot启动画面。使用CH340作为串口可以看见uboot的启动过程。串口连接如下

  • J1 = GND (Ground)

  • J4 = RXD (Receive Data)

  • J5 = TXD (Transmit Data

使用网线的作用是设置开发板ip地址,实现从ubuntu挂载根文件系统和下载内核、设备树。

打开MobaXterm,MobaXterm使用串口的设置参考,不过这里使用的CH340芯片,而不是参考文章中的直接使用购买beagleboneblack开发板自带的USB线来作为串口终端。

串口连接电脑,USB线作为电源,按住beagleboneblack开发板的S2按键,给开发板上电。

设置开发板网络信息

ipaddr:开发板ip地址,可随意指定,只要和ubuntu服务器处于同一个网段

gatewayip:网关

netmask:子网掩码

serverip:ubuntu的ip地址

setenv ipaddr 192.168.123.100
setenv gatewayip 192.168.123.1
setenv netmask 255.255.255.0
setenv serverip 192.168.123.150
saveenv

使用ping命令查看是否能ping通虚拟机

ping 192.168.123.150

设置bootcmd与bootargs环境变量

setenv bootcmd 'tftp 80008000 zImage;tftp 80F80000 am335x-boneblack.dtb;bootz 80008000 - 80F80000'
setenv bootargs 'root=/dev/nfs nfsroot=192.168.123.150:/home/lemonhack/study/linux/nfs/rootfs ip=192.168.123.100:192.168.123.150:192.168.123.1:255.255.255.0::eth0:off console=ttyS0,115200n8'
saveenv

启动内核

boot

不知道为什么,使用debian这个用户无法登录。无奈只有使用root登录。

arm login:root
Password:root

至此,beagleboneblack(BBB)开发板使用NFS挂载根文件系统,tftp下载镜像与设备树成功完成。祝你好运!

参考教程

Beaglebone black 上手教程--uboot_风摇烨的博客-CSDN博客_beaglebone black uboot

制作beagleboneblack系统镜像并从SD卡启动_星空下的夜行的博客-CSDN博客

make modules 和 make modules_install_hello_courage的博客-CSDN博客_make modules_install

Ubuntu 18.04 Server 设置静态IP 的方法 - 腾讯云开发者社区-腾讯云 (tencent.com)


http://www.ppmy.cn/news/911916.html

相关文章

数据结构与算法基础ppt

根据数据结构C语言版第2版书编写。想要电子书的童鞋可以私我 B站学习地址 9.13开始 9.29更新到p118 线性表 2.1线性表的定义和特点 P10 2.2 案例引入 p11 2.3 线性表的类型定义 p12 2.4 线性表的顺序表示和实现1 p13 2.4 线性表的顺序表示和实现2 p14 P15 第02周06–类C语言…

ia笔记总结

HCIA 计算机 使用二进制语言 应用层&#xff1a;人机交互的接口&#xff0c;自然语言转化为编码表示层&#xff1a;编码–>二进制&#xff0c;翻译介质访问控制层&#xff1a;控制硬件物理层:CPU 对等网 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接…

golang打包后在另一台电脑运行报错/lib64/libc.so.6: version `GLIBC_xxxx‘ not found解决方案

前言 最近使用golang打包项目出现个问题报错/lib64/libc.so.6: version GLIBC_xxxx’ not found&#xff0c;很多人都说需要安装GLIBC解决&#xff0c;但是这里有个误区&#xff0c;好像CGO库是依赖glibc的&#xff08;具体的我也没有考证&#xff09;就是我根部就没有使用CGO…

jakarta ee_Jakarta EE社区之声:Jakarta EE的未来是什么?

jakarta ee 本月初&#xff0c;Jakarta EE社区成员被邀请参加Jakarta EE社区之声文档 &#xff0c;该文档重点关注Jakarta EE规范的技术创新。 本文档中的内容反映了参与者对他们希望贡献时间的领域的个人观点。 但是&#xff0c;必须提及的是&#xff0c;它们并不代表硬性承诺…

C#正则表达式通过HTML提取网页中的图片src

C#正则表达式通过HTML提取网页中的图片src 原文: C#正则表达式通过HTML提取网页中的图片src 目前在做HoverTreeCMS项目中有处理图片的部分&#xff0c;参考了一下网上案例&#xff0c;自己写了一个获取内容中的图片地址的方法。可以先看看效果&#xff1a;http://tool.hovertre…

leetcode|math|9.172.69.50.

9. Palindrome Number to_string 就行 172. Factorial Trailing Zeroes 不能直接乘起来&#xff0c;会overflow&#xff01;&#xff01; 166! 就是要找166乘到1一共有几个5。5&#xff0c;10&#xff0c;15&#xff0c;25...都算。166/5就是算一共有几个5。但是25其实贡献了…

2023-07-16 LeetCode每日一题(树中距离之和)

2023-07-16每日一题 一、题目编号 834. 树中距离之和二、题目链接 点击跳转到题目位置 三、题目描述 给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges &#xff0c; edges[i] [ai, bi]表示树中的节点 ai 和 bi 之间有…

linux系统优化设置及软件集合

说明:部分条目没有实践,同时有一些重复的内容,以后改进. 1.更快速的打开网页&#xff0c;在firefox浏览器地址拦里输入about:config 找下面的选项进行修改吧: network.dns.disableIPv6 -> true network.http.pipelining -> true network.http.pipelining.maxrequests -&g…