移植busybox 以及从nfs启动系统
作者:互联网
然后再给虚拟机添加一个网卡,指定连接到vmnet0:
进入虚拟机给虚拟网卡分配地址:
sudo vim /etc/netplan/00-installer-config.yaml
我的配置如下:
network: version: 2 bonds: {} bridges: {} ethernets: ens33: addresses: - 192.168.112.3/24 dhcp4: false dhcp6: false gateway4: 192.168.112.2 nameservers: addresses: - 192.168.112.2 ens35: addresses: - 192.168.8.3/24 dhcp4: false dhcp6: false routes: - to: 192.168.8.0/24 via: 192.168.8.2 vlans: {} wifis: {}
ens35 就是vmnet0桥接到usb网卡上,注意不要使用gateway4配置网关否则开机生成双默认网关,虚拟机连外网会有问题
route -n
使用上面的命令查看路由表如下:
streleizia@ubuntu:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.112.2 0.0.0.0 UG 0 0 0 ens33 192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 ens35 192.168.8.0 192.168.8.2 255.255.255.0 UG 0 0 0 ens35 192.168.112.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 streleizia@ubuntu:~$
可以看到默认只有一个默认路由(destination 为 0.0.0.0)的网关为外网网卡(192.168.112.2)这样访问外网的流量就不会错误地发到内网网关那里。
另外双网卡可能会导致主机(windows)的联网出现问题,可以查看主机路由表(cmd 下输入route print查看)再删除指向usb网卡的路由即可,并且配置外网网卡的默认路由如下:
IPv4 路由表 =========================================================================== 活动路由: 网络目标 网络掩码 网关 接口 跃点数 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.107 35 127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331 127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331 127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331 192.168.1.0 255.255.255.0 在链路上 192.168.1.107 291 192.168.1.107 255.255.255.255 在链路上 192.168.1.107 291 192.168.1.255 255.255.255.255 在链路上 192.168.1.107 291 192.168.112.0 255.255.255.0 在链路上 192.168.112.1 291 192.168.112.1 255.255.255.255 在链路上 192.168.112.1 291 192.168.112.255 255.255.255.255 在链路上 192.168.112.1 291 224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331 224.0.0.0 240.0.0.0 在链路上 192.168.112.1 291 224.0.0.0 240.0.0.0 在链路上 192.168.1.107 291 255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331 255.255.255.255 255.255.255.255 在链路上 192.168.112.1 291 255.255.255.255 255.255.255.255 在链路上 192.168.1.107 291 =========================================================================== 永久路由: 网络地址 网络掩码 网关地址 跃点数 0.0.0.0 0.0.0.0 192.168.1.1 1 ===========================================================================
192.168.1.1是家里路由器的地址
最后注意将主机的usb网卡配置到和虚拟机同网段下,如图:
总结:
usb网卡ip 手动配置为:192.168.8.2
虚拟机ip手动配置为: 192.168.8.3 网关为 192.168.8.2
开发板ip手动配置为: 192.168.8.100网关为 192.168.8.2(后面会配置)
互相ping一下如果能ping通就算成功了,如果ping Windows 主机无返回是因为主机防火墙没关(只影响ping,不影响后面的nfs和tftp的传输),另外linux的虚拟机防火墙也有可能会是开启状态,关掉就行了
3.配置软件环境
网路搭建完成,剩下就是安装各种软件了,在ubuntu下使用以下命令安装软件包:
sudo apt-get install tftpd tftp xinetd nfs-kernel-server vsftpd
然后逐一配置:
首先配置ftp:
sudo vi /etc/vsftpd.conf
将其中以下配置前的#号去掉
#local_enable=YES #write_enable=YES
保存后使用以下命令重启服务:
sudo /etc/init.d/vsftpd restart
其次配置tftp:
先在喜欢的位置创建一个文件夹,我选则的是在home目录下创建nfs_root目录
streleizia@ubuntu:~/nfs_root$ pwd
/home/streleizia/nfs_root #可以看到路径为:/home/streleizia/nfs_root
streleizia@ubuntu:~/nfs_root$ tree -d
.
├── fs_mini #busybox安装在这个文件夹里
│ ├── bin
│ ├── dev
│ ├── etc
│ │ └── init.d
│ ├── lib
│ ├── mnt
│ ├── proc
│ ├── root
│ ├── sbin
│ ├── sys
│ ├── tmp
│ └── usr
│ ├── bin
│ └── sbin
└── fs_mini_mdev
├── bin
├── dev
├── etc
│ └── init.d
├── lib
├── mnt
├── proc
├── root
├── sbin
├── sys
├── tmp
└── usr
├── bin
└── sbin
30 directories
streleizia@ubuntu:~/nfs_root$
sudo vi /etc/xinetd.d/tftp
打开配置文件后输入以下内容:
service tftp { socket_type =dgram protocol =udp wait =yes user =root server =/usr/sbin/in.tftpd server_args =-s /home/streleizia/tftp_root #注意这里的路径和上面创建的一致 disable =no per_source =11 cps =100 2 flags =IPv4 }
sudo /etc/init.d/xinetd restart
重启服务没有报错就ok
sudo vi /etc/exports
最后配置nfs:
打开nfs的配置文件添加配置内容如下:
# /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) /home/streleizia/workspace/yaffs2_tool/nfs_root *(rw,sync,no_root_squash) #这里我创建了三个nfs目录分别是用不同方式构建的根文件系统 /home/streleizia/nfs_root/fs_mini *(rw,sync,no_root_squash) #注意观察和上面创建的目录路径一致
/home/streleizia/nfs_root/fs_mini_mdev *(rw,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart
重启服务没有报错就ok
重点来了,unbuntu18.04自动安装的nfs版本太高和2.6.22kernel的版本不符,导致nfs不能挂载,内核卡在:
VFS: Unable to mount root fs via NFS, trying floppy
解决方法参考文章:
https://blog.csdn.net/Qiuoooooo/article/details/112601940
即:在/etc/default/nfs-kernel-server添加RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog",重启NFS即可
4.测试nfs
tftp配和uboot烧写内核镜像,这里不再赘述详细方法,注意使用配套的根文件系统和内核镜像,最好是在nand上可以正常启动,在uboot中设置启动参数如下:
bootargs=noinitrd root=/dev/nfs nfsroot=192.168.8.3:/home/streleizia/nfs_root/fs_mini ip=192.168.8.100:192.168.8.3:192.168.8.2:255.255.255.0:linux:eth0:off init=/linuxrc console=ttySAC0
boot内核,输出信息,成功启动到busybox命令行!
drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver TCP cubic registered NET: Registered protocol family 1 s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #5 op:APP_CMD(55) arg:0x00000000 flags:0x0875 retries:0 Status:nothing to complete s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #6 op:APP_CMD(55) arg:0x00000000 flags:0x0875 retries:0 Status:nothing to complete s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #7 op:ALL_SEND_OCR(1) arg:0x00000000 flags:0x0861 retries:0 Status:nothing to complete s3c2440-sdi s3c2440-sdi: powered down. drivers/rtc/hctosys.c: unable to open rtc device (rtc0) eth0: link down IP-Config: Complete: device=eth0, addr=192.168.8.100, mask=255.255.255.0, gw=192.168.8.2, host=linux, domain=, nis-domain=(none), bootserver=192.168.8.3, rootserver=192.168.8.3, rootpath= Looking up port of RPC 100003/2 on 192.168.8.3 eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1 Looking up port of RPC 100005/1 on 192.168.8.3 VFS: Mounted root (nfs filesystem). Freeing init memory: 128K init started: BusyBox v1.7.0 (2008-01-22 10:04:09 EST) starting pid 751, tty '': '/etc/init.d/rcS' Please press Enter to activate this console. starting pid 754, tty '/dev/ttySAC0': '/bin/sh' # ls bin etc linuxrc proc sbin tmp dev lib mnt root sys usr #
标签:busybox,0.0,192.168,255.255,nfs,链路,root,移植 来源: https://www.cnblogs.com/streleizia/p/16602558.html