博客

PBTEE环境搭建

系统环境 ubuntu20.04  使用18.04 会存在glibc 版本太低,最低要求glibc 2.28,而18.04 的glibc 2.27.更换glibc难度太大,稍不注意会导致命令没有,启动失败,

watchdog使用方法介绍

watchdog简介与使用方法介绍

本文介绍飞腾平台(简称FT)watchdog相关知识,以及如何在uefi固件下和操作系统下配置使用watchdog的方法。

实验环境:D2000+FT uefi +kylin

FT watchdog符合 ARM规范的watchdog 参考链接: SBSA (Arm Server Base System Architecture)      因此在寄存器配置上,是兼容的。小编对比过相关寄存器,也就是基址不一样,所以在使用方法上和标准linux  uefi是一样的。

linux上源码 在上文链接中有详细介绍,我在这里阐述一下自己的理解, watchdog中的操作主要涉及到初始化寄存器、是指超时时间、使能看门狗、第一次超时 ws0寄存器被置1,上报中断,第二次超时 ws1寄存器置1,芯片将会进入热复位,芯片内部重新上电相当于重新开机。在看门狗计时器件,可以重新填入超时时间,此时将重新计数。参考文档 腾锐D2000软件编程手册》

UEFI watchdog介绍

在ft uefi中,已经添加了watchdot相关的支持

其中dsc中已经描述了飞腾通用寄存器与中断寄存器基址与偏移,

#
#  SBSA Watchdog
#  
   gArmTokenSpaceGuid.PcdGenericWatchdogControlBase|0x2800B000
   gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase|0x2800A000
   gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum|48
#
# ARM General Interrupt Controller
#
  gArmTokenSpaceGuid.PcdGicDistributorBase|0x29900000
  gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x29980000
  gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0x29c00000

且开源uefi中已经集成arm watchdog驱动路径:ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c

因此在整个uefi DXE阶段之后,都是可以直接使用watchdog功能的。

具体使用方法:第一个参数为设置秒数 ,设置为0将会主动关闭看门狗功能。

gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);

uefi中,将watchdog驱动注册,提供了中断支持,关闭、重设时间等功能。整个uefi代码中也多次使用了watchdog。在标准驱动中,进入uefishell 进入gurb代码都会主动关闭看门狗功能。


kernen watchdog 介绍

内核想要使用watchdog功能,固件提供相应支持

在ACPI表的GTDT中需要有看门狗的相关描述,汇报给操作系统PhytiumPkg/Phytium2004Pkg/Drivers/AcpiTables/Gtdt.aslc

操作系统会在开机过程中匹配相关字符串,若成功匹配,则会在系统中有watchdog的字符设备:/dev/watchdog0,1,2,若成功出现该字符设备,说明系统下看门狗功能就可以使用了。

系统下测试看门狗方法:

(没想好该不该介绍,毕竟用到了别人开发的程序)

 

飞腾平台Can总线验证方法

介绍飞腾平台下如何验证与使用can总线的方法

验证环境:D2000平台、 CAN协议分析仪

1 安装can命令

apt-get update && apt-get install git   

cd /tmp   

git clone https://github.com/linux-can/can-utils.git   

cd can-utils/   

make   

make install

2 can 接口验证方法

1. 先配置复用寄存器为CAN0CAN1CAN2总线功能

 

2. 设置总线波特率,并开启CAN总线

 

3. 飞腾CAN0接收数据,CAN分析仪CAN1发送数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

4. 飞腾CAN0发送数据,CAN分析仪CAN1接收数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

 

 

1. 飞腾CAN0发送数据,CAN分析仪CAN1接收数据

系统下使用Canutils软件测试CAN总线,接收数据时执行./candump can0指令

飞腾平台下访问GMAC-PHY的方法

linux 系统下操作PHY读写方式

本文简单介绍使用源码编译,通过mdio方式操作PHY寄存器

1 获取源码

代码已经上传,可自行下载,另外可以下载我已经编译好的文件直接使用。

