15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

作者标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

Author Archive by stormwind

【JESD】JESD204b建链过程

     ┌───────────────┐
     │ 上电或复位     │
     └──────┬────────┘
            ↓
     ┌──────┴────────┐
     │ FPGA 拉低 SYNC~│ ← 通知 ADC 停止发数据
     └──────┬────────┘
            ↓
     ┌──────┴────────────┐
     │ ADC 发送 CGS(K28.5)│ ← 帮助 FPGA 实现字符边界对齐、CDR 锁定
     └──────┬────────────┘
            ↓
     ┌──────┴──────────────┐
     │ FPGA 识别 CGS 并拉高 SYNC~│ ← 表示准备接收 ILAS
     └──────┬──────────────┘
            ↓
     ┌──────┴────────────────────┐
     │ ADC 发送 ILAS(4 Multi-Frame) │ ← 传输 JESD 参数 & 多 Lane 对齐
     └──────┬────────────────────┘
            ↓
     ┌──────┴────────────────────┐
     │ FPGA 检查 ILAS 是否一致     │ ← 校验 F、K、M、L、S 等参数
     └──────┬────────────────────┘
            ↓
     ┌──────┴─────────────┐
     │ 进入数据传输状态(DATA) │ ← 链路 Ready!
     └────────────────────┘

✅ 1️⃣ CGS 阶段(Code Group Synchronization)

  • 由 FPGA 拉低 SYNC~ 启动
  • ADC 发送大量 /K28.5/ 控制符
  • 目的:
    • CDR 锁相
    • 找字节边界
    • 准备 ILAS 的同步基准

✅ 2️⃣ ILAS 阶段(Initial Lane Alignment Sequence)

  • FPGA 检测到 CGS 后 → 拉高 SYNC~
  • ADC 立即开始发 4 个多帧(Multi-Frame),内容包括:
    • 帧对齐符号(K28.0/K28.4/K28.7)
    • JESD 参数字段(F/K/M/S/L 等)
    • Lane ID、Device ID 等
  • 作用:
    • 多 Lane 数据对齐
    • 参数一致性校验
    • Subclass 1 中 LMFC 的同步参考点

✅ 3️⃣ 数据传输阶段(Data)

  • ILAS 正确接收后,进入正常传输状态
  • ADC 开始发送连续的数据帧
  • FPGA 开始解码并送入 AXI 或 FIFO 接口
  • 若中途链路错误、同步丢失,可能自动退回 CGS

🧠 Subclass 特殊流程说明(Subclass 1)
在 Subclass 1 中,额外存在:

  • SYSREF 信号输入
  • LMFC(Local Multi-Frame Clock)生成
  • ILAS 必须与 LMFC 对齐(边界固定)
  • 所以 SYSREF + ILAS 联合实现“确定性延迟”

🧪 JESD204B 状态机(简略)

状态描述
CGS接收 K28.5,同步 CD & 边界
ILAS接收 4 个多帧的初始化参数
CHECK校验 JESD 配置是否匹配
DATA正常数据传输
LOST如果出现错误,状态机会跳回 CGS 重建链路

📦 FPGA 中实现建链过程的模块

模块功能
GT Transceiver串行解码、CDR、8b10b 编码/解码
JESD204 RX IP包含链路状态机(CGS/ILAS/DATA),配置校验等
SYNC~ 控制控制建链流程,通常是输出引脚连到 ADC SYNC
SYSREF 输入Subclass 1 中的外部同步输入

✅ 总结

阶段关键信号发射方行为接收方行为
CGSSYNC~ = 0发 /K28.5/边界同步、CDR 锁定
ILASSYNC~ = 1发 4 个多帧(含参数)解码 JESD 参数、同步 LMFC
DATASYNC~ = 1发真实采样数据数据解帧、传送到用户逻辑

【飞腾】S5000C处理器SE_RECOVERY双BIOS镜像机制分析

概述

飞腾S5000C处理器支持双BIOS镜像(Dual BIOS)功能,通过SE_RECOVERY硬件引脚和Reset Source状态寄存器实现主备镜像的切换。当主BIOS镜像损坏时,可以通过硬件触发方式切换到备份镜像启动,提高系统可靠性。

