- 硬件平台介绍
本平台使用优数科技的飞腾D2000+X100桥片组成,内存采用2个16G组成32G,单M.2固态硬盘4TB,操作系统安装麒麟V10桌面版,板卡如下图:


因为要配置Bios固件的ACPI表,所以需要先查看硬件设计原理图,需要先找到D2000与HYM8563芯片是如何连接的,我这里只截取部分相关的原理图:

HYM8563芯片接线图

D2000与HYM8563接线图
由上面的原理图我们了解到,D2000通过I2C0与HYM8563进行连接,这个信息非常重要,我们需要在bios固件源码中找到i2c.dsl文件并进行修改。
- Bios固件配置ACPI表
- 首先进入飞腾提供的Ubuntu18.04虚拟机交叉编译环境,我这里使用VMware Workstatin Pro 17.5版本虚拟机软件,具体如何使用虚拟机软件此处不作介绍,若不熟悉,请自行去学习一下VMware Workstatin 软件的使用。进入虚拟机Ubuntu18.04系统界面如下图:

- 飞腾D2000 Bios固件源码在虚拟机"/home/ubuntu/work"目录下,ft_bios_32G目录下面edk2-for-support就是Bios固件源码,image_fix_0.6_for_1.74目录是bios固件打包工具。ft_bios_32G目录截图如下图:

- 由于我们的RTC实时时钟芯片HYM8563接到D2000的I2C0接口,故我们需要在I2C0添加我们的HYM8563设备相关信息,进入"edk2-for-support/PhytiumPkg/Phytium2000Pkg/Drivers/AcpiTables/Dsdt"目录,找到I2c.asl文件,鼠标左键选中I2c.asl文件,单击鼠标右键弹出右键菜单,选择"Open With Text Editor"进行编辑。

Dsdt目录图

鼠标操作使用文本编辑器打开步骤图

I2c.ask文本编辑图
- 在I2c.ask文本编辑中找到i2c0相关的部分,找到i2c0部分的结尾处,添加图片红线框起来的代码,如下图:

- 添加好HYM8563芯片相关描述后,将I2c.asl文件进行保存后在退出编辑器。
- 然后使用终端定位到edk2-for-support目录,先在终端执行"source /etc/profile"刷新全局配置,切换到交叉编译环境;

- 然后在终端中输入"./buildD2000.sh init"命令进行Bios固件源码初始化;

- 等待代码初始化完成后,执行"./buildD2000.sh d"命令执行D2000固件Bios源码编译,待编译完成即可;

- 在"edk2-for-support"目录找到"biosD2000"文件即可,看看文件修改时间是否符合当前编译的时间,若是刚刚编译的时间,则证明Bios编译成功;

- 拷贝"biosD2000"文件拷贝到"edk2-for-support/image_fix_0.6_for_1.74"目录下,若文件已经存在则进行替换;

- 在image_fix_0.6_for_1.74目录下右键打开终端,输入"ln -snf biosD2000 bl33_new.bin"命令;

- 最后在终端输入"./my_scripts/image-fix.sh"命令回车执行,等待打包完成,打包工具根目录查看"fip-all.bin"是否存在,是否是刚刚生成的时间。若是则说明打包成功。将fip-all.bin文件拷贝指定地方进行烧录即可。


- HYM8563驱动修改支持ACPI描述
- 烧录成功后,开机进入系统,打开终端,首先使用"i2cdetect -l"查看一下所有i2c端口,再使用"sudo i2cdetect -y 0"分别扫描所有i2c端口,我这里首先使用"sudo i2cdetect -y 0"指令就扫描到i2c0有设备,0x51地址返回51,如下图:



说明:0x51地址显示"--"表示该i2c没有接设备;显示"51"表示i2c与设备连接正常,没有驱动;显示"UU"表示i2c与设备连接正常且驱动正常。
- 由于HYM8563S芯片的地址是0x51,故此大概率就是i2c0连接的RTC设备。我们先认为i2c0就是接rtc设备的接口了。0x51地址返回51,没有返回UU说明我们ACPI表配置正确,麒麟V10系统正确识别到设备,但是没有安装好驱动。我们就先排查驱动问题;
- 麒麟V10系统自带Hym8563芯片的驱动。然后使用终端进入到"/lib/modules/$(uname -r)/kernel/drivers/rtc"目录,再使用"ls"指令查询驱动文件,看到有rtc-hym856ko文件,确实自带hym8563驱动。内核驱动目录如下图:

- 使用"modinfo rtc-hym8563.ko"查看到了自带驱动只支持设备树配置。

- 上传rtc-hym8563文件夹到设备的麒麟V10系统进行编译并安装,到"/home/yskj/x100/rtc-hym8563",然后在终端中输入make进行编译。如下图:

- 编译完成后,看到rtc-hym8563目录下面有rtc-hym8563.ko即可。然后在终端中输入"sudo ./install.sh"命令执行驱动安装。执行结果如下:

Install.sh脚本如下:

- 安装驱动成功后,首次必须设置RTC芯片初始时间,设置步骤如下图:

- 修改hwclock -r强制调用rtc1,终端执行"sudo ./hwclock-force.sh"。执行结果如下:

hwclock-force.sh脚本内容如下:

- 安装set-default-rtc.service服务,终端输入"sudo ./set-default-rtc-service.sh"指令执行安装,终端界面如下图:

服务安装成功后,脚本会自动启动服务,启动成功后kylin系统界面右下角的时间会自动更新,界面时间如下图:

set-default-rtc-service.sh脚本内容如下图:
