新唐NUC980使用记录:访问以太网(LAN8720A) & 启用SSH
Posted Naisu Xu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新唐NUC980使用记录:访问以太网(LAN8720A) & 启用SSH相关的知识,希望对你有一定的参考价值。
文章目录
目的
这篇文章主要测试访问以太网(PHY为LAN8720A)以及启用SSH。
这篇文章中内容均在下面的开发板上进行测试:
《新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)》
开发板上NUC980 RMII0接口通过LAN8720A(ADDR=0)访问网络。LAN8720A是SMSC公司的以太网PHY芯片,所以后面驱动文件也以这个命名。
这篇文章是在下面文章基础上进行的:
《新唐NUC980使用记录:开发环境准备与编译配置基础说明》
《新唐NUC980使用记录:U-Boot & Linux 编译与烧录(基于SD1位置SD卡)》
修改内核以访问以太网
访问以太网需要对Linux Kernel进行调整重新编译。
cd ~/nuc980-sdk/
cd NUC980-linux-4.4.y/
修改配置选项:
make menuconfig
除了上面的配置外还需要修改内核中一行代码:
# cp drivers/char/random.c drivers/char/random.c.original
gedit drivers/char/random.c
第927行由 !time_after(now, fast_pool->last + HZ))
修改为下面这样:
!time_after(now, fast_pool->last + HZ) && nonblocking_pool.initialized)
调整保存后重新编译拷贝内核:
export PATH=$PATH:/home/nx/nuc980-sdk/arm_linux_4.8/bin
make uImage
# cp ../image/980uimage /media/nx/BOOT/
经过上面的调整就可以访问网络了:
使用 udhcpc -i eth0
开启网卡并自动获取IP地址
前面调整中对内核代码的修改主要是为了后面启用网络和SSH服务时的优化。如果不修改那么内核启动过程中会在network或sshd启动过程中阻塞几分钟,直至出现 random: nonblocking pool is initialized
后才会继续,比如下面:
Initializing random number generator: OK
Saving random seed: random: dd: uninitialized urandom read (512 bytes read, 7 bits of entropy available)
OK
Starting network: OK # 这里会阻塞很久,直到下面一行出现
random: nonblocking pool is initialized
Starting sshd: OK
按照前面方式对内核代码调整后 random: nonblocking pool is initialized
很快就会出现。相关内容可以参考下面:
https://lore.kernel.org/lkml/20150713202504.GF32078@Sligo.logfs.org/
制作根文件系统并启用SSH
SSH功能需要在rootfs中添加相关程序(openssh),这里直接使用buildroot制作包含openssh的rootfs。
cd ~/nuc980-sdk/
cd buildroot-2022.02.3/
修改配置选项:
make menuconfig
配置目标平台:
配置编译工具链:
启用SSH功能:
设置root用户密码 & 配置eth0自动通过DHCP服务获得IP:
上面的Network interface to configure through DHCP选项设置后会在生成的rootfs的 /etc/network/interfaces 文件后会添加下面内容:
auto eth0
iface eth0 inet dhcp
pre-up /etc/network/nfs_check
wait-delay 15
hostname $(hostname)
配置完成后直接编译即可:
make
初次编译过程比较漫长,期间还会自动下载相关组件(如果自动下载失败可以手动下载放到dl文件夹中,然后重新编译)。
编译完成后 output 目录下的 host 目录中就是编译rootfs用的交叉编译工具链(toolchain); output 目录下的 images 目录中的 rootfs.tar 就是生成的根文件系统。
上面生成的交叉编译工具链也可以用于后期编译 application 使用,可以使用下面方式将它临时添加到环境:
# export PATH=$PATH:/home/nx/nuc980-sdk/buildroot-2022.02.3/output/host/bin
编译生成根文件系统后替换使用即可:
sudo rm -rf /media/nx/rootfs/*
sudo tar -xf output/images/rootfs.tar -C /media/nx/rootfs/
新的根文件系统中需要对sshd的配置文件稍作修改:
sudo gedit /media/nx/rootfs/etc/ssh/sshd_config
要修改的内容如下:
# 32行 允许root用户进行ssh访问
PermitRootLogin yes
# 57行 允许使用密码进行ssh访问
PasswordAuthentication yes
处理完成后就可以进行测试了:
如果是初次启动的话会在 ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
这里花一些时间。
SSH除了可以远程访问,还可以使用SFTP和SCP功能,可以通过网络直接访问文件系统或是拷贝文件(甚至可以直接通过网络更新内核),对开发使用来说非常方便:
总结
对于Linux来说网络和SSH是非常重要的功能,可以极大的提升开发和使用的便利性,越早开启越好。经过上面的操作就可以在NUC980上实现基本的网络功能了。
以上是关于新唐NUC980使用记录:访问以太网(LAN8720A) & 启用SSH的主要内容,如果未能解决你的问题,请参考以下文章
新唐NUC980使用记录:使用wpa_supplicant访问无线网络
新唐NUC980使用记录:向内核添加USB无线网卡驱动(基于RTL8188EUS)