一、硬件机制

1.1 Reset Source状态寄存器

S5000C芯片内部集成了一个 Reset Source硬件状态寄存器 ,用于记录芯片复位的原因。该寄存器由芯片硬件自动设置,软件通过SMC(Secure Monitor Call)调用读取。

Reset Source取值定义:

含义说明
0x01PowerOn Reset上电复位
0x04SoftWare Warm Reset软件热复位
0x05RecoverSE_RECOVERY 恢复模式
0x80Watchdog Reset看门狗复位
0x100PII ResetPLL 复位
0xAAS3 ResetS3 休眠恢复
0xA9Standby Reset待机恢复

1.2 SE_RECOVERY引脚

SE_RECOVERY是S5000C芯片的一个 硬件配置引脚 ,在芯片复位时刻被采样:

  • 正常状态(高电平) :芯片按正常流程启动,Reset Source = 0x01或0x04
  • 拉低状态 :芯片进入Recover模式,Reset Source = 0x05
    重要 :SE_RECOVERY引脚的状态只在 复位时刻 被采样,因此需要先拉低该引脚,然后触发芯片复位。

二、固件打包机制

2.1 Pack工具配置

在 s5000c_pack-V1.30 打包工具中,通过Kconfig配置启用双镜像功能:

config RECOVER_ENABLE
    bool "recover enable"
    default n

if RECOVER_ENABLE
    menu "recover config"
    config RECOVER_BL33
        hex "config bl33 recover address"
        default 0x800000
    config RECOVER_BL32
        hex "config bl32 recover address"  
        default 0xc00000
    endmenu
endif

bl33_recovery的地址在0x800000

bl32_recovery的地址在0xc00000

2.2 镜像存放位置

双镜像文件存放结构:

s5000c_pack-V1.30/
├── pbf_bin/v1_30/             # ATF编译生成的默认镜像
│   ├── bl33.bin
│   └── bl33_recover.bin
└── ...

2.3 Flash地址布局

打包后的固件在SPI Flash中的布局:

镜像Flash 偏移地址大小说明
BL1 (Boot ROM)0x000000启动代码
FIP (BL2/BL31)ARM Trusted Firmware
BL33 (主镜像)0x500000 (5MB)根据实际正常启动的 UEFI
BL33_RECOVER0x800000 (8MB)根据实际备份 UEFI 镜像
BL32/BL32_RECOVER0xb00000 (11MB)根据实际TEE 镜像(可选)

三、启动流程

3.1 正常启动流程

芯片上电/复位
    ↓
硬件采样SE_RECOVERY引脚 = 高电平
    ↓
Reset Source = 0x01 (PowerOn) 或 0x04 (Soft Reset)
    ↓
BL1 (Boot ROM) 运行
    ↓
读取Reset Source = 0x01/0x04
    ↓
从Flash 0x500000加载BL33 (主镜像)
    ↓
启动正常UEFI

3.2 Recovery启动流程

外部拉低SE_RECOVERY引脚
    ↓
触发芯片复位(上电或软复位)
    ↓
硬件采样SE_RECOVERY引脚 = 低电平
    ↓
Reset Source = 0x05 (Recover)
    ↓
BL1 (Boot ROM) 运行
    ↓
读取Reset Source = 0x05
    ↓
从Flash 0x800000加载BL33_RECOVER (备份镜像)
    ↓
启动备份UEFI

四、软件实现

4.1 UEFI中获取Reset Source

在UEFI代码中,通过PSSI库获取Reset Source:

// PssiLib.c
UINT32
PssiGetResetSource (VOID)
{
  ARM_SMC_ARGS  ArmSmcArgs;

  ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));
  ArmSmcArgs.Arg0 = PSSI_GET_RST_SOURCE;  // SMC调用号: 0xC2000F01
  ArmCallSmc (&ArmSmcArgs);

  // 返回值即为Reset Source
  // 0x01=PowerOn, 0x04=SoftReset, 0x05=Recover...
  return ArmSmcArgs.Arg0;
}

4.2 Boot Mode设置

UEFI根据Reset Source设置Boot Mode:

// PlatformPei.c
EFI_BOOT_MODE  BootMode;

