新唐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)

新唐NUC980使用记录:在用户应用中使用GPIO

新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)

新唐NUC980使用记录:开发环境准备与编译配置基础说明

新唐NUC980使用记录:在驱动程序中使用GPIO