一、修改前

date -s "2056-10-6 16:58:00"

2056UTC秒为2709327600 秒 

二、  修改内核

1. linux-5.4/include/uapi/linux/coda.h

之前的内核是将秒的long改为改为 unsigned long,但是5.4内核这里已经改为了64位,所以这里不需要修改了

2. /include/uapi/asm-generic/posix_types.h

改为typedef __kernel_ulong_t __kernel_time_t;

 

 

3. do_settimeofday64

/opt/LinuxSDK-v1.6/T113-i_v1.0/kernel/linux-5.4/kernel/time/timekeeping.c

int do_settimeofday64(const struct timespec64 *ts)

会报错,但是注释掉运行会报异常

static inline bool timespec64_valid_settod(const struct timespec64 *ts)

在include/linux/time64.h

4. 在/kernel/linux-5.4/include/linux/ktime.h

5.4版本已经不需要修改了,被改为了64位

三、 虚拟机编译器修改

/opt/LinuxSDK-v1.6/T113-i_v1.0/out/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/include/bits/typesizes.h

#define __TIME_T_TYPE __SLONGWORD_TYPE  改为__ULONGWORD_TYPE

四、 LIbc库修改

NUC972用的库版本为libc 2.18

T113使用libc2.25

 

1. 修改库目录下/bits/typesizes.h

 

//#define __TIME_T_TYPE __SLONGWORD_TYPE

#define __TIME_T_TYPE __ULONGWORD_TYPE

2. 修改glibc-2.25\time\offtime.c

34行   time_t days, rem, y;  -->  int64_t days, rem, y;

66行   time_t yg = y + days / 365 - (days % 365 < 0);  --> int64_t yg = y + days / 365 - (days % 365 < 0);

 

编译:

1.环境变量

export PATH=/opt/LinuxSDK-v1.6/T113-i_v1.0/out/t113_i/tlt113-minievm-nand/longan/buildroot/host/usr/bin:$PATH

2.创建编译目录 mkdir glibc-2.25-build

3.cd  mkdir glibc-2.25-build

4.配置

../glibc-2.25/configure \

    --prefix=$PWD/glibc_install \

    --host=arm-linux-gnueabi \

    --build=x86_64-linux-gnu \

    CC=arm-linux-gnueabi-gcc \

    libc_cv_forced_unwind=yes \

    libc_cv_c_cleanup=yes \

    libc_cv_arm_tls=yes \

    libc_cv_gnu99_inline=yes \

CFLAGS="-g -O2 -U_FORTIFY_SOURCE"

5.make

6.make insatll

7.在glibc-2.25-build/glibc_install/lib 中找到libc-2.25.so

 

8. 在sdk编译目录下/opt/LinuxSDK-v1.6/T113-i_v1.0  执行/build.sh distclean 清除命令 然后重新编译/build.sh,在编译时用上面编译好的libc-2.25.so替换sdkout路径下的  

 

 

3. 重新编译BUSYBOX

然后将busybox拷贝的/bin,,注意拷贝前先加权限。如果不重新编,FTP会有问题,连不上,CPU占用率高

五、 测试

1. 内核驱动测试

2. 应用程序测试

 

date -s "2056-10-6 16:58:00"