// 获取硬件复位源
RstSource = GetResetSource();
DEBUG ((DEBUG_INFO, "Check reset source : 0x%x\n", RstSource));

// 设置UEFI Boot Mode
Status = PeiServicesSetBootMode (ArmPlatformGetBootMode ());
Status = PeiServicesGetBootMode (&BootMode);

// 如果是Recover模式,安装Recovery Boot Mode PPI
if (BootMode == BOOT_IN_RECOVERY_MODE) {
    Status = PeiServicesInstallPpi (&mPpiListRecoveryBootMode);
}

4.3 打包脚本处理

在 theone 打包脚本中,双镜像的处理逻辑:

# 固件定义
BL33=bl33.bin                    # 主镜像
BL33_RECOVER=bl33_recover.bin    # 备份镜像

# 地址配置
bl33_base=0x500000               # 主镜像地址
bl33_recover_addr=0x800000       # 备份镜像地址

# 如果启用recover功能
if [ "$recover_enable" = "y" ];then
    # 创建recover镜像证书
    echo "create bl33 recover info"
    bl33_size=$(wc -c $BL33_RECOVER | awk '{print $1}')
    my_scripts/cert_info.sh $bl33_recover_addr $bl33_size bl33_info.
    bin
    dd if=bl33_info.bin of=$INFO bs=16 seek=1 conv=notrunc
fi

bl33.bin bl33_recover.bin放到pbf_bin文件夹里

五、实际应用场景

5.1 主BIOS损坏恢复

场景 :主BIOS镜像(0x500000)损坏,系统无法正常启动

恢复步骤 :

  1. 硬件设计中将SE_RECOVERY引脚连接到跳线或按钮
  2. 用户短接SE_RECOVERY引脚到地(拉低)
  3. 按下复位按钮或重新上电
  4. 芯片检测到Reset Source = 0x05
  5. 自动从0x800000加载备份BIOS启动
  6. 进入系统后修复主BIOS镜像

5.2 BIOS升级失败恢复

场景 :BIOS升级过程中断电,导致主镜像损坏

恢复机制 :

  • 备份镜像保持不变
  • 通过SE_RECOVERY触发恢复模式
  • 使用备份镜像启动后重新升级

六、总结

飞腾S5000C的SE_RECOVERY双BIOS镜像机制通过 硬件引脚 + 状态寄存器 + 固件支持 实现了可靠的故障恢复能力:

  1. 硬件层 :SE_RECOVERY引脚在复位时刻被采样,Reset Source寄存器记录复位原因
  2. 固件层 :BL1根据Reset Source决定从哪个Flash地址加载BL33镜像
  3. 工具层 :Pack工具支持双镜像打包,配置备份镜像地址
  4. 应用层 :UEFI可检测Recovery模式,执行不同的初始化流程
    这种设计确保了即使主BIOS镜像损坏,系统仍可以通过硬件触发方式从备份镜像启动,大大提高了系统的可靠性和可维护性。

【网分】史密斯圆图调试天线阻抗匹配指导【网分】

一、引言

在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。

一、引言

在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。

图3 史密斯圆图阻抗圆

图4 史密斯圆图导纳圆

图5 左电导圆/并L/逆时针

图6 左电导圆/并C/顺时针

图7 右电阻圆/串L/顺时针

图7 右电阻圆/串L/顺时针

图8 右电阻圆/串C/逆时针

三、阻抗匹配步骤

1、软件仿真

使用鼎阳的矢网测试2.4G天线的S11,将显示格式切换为史密斯圆图,测得2.4G频点处的阻抗为10+10j,将数据点添加到仿真软件中。

图9 天线2.4G频点原始阻抗

为了将阻抗点匹配到史密斯圆图正中心的50Ω处,先串联L使得数据点沿着电阻圆顺时针移动到与50Ω等电导圆的交叉位置,之后再并联C使得数据点沿着电导圆顺时针移动到50Ω匹配点。

图10

图11 天线2.4G频点串联L并联C后阻抗

2、网分仿真

鼎阳的矢量网络分析仪不仅具备高精度的S参数测试能力,同样集成了阻抗匹配仿真功能,可帮助工程师快速优化天线、滤波器、功放等射频电路的阻抗匹配设计。该功能基于史密斯圆图可视化分析,结合自动化计算与仿真工具,显著提升调试效率。

