打印
[应用方案]

访问以太网(LAN8720A) & 启用SSH

[复制链接]
237|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sj8zw8|  楼主 | 2023-6-27 09:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
目的
这篇文章主要测试访问以太网(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/
1
2
修改配置选项:

make menuconfig
1


除了上面的配置外还需要修改内核中一行代码:

# cp drivers/char/random.c drivers/char/random.c.original
gedit drivers/char/random.c
1
2
第927行由 !time_after(now, fast_pool->last + HZ)) 修改为下面这样:

!time_after(now, fast_pool->last + HZ) && nonblocking_pool.initialized)
1
调整保存后重新编译拷贝内核:

export PATH=$PATH:/home/nx/nuc980-sdk/arm_linux_4.8/bin
make uImage
# cp ../image/980uimage /media/nx/BOOT/


使用特权

评论回复
评论
sj8zw8 2023-6-27 09:30 回复TA
———————————————— 版权声明:本文为CSDN博主「Naisu Xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Naisu_kun/article/details/125452434 
沙发
sj8zw8|  楼主 | 2023-6-27 09:31 | 只看该作者
经过上面的调整就可以访问网络了:
使用 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

使用特权

评论回复
板凳
sj8zw8|  楼主 | 2023-6-27 09:31 | 只看该作者
按照前面方式对内核代码调整后 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/
1
2
修改配置选项:

make menuconfig

使用特权

评论回复
地板
sj8zw8|  楼主 | 2023-6-27 09:32 | 只看该作者
配置目标平台:

使用特权

评论回复
5
sj8zw8|  楼主 | 2023-6-27 09:33 | 只看该作者
配置编译工具链:

使用特权

评论回复
6
sj8zw8|  楼主 | 2023-6-27 09:33 | 只看该作者
启用SSH功能:

使用特权

评论回复
7
sj8zw8|  楼主 | 2023-6-27 09:34 | 只看该作者
设置root用户密码 & 配置eth0自动通过DHCP服务获得IP:

使用特权

评论回复
8
sj8zw8|  楼主 | 2023-6-27 09:44 | 只看该作者
上面的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)
1
2
3
4
5
配置完成后直接编译即可:

make
1
初次编译过程比较漫长,期间还会自动下载相关组件(如果自动下载失败可以手动下载放到dl文件夹中,然后重新编译)。

编译完成后 output 目录下的 host 目录中就是编译rootfs用的交叉编译工具链(toolchain); output 目录下的 images 目录中的 rootfs.tar 就是生成的根文件系统。

使用特权

评论回复
9
sj8zw8|  楼主 | 2023-6-27 09:49 | 只看该作者
上面生成的交叉编译工具链也可以用于后期编译 application 使用,可以使用下面方式将它临时添加到环境:

# export PATH=$PATH:/home/nx/nuc980-sdk/buildroot-2022.02.3/output/host/bin
1
编译生成根文件系统后替换使用即可:

sudo rm -rf /media/nx/rootfs/*
sudo tar -xf output/images/rootfs.tar -C /media/nx/rootfs/
1
2
新的根文件系统中需要对sshd的配置文件稍作修改:

sudo gedit /media/nx/rootfs/etc/ssh/sshd_config
1
要修改的内容如下:

# 32行 允许root用户进行ssh访问
PermitRootLogin yes

# 57行 允许使用密码进行ssh访问
PasswordAuthentication yes

使用特权

评论回复
10
sj8zw8|  楼主 | 2023-6-27 09:52 | 只看该作者
处理完成后就可以进行测试了:
如果是初次启动的话会在 ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 这里花一些时间。

使用特权

评论回复
11
sj8zw8|  楼主 | 2023-6-27 09:53 | 只看该作者
SSH除了可以远程访问,还可以使用SFTP和SCP功能,可以通过网络直接访问文件系统或是拷贝文件(甚至可以直接通过网络更新内核),对开发使用来说非常方便:

使用特权

评论回复
12
sj8zw8|  楼主 | 2023-6-27 09:55 | 只看该作者

使用特权

评论回复
13
sj8zw8|  楼主 | 2023-6-27 09:55 | 只看该作者
总结
对于Linux来说网络和SSH是非常重要的功能,可以极大的提升开发和使用的便利性,越早开启越好。经过上面的操作就可以在NUC980上实现基本的网络功能了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

241

帖子

1

粉丝