vxworks for x86读取bios时间的解决方法

简介: <p style="text-indent:2em">vxworks for x86读取bios时间的解决方法</p> <p style="text-indent:2em"> 系统时间与bsp有关,在vzworks for x86系列的目标没有直接读取RTC(实时时钟控制器)的函数,用time.h中的函数读到的始终是 00:00:00, Jan. 1 1970.</p> <p styl

vxworks for x86读取bios时间的解决方法

 系统时间与bsp有关,在vzworks for x86系列的目标没有直接读取RTC(实时时钟控制器)的函数,用time.h中的函数读到的始终是 00:00:00, Jan. 1 1970.

  所以在x86系列的机器中,我们可以从bios中读取当前的时钟。用sysInByte(),sysOutByte(),在70,和71端口读取或写bios里的时间.

  首先要分析bios的内容,找出秒,分,时,天,月,年的存放地址。

他们分别是: 0x00,0x02,0x04,0x07,0x08,0x09

然后从71端口读出相应的值,进行转换。

如:秒

  sysOutByte(0x70,0x00);

  second = sysInByte(0x71);

读出的second进行转换,:

  second = (second &0x0F) + 10*((second &0xF0)>>4);

示例代码:

time_t biostime()

{

  struct tm   ahora;

  unsigned char cHour, cMin, cSec;

  unsigned char cDay, cMonth, cYear;

  sysOutByte(0x70,0x00/*second*/);

  cSec = sysInByte(0x71);

  ahora.tm_sec = (cSec&0x0F) + 10*((cSec&0xF0)>>4);

  sysOutByte(0x70,0x02/*minut*/);

  cMin = sysInByte(0x71);

  ahora.tm_min = (cMin&0x0F) + 10*((cMin&0xF0)>>4);

  sysOutByte(0x70,0x04/*hour*/);

  cHour = sysInByte(0x71);

  ahora.tm_hour = (cHour&0x0F) + 10*((cHour&0xF0)>>4);

 

  sysOutByte(0x70,0x07/*day*/);

  cDay = sysInByte(0x71);

  ahora.tm_mday = (cDay&0x0F) + 10*((cDay&0xF0)>>4);

  sysOutByte(0x70,0x08/*month*/);

  cMonth = sysInByte(0x71);

  ahora.tm_mon = (cMonth&0x0F) + 10*((cMonth&0xF0)>>4) - 1;

  sysOutByte(0x70,0x09/*year*/);

  cYear = sysInByte(0x71);

  ahora.tm_year = 100 + (cYear&0x0F) + 10*((cYear&0xF0)>>4);

  return mktime(&ahora);

}

我们在系统初始化时读取bios时间一次,然后修改系统时钟:

 clock_settime(..)

以后我们得到的时间就都是当前的正确时间

示例:

void inittime()

{

  int res;

  struct timespec ts;

  struct tm daytime;

  time_t stime;

  ts.tv_sec = biostime();

  ts.tv_nsec = 0;

  res = clock_settime(CLOCK_REALTIME, &ts);

 

  stime = time(NULL);

 

  daytime = *localtime(&stime);

  printf ( "time is :%s\n", asctime(&daytime) );

}

相关文章
|
安全 Linux 数据安全/隐私保护
BIOS中Secure Boot灰色无法更改解决方法详解
在电脑Bios设置中,有一项“Secure Boot”相关设置,很多小伙伴们不知道Secure Boot什么意思,也不知道如何设置。另外,有时候这个Secure Boot是灰色的无法更改,这又要如何解决呢?
9834 15
|
8月前
|
存储 虚拟化 iOS开发
VMware ESXi 7.0U3w macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
VMware ESXi 7.0U3w macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
700 0
VMware ESXi 7.0U3w macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
|
6月前
|
虚拟化 数据中心 iOS开发
VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Huawei 华为 定制版
VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Huawei 华为 定制版
385 1
VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Huawei 华为 定制版
|
6月前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
1466 3
VMware Workstation Pro 25H2 Unlocker & OEM BIOS 2.7 - 在 Windows 和 Linux 上运行 macOS Tahoe
|
6月前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
1696 3
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
|
6月前
|
虚拟化 iOS开发 MacOS
VMware ESXi 9.0 macOS Unlocker & OEM BIOS 2.7 AQC 网卡特殊定制版
VMware ESXi 9.0 macOS Unlocker & OEM BIOS 2.7 AQC 网卡特殊定制版
390 5
|
存储 虚拟化 数据中心
VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 HPE 慧与 定制版
VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 HPE 慧与 定制版
257 0
|
6月前
|
Linux 虚拟化 iOS开发
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
1458 0
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式