嵌入式修改系统默认时间

一:什么是Linux系统的时钟

       Linux时钟在概念上类似Windows时钟显示当前系统时间,但在时钟分类和设置上却和Windows大相径庭。Linux将时钟分为系统时钟(SystemClock)硬件(Real TimeClock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟。既然Linux有两个时钟系统,那么大家所使用的Linux默认使用哪种时钟系统呢?会不回出现两种系统时钟冲突的情况呢?这些疑问和担心不无道理。首先,Linux并没有默认哪个时钟系统。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
   从Linux启动过程来看,系统时钟和硬件时钟不会发生冲突,但Linux中的所有命令(包括函数)都是采用的系统时钟设置。不仅如此,系统时钟和硬件时钟还可以采用异步方式,即系统时间和硬件时间可以不同。这样做的好处对于普通用户意义不大,但对于Linux网络管理员却有很大的用处。例如,要将一个很大的网络中(跨越若干时区)的服务器同步,假如位于美国纽约的Linux服务器和北京的Linux服务器,其中一台服务器无须改变硬件时钟而只需临时设置一个系统时间,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下即可。这样系统和硬件时钟就提供了更为灵活的操作。

以上文章引自:https://blog.csdn.net/wavemcu/article/details/29375363

如果需要详细了解请点击以上连接。

 

二:这里以全志T717芯片为例,记录如何修改系统时钟

1.查看文件 :linux-3.10/drivers/rtc/rtc-sunxi.h 系统时钟使用的结构体如下:


/*
 * min and max year are arbitrary set considering the limited range of the
 * hardware register field
 */
struct sunxi_rtc_data_year {
        unsigned int min;               /* min year allowed */
        unsigned int max;               /* max year allowed */
        unsigned int mask;              /* mask for the year field */
        unsigned int yshift;            /* bit shift to get the year */
        unsigned char leap_shift;       /* bit shift to get the leap year */
};

2.修改文件:linux-3.10/drivers/rtc/rtc-sunxi.c


static struct sunxi_rtc_data_year data_year_param[] = {
        [0] = {
                .min            = 2010,
                .max            = 2073,
                .mask           = 0x3f,
                .yshift         = 16,
                .leap_shift     = 22,
        },
        [1] = {
                .min            = 1970,
                .max            = 2225,
                .mask           = 0xff,
                .yshift         = 16,
                .leap_shift     = 24,
        },
        [2] = {
                .min            = 2010,
                .max            = 2137,
                .mask           = 0x7f,
                .yshift         = 15,
                .leap_shift     = 22,
        },
        [3] = {
                .min            = 2010,
                .max            = 2137,
                .mask           = 0x7f,
                .yshift         = 16,
                .leap_shift     = 23,
        },
};

以上代码可以看出定义了3组时钟数据,如何确定我们系统使用的哪一组?在该文件中搜索 data_year_param变量如下:


static const struct of_device_id sunxi_rtc_dt_ids[] = {
        { .compatible = "allwinner,sun4i-a10-rtc", .data = &data_year_param[0] },
        { .compatible = "allwinner,sun7i-a20-rtc", .data = &data_year_param[1] },
        { .compatible = "allwinner,sun8iw5-rtc", .data = &data_year_param[0] },
        { .compatible = "allwinner,sun8iw10-rtc", .data = &data_year_param[2] },
        { .compatible = "allwinner,sun8iw11p1-rtc", .data = &data_year_param[3] },
        { .compatible = "allwinner,sun8iw17-rtc", .data = &data_year_param[3] },
        { .compatible = "allwinner,sun50i-rtc", .data = &data_year_param[0] },
        { .compatible = "allwinner,sun50iw3-rtc", .data = &data_year_param[3] },
        { .compatible = "allwinner,sun50iw6-rtc", .data = &data_year_param[3] },
        { /* sentinel */ },
};

然后查找自己开发板的CPU硬件型号(此处描述可能不准确)。执行:

# cat /proc/cpuinfo
可以看到如下信息:

由上图可以看到是:sun8iw17,然后去结构体里面找,如下图:

可以看到是data_year_param[3],那么我们修改第三个即可:

 重新编译即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在嵌入式操作系统中添加C++运行时库需要以下步骤: 1. 确认操作系统是否支持C++。有些嵌入式操作系统只支持C语言,需要在操作系统中添加C++支持。 2. 下载适当版本的C++运行时库。根据嵌入式操作系统的架构和编译器选择相应版本的C++运行时库。 3. 将C++运行时库添加到编译器搜索路径中。在编译代码时,编译器需要知道C++运行时库在哪里。 4. 将C++运行时库添加到嵌入式操作系统中。根据操作系统的不同,添加C++运行时库的方式也不同,可以通过修改操作系统源代码来添加。 5. 在应用程序中使用C++。在编写应用程序时,可以使用C++语言和标准库函数。 注意事项: 添加C++运行时库可能会增加操作系统的大小,影响系统的性能和响应速度。因此,需要仔细考虑是否需要添加C++支持。 ### 回答2: 在嵌入式操作系统中添加C运行时库的过程如下所述。 首先,需要确认嵌入式操作系统支持C运行时库的加载和使用。某些嵌入式操作系统可能已经默认包含了C运行时库,无需额外添加。若不支持,需要查看操作系统文档或寻求官方支持以了解如何添加C运行时库。 其次,获取相应版本的C运行时库。C运行时库是一个预编译好的二进制文件,可以从多个来源获取,如操作系统厂商、开源社区或第三方供应商。确保选择适合目标嵌入式操作系统和硬件平台的C运行时库版本。 接下来,将C运行时库文件包含到嵌入式操作系统的构建系统中。这需要修改操作系统的构建配置文件或脚本,添加C运行时库的路径和文件名。在构建过程中,编译器会将C运行时库链接到目标可执行文件中。 在构建系统中添加C运行时库后,需要重新构建操作系统。这通常会涉及到使用交叉编译工具链,将编译选项设置为包含C运行时库路径和文件名,以便在构建过程中正确地链接C运行时库。 最后,将构建好的嵌入式操作系统烧录到目标设备中进行测试。确保设备能够正常启动并运行使用C运行时库的应用程序。 需要注意的是,添加C运行时库可能会增加系统的存储空间和加载时间。因此,在添加C运行时库之前,需要评估系统的资源限制,确保嵌入式设备具备足够的空间和性能来支持C运行时库的使用。 ### 回答3: 在嵌入式操作系统中添加C运行时库的步骤如下: 1.了解目标硬件平台和操作系统:首先需要了解你的嵌入式操作系统以及目标硬件平台的架构和特点,例如处理器架构、操作系统内核等。 2.选择合适的C运行时库:根据目标硬件平台和操作系统的特点,选择适合的C运行时库。常见的C运行时库有newlib、uClibc等,它们提供了标准C库中的各种函数和特性。 3.配置编译工具链:根据目标硬件平台和操作系统的需求,在交叉编译环境下配置适用的编译工具链。工具链包括交叉编译器、链接器等工具,用于将C源代码编译为可在目标硬件平台上运行的可执行文件。 4.交叉编译C运行时库:根据目标硬件平台和操作系统的需求,使用配置好的编译工具链对选择的C运行时库进行交叉编译。在编译过程中,需要根据目标硬件平台的架构配置编译参数,确保生成的库文件适用于目标硬件平台。 5.将库文件嵌入操作系统镜像:将编译生成的C运行时库文件嵌入到操作系统的镜像中。这通常涉及链接器脚本和配置文件的修改,确保内核可以正确加载和使用这些库函数。 6.重新编译操作系统:根据修改后的操作系统配置,重新编译操作系统的内核和相关组件。这样,新添加的C运行时库将与操作系统一起构建为新的镜像。 7.测试和验证:将新编译的操作系统镜像烧录到目标硬件平台上进行测试和验证。确保操作系统能够正常加载和使用添加的C运行时库,并且其他应用程序可以正确调用库中的函数。 通过以上步骤,就可以成功地在嵌入式操作系统中添加C运行时库,以提供更丰富的C语言功能和特性供应用程序使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值