-
Notifications
You must be signed in to change notification settings - Fork 2
Meta Layer for Y2038 safe system (for easy development and OE integration)
License
lmajewski/meta-y2038
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This README file contains information on the contents of the meta-y2038 layer. Please see the corresponding sections below for details. Dependencies ============ meta-openembedded: Patches ======= Please submit any patches against the meta-y2038 layer to github.com/lmajewski repo for this project and cc: the maintainer: Maintainer: Lukasz Majewski <[email protected]> Table of Contents ================= I. Adding the meta-y2038 layer to your build II. Build setup (meta-* SHAs) III. Y2038 development IV. Using glibc/src/scripts/cross-test-ssh.sh V. Building glibc with yocto SDK VI. Build test glibc with x86, x86-64 and x32 VII. GDB VIII.Runtime tests IX. Adjust y2038 setup to run new glibc with kernel older than 5.1 I. Adding the meta-y2038 layer to your build ================================================= Run 'bitbake-layers add-layer meta-y2038' II. Build setup =============== Please clone meta-y2038 layer to your PC. The KAS project [https://github.com/siemens/kas] shall be used to deploy the meta-y2038 with proper SHAs. Please use meta-y2038-kas.yml file. Then run: ../kas/run-kas checkout ./meta-y2038/meta-y2038-kas.yml . ./poky/oe-init-build-env III. Y2038 development ====================== bitbake y2038-image-devel runqemu -d y2038-image-devel nographic or MACHINE=qemux86 runqemu -d y2038-image-devel nographic Then from prompt: root@y2038arm:~# test_y2038 Available MACHINEs: qemuarm, qemux86, qemux86_64 IV. Using glibc/src/scripts/cross-test-ssh.sh with QEMU ======================================================= MACHINE=qemuarm (32 bit ARM - Vexpress-A15) From Yocto/OE setup environment (on which bitbake operates) ----------------------------------------------------------- runqemu -d y2038arm nographic mkdir -p /opt/Y2038/glibc/; cd /opt/Y2038/glibc/ sshfs -o allow_other -o sshfs_sync [email protected]:/opt/Y2038/glibc/ . [1] cd . On HOST (x86_64): ----------------- Setup yocto environment: $ . /opt/Y2038/3.x.y/environment-setup-armv7at2hf-neon-poky-linux-gnueabi cd /opt/Y2038/glibc/build ../src/configure --host="arm-poky-linux-gnueabi" --prefix=/usr make PARALLELMFLAGS="-j8" (For improved performance execute step [1] just before xcheck) make PARALLELMFLAGS="-j8" test-wrapper='/opt/Y2038/glibc/src/scripts/cross-test-ssh.sh [email protected]' xcheck Testing (rebuild) only a subset of tests (from e.g. time directory): -------------------------------------------------------------------- find . -name "tst-clock_settime*" -delete (or rm -rf ./time/*) make PARALLELMFLAGS="-j8" test-wrapper='./build/workspace/sources/y2038-glibc/scripts/cross-test-ssh.sh --allow-time-setting [email protected]' subdirs=time check Run test suite with date set to Y2038 threshold: ------------------------------------------------ On the VM run: date '%Y-%m-%d %T' -s "2038-01-19 03:14:07" V. Building glibc with yocto SDK ================================ cd build/glibc ../../y2038-glibc/configure --host="i586-poky-linux" --prefix=/usr make PARALLELMFLAGS="-j12" && make xcheck PARALLELMFLAGS="-j12" VI. Build test glibc with MACHINE=qemux86-64, qemux86, qemux86-64-x32 ===================================================================== MACHINE=qemux86-64-x32 bitbake y2038-glibc -c cleansstate && MACHINE=qemux86-64-x32 bitbake y2038-glibc -c compile -f MACHINE=qemux86-64 bitbake y2038-glibc -c cleansstate && MACHINE=qemux86-64 bitbake y2038-glibc -c compile -f MACHINE=qemux86 bitbake y2038-glibc -c cleansstate && MACHINE=qemux86 bitbake y2038-glibc -c compile -f VII. GDB Session on test_y2038: __clock_settime64 (ARM) ============================================== gdb test_y2038 (gdb) b test_clock_settime (gdb) run VIII. Runtime tests: ==================== - MACHINE=qemux86 clock_settime MACHINE=qemux86 bitbake virtual/kernel -c cleansstate && MACHINE=qemux86 bitbake virtual/kernel MACHINE=qemux86 bitbake y2038-image-devel -c cleansstate && MACHINE=qemux86 bitbake y2038-image-devel runqemu -d qemux86 nographic clock_settime test program: cat <<- EOF >> clock_settime_test.c #include <stdio.h> #include <time.h> int main (int argc, char **argv) { struct timespec tv; int ret; tv.tv_sec = 0x7FFFFFFF; tv.tv_sec = 61; tv.tv_nsec = 0; printf("clock_settime test program: "); ret = clock_settime(CLOCK_REALTIME, &tv); if (!ret) printf("OK\n"); else perror("ERR\n"); return 0; } EOF Build the test program: gcc -Wall -ggdb -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -I/usr/include -L/usr/lib \ clock_settime_test.c -o cst -static Test it with gdb (also set debugging sources (with set directories /usr/src/debug/... - point VII)) IX. Running different kernels with glibc supporting __clock_settime64, default (old) kernel version and kernels supporting (5.1 ) or not (4.19 lts) __clock_settime64. ===================================================================================== In the meta-y2038/conf/distro/y2038.conf #OLDEST_KERNEL="5.1.0" and set PREFERRED_PROVIDER_virtual/kernel = "linux-lts" PREFERRED_VERSION_linux-lts = "4.19%" Rebuild kernel MACHINE=qemuarm bitbake linux-lts -c cleansstate && MACHINE=qemuarm bitbake linux-lts Go to build/tmp/deploy/images/qemuarm and copy/rename zImage--4.19*.bin and zImage--4.19*.dtb files Then set the PREFERRED_PROVIDER_virtual/kernel = "linux-y2038" PREFERRED_VERSION_linux-y2038 = "5.1%" in meta-y2038/conf/distro/y2038.conf and rebuild MACHINE=qemuarm bitbake y2038-image-devel The QEMU for MACHINE=qemuarm with 5.1 kernel: runqemu -d y2038arm nographic The QEMU for MACHINE=qemuarm with 4.19 kernel: KERNEL=/home/lukma/work/yocto/y2038/build/tmp/deploy/images/y2038arm/zImage--4.19.bin runqemu -d y2038arm nographic (and test y2038 with __clock_settime64 test program) IX. Runtime tests (ptest): ========================== The `glibc-ptest` recipe package will provide _all_ time related tests to be run with ptest infrastructure. The `EXTRA_IMAGE_FEATURES` contains " ptest-pkgs", so all ptest tests and management programs are installed to the `y2038-image-devel`. Those 'glibc' tests are standalone, so they can be run without the data from glibc build tree. After booting into the QEMU run image, one just need to call `ptest-runner glibc-tests` and then adjust the time after Y2038 threshold: ``` date '%Y-%m-%d %T' -s "2038-01-19 03:14:07" ptest-runner glibc-tests ```
About
Meta Layer for Y2038 safe system (for easy development and OE integration)
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published