buildroot nfs 挂载
服务器开启 tftp 用来传输 dtb 和 kernel vmimage
配置 tftp 服务端
首先安装 tftp 服务, sudo apt install tftpd-hpa
,然后检查服务是否启动,sudo systemctl status tftpd-hpa
,这个需要等待一会才能返回信息。
然后配置 tftp 服务, sudo vim /etc/default/tftpd-hpa
,username 这一项要和 tftp 目录的 owner 相对应,address 是对应的端口号, options 中的 secure 是自动更新目录,create 是可以创建和上传文件。
修改如下:
TFTP_DIRECTORY="/tftpboot"
然后是配置 tftp 目录:
sudo mkdir /tftp
sudo chown tftp:tftp /tftp
接着是重启并检查状态:
sudo systemctl restart tftpd-hpa
sudo systemctl status tftpd-hpa
在客户端安装 tftp 客户端,测试服务端有没有问题。
首先安装 tftp 客户端 sudo apt install tftp-hpa
, 然后再服务器端使用 ifconfig
或者 ip -a
来获取服务器地址,然后再客户端使用 tftp 192.168.0.10
类似的命令来连接上服务器端的 tftp 服务。
在 tftp 的环境下,输入 verbose
开启 verbose 模式,然后可以通过 get xxx.txt
来下载文件,通过 put xxx.txt
来上传文件。 都是从当前目录进行上传和下载,最后使用 quit
来退出 tftp 模式。
可以使用 ?
或者 help
来查询命令。
参考:
https://linuxhint.com/install_tftp_server_ubuntu/ https://wangchujiang.com/linux-command/c/tftp.html
服务器开启 nfs 用来共享 rootfs
配置 nfs 服务器端
首先安装nfs,sudo apt install nfs-kernel-server
.
然后创建 nfs 文件夹, sudo mkdir -p /nfs/rootfs/
, 然后因为 nfs 传输 root 属性的文件时会改为 nobody:nogroup
,所以需要修改文件夹的 owner,sudo chown nobody:nogroup /nfs/rootfs/
。
然后修改 exports,sudo vim /etc/exports
,内容增加 /nfs/rootfs *(rw,sync,no_root_squash)
。
然后重启 nfs 服务,sudo systemctl restart nfs-kernel-server
。
然后检查 ufw 状况, sudo ufw status
,如果启动,那么需要 sudo ufw allow from 203.0.113.24 to any port nfs
类似这样的来放行。
安装 nfs 客户端
首先安装 nfs, sudo apt install nfs-common
.
然后新建测试文件夹,mkdir nfs_test
挂载nfs,sudo mount 192.168.0.10:/nfs/rootfs /home/xyz/nfs_test/
使用 df -h
可以查看挂载的情况,使用 du -sh ./nfs_test/
可以查看文件夹内部使用情况。
测试
在客户端上创建一个文件,在客户端上就能够查看到,使用 ll
命令可以查看 owner,如果在服务器端配置 exports 里面的 no_root_squash
,那么就是 root,否则就是 nobody:nogroup
参考:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04 https://blog.csdn.net/flfihpv259/article/details/53926871?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-8.control&dist_request_id=1332042.22423.16193225079781727&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-8.control https://blog.csdn.net/qq_36357820/article/details/78488077
修改内核
修改内核中的选项
File systems --->
[*] Network File Systems --->
<*> NFS client support
<*> NFS client support for NFS version 2
<*> NFS client support for NFS version 3
[*] Root file system on NFS
General setup --->
[N] Initial RAM filesystem and RAM disk (initramfs/initrd) support
准备文件
准备内核和设备树
复制 boot.img 和 dtb.img 到 tftp 目录
修改boot
修改 uboot 变量
setenv nfsfile boot.img
setenv rootpath /nfs/rootfs/
setenv ipaddr 10.15.5.3
setenv serverip 10.15.5.30
setenv nfsargs 'set bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} proto=tcp nfsvers=3 clkin_hz=(25000000) earlyprintk=serial,uart0,115200 console=ttySC0,115200 mem=224M'
setenv nfsboot 'tftp ${loadaddr} ${nfsfile};tftp ${dtbaddr} ${dtbfile};run nfsargs;run addip;bootm ${loadaddr} - ${dtbaddr}'
setenv bootcmd run nfsboot
测试网络
使用 ping
来测试和服务器之间通不通。
下载内核
tftp
参考:
https://docs.khadas.com/zh-cn/vim3/LoadImagesWithUBootViaTFTP.html https://blog.csdn.net/Slade99X/article/details/104774142