-
Notifications
You must be signed in to change notification settings - Fork 2
/
README
222 lines (152 loc) · 6.32 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
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 <lukma@denx.de>
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 lukma@192.168.7.1:/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 root@192.168.7.2' 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 root@192.168.7.2' 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
```