点击CAL按键 > 夹具仿真 > 夹具仿真设置 > 选择相应port > Circuit Model。

选择合适的匹配电路,设置电容电感值,最后勾选“Enable Port Matching…”,同时打开夹具仿真应用。

注意,双击“电路模型”可以将阻抗匹配窗口最小化,便于调试。

以下图中的设置为例,选择“Shunt C-Series L”(并联C-串联L),注意阻抗匹配时是从DUT往负载端看,所以实际上是先串联了2.15nH的电感L,再并联了8.5Pf的电容C,其他未使用到的参数(R/G)不做设置即可。橙色迹线Tr1是未进行匹配仿真的原始迹线,蓝色迹线Tr2是经过匹配仿真后的迹线,可以看到对应频点经过匹配后已经十分接近50Ω匹配点。

图12 鼎阳矢网史密斯圆图阻抗匹配仿真

四、总结

本文简单介绍了史密斯圆图在阻抗匹配中的核心原理,配合”上感下容,左并右串”等实用口诀,提升匹配网络设计效率。同时介绍鼎阳矢量网络分析仪的阻抗匹配仿真功能,让工程师更加快速便捷的完成天线、放大器、滤波器等器件的阻抗匹配。

【Linux】Linux创建虚拟硬盘脚本

#!/bin/bash

echo $1

diskP1=p1
diskP2=p2

if [[ $1 = "-h" || $1 = "-H" ]]; then
	echo "===========虚拟磁盘使用说明==========="
	echo "参数一:命令字,C-创建磁盘 D-删除磁盘 F-格式化磁盘 S-烧写固件 H-帮助"
	echo "参数二:硬盘大小,单位MB,最小硬盘1MB"
	echo "参数三:硬盘名称,自定义"
	echo "======================================"
	exit 1