2 编译源码

编译命令:gcc mdio.c -o mdio

3赋予权限

chmod a+x mdio

4 查看网口

通过ifconfig -a命令查看你想要操作的网口,保存网口名,在后续会使用到

5读取phy ID示例

./mdio

mdio:

read operation: mdio reg_addr

write operation: mdio reg_addr value

For example:

mdio eth0 1

mdio eth0 0 0x12

例如要查看phy id 

 ./mdio enaphyt4i0 3

将会返回获取的值

 

介绍操作裕泰PHY的方法:

首先读取查看phy手册,可以指导PHY访问有多种方式

YT PHY 内部有三种类型的寄存器:MII 寄存器(MII register,以下简写为 mii_reg),扩展寄存器(extended register,以下简写为 ext_reg)和 MMD 寄存器(简写为 mmd_reg
mii_reg: 寄存器地址为 0~0x1f,遵从 802.3 clause 22 的标准定义方式进行访问。其 MDC/MDIO 协议如下:

ext_reg: 由于 mii_reg 只有 0~0x1f,即 32 个。不能满足产品对寄存器数目的要求,就通过访问两个 mii_reg 0x1e, 0x1f 来扩展了更多的寄存器。访问方式为:
将要访问的 ext_reg 地址,写入 mii_reg 0x1e.
mii_reg 0x1f 得到值,即为 ext_reg 内的值. 写值到 mii_reg 0x1f,即将 ext_reg 寄存器内容改为写入的值.
例如:读取 ext_reg0x1000 的值:write mii_reg0x1e 0x1000;
read mii_reg0x1f;
ext_reg0x1000 的值为 0x3456
write mii_reg0x1e 0x1000;
write mii_reg0x1f 0x3456; 

mmd_reg: 为了扩展更多的寄存器,以适应更高速率的以太网。MMD 寄存器被创造出来。遵从 802.3 clause
45 的标准定义方式进行访问。MMD 寄存器有两种访问方式:间接访问和直接访问。
直接访问:其协议与 MII 访问不同,它是通过两条指令实现 MMD 寄存器的读或写,即先发 address 指令,
再发 Write Read 指令实现,具体协议如下:
间接访问:即通过 MII 寄存器(mii_reg 0xd, mii_reg 0xe,其具体含义见下表)来访问 MMD 寄存器。比如:
MMD 3 0x5 寄存器,其指令为:
write mii_reg 0xd 0x3; write mii_reg 0xe 0x5; write mii_reg 0xd 0x4003; read mii_reg 0xe
MMD 7 0x3c 寄存器值为 0x6,其指令为:
write mii_reg 0xd 0x7; write mii_reg 0xe 0x3c; write mii_reg 0xd 0x4007; write mii_reg 0xe 0x6
以上文档从官方手册中摘取
接下来要实现对PHY配置 主要验证phy Template(电口指标)配置
初始化:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x41 to 0x4
write_utp_ext_reg0x42 to 0x8
write_utp_ext_reg0x43 to 0xc
write_utp_ext_reg0x44 to 0x10
write_utp_ext_reg0x45 to 0x10
write_utp_ext_reg0x46 to 0x10
write_utp_ext_reg0x47 to 0x10
write_utp_ext_reg0x4a to 0x1180
1000BT:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x27: 0x2026
write_utp_mii_reg0x10: 0x2
write_utp_mii_ reg0x0: 0x8140
Test Mode 1Transmit waveform test
write_utp_mii_reg0x9: 0x2200
write_utp_mii_reg0x0: 0x8140
Test Mode 2Transmit Jitter test (master mode)
write_utp_mii_reg0x9: 0x5a00
write_utp_mii_reg0x0: 0x8140
Test Mode 3Transmit Jitter test (slave mode)
write_utp_mii_reg0x9: 0x7200
write_utp_mii_ reg0x0: 0x8140
Test Mode 4Transmit distortion test
write_utp_mii_reg0x9: 0x8200
write_utp_mii_ reg0x0: 0x8140 

将访问方式通过间接访问操作 ext寄存器。
写了一个脚本 

#!/bin/bash
#参考此处进行配置 举例配置了PHY 0x41 值为2 并再次把值都出来。
echo 初始化
./mdio enaphyt4i0 0x1e 0xa000
./mdio enaphyt4i0 0x1f 0x0
./mdio enaphyt4i0 0x1e 0x41
./mdio enaphyt4i0 0x1f 0x4
./mdio enaphyt4i0 0x1e 0x42
./mdio enaphyt4i0 0x1f 0x8
./mdio enaphyt4i0 0x1e 0x43
./mdio enaphyt4i0 0x1f 0xc
./mdio enaphyt4i0 0x1e 0x44
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x45
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x46
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x47
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x4a
./mdio enaphyt4i0 0x1f 0x1180
echo 1000bt
#1000BT
./mdio enaphyt4i0 0x1e 0x27
./mdio enaphyt4i0 0x1f 0x2026
echo test mode1
    #test mode1
./mdio enaphyt4i0 0x10 0x2
./mdio enaphyt4i0 0x0 0x8140
./mdio enaphyt4i0 0x9 0x2200
./mdio enaphyt4i0 0x0  0x8140
echo test end

从零开始搭建飞腾平台操作系统

本文为飞腾平台软件系类指导,包括 PBF  UEFI  UBOOT KERNEL 等环境搭建。同时也会介绍麒麟操作系统、UOS操作系统等系统移植。

一、飞腾平台CPU 整体介绍

二、飞腾平台公版框图硬件介绍

三、飞腾平台软件整体介绍

四、PBF

五、UEFI

六、UBOOT

七、kernel介绍与移植

八、kylin os 介绍

九、UOS介绍

十、windows on arm64 介绍

       10.1  飞腾平台安装windows系统安装

 

Unixbench 3D测试

Unixbench  3D测试

关闭垂直同步需要去修改默认值,直接配置环境变量export  vblank_mode=0 会报错,解决方案如下:

1、vi  ~/.drirc

2、将以下代码复制进去

<device screen=”0″ driver=”dri2″>

    <application name=”Default”>

        <option name=”vblank_mode” value=”0″/>

    </application>

</device>

3、保存退出,重启

内存SPD信息查看与翻译

内存SPD解析

背景:本文主要在于讲解linux系统下 通过I2C解析内存SPD信息,并举例通过内存SPD信息算出内存实际频率。

一、安装i2c-tools工具

  • sudo apt update
  • sudo apt install i2c-tools
  • 安装不了去网站下 地址https://www.kernel.org/pub/software/utils/i2c-tools/
  • tar -xvf i2c-tools-4.1.tar.xz ,  解压工具包
  • make    & make install   //编译和安装
  • cp lib/libi2c.so.0.1.1  /usr/lib/libi2c.so.0

二、通过i2c工具 dump出内存SPD信息

  • 命令 ls /dev/i2c*
  • 在root下使用以下命令
    i2cdetect -y 0:  扫描I2C总线0下挂的设备 SPD由硬件决定内存一般挂在50或51上,由下图可以看出 此次内存挂在50地址上。
    探测I2C设备:

三、dump I2C设备寄存器

root下使用以下命令

i2cdump -f -y 0 0x50  : dump设备地址0x50的芯片寄存器 SPD内容

四、根据SPD计算相应内存频率

通过0x11地址的字节 可得该内存的粗细精度 相应的周期还需要根据 0x12以及0x7d的数据进行计算。

 

下图 其他关于时间的位和粗细精度的时间转

根据上图byte18:0x07       byte125: 0xd6

则周期计算过程为(7*0.125)+(-42*0.001)=0.833ns(1s/0.833ns)*2为该内存相应频率

算出结果:1200,因ddr4 采用双边沿采样,实际频率也就是2400,即可与内存条上面频率进行对比,判定内存是否与标签纸上是否一致。