else
	if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
        	echo "请输入有效的参数!"
        	exit 1
	elif [[ $1 = "-c" || $1 = "-C" ]]; then
		echo "开始创建虚拟磁盘!"
		dd if=/dev/zero of=$3 bs=1M count=$2
		# 非交互式执行 fdisk 命令
		# 这里的逻辑是:n(新建分区) -> p(主分区) -> 1(分区号) -> 回车(默认起始扇区) -> +10G(大小) -> w(保存)
		echo -e "n\np\n1\n\n+200M\nn\np\n\n\n\nw" | fdisk $3
		echo "创建磁盘完成!"
	elif [[ $1 = "-d" || $1 = "-D" ]]; then
		echo "开始删除虚拟磁盘!"
		sudo rm -rf $3

		echo "删除完成!"

	elif [[ $1 = "-f" || $1 = "-F" ]]; then
		echo "开始格式化虚拟磁盘!"
		sudo losetup -fP $3
		varInfo=$(losetup -l | grep $3)
		varInfo=(${varInfo//,/ })
		echo ${varInfo}

		sudo mkfs.fat ${varInfo}${diskP1}
		sudo mkfs.ext4 ${varInfo}${diskP2}

		sudo losetup -d $varInfo
		echo "格式化完成!"

	elif [[ $1 = "-s" || $1 = "-S" ]]; then
		echo "开始烧写固件!"
		sudo losetup -fP $3
		varInfo=$(losetup -l | grep $3)
                varInfo=(${varInfo//,/ })
                echo ${varInfo}
		sleep 1

		sudo mount ${varInfo}${diskP1} /mnt
		sudo cp Image s5000c-64c.dtb /mnt
		sync
		sudo umount /mnt
		sudo umount /mnt
		sleep 1

		sudo mount ${varInfo}${diskP2} /mnt
		sudo cp rootfs.tar /mnt
	        cd /mnt
		sudo tar -xvf rootfs.tar
		
		sleep 1	

		sync
		  
		sleep 5
		cd /
		sudo umount /mnt
		
		sudo umount /mnt
		sleep 1

		sudo losetup -d $varInfo
		echo "烧写完成!"

	fi


fi

【Linux】Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘

你可以通过以下步骤在Linux上虚拟一个磁盘,并将其挂载到 /mnt/ 目录下:

步骤 1: 创建一个虚拟磁盘文件

使用 dd 命令创建一个虚拟磁盘文件(例如大小为1GB):

dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=1024 

这将创建一个名为 virtual_disk.img 的1GB大小的文件。

步骤 2: 将虚拟磁盘文件格式化为ext4文件系统

使用 mkfs.ext4 命令将虚拟磁盘文件格式化为ext4文件系统:

mkfs.ext4 /root/virtual_disk.img 

步骤 3: 创建挂载点目录

创建一个挂载点,例如 /mnt/ 目录:

mkdir -p /mnt/virtual_disk 

步骤 4: 挂载虚拟磁盘文件

使用 mount 命令将虚拟磁盘挂载到 /mnt/virtual_disk

mount /root/virtual_disk.img /mnt/virtual_disk 

步骤 5: 检查挂载是否成功

使用 df -h 命令查看挂载是否成功:

df -h 

可选:开机自动挂载

如果希望在系统重启后自动挂载该虚拟磁盘,可以编辑 /etc/fstab 文件,添加以下内容:

/root/virtual_disk.img /mnt/virtual_disk ext4 defaults 0 0 

这样就成功在Linux系统上创建并挂载了一个虚拟磁盘文件。

单独挂载每个分区

在虚拟硬盘上创建分区并格式化后,可以单独挂载每个分区。具体步骤如下:

步骤 1: 使用 losetup 绑定虚拟硬盘到环回设备
假设你已经创建了一个虚拟硬盘文件,例如 /root/virtual_disk.img,并在其中创建了分区。首先,使用 losetup 将虚拟磁盘文件关联到一个环回设备(loop device):

losetup -fP /root/virtual_disk.img 
  • -f:自动选择一个未使用的环回设备。
  • -P:自动解析分区信息。

使用以下命令查看绑定的环回设备名(例如 /dev/loop0):

losetup -l 

步骤 2: 查看分区信息

使用 lsblk 或 fdisk -l 查看该环回设备的分区:

lsblk /dev/loop0 

或者:

fdisk -l /dev/loop0 

此时,你应该可以看到类似 /dev/loop0p1/dev/loop0p2 等分区。

步骤 3: 挂载单独的分区

假设你想挂载第一个分区 /dev/loop0p1,可以使用 mount 命令将其挂载到指定目录。例如,挂载到 /mnt/partition1

mkdir -p /mnt/partition1 
mount /dev/loop0p1 /mnt/partition1 

步骤 4: 检查挂载是否成功

使用 df -h 或 lsblk 检查分区是否成功挂载:

df -h 
lsblk 

可选:解除绑定环回设备

完成操作后,可以通过以下命令解除环回设备的绑定:

losetup -d /dev/loop0 

可选:开机自动挂载分区

如果希望分区在系统重启后自动挂载,可以在 /etc/fstab 中添加对应分区的挂载信息。例如:

/dev/loop0p1 /mnt/partition1 ext4 defaults 0 0 
/dev/loop0p2 /mnt/partition2 ext4 defaults 0 0 

通过上述步骤,你可以单独挂载虚拟磁盘中的每个分区。

losetup指令简介

losetup(set up and control loop devices) 是 Linux 中用于管理环回设备(loop devices)的命令。环回设备是一个虚拟设备,它将文件当作块设备来使用,从而可以像操作硬盘一样操作一个普通的文件。losetup 指令主要用于将文件与环回设备进行绑定或解除绑定,以及查看现有环回设备的状态。

基本用法

  1. 绑定一个文件到环回设备
losetup /dev/loopX /path/to/file.img 

将文件 /path/to/file.img 绑定到指定的环回设备 /dev/loopX,使其成为一个可以像物理硬盘一样操作的设备。

  1. 自动选择未使用的环回设备进行绑定
losetup -f /path/to/file.img 

-f 选项会自动查找并选择一个未使用的环回设备,避免手动指定。

3. 自动解析分区信息
losetup -fP /path/to/file.img 

-P 选项会自动扫描并解析文件中的分区表,使文件中的各个分区都能作为 /dev/loopXpN 设备挂载,类似于实际的硬盘分区。

4. 查看所有环回设备
losetup -a 

列出系统中所有已经绑定的环回设备及其关联的文件。

5. 查看特定环回设备的信息

losetup /dev/loopX

显示特定环回设备的详细信息。

6. 解除文件与环回设备的绑定
losetup -d /dev/loopX 

将环回设备 /dev/loopX 解除绑定,不再将其作为块设备使用。

7. 解除所有未使用的环回设备
losetup -D 

动解除所有未使用的环回设备的绑定。

常用选项
-f:自动查找一个未使用的环回设备。
-P:自动重新扫描分区表(适用于分区文件)。
-d:解除环回设备绑定。
-a:显示所有绑定的环回设备及其信息。
-l:列出系统中所有环回设备的详细信息。
-D:自动解除所有未使用的环回设备。

示例

  1. 创建并挂载一个虚拟磁盘:
dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=100 
losetup -fP /root/virtual_disk.img 
mkfs.ext4 /dev/loop0 
mount /dev/loop0 /mnt 

2.解除虚拟磁盘的挂载和解除环回设备绑定:

umount /mnt 
losetup -d /dev/loop0 

用环回设备挂载虚拟磁盘和ISO文件的区别

主要区别如下:

  1. 分区处理:
    • 虚拟磁盘分区 需要通过 losetup 解析出每个分区,并为每个分区创建独立的环回设备。
    • 光盘文件 没有分区,只需将整个文件绑定到一个环回设备。
  2. 设备数量:
    • 虚拟磁盘 可能涉及多个环回设备(一个表示整个磁盘,其他表示各个分区)。
    • 光盘文件 通常只需要一个环回设备。
  3. 文件系统:
    • 虚拟磁盘 支持多种文件系统,每个分区可以使用不同的文件系统类型。
    • 光盘文件 通常使用 ISO 9660 或 UDF 文件系统,且是只读的。
  4. 操作复杂性:
    • 虚拟磁盘分区 需要先解析分区表并绑定多个环回设备。
    • 光盘文件 直接挂载整个文件,操作简单。

【NFS】Linux开发挂载远程NFS服务器

一、NFS服务器配置

见下一个文章

【NFS】Ubuntu安装nfs服务器及使用教程 – 天英科技创新协会

二、Uboot挂在NFS服务器

1、nfs指令是否支持

可以通过编译uboot源码,menuconfig勾选来实现,具体编译方法不在此描述。

2、nfs指令使用

nfs 80800000 192.168.1.200:/home/xiaobao/workspace/nfs/rootfs/Image

nfs指令通过挂在192.168.1.200远端NFS服务器,把镜像文件Image加载到内存80800000

3、NFS版本兼容

  • NFS 版本不兼容导致的共享文件找不到
    • U-Boot 中 NFS 为 V2 版本
    • 服务端 NFS 为 V3、V4 版本

解决方案:

【NFS】VFS: Unable to mount root fs via NFS. [ 115.256801] devtmpfs: mounted【NFS】 – 天英科技创新协会

4、加载超时一直打印TTTTTTTTTTTTTTT

解决方案:
编辑服务端 /etc/hosts 文件:

sudo vim /etc/hosts

添加开发板 IP 和服务端 NFS 共享文件目录:

再次重启 NFS 服务:

sudo service nfs-kernel-server restart

三、kernel挂在NFS服务器

1、支持nfs客户端及网络环境

配置网络部分

	Networking support 
		Networking options 
			TCP/IP networking
			IP: kernel level autoconfiguration
			[*] IP: DHCP support
			[*] IP: BOOTP support

配置开启nfs服务

File systems 
	Network File Systems 
	<*> NFS client support 
	[*] NFS client support for NFS version 3
	[*] NFS client support for the NFSv3 ACL protocol extension 
	[*] NFS client support for NFS version 4
	[*] Root file system on NFS 

uboot启动参数配置

setenv bootargs root=/dev/nfs nfsroot=172.16.27.200:/home/xiaobao/workspace/nfs/rootfs ip=dhcp console=ttyAMA1,115200 earlycon=pl011,0x20001000 rootdelay=10 rw

启动直接挂载远端NFS