mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-22 04:52:56 +01:00
Compare commits
415 Commits
sculpt_ce
...
sculpt-19.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d33bef2e49 | ||
|
|
fbae7767b4 | ||
|
|
17d32b3e15 | ||
|
|
6380ad1c80 | ||
|
|
0c3d3e7c8f | ||
|
|
3b0d694f42 | ||
|
|
c7e79030dd | ||
|
|
58a0f5c30b | ||
|
|
c92a9ce591 | ||
|
|
605f9abf96 | ||
|
|
e4412a3e56 | ||
|
|
1fe9b07c99 | ||
|
|
2da604a6e2 | ||
|
|
fc7b983a40 | ||
|
|
6399fc12ac | ||
|
|
db6e013577 | ||
|
|
71ce1442c8 | ||
|
|
5dd1abcc2d | ||
|
|
4dafdbd5b7 | ||
|
|
949130d80e | ||
|
|
4c8369ab1b | ||
|
|
fcdad00044 | ||
|
|
417191bdbd | ||
|
|
c00666b7e8 | ||
|
|
854a154fb4 | ||
|
|
7e7eff0eb7 | ||
|
|
48a361107f | ||
|
|
716453aaa1 | ||
|
|
63e69d35e0 | ||
|
|
a0c71cffd4 | ||
|
|
d1da5b9e16 | ||
|
|
52ec4526e1 | ||
|
|
e199acca05 | ||
|
|
cea842b256 | ||
|
|
984bddcedd | ||
|
|
d32e8390c2 | ||
|
|
57e650ef2c | ||
|
|
c34176580c | ||
|
|
807f5d9af1 | ||
|
|
d18f8eea2b | ||
|
|
8d62f21b40 | ||
|
|
7b1e3a9d63 | ||
|
|
070a24956d | ||
|
|
dec2d897c3 | ||
|
|
8625146011 | ||
|
|
24eea0b653 | ||
|
|
18b3253cac | ||
|
|
25484f870e | ||
|
|
ac0ecdf855 | ||
|
|
399487c85d | ||
|
|
bc14a32998 | ||
|
|
cf2c9f8d88 | ||
|
|
186c35bb09 | ||
|
|
3a2de0d9a3 | ||
|
|
1b489820a9 | ||
|
|
ef8140cce5 | ||
|
|
790a57041c | ||
|
|
e43b848ac8 | ||
|
|
59347d2560 | ||
|
|
2b14284e2b | ||
|
|
c107aba913 | ||
|
|
e337b844e5 | ||
|
|
90d07741aa | ||
|
|
87015df66c | ||
|
|
d9a0f76e7a | ||
|
|
0ecc48e6de | ||
|
|
efe0887247 | ||
|
|
3c4c460f82 | ||
|
|
ab3efc0a33 | ||
|
|
e1e67d8330 | ||
|
|
de4c31e557 | ||
|
|
5a59d295a4 | ||
|
|
fe5ada85cb | ||
|
|
b55358c535 | ||
|
|
1b059649ff | ||
|
|
45f3ccc42a | ||
|
|
4d34f9f9f4 | ||
|
|
62232f9a35 | ||
|
|
a25c656b1a | ||
|
|
ed0d76552b | ||
|
|
43315444a8 | ||
|
|
c055986e38 | ||
|
|
7ec37b2d8d | ||
|
|
64fac6cee7 | ||
|
|
12127a7bd2 | ||
|
|
eaed28f68d | ||
|
|
4a102fb58c | ||
|
|
ae7fbd6b1a | ||
|
|
72478a9e31 | ||
|
|
811410fdbb | ||
|
|
5738e53be2 | ||
|
|
be4d8b24e2 | ||
|
|
1f77f37310 | ||
|
|
7e174e73be | ||
|
|
ff23d665c6 | ||
|
|
00daecf838 | ||
|
|
f8f9f710e5 | ||
|
|
e77362e7b9 | ||
|
|
c58acbd444 | ||
|
|
e2c1ce2add | ||
|
|
fc1b7a626c | ||
|
|
a7825ef292 | ||
|
|
8dd391371c | ||
|
|
737e9580b8 | ||
|
|
a2abc13425 | ||
|
|
1daf179db9 | ||
|
|
6b48a08697 | ||
|
|
dc8a2ec523 | ||
|
|
46f89d143b | ||
|
|
8a4adceaf0 | ||
|
|
bbf7a6230e | ||
|
|
24a3eea89e | ||
|
|
65b9a46d6c | ||
|
|
4dbb18bf5e | ||
|
|
44181fedf7 | ||
|
|
2b183f9497 | ||
|
|
a09150e6b4 | ||
|
|
da3c52668d | ||
|
|
5ba19dd49b | ||
|
|
4b72bbaa57 | ||
|
|
9f02151d0b | ||
|
|
f75f477c2b | ||
|
|
cec050983a | ||
|
|
ca39a9ea61 | ||
|
|
ca95621db5 | ||
|
|
27e9d1fcf0 | ||
|
|
f99a1d78bb | ||
|
|
d417d26ce8 | ||
|
|
5611020f33 | ||
|
|
fc68e97e4a | ||
|
|
b3a9ad2215 | ||
|
|
ab6315d6b4 | ||
|
|
5673c163fb | ||
|
|
07ee9654e4 | ||
|
|
9f70084524 | ||
|
|
da17f2cbd3 | ||
|
|
34a711b439 | ||
|
|
b359ec14a8 | ||
|
|
68d5293f01 | ||
|
|
91146a3a70 | ||
|
|
405a9d2144 | ||
|
|
6c42bd4dd3 | ||
|
|
9288fe63ad | ||
|
|
bd045c65a2 | ||
|
|
35b1440c97 | ||
|
|
ba9ffc6243 | ||
|
|
95ece89cf8 | ||
|
|
6d8d6b5552 | ||
|
|
f18285205c | ||
|
|
e60b597af5 | ||
|
|
96b29c6f8a | ||
|
|
a5d6cbf44d | ||
|
|
79d1c4f83a | ||
|
|
4dd9d5eb6c | ||
|
|
753e78d122 | ||
|
|
b50e54b0a8 | ||
|
|
7fadfbbd9f | ||
|
|
b4649d84ee | ||
|
|
eb4d431e76 | ||
|
|
8e2e4374f5 | ||
|
|
720919bc14 | ||
|
|
61140380ee | ||
|
|
a8d856fb65 | ||
|
|
7dc875e8c7 | ||
|
|
f0d28eeca7 | ||
|
|
71a48c0a26 | ||
|
|
c98597a2c0 | ||
|
|
6af3899bcb | ||
|
|
74260c96bf | ||
|
|
fc922d263c | ||
|
|
36f90e57f3 | ||
|
|
f369da741d | ||
|
|
1720d2d86d | ||
|
|
96ed3c8db0 | ||
|
|
fe878e65de | ||
|
|
d223539165 | ||
|
|
a71253fa58 | ||
|
|
6db43d2c19 | ||
|
|
4fc3eca4aa | ||
|
|
5c77ebb1fb | ||
|
|
054df95ea4 | ||
|
|
8eecb39792 | ||
|
|
8af81668ea | ||
|
|
c9b5dcafbd | ||
|
|
f596595c98 | ||
|
|
3fa994a7a4 | ||
|
|
c7d9df6350 | ||
|
|
c2c33d6808 | ||
|
|
9923a1bf50 | ||
|
|
863654d188 | ||
|
|
777d92f6de | ||
|
|
382371d9e4 | ||
|
|
3556a40f81 | ||
|
|
4caffd79db | ||
|
|
3460444d84 | ||
|
|
faee97dd1e | ||
|
|
c6ec2c1dd7 | ||
|
|
92c314d3c8 | ||
|
|
934ada72fa | ||
|
|
05a382b1a8 | ||
|
|
0777d16e78 | ||
|
|
d131e537e9 | ||
|
|
37ff9e1e23 | ||
|
|
c8c354d1e6 | ||
|
|
4e6216bced | ||
|
|
5b232df503 | ||
|
|
a1e70b9ba4 | ||
|
|
c43267dbaa | ||
|
|
02afb04b7d | ||
|
|
e9fcbace61 | ||
|
|
2b21f41495 | ||
|
|
dd6bd0f880 | ||
|
|
1583782446 | ||
|
|
22af4436f7 | ||
|
|
8fb0d668e0 | ||
|
|
467b96abf4 | ||
|
|
4f0b17a4dc | ||
|
|
a633b5e36e | ||
|
|
ea954e7e15 | ||
|
|
3033496fa4 | ||
|
|
13fb51eecf | ||
|
|
9c17c83bf1 | ||
|
|
2191ff656e | ||
|
|
2aeb1a70ea | ||
|
|
aa63628536 | ||
|
|
5a2e7a8d66 | ||
|
|
a41d46e193 | ||
|
|
940ba9ba95 | ||
|
|
96627df4d4 | ||
|
|
47a2ad604c | ||
|
|
70e0514a02 | ||
|
|
9135be8d5f | ||
|
|
c5fee20286 | ||
|
|
817eb4f23c | ||
|
|
4fa34190de | ||
|
|
be053ed257 | ||
|
|
ae3a6fe270 | ||
|
|
da498af74e | ||
|
|
1e986fade8 | ||
|
|
d9143f805e | ||
|
|
2e68fae2ec | ||
|
|
d18d2d0d9b | ||
|
|
4e6b571a36 | ||
|
|
e6f83d4df2 | ||
|
|
a623a66019 | ||
|
|
35e73b1a2d | ||
|
|
8d1cfce15e | ||
|
|
4550056de7 | ||
|
|
0451d3bbed | ||
|
|
9097c80269 | ||
|
|
739317a83f | ||
|
|
92510af9d4 | ||
|
|
b3f288c035 | ||
|
|
761e312219 | ||
|
|
c0f03a28e9 | ||
|
|
d2ab699cd5 | ||
|
|
5d4064fed4 | ||
|
|
5182224c2b | ||
|
|
8dd618d67f | ||
|
|
82693ba5b5 | ||
|
|
ff031d792c | ||
|
|
5b5e8a9bd4 | ||
|
|
4fdbb1b1ad | ||
|
|
bf5a631a14 | ||
|
|
d5104aca05 | ||
|
|
d00bcac941 | ||
|
|
5bc498c812 | ||
|
|
312499a1ef | ||
|
|
dcc28b65cb | ||
|
|
b6d14d9960 | ||
|
|
7c1e3c84ba | ||
|
|
911f4ada0a | ||
|
|
c55663b923 | ||
|
|
cac0f44194 | ||
|
|
5bc9082fb7 | ||
|
|
62a4d1de0e | ||
|
|
5f0aa16184 | ||
|
|
ba51800b31 | ||
|
|
b495799d31 | ||
|
|
c0a00019c0 | ||
|
|
85d98195d5 | ||
|
|
3e848dff10 | ||
|
|
b85071174a | ||
|
|
918b9a9fa4 | ||
|
|
089cb0f536 | ||
|
|
f42c21f16b | ||
|
|
c38c80fd43 | ||
|
|
3f8dfa346c | ||
|
|
05fa063068 | ||
|
|
dca144f2ee | ||
|
|
4672fdb9f0 | ||
|
|
d6332f1767 | ||
|
|
c767f6ccf1 | ||
|
|
0b9916cae2 | ||
|
|
181c78d482 | ||
|
|
e072ee480b | ||
|
|
eb933af40a | ||
|
|
6d0a271308 | ||
|
|
4bcd9169c0 | ||
|
|
95b9e0a0e2 | ||
|
|
cc64c43758 | ||
|
|
8950de5a89 | ||
|
|
8840ca96a9 | ||
|
|
35d46dca72 | ||
|
|
393643515c | ||
|
|
17fda73ca1 | ||
|
|
784206c85c | ||
|
|
976f67eee6 | ||
|
|
e5f27b44b5 | ||
|
|
6c0dd9fe3b | ||
|
|
7a45867841 | ||
|
|
0e94d7410d | ||
|
|
f074954d3d | ||
|
|
c433f87000 | ||
|
|
ea6b1c255e | ||
|
|
35cf804471 | ||
|
|
526554741f | ||
|
|
d2229ab381 | ||
|
|
d459432c45 | ||
|
|
450c8dc149 | ||
|
|
169c51d50d | ||
|
|
d1f37e66eb | ||
|
|
812149ed29 | ||
|
|
593e971121 | ||
|
|
e058adc4fe | ||
|
|
a39474a245 | ||
|
|
ed246d152b | ||
|
|
7f965dad29 | ||
|
|
0a470e66f2 | ||
|
|
94881e757a | ||
|
|
26796c8f7a | ||
|
|
51f51c18af | ||
|
|
34fd5f626a | ||
|
|
bbe3ee8dc5 | ||
|
|
2208220c12 | ||
|
|
10c567daee | ||
|
|
6ea1179145 | ||
|
|
71a8dcca08 | ||
|
|
a147bdf406 | ||
|
|
0ca199f89a | ||
|
|
9e238d624e | ||
|
|
6d11591d83 | ||
|
|
5937492e93 | ||
|
|
ec70081258 | ||
|
|
9948a77558 | ||
|
|
724761565d | ||
|
|
9d236e8e03 | ||
|
|
a9851aca55 | ||
|
|
a2743dcaeb | ||
|
|
8b4e2a21e4 | ||
|
|
642c2ab4bc | ||
|
|
93ba870b2d | ||
|
|
36fac8e22b | ||
|
|
ae16edf1d6 | ||
|
|
66f49e6c42 | ||
|
|
a635873568 | ||
|
|
e2ff776b35 | ||
|
|
356526d610 | ||
|
|
38a10c92d3 | ||
|
|
3c8714ed5a | ||
|
|
3362216b66 | ||
|
|
5ceba11982 | ||
|
|
b9e12d7c23 | ||
|
|
5af0162b3f | ||
|
|
a3411c8e96 | ||
|
|
d027f12764 | ||
|
|
4b0b4928f5 | ||
|
|
ca32c11f4f | ||
|
|
38de57be76 | ||
|
|
2b8ea7845f | ||
|
|
483de40c96 | ||
|
|
a224d828f6 | ||
|
|
ef130a3bf9 | ||
|
|
b75307b070 | ||
|
|
3a1bbfad28 | ||
|
|
ae31b761f4 | ||
|
|
f927684eb8 | ||
|
|
5fa91a1bcc | ||
|
|
aeb7e7cd7c | ||
|
|
935abb55b7 | ||
|
|
00953e39f4 | ||
|
|
3b36673e03 | ||
|
|
3b36542212 | ||
|
|
af97a581e3 | ||
|
|
baf815d099 | ||
|
|
8f28f884ee | ||
|
|
4c492a3be7 | ||
|
|
3d727a403f | ||
|
|
c19c5ed0a4 | ||
|
|
1caa2ff3cb | ||
|
|
ed33cf08c7 | ||
|
|
a67b23eb2d | ||
|
|
01cff3ce84 | ||
|
|
d6376f8188 | ||
|
|
f0a3377247 | ||
|
|
9debc0fa4b | ||
|
|
37a93f53c4 | ||
|
|
c3fd572a52 | ||
|
|
bcc049ceeb | ||
|
|
3a59f11708 | ||
|
|
bafe3c3fc3 | ||
|
|
ce1f245952 | ||
|
|
800b4e44b1 | ||
|
|
260fc30be3 | ||
|
|
3725e91603 | ||
|
|
b04a70177b | ||
|
|
e9b3569f44 | ||
|
|
9bbc91bb52 | ||
|
|
5efa6d5273 | ||
|
|
6819c43a05 | ||
|
|
35c17ced72 | ||
|
|
1705aab290 | ||
|
|
9f50b8897a | ||
|
|
1c746df82c | ||
|
|
8456ffa231 |
@@ -1 +1 @@
|
||||
https://depot.fuzzlabs.org
|
||||
https://depot.1337.cx
|
||||
|
||||
@@ -482,13 +482,7 @@ Libraries:
|
||||
:'libports/lib/mk/libc':
|
||||
C runtime ported from FreeBSD.
|
||||
|
||||
:'libports/lib/mk/libc_lwip_nic_dhcp':
|
||||
Translates the BSD socket API to a NIC session using the lwIP stack.
|
||||
|
||||
:'dde_linux/lib/mk/libc_lxip':
|
||||
Translates the BSD socket API to a NIC session using the Linux TCP/IP stack.
|
||||
|
||||
:'libports/lib/mk/libc_ffat':
|
||||
:'libports/lib/mk/libc_fatfs':
|
||||
Accesses files on a block device that contains a FAT32 file system.
|
||||
|
||||
:'libports/lib/mk/libc_fuse_exfat':
|
||||
@@ -497,10 +491,6 @@ Libraries:
|
||||
:'libports/lib/mk/libc_fuse_ext2':
|
||||
Accesses files on a block device that contains an ext2 file system.
|
||||
|
||||
:'libports/lib/mk/libc_terminal':
|
||||
Connects the standard input and output from/to Genode's terminal session
|
||||
interface.
|
||||
|
||||
:'libports/lib/mk/stdcxx':
|
||||
Standard C++ library
|
||||
|
||||
|
||||
32
doc/news.txt
32
doc/news.txt
@@ -4,6 +4,38 @@
|
||||
===========
|
||||
|
||||
|
||||
Genode OS Framework release 19.05 | 2019-05-29
|
||||
##############################################
|
||||
|
||||
| The highlights of version 19.05 are a new kernel-agnostic virtualization
|
||||
| interface, initial support for the 64-bit ARM architecture, the use of
|
||||
| C++17 by default, a new tool chain based on GCC 8.3, updated C and SPARK
|
||||
| runtimes, and the consolidation of build directories across boards.
|
||||
|
||||
We dedicated the release cycle of Genode 19.05 to platform topics at various
|
||||
levels. The flagship feature is certainly the introduction of our
|
||||
kernel-agnostic virtualization interface. It has been in the works for more
|
||||
than a half year and gives us the prospect of running virtual machine monitors
|
||||
like Seoul and VirtualBox seamlessly across Genode's supported kernels.
|
||||
|
||||
The second major theme is the extension of Genode's CPU-architecture support
|
||||
to 64-bit ARM (AARCH64). This step motivated the update of many parts of the
|
||||
framework's fundamental infrastructure, ranging from the tool chain (updated
|
||||
to GCC 8.3), over the C runtime (updated to FreeBSD 12 libc), to the dynamic
|
||||
linker. The new tool chain, in turn, paved the ground for enabling C++17 by
|
||||
default.
|
||||
|
||||
With the diversity of kernels, CPU architectures, and boards growing, we are
|
||||
constantly striving to remove friction and redundancies between Genode's
|
||||
underlying platforms. The current release eventually consolidates the build
|
||||
directories not only across kernels but also across all boards of a given
|
||||
CPU architecture. This vastly increases the velocity of Genode-based system
|
||||
scenarios when targeting multiple boards or emulators at the same time.
|
||||
|
||||
Further details about these and many more improvements are given in the
|
||||
[https:/documentation/release-notes/19.05 - release documentation of version 19.05...]
|
||||
|
||||
|
||||
Sculpt as a Community Experience | 2019-03-19
|
||||
#############################################
|
||||
|
||||
|
||||
886
doc/release_notes-19-05.txt
Normal file
886
doc/release_notes-19-05.txt
Normal file
@@ -0,0 +1,886 @@
|
||||
|
||||
|
||||
===============================================
|
||||
Release notes for the Genode OS Framework 19.05
|
||||
===============================================
|
||||
|
||||
Genode Labs
|
||||
|
||||
|
||||
|
||||
The Genode release 19.05 is primarily focused on platform support.
|
||||
It adds compatibility with the 64-bit ARM architecture (AARCH64),
|
||||
comes with improvements of the various kernels targeted by the framework,
|
||||
and extends the list of supported hardware. The increased diversity of base
|
||||
platforms calls for unifications to keep the hardware and kernel landscape
|
||||
manageable.
|
||||
|
||||
On that account, Genode uses one reference tool chain across all kernels
|
||||
and CPU architectures. The current release upgrades this tool chain to
|
||||
*GCC 8.3* with C++17 enabled by default
|
||||
(Section [Tool chain based on GCC 8.3.0 and binutils 2.32]).
|
||||
|
||||
To increase the velocity of Genode system scenarios across different boards
|
||||
of a given CPU architecture, the release introduces the notion
|
||||
of *board and kernel-agnostic build directories* presented in Section
|
||||
[Unified build directories for ARM]. Once built for one particular
|
||||
CPU architecture, the same binaries can be deployed at any supported board or
|
||||
kernel without recompilation. This vastly accelerates the workflow when
|
||||
targeting multiple boards and emulators at once.
|
||||
|
||||
As another major unification effort, the current release introduces a new
|
||||
*kernel-agnostic virtualization* interface. Up until now, virtualization
|
||||
used to be inherently tied to a specific kernel. Thanks to the new interface,
|
||||
however, one virtual machine monitor implementation can be combined with
|
||||
kernels as different as NOVA, seL4, or Fiasco.OC. No recompilation needed.
|
||||
As outlined in Section [Kernel-agnostic virtual-machine monitors], Genode
|
||||
has now become able to run the Seoul VMM on all those kernels, while
|
||||
VirtualBox is planned to follow.
|
||||
|
||||
On our [https://genode.org/about/road-map - road map], we originally
|
||||
planned several user-facing features related to Sculpt OS. However, in the
|
||||
light of the major platform efforts, we decided to defer those topics instead
|
||||
of rushing them.
|
||||
That said, the release is not without new features. For example, our port
|
||||
of *OpenJDK* has become able to host the Spring framework and the Tomcat web
|
||||
server, there are welcome improvements of the *package-management tooling*,
|
||||
and we added new options for user-level networking.
|
||||
|
||||
Finally, version 19.05 is accompanied with the annual revision of the *Genode*
|
||||
*Foundations book* (Section [New revision of the Genode Foundations book]),
|
||||
which is now available as an online version in addition to the regular PDF
|
||||
document.
|
||||
|
||||
|
||||
Kernel-agnostic virtual-machine monitors
|
||||
########################################
|
||||
|
||||
Since the introduction of Genode's
|
||||
[https://genode.org/documentation/release-notes/17.02#Genode_Application_Binary_Interface - Application Binary Interface]
|
||||
in the 17.02 release,
|
||||
Genode components can be assembled once for a given hardware platform and
|
||||
executed without further adjustments on all the supported kernels. However, at
|
||||
that time, the supported virtual machine monitors - a port of VirtualBox 4 & 5,
|
||||
Seoul, and our
|
||||
[https://genode.org/documentation/articles/arm_virtualization - custom VMM] -
|
||||
remained kernel specific.
|
||||
|
||||
Of course, last remaining bastions tempt to be taken! So last year, we started
|
||||
the venture to unify our virtualization interface across different kernels.
|
||||
Starting point was the already existing Genode VM interface of our custom VMM
|
||||
on ARM. We took it and extended the interface with caution to the x86 world.
|
||||
Having an eye on the requirements of our already supported VMMs on NOVA(x86),
|
||||
namely VirtualBox and Seoul, the VM interface got extended with missing
|
||||
features like multiple vCPU support and specific VM handlers per vCPU.
|
||||
|
||||
In parallel, we started to investigate the other x86 microkernels with regard
|
||||
to hardware-assisted virtualization features, namely seL4 and Fiasco.OC.
|
||||
Over several weeks, we iteratively extended the interface. On the one hand
|
||||
we familiarized ourself with the kernel interfaces of seL4 & Fiasco.OC while
|
||||
on the other hand considered known requirements of the NOVA microhypervisor.
|
||||
Additionally, we kept our custom VMM for ARM still compatible with the new VM
|
||||
interface.
|
||||
|
||||
During this time, it became apparent that the control flow on a VM resume/pause
|
||||
and a VM event(exit) are different between seL4/Fiasco.OC and NOVA/base-hw.
|
||||
For seL4 and Fiasco.OC, a VM is resumed by making a blocking syscall on the
|
||||
kernel. On a VM event, the blocking syscall would return. Logically, on both
|
||||
kernels the VMM 'calls' into the VM.
|
||||
On base-hw and NOVA, it is the other way around. Whenever a VM causes a VM
|
||||
event, the kernels set up either an asynchronous notification (base-hw) or a
|
||||
synchronous IPC call (NOVA) to the VMM. In both cases the VMM executes a prior
|
||||
registered VM event handler as response.
|
||||
Upon return of the VM event handler, the kernel resumes the VM. Logically, on
|
||||
NOVA and base-hw the VM 'calls' into the VMM. The following two figures
|
||||
contrast the different flows of control between a user-level virtual machine
|
||||
monitor and the respective kernels.
|
||||
|
||||
[image vm_seq_foc_sel4]
|
||||
Control flow of handling virtualization events on Fiasco.OC and seL4
|
||||
|
||||
[image vm_seq_nova_hw]
|
||||
Control flow of handling virtualization events on NOVA and the base-hw kernel
|
||||
|
||||
Hiding this differences behind a common VM interface was the challenge we were
|
||||
faced, accepted, and won. Finally, at one point in December we had all 3
|
||||
x86 kernels running with a test VMM - without re-compilation. The toy VMM
|
||||
(vmm_x86.run) runs multiple vCPUs on multiple physical CPUs and tests several
|
||||
VM events/exits.
|
||||
|
||||
After this major breakthrough, we spent the days left before Christmas to
|
||||
adjust the Seoul VMM to the new VM interface, freeing it from the ties to the
|
||||
NOVA kernel. The choice to start with Seoul stems from the fact that it is -
|
||||
compared to VirtualBox - much smaller and therefore easier to debug if things
|
||||
go wrong in the beginning. After one week, the Seoul VMM became in principle
|
||||
kernel independent and worked again on NOVA. After some more days, it started
|
||||
to hobble on seL4 and Fiasco.OC as well.
|
||||
|
||||
With the New Year, VirtualBox was the next target where all NOVA kernel
|
||||
specific calls were replaced with the new Genode VM interface. Mid of January,
|
||||
the work showed first results by having a prototype running simple VMs on NOVA
|
||||
again. At this point, it became apparent that this venture is not anymore an
|
||||
adventure. All the findings and technical details so far got condensed to a
|
||||
[https://fosdem.org/2019/schedule/event/microkernel_virtualization - presentation]
|
||||
given and recorded at the [https://fosdem.org/2019 - FOSDEM 2019] in Brussels
|
||||
in February in the
|
||||
[https://fosdem.org/2019/schedule/track/microkernels_and_component_based_os - Microkernel and Component based OS]
|
||||
developer room.
|
||||
|
||||
At this point, we started transforming our prototype for the 4 kernels into a
|
||||
clean solution to be featured in Genode 19.05. Eventually, the kernel-agnostic
|
||||
Seoul VMM runnable on seL4, Fiasco.OC, and NOVA entered Genode master. In the
|
||||
Genodians article
|
||||
[https://genodians.org/alex-ab/2019-05-09-seoul-vmm - Seoul VMM and the new VM interface],
|
||||
we conserved the current state and a few performance measurements.
|
||||
|
||||
Shortly before this release, the kernel-agnostic VirtualBox VMM version on
|
||||
Genode/NOVA got ready. The kernel-agnostic version is in principle capable to
|
||||
run Linux VMs and Windows 7/10 VMs on Genode/NOVA. Currently, this version
|
||||
must still be considered as experimental and does not run on seL4 or
|
||||
Fiasco.OC.
|
||||
|
||||
Because of the experimental nature of the kernel-agnostic VirtualBox VMM
|
||||
version, we decided to keep the kernel-specific version for NOVA for the
|
||||
moment. This gives us time to test and improve the kernel-agnostic version. It
|
||||
also allows us to compare both versions to each other.
|
||||
If time and interest permits, we will consider bringing the virtualization
|
||||
support on Genode/seL4 and Genode/Fiasco.OC on par with Genode/NOVA.
|
||||
|
||||
When building VirtualBox with Genode 19.05,
|
||||
you will find both the 'virtualbox5-nova' and the new 'virtualbox5' binaries
|
||||
in the build directory. The former relies on NOVA's kernel interface whereas
|
||||
the latter uses Genode's kernel-agnostic VM interface. Nightly tested run
|
||||
scenarios with the new VM interface are named 'vbox5_vm*.run' and can be found
|
||||
in the 'repos/ports/run' directory.
|
||||
|
||||
|
||||
Broadened CPU architecture support and updated tool chain
|
||||
#########################################################
|
||||
|
||||
With the major update of Genode's tool chain and library infrastructure in
|
||||
tandem, the framework gains a consistent architecture support across x86-32,
|
||||
x86-64, ARM-32, RISC-V, and the newly added AARCH64. This includes the tool
|
||||
chain (Section [Tool chain based on GCC 8.3.0 and binutils 2.32]), the base
|
||||
framework, the dynamic linker, and the C runtime
|
||||
(Section [Updated dynamic linker and C runtime]).
|
||||
|
||||
Together with this update, we took the chance to wrap up our long-time move
|
||||
away from board-specific build directories to one generic build directory
|
||||
shared by multiple kernels and boards for a given CPU architecture
|
||||
(Section [Unified build directories for ARM]).
|
||||
|
||||
|
||||
Tool chain based on GCC 8.3.0 and binutils 2.32
|
||||
===============================================
|
||||
|
||||
Genode uses a tailored tool chain based on GCC and binutils that is used
|
||||
across all supported kernels and architectures. Since the previous tool-chain
|
||||
update in version
|
||||
[https://genode.org/documentation/release-notes/17.05#Tool_chain - 17.05],
|
||||
we relied on GCC 6.3. After two years, it was time for an update, motivated by
|
||||
three major reasons. First, the C++17 standard is common-place now. We Genode
|
||||
developers anticipate the improvements that come with it. Second, RISC-V and
|
||||
AARCH64 are now supported by mainline GCC. Up till now, we had to maintain a
|
||||
custom patch set for Genode's RISC-V support. AARCH64 was not supported yet.
|
||||
Third, our increasing engagement with SPARK depends on recent improvements of
|
||||
the Ada compiler that is part of GCC.
|
||||
|
||||
With Genode 19.05, the tool chain is now based on binutils version 2.32, GCC
|
||||
version 8.3.0, GDB version 8.2.1, gcov version 8.3.0, standard C++ library
|
||||
version 8.3.0.
|
||||
|
||||
The tool chain supports x86 (32 and 64 bit), ARM, AARCH64, and RISC-V.
|
||||
|
||||
For C++ code, the C++17 standard is enabled by default.
|
||||
|
||||
The update of the tool chain provided a perfect opportunity to replace the
|
||||
former use of gnatmake with a much more natural integration of Ada in Genode's
|
||||
build system, using a custom ali2dep dependency-extraction tool developed
|
||||
by [https://github.com/Componolit/ali2dep - Componolit].
|
||||
|
||||
In contrast to the previous versions, we switched to a versioned installation
|
||||
directory for the new tool chain. By default, it is now installed to
|
||||
_/usr/local/genode/tool/19.05/_. This eases the use of different tool-chain
|
||||
versions for different development branches.
|
||||
|
||||
:Tool-chain installation:
|
||||
|
||||
[https://genode.org/download/tool-chain]
|
||||
|
||||
Caveats
|
||||
-------
|
||||
|
||||
The tool-chain update required a number of adaptations throughout the source
|
||||
tree, and may affect Genode users too:
|
||||
|
||||
* The silent fall-though within switch statements must now be replaced
|
||||
by an explicit annotation of the form
|
||||
! [[fallthrough]]
|
||||
* The 'register' keyword is no longer valid with C++17. Hence, it must
|
||||
be removed from the code.
|
||||
* Types marked as 'Noncopyable' can no longer have an implicit default
|
||||
constructor. A default constructor must be provided manually.
|
||||
|
||||
|
||||
Updated dynamic linker and C runtime
|
||||
====================================
|
||||
|
||||
The tool-chain update is accompanied with a major update of the dynamic linker
|
||||
and the C runtime to cover both the AARCH64 and RISC-V architectures in
|
||||
addition to the traditional x86 and ARM architectures.
|
||||
|
||||
FreeBSD 12 supports AARCH64 and RISC-V. Hence, by updating our C runtime to
|
||||
this version, Genode's libc support extends to those architectures now.
|
||||
|
||||
Until now, Genode's dynamic linker supported only the eager binding of symbols
|
||||
at loading time on the *RISC-V* architecture. With the current version, we
|
||||
lifted this limitation in favor of lazy binding as used on all other CPU
|
||||
architectures.
|
||||
|
||||
|
||||
Unified build directories for ARM
|
||||
=================================
|
||||
|
||||
In version
|
||||
[https://genode.org/documentation/release-notes/17.02#Genode_Application_Binary_Interface - 17.02],
|
||||
we introduced unified build directories for x86, which allow us to build and
|
||||
run Genode scenarios on various kernels while using only one build directory.
|
||||
This concept leverages Genode's cross-kernel binary compatibility to make
|
||||
the switch from one kernel to another - like developing on base-linux and
|
||||
deploying on base-nova - a seamless experience.
|
||||
|
||||
On ARM, this concept was held back by a third dimension. The
|
||||
system-integration step does not only depend on the CPU architecture and
|
||||
the kernel but also on the used board. Our traditional approach was the
|
||||
use of one build directory per board. Granted, within such a build directory,
|
||||
one could easily switch between different kernels like Fiasco.OC and seL4.
|
||||
But on ARM, we find an extreme proliferation of different board
|
||||
configurations, which share the same CPU architecture but demand different
|
||||
integration steps. This ensues large redundancies among different build
|
||||
directories. Switching from one board to another - even when most binaries
|
||||
happen to be exactly the same - requires an additional rebuilding effort.
|
||||
|
||||
With version 19.05, we took the chance to generalize the unified build
|
||||
directory concept to support multiple different boards per build directory,
|
||||
greatly reducing the friction when switching kernels and boards for a given
|
||||
CPU architecture (like ARMv7a). This change has the following implications:
|
||||
|
||||
* Drivers no longer depend on the SPEC values as configured for a build
|
||||
directory.
|
||||
|
||||
* All *binaries* are now *named unambiguously*. For example, the USB drivers
|
||||
for the Panda (OMAP) and Arndale (Exynos) boards were formerly called
|
||||
'usb_drv' but were different programs. They just never happened to
|
||||
appear in the same build directory. In the new version, they are named
|
||||
'panda_usb_drv' and 'arndale_usb_drv' respectively and can thereby
|
||||
peacefully co-exist within the same 'armv7a' build directory.
|
||||
|
||||
Note that this binary renaming will likely affect existing run scripts.
|
||||
|
||||
* Include paths no longer hide the board details, which makes the included
|
||||
code much more easy to follow.
|
||||
|
||||
* Run scripts need to pick the right binary, depending on the used board.
|
||||
Since the board is no longer tied to a build directory, the selection
|
||||
of the used board has become a build-time variable 'BOARD' following
|
||||
the successful pattern of how we specify the targeted 'KERNEL'.
|
||||
|
||||
To avoid the pollution of run scripts with difficult conditions, we wrap
|
||||
the drivers needed for a particular board and use case into so-called
|
||||
_drivers_ packages. Such a package can be instantiated within a generic
|
||||
scenario using a nested init instance. The details about the drivers and
|
||||
how they access the hardware remain nicely hidden inside this building block.
|
||||
|
||||
Currently, there exist _drivers_ packages for two distinct use cases:
|
||||
|
||||
:drivers_interactive pkgs: contain all drivers needed for simple
|
||||
interactive scenarios, including graphical output and user input.
|
||||
|
||||
:drivers_nic pkgs: contain the drivers needed for communication over the
|
||||
network.
|
||||
|
||||
Whenever a run script fits one of these use cases, it can rely on the
|
||||
corresponding ready-to-use drivers packages via:
|
||||
|
||||
! import_from_depot [depot_user]/src/[base_src] \
|
||||
! [depot_user]/pkg/[drivers_nic_pkg] \
|
||||
! ...
|
||||
|
||||
With the drivers package incorporated, the drivers subsystem can be
|
||||
instantiated as follows (note the absence of any board or kernel-specific
|
||||
details):
|
||||
|
||||
! <start name="drivers" caps="1000">
|
||||
! <resource name="RAM" quantum="32M" constrain_phys="yes"/>
|
||||
! <binary name="init"/>
|
||||
! <route>
|
||||
! <service name="ROM" label="config">
|
||||
! <parent label="drivers.config"/> </service>
|
||||
! <service name="Timer"> <child name="timer"/> </service>
|
||||
! <any-service> <parent/> </any-service>
|
||||
! </route>
|
||||
! <provides> <service name="Nic"/> </provides>
|
||||
! </start>
|
||||
|
||||
|
||||
Using the 'BOARD' build variable
|
||||
--------------------------------
|
||||
|
||||
The new 'BOARD' variable selects the board to use. It can be specified either
|
||||
as a 'make' command-line argument (or environment variable), or defined in the
|
||||
build-directory configuration (_etc/build.conf_). The following boards are
|
||||
available:
|
||||
|
||||
:arm_v6: rpi
|
||||
:arm_v7a: arndale, imx53_qsb, imx53_qsb_tz, imx6q_sabrelite, imx7d_sabre,
|
||||
nit6_solox, odroid_x2, odroid_xu, panda, pbxa9, usb_armory,
|
||||
wand_quad, zynq_qemu
|
||||
:arm_v8a: rpi3
|
||||
:x86_64: pc, linux, muen
|
||||
:x86_32: pc, linux
|
||||
:riscv: spike
|
||||
|
||||
Please note, when running Genode on Linux or the Muen separation kernel -
|
||||
although it is run on common x86 PC hardware - we treat both runtime
|
||||
environments as separate "boards" because their device driver environments
|
||||
are fundamentally different.
|
||||
|
||||
|
||||
New revision of the Genode Foundations book
|
||||
###########################################
|
||||
|
||||
The "Genode Foundations" book received its annual update, which is actually
|
||||
rather a refinement than a revision. The noteworthy additions and changes are:
|
||||
|
||||
: <div class="visualClear"><!-- --></div>
|
||||
: <p>
|
||||
: <div style="clear: both; float: left; margin-right:20px;">
|
||||
: <a class="internal-link" href="https://genode.org">
|
||||
: <img class="image-inline" src="https://genode.org/documentation/genode-foundations-title.png">
|
||||
: </a>
|
||||
: </div>
|
||||
: </p>
|
||||
|
||||
* Component health monitoring
|
||||
* Static code analysis
|
||||
* Documentation of --depot-user and --depot-auto-update
|
||||
* Minor adjustments in the under-the-hood chapter
|
||||
* Changes of the build system
|
||||
* Updated tool requirements
|
||||
* Updated API reference
|
||||
|
||||
: <div class="visualClear"><!-- --></div>
|
||||
|
||||
To examine the changes in detail, please refer to the book's
|
||||
[https://github.com/nfeske/genode-manual/commits/master - revision history].
|
||||
|
||||
|
||||
New online version of the book
|
||||
------------------------------
|
||||
|
||||
We are happy to announce that the Genode Foundations book is now available
|
||||
as an online version in addition to the regular PDF version.
|
||||
|
||||
:Browse the Genode Foundations book online:
|
||||
|
||||
[https://genode.org/documentation/genode-foundations/19.05/index.html]
|
||||
|
||||
Thanks a lot to Edgard Schmidt for creating the tooling for the HTML version
|
||||
of the book!
|
||||
|
||||
|
||||
Base framework and OS-level infrastructure
|
||||
##########################################
|
||||
|
||||
Modernized block-storage interfaces
|
||||
===================================
|
||||
|
||||
With the current release, we revisited Genode's interfaces for accessing
|
||||
block devices to ease the implementation of asynchronous I/O, to accommodate
|
||||
zero-copy block drivers, and to support trim and sync operations.
|
||||
|
||||
|
||||
Revised RPC interface
|
||||
---------------------
|
||||
|
||||
The 'Block::Session' RPC interface remained untouched for a long time.
|
||||
We have now rectified long-standing deficiencies.
|
||||
|
||||
First, *sync requests* used to be handled as synchronous RPCs. This is bad
|
||||
for components like part_block that multiplex one block device for multiple
|
||||
clients. One long-taking sync request of one client could stall the I/O for
|
||||
all other clients. The new version handles sync requests as asynchronous
|
||||
block-request packets instead.
|
||||
|
||||
Second, the new version allows a server to dictate the *alignment* of
|
||||
block-request payload. This way, a driver becomes able to use the payload
|
||||
buffer shared between client and server directly for DMA transfers while
|
||||
respecting the device's buffer-alignment constraints.
|
||||
|
||||
Third, we added support for *trim* as an asynchronous block operation.
|
||||
However, as of now, this operation is ignored by all servers.
|
||||
|
||||
Fourth, each block operation can now be accompanied with a client-defined
|
||||
request tag independent from the other parameters of the operation. The tag
|
||||
allows a block-session client to uniquely correlate acknowledgments with
|
||||
outstanding requests. Until now, this was possible for read and write
|
||||
operations by taking the value of the request's packet-stream offset. However,
|
||||
sync and trim requests do not carry any packet-stream payload and thereby lack
|
||||
meaningful and unique offset values. By introducing the notion of a tag, we
|
||||
can support multiple outstanding requests of any type and don't need to
|
||||
overload the meaning of the offset value.
|
||||
|
||||
|
||||
New client-side API
|
||||
-------------------
|
||||
|
||||
We have now equipped the 'Block::Connection' with a framework API for the
|
||||
implementation of robust block-session clients that perform block I/O in an
|
||||
asynchronous fashion.
|
||||
|
||||
An application-defined 'JOB' type, inherited from 'Connection::Job',
|
||||
encapsulates the application's context information associated with a block
|
||||
operation.
|
||||
|
||||
The life cycle of the jobs is implemented by the 'Connection' and driven by
|
||||
the application's invocation of 'Connection::update_jobs'. The 'update_jobs'
|
||||
mechanism takes three hook functions as arguments, which implement the
|
||||
applications-defined policy for producing and consuming data, and for the
|
||||
completion of jobs.
|
||||
|
||||
We plan to gradually move the existing block clients to the new API to benefit
|
||||
from the latency-hiding effects of asynchronous I/O. The first updated client
|
||||
is the _block_tester_ component located at _os/src/app/block_tester/_, which
|
||||
received a number of new features like the choice of the batch size. Please
|
||||
refer to the accompanied README for a detailed description of the
|
||||
block-tester.
|
||||
|
||||
|
||||
Unified types for time values
|
||||
=============================
|
||||
|
||||
[https://genode.org/documentation/release-notes/17.05#New_API_for_user-level_timing - Two years ago],
|
||||
we introduced the so-called timeout framework to provide a general solution
|
||||
for requirements unmet by the bare timer-session interface - most notably
|
||||
timer-session multiplexing amongst multiple timeouts, and microseconds
|
||||
accuracy. Up to this day, the timeout framework has proved itself many times
|
||||
in both real-life appliances and artificial tests and has become the standard
|
||||
front end for timing in Genode applications.
|
||||
|
||||
With this release, we solved one of the few remaining limitations with the
|
||||
framework by enabling timeouts of up to 2^64 microseconds (> 500000 years)
|
||||
across all supported architectures. In order to achieve this, we replaced the
|
||||
former machine-word-wide types used for plain time values by unsigned 64-bit
|
||||
integers. We did this not only inside the timeout framework but also to almost
|
||||
all code in the basic Genode repositories that uses the framework.
|
||||
|
||||
By doing so, we also paved the way for a second step, in which we are planning
|
||||
to replace plain time values as far as possible with the abstract 'Duration'
|
||||
type. With this type in place, the user wouldn't have to worry anymore about
|
||||
any plain-integer implications when calculating with time values.
|
||||
|
||||
|
||||
Support for chained EBR partitions
|
||||
==================================
|
||||
|
||||
Having an active community around Sculpt leads to bugfixes in unexpected
|
||||
places. By now we prefer to use a GPT rather than an MBR based partition table
|
||||
and although we test 'part_block', the component that parses the tables, on
|
||||
regular basis, the handling of chained EBR's was flawed. Community member
|
||||
[https://genodians.org/valerius/index - Valery Sedletski] who relies on such a
|
||||
setup encountered this flaw and provided a bug report, which enabled us to
|
||||
quickly reproduce and fix the problem.
|
||||
|
||||
|
||||
IP forwarding with port redirection
|
||||
===================================
|
||||
|
||||
The NIC router can now be used to redirect to individual destination ports on
|
||||
port-forwarding. To express the redirection, the new 'to_port' attribute can
|
||||
be added to '<tcp-forward>' and '<udp-forward>' rules in the NIC router
|
||||
configuration. If the new attribute isn't added, the rules behave as usual and
|
||||
forward with an unaltered destination port.
|
||||
|
||||
|
||||
Libraries, languages, and applications
|
||||
######################################
|
||||
|
||||
Ada/SPARK runtime and SPARK-based cryptography
|
||||
==============================================
|
||||
|
||||
The SPARK runtime has been updated to GCC 8.3. SPARK components do not require
|
||||
'Genode::Env' or a terminal session anymore. Debug messages can still be
|
||||
printed using 'GNAT.IO', which uses 'Genode::log' and 'Genode::error'
|
||||
internally now.
|
||||
|
||||
Threading support, which was never fully implemented, has been removed to
|
||||
further simplify the runtime. This simplification allowed us to prove absence
|
||||
of runtime errors for the secondary stack allocator and other parts of the
|
||||
runtime.
|
||||
|
||||
[https://github.com/Componolit/libsparkcrypto.git - Libsparkcrypto] is a
|
||||
library of common cryptographic algorithms implemented in SPARK. It is
|
||||
free-standing and has a very small footprint. The port of libsparkcrypto for
|
||||
Genode has been added to the libports repository. Thanks to Alexander Senier
|
||||
and Johannes Kliemann of [https://componolit.com - Componolit] for maintaining
|
||||
the Ada/SPARK runtime and libsparkcrypto.
|
||||
|
||||
To accommodate the use case of block encryption, we added the small wrapper
|
||||
library 'aes_cbc_4k' around libsparkcrypto that provides a simple C++
|
||||
interface for the en/decryption of 4 KiB data blocks. It uses AES-CBC while
|
||||
incorporating the block number and the private key as salt values.
|
||||
|
||||
|
||||
Improved resilience of the sequence tool
|
||||
========================================
|
||||
|
||||
We have a simple component that starts other components sequentially. It
|
||||
will exit whenever one of those components has exited with an error.
|
||||
However, this component is used by our [https://genodians.org - Genodians]
|
||||
appliance where it controls the content-update mechanism. Since updating
|
||||
involves fetching content via HTTP/S depending on external events, e.g.,
|
||||
the remote site is not reachable, the sequence tool might exit. In a long
|
||||
running appliance, this is obviously not a useful action where no one is
|
||||
in place to restart the sequence tool. Rather than increasing the overall
|
||||
complexity of the appliance by introducing such a management component, we
|
||||
added a _keep-going_ feature to the sequence tool that will instruct it
|
||||
to carry on even if one of the started components has failed.
|
||||
|
||||
Please look at _repos/os/src/app/sequence/README_ for instructions on
|
||||
how to use the feature.
|
||||
|
||||
|
||||
NIC-bus server for private LANs
|
||||
===============================
|
||||
|
||||
The 'nic_bus' server was added to the world repository as an alternative
|
||||
to the 'nic_router' and 'nic_bridge' components. The name may be a slight
|
||||
misnomer, but this component acts neither as a hub, switch, or router.
|
||||
The 'nic_bus' implements unicast and multicast Ethernet packet switching
|
||||
between sessions, but drops any unicast packet not destined for a session
|
||||
attached to the bus. This is in opposition to the behavior of a typical
|
||||
Ethernet switch and is intending to create simple, software-defined
|
||||
local-area-networks for native components as well as virtual machines.
|
||||
In practice the component has been used for attaching VMs to the
|
||||
[https://yggdrasil-network.github.io/ - Yggdrasil] overlay network via
|
||||
a bus-local IPv6 prefix.
|
||||
|
||||
|
||||
Distributed Genode
|
||||
==================
|
||||
|
||||
In
|
||||
[https://genode.org/documentation/release-notes/16.08#Network-transparent_ROM_sessions_to_a_remote_Genode_system - 16.08],
|
||||
we initially released the _remote_rom_ components that act as communication
|
||||
proxies. A communication proxy transparently relays a particular service to
|
||||
another Genode system. As the name suggests, the remote_rom relays ROM
|
||||
sessions.
|
||||
|
||||
Originally implemented as a proof of concept using bare IP packets, broadcast
|
||||
MACs and static configuration of IP addresses, we added several improvements
|
||||
to allow a more general use. First, we adopted the size-guard idea for packet
|
||||
construction and processing from the NIC router. Furthermore, we adopted the
|
||||
single-threaded implementation style that was already established in other NIC
|
||||
components. Thanks to Edgard Schmidt for this contribution. Second, we
|
||||
implemented ARP requests to eliminate broadcasting. Third, we moved from bare
|
||||
IP packets to UDP/IP and implemented a go-back-N ARQ strategy in order to
|
||||
reliably transmit larger ROM dataspaces.
|
||||
|
||||
As the remote_rom proved valuable for distributing functionality across
|
||||
multiple Genode devices, we also applied this concept to the LOG session in
|
||||
order to transmit LOG output from a headless Genode device to a
|
||||
[https://genode.org/download/sculpt - Sculpt] system for instance. The udp_log
|
||||
component provides a LOG service and sends the LOG messages as UDP packets to
|
||||
another machine. The log_udp reverses this process by receiving these UDP
|
||||
packets and forwarding the messages to a LOG service. An example can be found
|
||||
in the world repository at _run/udp_log.run_ and _run/log_udp.run_.
|
||||
|
||||
|
||||
Seoul and VirtualBox virtual machine monitors
|
||||
=============================================
|
||||
|
||||
Besides the conversion of the Genode back end of Seoul to the new VM
|
||||
interface, we added mouse-wheel support to the PS/2 model and changed the VMM
|
||||
to request a single GUI/nitpicker session rather than distinct framebufer and
|
||||
input sessions.
|
||||
|
||||
Similar to the Seoul VMM, the VirtualBox VMM was adjusted to the new VM
|
||||
interface and now uses the GUI/nitpicker session. The original kernel-specific
|
||||
VirtualBox version tied to the NOVA kernel is still available. Both versions
|
||||
can be used simultaneously.
|
||||
|
||||
|
||||
Use of Nim decoupled from Genode build system
|
||||
=============================================
|
||||
|
||||
With this release, all integration with Nim tooling has been removed from the
|
||||
Genode build system as a result of maturing support for additional languages
|
||||
via Genode SDKs. Building Nim components independently of the Genode source
|
||||
tree has the benefit of smaller upstream checkouts and faster build times, and
|
||||
has yielded components such as the
|
||||
[https://genodians.org/ehmry/2019-03-22-depot_9P - 9P server] used in some
|
||||
Sculpt developer workflows. An example of an independent build system for Nim
|
||||
components is
|
||||
[https://genodians.org/ehmry/2019-04-27-nim_packaging - documented on the Genodians blog].
|
||||
|
||||
|
||||
OpenJDK improvements
|
||||
====================
|
||||
|
||||
Within the 19.05 release cycle, we further improved Genode's OpenJDK support
|
||||
by enabling additional networking infrastructure required by the
|
||||
[https://spring.io - Spring Framework]. The improvements especially concern
|
||||
support for SSL connections, which enabled us to successfully execute an embedded
|
||||
[https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html - Tomcat]
|
||||
server natively on Genode x86 and ARMv7 platforms using the same JAR archive.
|
||||
This line of work continues our Java for embedded systems effort as described in
|
||||
our [https://genodians.org/ssumpf/2019-02-27-java-19-02 - Boot2Java] article.
|
||||
|
||||
Having these features in place, our Java efforts will continue in the direction
|
||||
of Java Swing and the support of input devices in the future, with the ultimate
|
||||
goal of seamless Java application integration into
|
||||
[https://genode.org/download/sculpt - Sculpt OS].
|
||||
|
||||
|
||||
Device drivers
|
||||
##############
|
||||
|
||||
Improved Zynq board support
|
||||
===========================
|
||||
|
||||
The initial support of the Xilinx Zynq-7000 SoC was added to our custom kernel
|
||||
in 15.11. Since then, the support of this hardware has been incrementally
|
||||
extended. The definitions of memory maps, frequencies, and RAM sizes for
|
||||
different Zynq-based boards are found in the world repository.
|
||||
|
||||
One of the major additions in this release is the initialization of the L2
|
||||
cache. In this context, we also added a simple cache benchmark at
|
||||
_repos/os/run/cache.run_ that measures the access times for memory regions of
|
||||
different size and thereby reveals the number of cache levels and their sizes.
|
||||
|
||||
With the latest improvements of the network driver in 18.11, a zero-copy
|
||||
approach was introduced as an effort to eliminate bottlenecks in the driver's
|
||||
performance. However, this modification also introduced a kernel dependency of
|
||||
the driver in order to flush packet-buffer memory from the cache before handing
|
||||
it over to the DMA-controller. With this release, we moved back to using
|
||||
uncached dataspaces in order to eliminate the cache flushes and the kernel
|
||||
dependency. Interestingly, we could not recognize a significant impact on the
|
||||
driver's performance, which confirms the presumption that flushing the cache
|
||||
nullifies the gain from using cached dataspaces.
|
||||
|
||||
In order to enable the continuous operation of the network driver, we extended
|
||||
the driver-internal error handling that is necessary to recover the network
|
||||
driver in certain situations.
|
||||
|
||||
_Thanks to Johannes Schlatow for contributing and maintaining Genode's Zynq support!_
|
||||
|
||||
|
||||
Updated Intel network drivers
|
||||
=============================
|
||||
|
||||
As a result of recurring issues with modern Intel i219 laptop NICs, we
|
||||
updated the driver sources for Intel chipsets to the latest upstream
|
||||
iPXE version. This update also enables all NIC variants, which were
|
||||
missing from our manually maintained PCI ID whitelist before.
|
||||
|
||||
|
||||
New drivers-nic and drivers-interactive depot packages
|
||||
======================================================
|
||||
|
||||
As already described in section [Unified build directories for ARM],
|
||||
_drivers_nic_ packages nicely hide the driver configuration internals needed for
|
||||
a specific board to communicate over the network. Until now there was only one
|
||||
package available for x86 based PCs. Now, additional _drivers_nic_ packages
|
||||
are available for:
|
||||
|
||||
:boards: imx53_qsb imx6q_sabrelite linux muen pbxa9 rpi zynq
|
||||
|
||||
Beside the formerly available _drivers_interactive_ packages for linux, pbxa9
|
||||
and pc, there are now additional ones for the following:
|
||||
|
||||
:boards: imx53_qsb rpi muen
|
||||
|
||||
|
||||
Platforms
|
||||
#########
|
||||
|
||||
For most kernel environments, the core component provides a ROM module named
|
||||
'platform_info', which comprises information provided by either the kernel or
|
||||
the bootloader. The information entails e.g., the TSC clock frequency and
|
||||
framebuffer dimensions. Most of the information is of interest for special
|
||||
device driver components only.
|
||||
|
||||
Over the time, there was an increasing need to incorporate the information
|
||||
about which kernel Genode runs on top of. Thereby, special test components,
|
||||
like depot_autopilot could use the information to, e.g., skip certain tests
|
||||
on kernels known to not support them. Moreover, there are rare corner-cases
|
||||
where kernels behave differently, for instance, interrupts are enumerated
|
||||
differently on certain ARM platforms. Rather than maintaining multiple driver
|
||||
binaries with different names depending on specific kernels, the
|
||||
'platform_info' ROM module can now be used to differentiate between kernels
|
||||
when necessary.
|
||||
|
||||
|
||||
Execution on bare hardware (base-hw)
|
||||
====================================
|
||||
|
||||
This release comes with fundamental optimizations and corrections for
|
||||
executing Genode on bare hardware when using the core component as the actual
|
||||
kernel.
|
||||
|
||||
In the past, we could observe some serious peculiarities regarding the timing
|
||||
behavior on the hw kernel. After a careful review, we identified the obstacles
|
||||
that led to time drifts on several platforms and to quite different runtime
|
||||
execution.
|
||||
|
||||
First and foremost, we limited the CPU-load wasted by the kernel, which
|
||||
unnecessarily made new scheduling decisions quite often. When the hw kernel
|
||||
was started as an experiment, there was less focus on performance, but more on
|
||||
simplicity. Instead of caring about state changes that make a scheduling
|
||||
decision necessary, the scheduler was asked for the next execution context
|
||||
unconditionally, whenever the kernel was entered. Now, the scheduler gets
|
||||
invoked only whenever an execution context gets blocked, or unblocked, or if
|
||||
the kernel's timer fires due to a timeout. This dramatically influences the
|
||||
CPU-load caused by the hw kernel in a positive way.
|
||||
|
||||
The timing accuracy got increased by reworking most hardware timer drivers
|
||||
used in the kernel to let the timer never stop counting. Moreover, we limit
|
||||
the scope in between reading the clock and adjusting the next timeout to a
|
||||
minimum. The whole internal time representation got widened to 64-bit.
|
||||
|
||||
In some rare use cases, we could observe components that do I/O polling, and
|
||||
thereby actively ask for pending signals, to starve. The reason was a gap in
|
||||
the hw kernel's syscall API. Beside the ability to wait for signals, the
|
||||
base-library offers the ability to check for pending signals without blocking
|
||||
in the case of no available signals. The equivalent call in the kernel was
|
||||
still missing, and is now present and integrated in the base-library of
|
||||
base-hw.
|
||||
|
||||
ARM architecture
|
||||
----------------
|
||||
|
||||
With this release, we add the i.MX 7 Dual SABRE reference board to the rich
|
||||
hardware zoo Genode runs directly on top of. This includes the use of the
|
||||
virtualization extensions available on this platform.
|
||||
|
||||
Apart from the new board support, several optimizations were added
|
||||
specifically for the ARM architecture. Several unnecessary cache maintenance
|
||||
operations were eliminated, which resided in the code base since the time when
|
||||
the kernel used a separate address-space only. Moreover, the kernel-lock -
|
||||
used when several execution contexts on different CPU-cores try to enter the
|
||||
kernel - does not spin anymore. Instead, the CPU goes into a sleep-state to
|
||||
save energy. As a side-effect, multi-core scenarios become usable when
|
||||
executed in Qemu.
|
||||
|
||||
X86 architecture
|
||||
----------------
|
||||
|
||||
Since the newly used compiler version makes aggressive use of FPU instructions
|
||||
including the core component, the kernel itself makes use of FPU registers and
|
||||
state. Therefore, lazy FPU switching becomes a no go for base-hw. Although, we
|
||||
incorporated eager FPU switching into the ARM-specific part of the hw kernel
|
||||
already, the x86 version was still missing it. Now, the FPU context of a thread
|
||||
gets saved and restored on every kernel entry and exit on x86 too.
|
||||
|
||||
|
||||
Updated Muen separation kernel
|
||||
==============================
|
||||
|
||||
The Muen port has been updated to the latest development version, which comes
|
||||
with many improvements under the hood. Most notably this version of Muen brings
|
||||
support for Linux SMP subjects, GNAT Community 2018 toolchain support as well
|
||||
as much improved build speed, which is most noticeable during autopilot runs.
|
||||
|
||||
Additionally, the debug server buffer size in the Genode system policy has been
|
||||
increased to avoid potential message loss in case of rapid successive logging.
|
||||
|
||||
_Thanks to Adrian-Ken Rueegsegger of [https://codelabs.ch - Codelabs] for_
|
||||
_this welcome contribution!_
|
||||
|
||||
|
||||
NOVA microhypervisor
|
||||
====================
|
||||
|
||||
The kernel got updated due to the tool-chain update to GNU G++ 8.3.0.
|
||||
Additionally, several issues reported by Julian Stecklina regarding FPU and
|
||||
page-table synchronization got addressed. The kernel memory allocation at boot
|
||||
time got more flexible to address target machines with fragmented physical
|
||||
memory. Additionally, the vTLB implementation is no longer used on AMD
|
||||
machines whenever nested paging is available.
|
||||
|
||||
|
||||
seL4 microkernel
|
||||
================
|
||||
|
||||
With this release, we extend the variety of hardware to run Genode on top of
|
||||
the seL4 kernel with NXP's i.MX 7 Dual SABRE reference board. To do so, we had
|
||||
to update the seL4 tools used to craft a bootable ELF image to a state that is
|
||||
consistent with the currently supported seL4 kernel version 9.0.1.
|
||||
|
||||
As a side-effect of this development work, the General Purpose Timer (GPT) used
|
||||
in the i.MX series can now be used as a timer service component.
|
||||
|
||||
|
||||
Fiasco.OC microkernel
|
||||
=====================
|
||||
|
||||
As with base-hw and seL4, we add the i.MX 7 Dual SABRE reference board to the
|
||||
list of working hardware for Genode running on top of the Fiasco.OC
|
||||
microkernel. Moreover, with Fiasco.OC it is now possible to take the first
|
||||
steps using Genode on the ARM 64-bit architecture. Therefore, we add Raspberry
|
||||
Pi 3 as a candidate board to be used with Genode/Fiasco.OC. Currently, only
|
||||
basic tests without peripheral dependencies are supported.
|
||||
|
||||
|
||||
Tooling and build system
|
||||
########################
|
||||
|
||||
Improved handling of missing ports
|
||||
==================================
|
||||
|
||||
The depot tools _tool/depot/create_ and _tool/depot/extract_ now detect and
|
||||
report all missing third-party sources - called ports - for a given set of
|
||||
archives at once. Additionally, the user can tell the tools to download and
|
||||
prepare such missing ports automatically by setting the argument
|
||||
'PREPARE_PORTS=1'. Please be aware that doing so may cause downloads and
|
||||
file operations in your _contrib/_ directory without further interaction.
|
||||
These features make building archives with dependencies to many ports more
|
||||
enjoyable. If you merely need a list of ports that are missing for your
|
||||
archives, you can use the new tool _tool/depot/missing_ports_.
|
||||
|
||||
For more details you may read the
|
||||
[https://genodians.org/m-stein/2019-05-21-depot-missing-ports - article on genodians.org].
|
||||
|
||||
|
||||
Automated depot management
|
||||
==========================
|
||||
|
||||
When using the 'import_from_depot' mechanism of the run tool, one frequently
|
||||
encounters a situation where the depot lacks a particular archive. Whenever
|
||||
the run tool detects such a situation, it prompts the user to manually curate
|
||||
the depot content via the _tool/depot/create_ tool. The need for such manual
|
||||
steps negatively interferes with the development workflow. The right manual
|
||||
steps are sometimes not straight-forward to find, in particular after
|
||||
switching between Git branches.
|
||||
|
||||
To relieve the developer from this uncreative manual labor, we extended the
|
||||
run tool with the option '--depot-auto-update' for managing the depot
|
||||
automatically according to the needs of the executed run script. To enable
|
||||
this option, use the following line in the build configuration:
|
||||
|
||||
! RUN_OPT += --depot-auto-update
|
||||
|
||||
If enabled, the run tool automatically invokes the right depot-management
|
||||
commands to populate the depot with the required archives, and to ensure the
|
||||
consistency of the depot content with the current version of the source tree.
|
||||
The feature comes at the price of a delay when executing the run script
|
||||
because the consistency check involves the extraction of all used source
|
||||
archives from the source tree. In regular run scripts, this delay is barely
|
||||
noticeable. Only when working with a run script of a large system, it may be
|
||||
better to leave the depot auto update disabled.
|
||||
|
||||
Please note that the use of the automated depot update may result in version
|
||||
updates of the corresponding depot recipes in the source tree (recipe hash
|
||||
files). It is a good practice to review and commit those hash files once the
|
||||
local changes in the source tree have reached a good shape.
|
||||
|
||||
@@ -23,20 +23,22 @@ Unified tool chain
|
||||
##################
|
||||
|
||||
Starting with Genode version 11.11, there is a unified tool chain for all base
|
||||
platforms and supported CPU architectures (x86_32, x86_64, ARM, and RISC-V). For
|
||||
Genode development, we highly recommend the use of the official Genode tool
|
||||
chain. It can be obtained in two ways: as pre-compiled binaries or manually
|
||||
compiled:
|
||||
platforms and supported CPU architectures (x86_32, x86_64, ARM, AARCH64, and
|
||||
RISC-V).
|
||||
For Genode development, we highly recommend the use of the official Genode
|
||||
tool chain. It can be obtained in two ways: as pre-compiled binaries or
|
||||
manually compiled:
|
||||
|
||||
:Pre-compiled:
|
||||
Our pre-compiled tool chain is runnable on Linux x86_32 and x86_64. The
|
||||
archives for both versions will be extracted to '/usr/local/genode-gcc'. To
|
||||
extract the archive, use the following command:
|
||||
archives for both versions will be extracted to
|
||||
_/usr/local/genode/tool/<version>_.
|
||||
To extract the archive, use the following command:
|
||||
! sudo tar xPf genode-toolchain-<version>-<arch>.tar.xz
|
||||
The use of the 'P' option ensures that the tool chain will be installed at
|
||||
the correct absolute path '/usr/local/genode-gcc' where the build system
|
||||
expects it to reside by default. Please note, Genode OS Framework releases
|
||||
require a Genode tool chain with an equal or next smaller version number.
|
||||
the correct absolute path where the build system expects it to reside by
|
||||
default. Please note, Genode OS Framework releases require a Genode tool
|
||||
chain with an equal or next smaller version number.
|
||||
[https://sourceforge.net/projects/genode/files/genode-toolchain/ - Download the pre-compiled tool chain...]
|
||||
|
||||
:Compile from source:
|
||||
@@ -45,82 +47,16 @@ compiled:
|
||||
find the tool in Genode's source tree at 'tool/tool_chain'. For usage
|
||||
instructions, just start the tool without arguments.
|
||||
|
||||
In both cases, the Genode tool chain will be installed to '/usr/local/genode-gcc'.
|
||||
All tools are prefixed with 'genode-x86-', 'genode-arm-', or 'genode-riscv-'
|
||||
respectively such that it is safe to add the installation directory to our
|
||||
'PATH' variable (optional). The Genode tool chain will be used by the Genode
|
||||
build system by default. If you desire to use a different tool chain, create a
|
||||
file called 'tools.conf' in the 'etc/' subdirectory of your build directory
|
||||
where you can define the tool-chain prefix to be used:
|
||||
In both cases, the tool chain is installed to _/usr/local/genode/tool/<version>_.
|
||||
This install location is expected by the build system by default.
|
||||
The tools are prefixed with 'genode-x86-', 'genode-arm-', 'genode-riscv-', or
|
||||
'genode-aarch64-' respectively so that it is safe to add the
|
||||
_/usr/local/genode/tool/<version>/bin/_ path to our 'PATH' environment
|
||||
variable (optional).
|
||||
|
||||
Should you desire to use a different tool chain, create a file called
|
||||
_tools.conf_ in the _etc/_ subdirectory of your build directory where you can
|
||||
define the tool-chain prefix to be used:
|
||||
|
||||
! CROSS_DEV_PREFIX = /path/to/your/custom/tool_chain/your-x86-
|
||||
|
||||
However, we recommend you to stick with the official Genode tool chain. If you
|
||||
see a valid reason not to use it, please contact us (e.g., via the mailing
|
||||
list).
|
||||
|
||||
|
||||
Background information - Why do we need a special tool chain?
|
||||
#############################################################
|
||||
|
||||
Early on in the genesis of Genode, we introduced a custom tool chain to
|
||||
overcome several problems inherent to the use of standard tool chains installed
|
||||
on Linux host platforms.
|
||||
|
||||
First, GCC and binutils versions vary a lot between different Linux systems.
|
||||
Testing the Genode code with all those different tool chains and constantly
|
||||
adapting the code to the peculiarities of certain tool-chain versions is
|
||||
infeasible and annoying. Second, Linux tool chains use certain features that
|
||||
stand in the way when building low-level system components. For example, the
|
||||
'-fstack-protector' option is enabled by default on some Linux distributions.
|
||||
Hence, we have to turn it off when building Genode. However, some tool chains
|
||||
lack this option. So the attempt to turn it off produces an error. The most
|
||||
important problem with Linux tool chains is the dependency of their respective
|
||||
GCC support libraries on the glibc. When not using a Linux glibc, as the case
|
||||
with Genode, this leads to manifold problems, most of them subtle and extremely
|
||||
hard to debug. For example, the support libraries expect the Linux way of
|
||||
implementing thread-local storage (using segment registers on x86_32). This
|
||||
code will simply crash on other kernels. Another example is the use of certain
|
||||
C-library functions, which are not available on Genode. Hence, Genode provides
|
||||
custom implementations of those functions (in the 'cxx' library).
|
||||
Unfortunately, the set of functions used varies across tool-chain versions. For
|
||||
these reasons, we introduced a custom configured tool chain where we mitigated
|
||||
those problems by pinning the tools to certain versions and tweaking the
|
||||
compiler configuration to our needs (i.e., preventing the use of Linux TLS).
|
||||
|
||||
That said, the use a our custom configured tool chain was not free from
|
||||
problems either. In particular, the script for creating the tool chain relied
|
||||
on a libc being present on the host system. The header files of the libc would
|
||||
be used to build the GCC support libraries. This introduced two problems. When
|
||||
adding Genode's libc to the picture, which is based on FreeBSD's C library, the
|
||||
expectations of the GCC support libraries did not match 100% with the semantics
|
||||
implemented by Genode's libc (e.g., the handling of 'errno' differs). The
|
||||
second problem is the limitation that the tool chain could only be built for
|
||||
the platform that corresponds to the host. For example, on a Linux-x86_32
|
||||
system, it was not possible to build a x86_64 or ARM tool chain. For this
|
||||
reason we used the ARM tool chains provided by CodeSourcery.
|
||||
|
||||
With Genode 11.11, we addressed the root of the tool-chain problem by
|
||||
completely decoupling the Genode tool chain from the host system that is used
|
||||
to build it. The most important step was the removal of GCC's dependency on
|
||||
a C library, which is normally needed to build the GCC support libraries. We
|
||||
were able to remove the libc dependency by sneaking-in a small custom libc stub
|
||||
into the GCC build process. This stub comes in the form of the single header
|
||||
file 'tool/libgcc_libc_stub.h' and brings along all type definitions and
|
||||
function declarations expected by the support-library code. Furthermore, we
|
||||
removed all GNU-specific heuristics from the tool chain. Technically, the
|
||||
Genode tool chain is a bare-metal tool chain. But in contrast to existing
|
||||
bare-metal tool chains, C++ is fully supported.
|
||||
|
||||
With the libc dependency out of the way, we are now free to build the tool
|
||||
chain for arbitrary architectures, which brings us two immediate benefits. We
|
||||
do no longer have to rely on the CodeSourcery tool chain for ARM. There is now
|
||||
a 'genode-arm' tool chain using the same compiler configuration as used on x86.
|
||||
The second benefit is the use of multiarch libs on the x86 platform. The
|
||||
genode-x86 tool chain can be used for both x86_32 and x86_64 as build target,
|
||||
the latter being the default.
|
||||
|
||||
Since we introduced GDB support into Genode, we added GDB in addition to GCC
|
||||
and binutils to the Genode tool chain. The version is supposed to match the one
|
||||
expected by Genode's GDB facility, avoiding potential problems with mismatching
|
||||
protocols between GDB monitor and GDB.
|
||||
|
||||
@@ -20,8 +20,8 @@ $(FIASCO_BUILD_DIR):
|
||||
|
||||
$(FIASCO): $(FIASCO_BUILD_DIR)
|
||||
$(VERBOSE_MK) set -o pipefail; \
|
||||
MAKEFLAGS= CFLAGS="-std=gnu89" \
|
||||
CXXFLAGS="-std=gnu++98 -fno-delete-null-pointer-checks" \
|
||||
MAKEFLAGS= CFLAGS="-std=gnu89 $(CWARN)" \
|
||||
CXXFLAGS="-std=gnu++98 -fno-delete-null-pointer-checks $(CXXWARN)" \
|
||||
$(MAKE) SYSTEM_TARGET="$(CROSS_DEV_PREFIX)" \
|
||||
$(VERBOSE_DIR) -C $(FIASCO_BUILD_DIR) \
|
||||
$(KERNEL_BUILD_OUTPUT_FILTER)
|
||||
|
||||
@@ -48,6 +48,14 @@ endif
|
||||
#
|
||||
.NOTPARALLEL: $(PKG_TAGS)
|
||||
|
||||
WARN = -Wno-attributes -Wno-cast-function-type -Wno-format-truncation \
|
||||
-Wno-frame-address -Wno-ignored-qualifiers -Wno-implicit-fallthrough \
|
||||
-Wno-maybe-uninitialized -Wno-misleading-indentation \
|
||||
-Wno-nonnull-compare -Wno-nonnull-compare -Wno-restrict \
|
||||
-Wno-tautological-compare -Wno-unused-but-set-variable -Wno-unused-result
|
||||
CWARN = $(WARN) -Wno-int-conversion -Wno-pointer-sign -Wno-pointer-to-int-cast
|
||||
CXXWARN = $(WARN) -Wno-bool-compare -Wno-c++11-compat -Wno-class-memaccess
|
||||
|
||||
#
|
||||
# The '_GNU_SOURCE' definition is needed to convince uClibc to define the
|
||||
# 'off64_t' type, which is used by bootstrap.
|
||||
@@ -55,8 +63,8 @@ endif
|
||||
%.tag:
|
||||
$(VERBOSE_MK) set -o pipefail; \
|
||||
MAKEFLAGS= CPPFLAGS="$(CC_MARCH)" \
|
||||
CFLAGS="$(CC_MARCH) -std=gnu89" \
|
||||
CXXFLAGS="$(CC_MARCH) -D_GNU_SOURCE -std=gnu++98" \
|
||||
CFLAGS="$(CC_MARCH) -std=gnu89 $(CWARN)" \
|
||||
CXXFLAGS="$(CC_MARCH) -D_GNU_SOURCE -std=gnu++98 $(CXXWARN)" \
|
||||
ASFLAGS="$(CC_MARCH)" LDFLAGS="$(LD_MARCH)" \
|
||||
$(MAKE) $(VERBOSE_DIR) O=$(L4_BUILD_DIR) $(L4_VERBOSE) \
|
||||
-C $(L4_PKG_DIR)/$* \
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019-03-17 fda937ef997455e0ba115599761e615c23f0dd86
|
||||
2019-07-08 1b0e1040842b8f9a8f547f47e1fe8b859383525a
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
/* Genode includes */
|
||||
#include <base/native_capability.h>
|
||||
#include <base/thread_state.h>
|
||||
#include <base/trace/types.h>
|
||||
|
||||
/* core includes */
|
||||
#include <pager.h>
|
||||
@@ -178,7 +179,7 @@ namespace Genode {
|
||||
/**
|
||||
* Return execution time consumed by the thread
|
||||
*/
|
||||
unsigned long long execution_time() const { return 0; }
|
||||
Trace::Execution_time execution_time() const { return { 0, 0 }; }
|
||||
|
||||
|
||||
/*******************************
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
CONFIG_HAS_CPU_VIRT=y
|
||||
@@ -55,6 +57,7 @@ CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A15=y
|
||||
# CONFIG_CPU_VIRT is not set
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
CONFIG_HAVE_ARM_SECMONIF_NONE=y
|
||||
CONFIG_HAVE_ARM_SECMONIF_MC=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
@@ -87,6 +90,7 @@ CONFIG_INLINE=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
# CONFIG_JDB_LOGGING is not set
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -43,25 +43,23 @@ CONFIG_PLATFORM_TYPE_exynos5=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="exynos5"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
|
||||
@@ -52,6 +54,7 @@ CONFIG_PF_IMX_6_TIMER_MPTIMER=y
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A9=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
@@ -59,14 +62,13 @@ CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_SMC_USER is not set
|
||||
CONFIG_ARM_CACHE_L2CXX0=y
|
||||
# CONFIG_ARM_ENABLE_SWP is not set
|
||||
CONFIG_HAS_ARM_PSCI=y
|
||||
# CONFIG_ARM_PSCI is not set
|
||||
CONFIG_ARM_CPU_ERRATA=y
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
#
|
||||
# CONFIG_MP is not set
|
||||
CONFIG_MP=y
|
||||
CONFIG_MP_MAX_CPUS=4
|
||||
CONFIG_CONTEXT_4K=y
|
||||
# CONFIG_FINE_GRAINED_CPUTIME is not set
|
||||
CONFIG_SCHED_FIXED_PRIO=y
|
||||
@@ -83,6 +85,7 @@ CONFIG_NO_FRAME_PTR=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
CONFIG_JDB_LOGGING=y
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -43,25 +43,23 @@ CONFIG_CPU_ARMV6PLUS=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
CONFIG_PLATFORM_TYPE_imx6=y
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="imx6"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
116
repos/base-foc/config/imx7.kernel
Normal file
116
repos/base-foc/config/imx7.kernel
Normal file
@@ -0,0 +1,116 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
CONFIG_HAS_CPU_VIRT=y
|
||||
|
||||
#
|
||||
# Target configuration
|
||||
#
|
||||
# CONFIG_IA32 is not set
|
||||
# CONFIG_AMD64 is not set
|
||||
CONFIG_ARM=y
|
||||
# CONFIG_MIPS is not set
|
||||
# CONFIG_PF_INTEGRATOR is not set
|
||||
# CONFIG_PF_REALVIEW is not set
|
||||
# CONFIG_PF_SUNXI is not set
|
||||
# CONFIG_PF_BCM283X is not set
|
||||
# CONFIG_PF_SA1100 is not set
|
||||
# CONFIG_PF_XSCALE is not set
|
||||
# CONFIG_PF_ARMADA38X is not set
|
||||
# CONFIG_PF_KIRKWOOD is not set
|
||||
# CONFIG_PF_TEGRA is not set
|
||||
# CONFIG_PF_LAYERSCAPE is not set
|
||||
CONFIG_PF_IMX=y
|
||||
# CONFIG_PF_ARM_VIRT is not set
|
||||
# CONFIG_PF_RCAR3 is not set
|
||||
# CONFIG_PF_EXYNOS is not set
|
||||
# CONFIG_PF_S3C2410 is not set
|
||||
# CONFIG_PF_OMAP is not set
|
||||
# CONFIG_PF_ZYNQ is not set
|
||||
# CONFIG_PF_ZYNQMP is not set
|
||||
CONFIG_BSP_NAME="imx"
|
||||
CONFIG_CAN_ARM_CPU_CORTEX_A7=y
|
||||
CONFIG_ARM_V7=y
|
||||
CONFIG_ARM_V6PLUS=y
|
||||
CONFIG_ARM_V7PLUS=y
|
||||
# CONFIG_PF_IMX_21 is not set
|
||||
# CONFIG_PF_IMX_28 is not set
|
||||
# CONFIG_PF_IMX_35 is not set
|
||||
# CONFIG_PF_IMX_51 is not set
|
||||
# CONFIG_PF_IMX_6 is not set
|
||||
# CONFIG_PF_IMX_6UL is not set
|
||||
CONFIG_PF_IMX_7=y
|
||||
CONFIG_PF_IMX_RAM_PHYS_BASE=0x80000000
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A7=y
|
||||
# CONFIG_CPU_VIRT is not set
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
# CONFIG_ARM_EM_TZ is not set
|
||||
# CONFIG_ARM_SMC_USER is not set
|
||||
# CONFIG_ARM_ENABLE_SWP is not set
|
||||
CONFIG_ARM_LPAE=y
|
||||
CONFIG_HAS_ARM_PSCI=y
|
||||
# CONFIG_ARM_PSCI is not set
|
||||
CONFIG_ARM_CPU_ERRATA=y
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
#
|
||||
CONFIG_MP=y
|
||||
CONFIG_MP_MAX_CPUS=2
|
||||
CONFIG_CONTEXT_4K=y
|
||||
# CONFIG_FINE_GRAINED_CPUTIME is not set
|
||||
CONFIG_SCHED_FIXED_PRIO=y
|
||||
CONFIG_VIRT_OBJ_SPACE=y
|
||||
|
||||
#
|
||||
# Debugging
|
||||
#
|
||||
CONFIG_INLINE=y
|
||||
# CONFIG_NDEBUG is not set
|
||||
# CONFIG_NO_FRAME_PTR is not set
|
||||
# CONFIG_STACK_DEPTH is not set
|
||||
# CONFIG_LIST_ALLOC_SANITY is not set
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
# CONFIG_JDB_LOGGING is not set
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
CONFIG_WARN_WARNING=y
|
||||
# CONFIG_WARN_ANY is not set
|
||||
|
||||
#
|
||||
# ARM debugging options
|
||||
#
|
||||
# CONFIG_VMEM_ALLOC_TEST is not set
|
||||
# CONFIG_DEBUG_KERNEL_PAGE_FAULTS is not set
|
||||
|
||||
#
|
||||
# Compiling
|
||||
#
|
||||
CONFIG_CC="gcc"
|
||||
CONFIG_CXX="g++"
|
||||
CONFIG_HOST_CC="gcc"
|
||||
CONFIG_HOST_CXX="g++"
|
||||
# CONFIG_MAINTAINER_MODE is not set
|
||||
CONFIG_LABEL=""
|
||||
# CONFIG_EXPERIMENTAL is not set
|
||||
CONFIG_PERF_CNT=y
|
||||
CONFIG_BIT32=y
|
||||
CONFIG_WARN_LEVEL=1
|
||||
CONFIG_XARCH="arm"
|
||||
CONFIG_ABI="vf"
|
||||
84
repos/base-foc/config/imx7.user
Normal file
84
repos/base-foc/config/imx7.user
Normal file
@@ -0,0 +1,84 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# L4Re Configuration
|
||||
#
|
||||
CONFIG_ARCH_ENABLE_STACK_PROTECTOR=y
|
||||
# CONFIG_BUILD_ARCH_amd64 is not set
|
||||
CONFIG_BUILD_ARCH_arm=y
|
||||
# CONFIG_BUILD_ARCH_arm64 is not set
|
||||
# CONFIG_BUILD_ARCH_mips is not set
|
||||
# CONFIG_BUILD_ARCH_ppc32 is not set
|
||||
# CONFIG_BUILD_ARCH_sparc is not set
|
||||
# CONFIG_BUILD_ARCH_x86 is not set
|
||||
CONFIG_BUILD_ARCH="arm"
|
||||
CONFIG_BUILD_ABI_l4f=y
|
||||
CONFIG_BUILD_ABI="l4f"
|
||||
# CONFIG_CPU_ARM_ARMV4 is not set
|
||||
# CONFIG_CPU_ARM_ARMV4T is not set
|
||||
# CONFIG_CPU_ARM_ARMV5 is not set
|
||||
# CONFIG_CPU_ARM_ARMV5T is not set
|
||||
# CONFIG_CPU_ARM_ARMV5TE is not set
|
||||
# CONFIG_CPU_ARM_ARMV6 is not set
|
||||
# CONFIG_CPU_ARM_ARMV6T2 is not set
|
||||
# CONFIG_CPU_ARM_ARMV6ZK is not set
|
||||
CONFIG_CPU_ARM_ARMV7A=y
|
||||
CONFIG_CPU="armv7a"
|
||||
CONFIG_CPU_ARMV6KPLUS=y
|
||||
CONFIG_CPU_ARMV6PLUS=y
|
||||
# CONFIG_PLATFORM_TYPE_exynos4 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx35 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zedboard is not set
|
||||
# CONFIG_PLATFORM_TYPE_beagleboard is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_pbx is not set
|
||||
# CONFIG_PLATFORM_TYPE_exynos5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_kirkwood is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1012afrdm is not set
|
||||
# CONFIG_PLATFORM_TYPE_pandaboard is not set
|
||||
# CONFIG_PLATFORM_TYPE_arm_virt is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra2 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress_a15 is not set
|
||||
# CONFIG_PLATFORM_TYPE_cubieboard2 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3_am33xx is not set
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
CONFIG_PLATFORM_TYPE_imx7=y
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="imx7"
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
#
|
||||
# Building
|
||||
#
|
||||
CONFIG_YACC="yacc"
|
||||
CONFIG_LEX="flex"
|
||||
CONFIG_CTAGS="ctags"
|
||||
CONFIG_ETAGS="etags"
|
||||
CONFIG_HAVE_LDSO=y
|
||||
CONFIG_INT_CPP_NAME_SWITCH=y
|
||||
CONFIG_INT_LD_NAME_SWITCH=y
|
||||
# CONFIG_BID_STRIP_PROGS is not set
|
||||
# CONFIG_BID_GCC_OMIT_FP is not set
|
||||
CONFIG_BID_GCC_ENABLE_STACK_PROTECTOR=y
|
||||
# CONFIG_BID_GCC_STACK_PROTECTOR_ALL is not set
|
||||
CONFIG_BID_GCC_STACK_PROTECTOR=y
|
||||
# CONFIG_BID_BUILD_DOC is not set
|
||||
# CONFIG_RELEASE_MODE is not set
|
||||
CONFIG_MAKECONFS_ADD=""
|
||||
@@ -3,8 +3,10 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
|
||||
@@ -54,6 +56,7 @@ CONFIG_PF_EXYNOS_TIMER_MCT=y
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A9=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
CONFIG_HAVE_ARM_SECMONIF_NONE=y
|
||||
CONFIG_HAVE_ARM_SECMONIF_MC=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
@@ -88,6 +91,7 @@ CONFIG_NO_FRAME_PTR=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
# CONFIG_JDB_LOGGING is not set
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -43,25 +43,23 @@ CONFIG_PLATFORM_TYPE_exynos4=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="exynos4"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
|
||||
@@ -47,6 +49,7 @@ CONFIG_PF_OMAP4_PANDABOARD=y
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A9=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
@@ -77,6 +80,7 @@ CONFIG_INLINE=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
CONFIG_JDB_LOGGING=y
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -43,25 +43,23 @@ CONFIG_PLATFORM_TYPE_pandaboard=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="pandaboard"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
|
||||
@@ -50,6 +52,7 @@ CONFIG_PF_REALVIEW_RAM_PHYS_BASE=0x70000000
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A9=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
@@ -79,6 +82,7 @@ CONFIG_NO_FRAME_PTR=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
CONFIG_JDB_LOGGING=y
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -43,25 +43,23 @@ CONFIG_PLATFORM_TYPE_rv_pbx=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_b is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="rv_pbx"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
|
||||
#
|
||||
@@ -38,9 +40,11 @@ CONFIG_ARM_V6PLUS=y
|
||||
CONFIG_PF_BCM283X_RPI1=y
|
||||
# CONFIG_PF_BCM283X_RPI2 is not set
|
||||
# CONFIG_PF_BCM283X_RPI3 is not set
|
||||
# CONFIG_PF_BCM283X_RPIZW is not set
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_1176=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
@@ -69,6 +73,7 @@ CONFIG_NO_FRAME_PTR=y
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
# CONFIG_JDB_LOGGING is not set
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
|
||||
@@ -42,25 +42,23 @@ CONFIG_CPU_ARMV6PLUS=y
|
||||
# CONFIG_PLATFORM_TYPE_parallella is not set
|
||||
CONFIG_PLATFORM_TYPE_rpi_b=y
|
||||
# CONFIG_PLATFORM_TYPE_imx21 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_ls1021atwr is not set
|
||||
# CONFIG_PLATFORM_TYPE_tegra3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx7 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx28 is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap3evm is not set
|
||||
# CONFIG_PLATFORM_TYPE_rcar3_m3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6 is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx6ul is not set
|
||||
# CONFIG_PLATFORM_TYPE_armada38x is not set
|
||||
# CONFIG_PLATFORM_TYPE_omap5 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress is not set
|
||||
# CONFIG_PLATFORM_TYPE_imx51 is not set
|
||||
# CONFIG_PLATFORM_TYPE_rpi_a is not set
|
||||
# CONFIG_PLATFORM_TYPE_integrator is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="rpi_b"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
113
repos/base-foc/config/rpi3.kernel
Normal file
113
repos/base-foc/config/rpi3.kernel
Normal file
@@ -0,0 +1,113 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_FPU_OPTION=y
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_JDB_DISASM_OPTION=y
|
||||
CONFIG_HAS_JDB_GZIP_OPTION=y
|
||||
CONFIG_HAS_MP_OPTION=y
|
||||
CONFIG_HAS_CPU_VIRT=y
|
||||
|
||||
#
|
||||
# Target configuration
|
||||
#
|
||||
# CONFIG_IA32 is not set
|
||||
# CONFIG_AMD64 is not set
|
||||
CONFIG_ARM=y
|
||||
# CONFIG_MIPS is not set
|
||||
# CONFIG_PF_INTEGRATOR is not set
|
||||
# CONFIG_PF_REALVIEW is not set
|
||||
# CONFIG_PF_SUNXI is not set
|
||||
CONFIG_PF_BCM283X=y
|
||||
# CONFIG_PF_SA1100 is not set
|
||||
# CONFIG_PF_XSCALE is not set
|
||||
# CONFIG_PF_ARMADA38X is not set
|
||||
# CONFIG_PF_KIRKWOOD is not set
|
||||
# CONFIG_PF_TEGRA is not set
|
||||
# CONFIG_PF_LAYERSCAPE is not set
|
||||
# CONFIG_PF_IMX is not set
|
||||
# CONFIG_PF_ARM_VIRT is not set
|
||||
# CONFIG_PF_RCAR3 is not set
|
||||
# CONFIG_PF_EXYNOS is not set
|
||||
# CONFIG_PF_S3C2410 is not set
|
||||
# CONFIG_PF_OMAP is not set
|
||||
# CONFIG_PF_ZYNQ is not set
|
||||
# CONFIG_PF_ZYNQMP is not set
|
||||
CONFIG_BSP_NAME="bcm283x"
|
||||
CONFIG_HAS_64BIT=y
|
||||
CONFIG_CAN_ARM_CPU_CORTEX_A53=y
|
||||
CONFIG_ARM_V6PLUS=y
|
||||
CONFIG_ARM_V7PLUS=y
|
||||
CONFIG_ARM_V8=y
|
||||
# CONFIG_PF_BCM283X_RPI1 is not set
|
||||
# CONFIG_PF_BCM283X_RPI2 is not set
|
||||
CONFIG_PF_BCM283X_RPI3=y
|
||||
# CONFIG_PF_BCM283X_RPIZW is not set
|
||||
CONFIG_ABI_VF=y
|
||||
CONFIG_ARM_CORTEX_A53=y
|
||||
# CONFIG_CPU_VIRT is not set
|
||||
CONFIG_FPU=y
|
||||
CONFIG_LAZY_FPU=y
|
||||
# CONFIG_ARM_ALIGNMENT_CHECK is not set
|
||||
CONFIG_ARM_EM_STD=y
|
||||
# CONFIG_ARM_EM_NS is not set
|
||||
# CONFIG_ARM_SMC_USER is not set
|
||||
CONFIG_BIT64_CHOICE=y
|
||||
CONFIG_ARM_LPAE=y
|
||||
# CONFIG_ARM_CPU_ERRATA is not set
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
#
|
||||
CONFIG_MP=y
|
||||
CONFIG_MP_MAX_CPUS=4
|
||||
CONFIG_CONTEXT_8K=y
|
||||
# CONFIG_FINE_GRAINED_CPUTIME is not set
|
||||
CONFIG_SCHED_FIXED_PRIO=y
|
||||
# CONFIG_SCHED_WFQ is not set
|
||||
# CONFIG_SCHED_FP_WFQ is not set
|
||||
# CONFIG_DISABLE_VIRT_OBJ_SPACE is not set
|
||||
CONFIG_VIRT_OBJ_SPACE=y
|
||||
|
||||
#
|
||||
# Debugging
|
||||
#
|
||||
CONFIG_INLINE=y
|
||||
# CONFIG_NDEBUG is not set
|
||||
# CONFIG_NO_FRAME_PTR is not set
|
||||
# CONFIG_STACK_DEPTH is not set
|
||||
# CONFIG_LIST_ALLOC_SANITY is not set
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_JDB=y
|
||||
CONFIG_JDB_LOGGING=y
|
||||
# CONFIG_JDB_DISASM is not set
|
||||
CONFIG_JDB_GZIP=y
|
||||
# CONFIG_JDB_ACCOUNTING is not set
|
||||
# CONFIG_WARN_NONE is not set
|
||||
CONFIG_WARN_WARNING=y
|
||||
# CONFIG_WARN_ANY is not set
|
||||
|
||||
#
|
||||
# ARM debugging options
|
||||
#
|
||||
# CONFIG_VMEM_ALLOC_TEST is not set
|
||||
# CONFIG_DEBUG_KERNEL_PAGE_FAULTS is not set
|
||||
|
||||
#
|
||||
# Compiling
|
||||
#
|
||||
CONFIG_CC="gcc"
|
||||
CONFIG_CXX="g++"
|
||||
CONFIG_HOST_CC="gcc"
|
||||
CONFIG_HOST_CXX="g++"
|
||||
# CONFIG_MAINTAINER_MODE is not set
|
||||
CONFIG_LABEL=""
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_PERF_CNT=y
|
||||
CONFIG_BIT64=y
|
||||
CONFIG_WARN_LEVEL=1
|
||||
CONFIG_XARCH="arm"
|
||||
CONFIG_ABI="vf"
|
||||
47
repos/base-foc/config/rpi3.user
Normal file
47
repos/base-foc/config/rpi3.user
Normal file
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# L4Re Configuration
|
||||
#
|
||||
CONFIG_ARCH_ENABLE_STACK_PROTECTOR=y
|
||||
# CONFIG_BUILD_ARCH_amd64 is not set
|
||||
# CONFIG_BUILD_ARCH_arm is not set
|
||||
CONFIG_BUILD_ARCH_arm64=y
|
||||
# CONFIG_BUILD_ARCH_mips is not set
|
||||
# CONFIG_BUILD_ARCH_ppc32 is not set
|
||||
# CONFIG_BUILD_ARCH_sparc is not set
|
||||
# CONFIG_BUILD_ARCH_x86 is not set
|
||||
CONFIG_BUILD_ARCH="arm64"
|
||||
CONFIG_BUILD_ABI_l4f=y
|
||||
CONFIG_BUILD_ABI="l4f"
|
||||
CONFIG_CPU="armv8a"
|
||||
CONFIG_CPU_ARM_ARMV8A=y
|
||||
# CONFIG_PLATFORM_TYPE_ls1012afrdm is not set
|
||||
# CONFIG_PLATFORM_TYPE_arm_virt is not set
|
||||
# CONFIG_PLATFORM_TYPE_rv_vexpress_a15 is not set
|
||||
CONFIG_PLATFORM_TYPE_rpi_b=y
|
||||
# CONFIG_PLATFORM_TYPE_rcar3 is not set
|
||||
# CONFIG_PLATFORM_TYPE_zynqmp is not set
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="rpi_b"
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
#
|
||||
# Building
|
||||
#
|
||||
CONFIG_YACC="yacc"
|
||||
CONFIG_LEX="flex"
|
||||
CONFIG_CTAGS="ctags"
|
||||
CONFIG_ETAGS="etags"
|
||||
CONFIG_HAVE_LDSO=y
|
||||
CONFIG_INT_CPP_NAME_SWITCH=y
|
||||
CONFIG_INT_LD_NAME_SWITCH=y
|
||||
# CONFIG_BID_STRIP_PROGS is not set
|
||||
CONFIG_BID_GCC_OMIT_FP=y
|
||||
CONFIG_BID_GCC_ENABLE_STACK_PROTECTOR=y
|
||||
# CONFIG_BID_GCC_STACK_PROTECTOR_ALL is not set
|
||||
CONFIG_BID_GCC_STACK_PROTECTOR=y
|
||||
# CONFIG_BID_BUILD_DOC is not set
|
||||
# CONFIG_RELEASE_MODE is not set
|
||||
CONFIG_MAKECONFS_ADD=""
|
||||
@@ -2,6 +2,7 @@
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_WATCHDOG_OPTION=y
|
||||
@@ -21,10 +22,12 @@ CONFIG_IA32=y
|
||||
CONFIG_PF_PC=y
|
||||
# CONFIG_PF_UX is not set
|
||||
CONFIG_ABI_VF=y
|
||||
# CONFIG_CPU_VIRT is not set
|
||||
CONFIG_CPU_VIRT=y
|
||||
CONFIG_SCHED_APIC=y
|
||||
# CONFIG_WORKAROUND_AMD_FPU_LEAK is not set
|
||||
CONFIG_REGPARM3=y
|
||||
CONFIG_FPU=y
|
||||
# CONFIG_LAZY_FPU is not set
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
|
||||
@@ -17,8 +17,6 @@ CONFIG_CPU="586"
|
||||
CONFIG_PLATFORM_TYPE_pc=y
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="pc"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Fiasco configuration
|
||||
#
|
||||
CONFIG_HAS_LAZY_FPU=y
|
||||
CONFIG_HAS_VIRT_OBJ_SPACE_OPTION=y
|
||||
CONFIG_HAS_SERIAL_OPTION=y
|
||||
CONFIG_HAS_WATCHDOG_OPTION=y
|
||||
@@ -20,9 +21,11 @@ CONFIG_AMD64=y
|
||||
# CONFIG_MIPS is not set
|
||||
CONFIG_PF_PC=y
|
||||
CONFIG_ABI_VF=y
|
||||
# CONFIG_CPU_VIRT is not set
|
||||
CONFIG_CPU_VIRT=y
|
||||
CONFIG_SCHED_APIC=y
|
||||
# CONFIG_WORKAROUND_AMD_FPU_LEAK is not set
|
||||
CONFIG_FPU=y
|
||||
# CONFIG_LAZY_FPU is not set
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
|
||||
@@ -17,8 +17,6 @@ CONFIG_CPU="K8"
|
||||
CONFIG_PLATFORM_TYPE_pc=y
|
||||
# CONFIG_PLATFORM_TYPE_custom is not set
|
||||
CONFIG_PLATFORM_TYPE="pc"
|
||||
# CONFIG_USE_DROPS_STDDIR is not set
|
||||
# CONFIG_USE_DICE is not set
|
||||
CONFIG_DROPS_STDDIR="/path/to/l4re"
|
||||
CONFIG_DROPS_INSTDIR="/path/to/l4re"
|
||||
CONFIG_BID_COLORED_PHASES=y
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Fiasco {
|
||||
static constexpr l4_cap_idx_t THREAD_AREA_BASE = 0xcUL << L4_CAP_SHIFT;
|
||||
|
||||
/* size of one thread slot */
|
||||
static constexpr l4_cap_idx_t THREAD_AREA_SLOT = 0x3UL << L4_CAP_SHIFT;
|
||||
static constexpr l4_cap_idx_t THREAD_AREA_SLOT = 0x5UL << L4_CAP_SHIFT;
|
||||
|
||||
/* offset to the ipc gate cap selector in the slot */
|
||||
static constexpr l4_cap_idx_t THREAD_GATE_CAP = 0;
|
||||
@@ -59,16 +59,26 @@ namespace Fiasco {
|
||||
/* offset to the irq cap selector in the slot */
|
||||
static constexpr l4_cap_idx_t THREAD_IRQ_CAP = 0x2UL << L4_CAP_SHIFT;
|
||||
|
||||
/* offset to the irq cap selector in the slot */
|
||||
static constexpr l4_cap_idx_t TASK_VCPU_CAP = 0x3UL << L4_CAP_SHIFT;
|
||||
|
||||
/* offset to the irq cap selector in the slot */
|
||||
static constexpr l4_cap_idx_t TASK_VCPU_IRQ_CAP = 0x4UL << L4_CAP_SHIFT;
|
||||
|
||||
/* shortcut to the main thread's gate cap */
|
||||
static constexpr l4_cap_idx_t MAIN_THREAD_CAP = THREAD_AREA_BASE
|
||||
+ THREAD_GATE_CAP;
|
||||
|
||||
|
||||
/*********************************************************
|
||||
** Capability seclectors controlled by the task itself **
|
||||
** Capability selectors controlled by the task itself **
|
||||
*********************************************************/
|
||||
|
||||
static constexpr l4_cap_idx_t USER_BASE_CAP = 0x200UL << L4_CAP_SHIFT;
|
||||
static constexpr unsigned THREAD_MAX = (1 << 7);
|
||||
static constexpr l4_cap_idx_t USER_BASE_CAP = 0x300 << L4_CAP_SHIFT;
|
||||
|
||||
static_assert(USER_BASE_CAP > THREAD_MAX * THREAD_AREA_SLOT,
|
||||
"USER_BASE_CAP too small for supported maximal threads");
|
||||
|
||||
struct Capability
|
||||
{
|
||||
|
||||
@@ -13,6 +13,12 @@ ifeq ($(filter-out $(SPECS),arm),)
|
||||
CC_OPT += -DARCH_arm
|
||||
endif # ARM
|
||||
|
||||
ifeq ($(filter-out $(SPECS),arm_64),)
|
||||
INC_DIR += $(L4_INCLUDE_DIR)/arm64/l4f $(L4_INCLUDE_DIR)/arm64
|
||||
CC_OPT += -DARCH_arm64
|
||||
endif # ARM
|
||||
|
||||
|
||||
INC_DIR += $(L4_INCLUDE_DIR)/l4f $(L4_INCLUDE_DIR)
|
||||
CC_OPT += -DCONFIG_L4_CALL_SYSCALLS
|
||||
|
||||
|
||||
15
repos/base-foc/lib/mk/base-foc-common.inc
Normal file
15
repos/base-foc/lib/mk/base-foc-common.inc
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# \brief Portions of base library shared by core and non-core processes
|
||||
# \author Norman Feske
|
||||
# \date 2013-02-14
|
||||
#
|
||||
|
||||
include $(BASE_DIR)/lib/mk/base-common.inc
|
||||
|
||||
LIBS += syscall-foc startup-foc
|
||||
|
||||
SRC_CC += spin_lock.cc cap_map.cc
|
||||
SRC_CC += rpc_dispatch_loop.cc
|
||||
SRC_CC += thread.cc thread_bootstrap.cc thread_myself.cc utcb.cc
|
||||
SRC_CC += capability.cc
|
||||
SRC_CC += signal_source_client.cc
|
||||
@@ -4,12 +4,4 @@
|
||||
# \date 2013-02-14
|
||||
#
|
||||
|
||||
include $(BASE_DIR)/lib/mk/base-common.inc
|
||||
|
||||
LIBS += syscall-foc startup-foc
|
||||
|
||||
SRC_CC += spin_lock.cc cap_map.cc
|
||||
SRC_CC += rpc_dispatch_loop.cc
|
||||
SRC_CC += thread.cc thread_bootstrap.cc thread_myself.cc utcb.cc
|
||||
SRC_CC += capability.cc
|
||||
SRC_CC += signal_source_client.cc
|
||||
include $(REP_DIR)/lib/mk/base-foc-common.inc
|
||||
|
||||
@@ -3,6 +3,7 @@ include $(BASE_DIR)/lib/mk/base.inc
|
||||
LIBS += base-foc-common syscall-foc cxx
|
||||
|
||||
SRC_CC += cap_map_remove.cc cap_alloc.cc
|
||||
SRC_CC += cache.cc
|
||||
SRC_CC += thread_start.cc
|
||||
SRC_CC += signal_transmitter.cc signal.cc
|
||||
SRC_CC += stack_area_addr.cc
|
||||
|
||||
@@ -27,7 +27,6 @@ SRC_CC += stack_area.cc \
|
||||
platform.cc \
|
||||
platform_rom_modules.cc \
|
||||
platform_pd.cc \
|
||||
platform_services.cc \
|
||||
platform_thread.cc \
|
||||
pd_session_component.cc \
|
||||
ram_dataspace_support.cc \
|
||||
@@ -39,6 +38,8 @@ SRC_CC += stack_area.cc \
|
||||
signal_receiver.cc \
|
||||
thread_start.cc \
|
||||
trace_session_component.cc \
|
||||
vm_session_component.cc \
|
||||
vm_session_common.cc \
|
||||
heartbeat.cc
|
||||
|
||||
INC_DIR += $(REP_DIR)/src/core/include \
|
||||
@@ -72,5 +73,6 @@ vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
||||
vpath core_region_map.cc $(GEN_CORE_DIR)
|
||||
vpath platform_rom_modules.cc $(GEN_CORE_DIR)
|
||||
vpath heartbeat.cc $(GEN_CORE_DIR)
|
||||
vpath vm_session_common.cc $(GEN_CORE_DIR)
|
||||
vpath %.cc $(REP_DIR)/src/core
|
||||
vpath %.cc $(REP_DIR)/src/lib/base
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
FOC_BUILD_DIR = $(shell pwd)/build
|
||||
BOARD ?= unknown
|
||||
FOC_BUILD_DIR = $(shell pwd)/$(BOARD)-build
|
||||
FOC = $(FOC_BUILD_DIR)/foc
|
||||
FOC_SRC := $(call select_from_ports,foc)/src/kernel/foc/kernel/fiasco
|
||||
|
||||
@@ -41,7 +42,7 @@ PKGS := l4re-core/crtn \
|
||||
drivers-frst/include drivers-frst/of drivers-frst/uart \
|
||||
bootstrap
|
||||
|
||||
L4_BUILD_DIR := $(LIB_CACHE_DIR)/syscall-foc/build
|
||||
L4_BUILD_DIR := $(LIB_CACHE_DIR)/syscall-foc/$(BOARD)-build
|
||||
|
||||
#
|
||||
# Supress several warnings especially of the uclibc-minimal
|
||||
|
||||
@@ -24,13 +24,18 @@ ifeq ($(filter-out $(SPECS),arm_v6),)
|
||||
L4_BUILD_ARCH := arm_armv6
|
||||
endif
|
||||
|
||||
ifeq ($(filter-out $(SPECS),arm_v8),)
|
||||
L4_BUILD_ARCH := arm64_armv8a
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(L4_BUILD_ARCH),)
|
||||
$(error L4_BUILD_ARCH undefined, architecture not supported)
|
||||
endif
|
||||
|
||||
L4_BUILD_OPT = CROSS_COMPILE=$(CROSS_DEV_PREFIX)
|
||||
L4_PKG_DIR := $(call select_from_ports,foc)/src/kernel/foc/l4/pkg
|
||||
PKG_TAGS = $(addsuffix .tag,$(PKGS))
|
||||
PKG_TAGS = $(addsuffix .tag,$(addsuffix .$(BOARD),$(PKGS)))
|
||||
|
||||
BUILD_OUTPUT_FILTER = 2>&1 | sed "s~^~ [$*] ~"
|
||||
|
||||
@@ -49,7 +54,7 @@ endif
|
||||
#
|
||||
.NOTPARALLEL: $(PKG_TAGS)
|
||||
|
||||
%.tag:
|
||||
%.$(BOARD).tag:
|
||||
$(VERBOSE_MK) set -o pipefail; \
|
||||
$(MAKE) $(VERBOSE_DIR) O=$(L4_BUILD_DIR) -C $(L4_PKG_DIR)/$* \
|
||||
"$(L4_BUILD_OPT)" WARNINGS=$(WARNINGS) $(BUILD_OUTPUT_FILTER)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
# override default stack-area location
|
||||
INC_DIR += $(REP_DIR)/src/include/spec/arm
|
||||
|
||||
LIBS += timeout-arm
|
||||
|
||||
include $(REP_DIR)/lib/mk/base-foc.inc
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
REQUIRES += arm
|
||||
SRC_CC += spec/arm/platform_arm.cc \
|
||||
spec/arm/ipc_pager.cc
|
||||
spec/arm/ipc_pager.cc \
|
||||
platform_services.cc
|
||||
|
||||
# override default stack-area location
|
||||
INC_DIR += $(REP_DIR)/src/include/spec/arm
|
||||
|
||||
3
repos/base-foc/lib/mk/spec/arm_64/base-foc.mk
Normal file
3
repos/base-foc/lib/mk/spec/arm_64/base-foc.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
LIBS += timeout
|
||||
|
||||
include $(REP_DIR)/lib/mk/base-foc.inc
|
||||
8
repos/base-foc/lib/mk/spec/arm_64/core-foc.mk
Normal file
8
repos/base-foc/lib/mk/spec/arm_64/core-foc.mk
Normal file
@@ -0,0 +1,8 @@
|
||||
REQUIRES += arm_64
|
||||
SRC_CC += spec/arm/platform_arm.cc \
|
||||
spec/arm_64/ipc_pager.cc \
|
||||
platform_services.cc
|
||||
|
||||
include $(REP_DIR)/lib/mk/core-foc.inc
|
||||
|
||||
vpath platform_services.cc $(GEN_CORE_DIR)
|
||||
3
repos/base-foc/lib/mk/spec/arm_64/ld-foc.mk
Normal file
3
repos/base-foc/lib/mk/spec/arm_64/ld-foc.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
BASE_LIBS += base-foc-common base-foc
|
||||
|
||||
include $(BASE_DIR)/lib/mk/spec/arm_64/ld-platform.inc
|
||||
5
repos/base-foc/lib/mk/spec/arm_64/startup-foc.mk
Normal file
5
repos/base-foc/lib/mk/spec/arm_64/startup-foc.mk
Normal file
@@ -0,0 +1,5 @@
|
||||
LIBS += syscall-foc
|
||||
|
||||
include $(BASE_DIR)/lib/mk/startup.inc
|
||||
|
||||
vpath crt0.s $(BASE_DIR)/src/lib/startup/spec/arm_64
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/arndale.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv7a
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/arndale-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/imx6q_sabrelite.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv7a
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/imx6q_sabrelite-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
3
repos/base-foc/lib/mk/spec/imx7d_sabre/kernel-foc.mk
Normal file
3
repos/base-foc/lib/mk/spec/imx7d_sabre/kernel-foc.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
KERNEL_CONFIG := $(REP_DIR)/config/imx7.kernel
|
||||
|
||||
include $(REP_DIR)/lib/mk/kernel-foc.inc
|
||||
5
repos/base-foc/lib/mk/spec/imx7d_sabre/syscall-foc.mk
Normal file
5
repos/base-foc/lib/mk/spec/imx7d_sabre/syscall-foc.mk
Normal file
@@ -0,0 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/imx7.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/imx7d_sabre-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/odroid_x2.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv7a
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/odroid_x2-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/panda.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv7a
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/panda-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/pbxa9.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv7a
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/pbxa9-build/bin/arm_armv7a
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/rpi.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/arm_armv6
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi-build/bin/arm_armv6
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/arm/syscall-foc.inc
|
||||
|
||||
3
repos/base-foc/lib/mk/spec/rpi3/kernel-foc.mk
Normal file
3
repos/base-foc/lib/mk/spec/rpi3/kernel-foc.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
KERNEL_CONFIG := $(REP_DIR)/config/rpi3.kernel
|
||||
|
||||
include $(REP_DIR)/lib/mk/kernel-foc.inc
|
||||
18
repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk
Normal file
18
repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk
Normal file
@@ -0,0 +1,18 @@
|
||||
L4_CONFIG := $(call select_from_repositories,config/rpi3.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi3-build/bin/arm64_armv8a
|
||||
|
||||
L4_INC_TARGETS = arm64/l4/sys \
|
||||
arm64/l4f/l4/sys \
|
||||
arm64/l4/vcpu
|
||||
|
||||
CC_OPT += -Iinclude/arm64
|
||||
|
||||
include $(REP_DIR)/lib/mk/syscall-foc.inc
|
||||
|
||||
SRC_C += utcb.c
|
||||
|
||||
utcb.c:
|
||||
$(VERBOSE)ln -sf $(L4_BUILD_DIR)/source/pkg/l4re-core/l4sys/lib/src/utcb.c
|
||||
|
||||
utcb.c: $(PKG_TAGS)
|
||||
9
repos/base-foc/lib/mk/spec/x86/base-foc-common.mk
Normal file
9
repos/base-foc/lib/mk/spec/x86/base-foc-common.mk
Normal file
@@ -0,0 +1,9 @@
|
||||
#
|
||||
# \brief Portions of base library shared by core and non-core processes
|
||||
# \author Norman Feske
|
||||
# \date 2013-02-14
|
||||
#
|
||||
|
||||
vpath vm_session.cc $(REP_DIR)/src/lib/base/x86
|
||||
|
||||
include $(REP_DIR)/lib/mk/base-foc-common.inc
|
||||
@@ -1,10 +1,10 @@
|
||||
SRC_CC += io_port_session_component.cc \
|
||||
io_port_session_support.cc \
|
||||
spec/x86/ipc_pager.cc \
|
||||
spec/x86/platform.cc
|
||||
spec/x86/platform.cc \
|
||||
spec/x86/platform_services.cc
|
||||
|
||||
vpath io_port_session_component.cc $(BASE_DIR)/src/core/spec/x86
|
||||
vpath io_port_session_support.cc $(BASE_DIR)/src/core/spec/x86
|
||||
vpath platform_services.cc $(BASE_DIR)/src/core/spec/x86
|
||||
|
||||
include $(REP_DIR)/lib/mk/core-foc.inc
|
||||
|
||||
@@ -4,7 +4,7 @@ L4_INC_TARGETS := x86/l4/sys x86/l4f/l4/sys x86/l4/vcpu
|
||||
|
||||
CC_OPT += -Iinclude/x86
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/x86_586
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/pc-build/bin/x86_586
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/x86/syscall-foc.inc
|
||||
|
||||
|
||||
@@ -4,6 +4,6 @@ L4_INC_TARGETS := amd64/l4/sys amd64/l4f/l4/sys amd64/l4/vcpu
|
||||
|
||||
CC_OPT += -Iinclude/amd64
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/build/bin/amd64_K8
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/pc-build/bin/amd64_K8
|
||||
|
||||
include $(REP_DIR)/lib/mk/spec/x86/syscall-foc.inc
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
# userland (L4re) that comes with Fiasco.OC.
|
||||
#
|
||||
|
||||
BOARD ?= unknown
|
||||
L4_SRC_DIR := $(call select_from_ports,foc)/src/kernel/foc
|
||||
L4_BUILD_DIR := $(shell pwd)/build
|
||||
L4_BUILD_DIR := $(shell pwd)/$(BOARD)-build
|
||||
|
||||
#
|
||||
# Create mirror for architecture-specific L4sys header files
|
||||
@@ -67,14 +68,14 @@ $(SRC_S) $(SRC_C) : $(PKG_TAGS)
|
||||
# included in the depot's base-foc binary archives.
|
||||
#
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
all: $(INSTALL_DIR)/sigma0-foc $(INSTALL_DIR)/bootstrap-foc
|
||||
all: $(INSTALL_DIR)/sigma0-foc-$(BOARD) $(INSTALL_DIR)/bootstrap-foc-$(BOARD)
|
||||
|
||||
$(INSTALL_DIR)/sigma0-foc $(INSTALL_DIR)/bootstrap-foc: $(PKG_TAGS)
|
||||
$(INSTALL_DIR)/sigma0-foc-$(BOARD) $(INSTALL_DIR)/bootstrap-foc-$(BOARD): $(PKG_TAGS)
|
||||
|
||||
$(INSTALL_DIR)/sigma0-foc:
|
||||
$(INSTALL_DIR)/sigma0-foc-$(BOARD):
|
||||
$(VERBOSE)ln -sf $(L4_BIN_DIR)/l4f/sigma0 $@
|
||||
|
||||
$(INSTALL_DIR)/bootstrap-foc:
|
||||
$(INSTALL_DIR)/bootstrap-foc-$(BOARD):
|
||||
$(VERBOSE)ln -sf $(L4_BIN_DIR)/bootstrap $@
|
||||
endif
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
From dde7b7a8de121c4569fdec32ada623146dd430dc Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Wed, 20 Feb 2013 12:30:53 +0100
|
||||
Subject: [PATCH 01/15] L4RE: Remove 'moe' from 'switch_ram_base' target
|
||||
|
||||
---
|
||||
l4/Makefile | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/l4/Makefile b/l4/Makefile
|
||||
index 61f55524..814d5fe3 100644
|
||||
--- a/l4/Makefile
|
||||
+++ b/l4/Makefile
|
||||
@@ -480,7 +480,6 @@ define switch_ram_base_func
|
||||
echo "# File semi-automatically generated by 'make switch_ram_base'" > $(OBJ_BASE)/Makeconf.ram_base; \
|
||||
echo "RAM_BASE := $(1)" >> $(OBJ_BASE)/Makeconf.ram_base; \
|
||||
PWD=$(PWD)/l4re-core/pkg/sigma0/server/src $(MAKE) RAM_BASE=$(1) -C pkg/l4re-core/sigma0/server/src; \
|
||||
- PWD=$(PWD)/l4re-core/pkg/moe/server/src $(MAKE) RAM_BASE=$(1) -C pkg/l4re-core/moe/server/src; \
|
||||
echo "RAM_BASE_SWITCH_OK := yes" >> $(OBJ_BASE)/Makeconf.ram_base
|
||||
endef
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
From 1b5b4c951c4f5d5495ab6acb98c586b85d123295 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Fri, 11 Jan 2013 17:14:26 +0100
|
||||
Subject: [PATCH 02/15] FOC: change l4_task_cap_equal semantic
|
||||
|
||||
The syscall l4_task_cap_equal almost returns false although the referenced
|
||||
kernel-objects are equal. This patch changes the semantic of the syscall so that
|
||||
whenever two capabilities refering the same kernel-object are compared it will
|
||||
return true. Please refer to the discussion of the following mail thread:
|
||||
http://www.mail-archive.com/l4-hackers@os.inf.tu-dresden.de/msg05162.html
|
||||
|
||||
Was 'foc_caps_equal.patch'
|
||||
---
|
||||
kernel/fiasco/src/kern/task.cpp | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/task.cpp b/kernel/fiasco/src/kern/task.cpp
|
||||
index 693da581..e30867e2 100644
|
||||
--- a/kernel/fiasco/src/kern/task.cpp
|
||||
+++ b/kernel/fiasco/src/kern/task.cpp
|
||||
@@ -518,10 +518,15 @@ Task::sys_caps_equal(Syscall_frame *, Utcb *utcb)
|
||||
if (obj_a.special() || obj_b.special())
|
||||
return commit_result(obj_a.special_cap() == obj_b.special_cap());
|
||||
|
||||
- Obj_space::Capability c_a = lookup(obj_a.cap());
|
||||
- Obj_space::Capability c_b = lookup(obj_b.cap());
|
||||
+ Kobject_iface* ki_a = lookup(obj_a.cap()).obj();
|
||||
+ Kobject_iface* ki_b = lookup(obj_b.cap()).obj();
|
||||
|
||||
- return commit_result(c_a == c_b);
|
||||
+ if (!ki_b || !ki_a) return commit_result(0);
|
||||
+
|
||||
+ Mword o_a = ki_a->obj_id();
|
||||
+ Mword o_b = ki_b->obj_id();
|
||||
+
|
||||
+ return commit_result(o_a == o_b);
|
||||
}
|
||||
|
||||
PRIVATE inline NOEXPORT
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
From a7c9b9eaf75f9574c2ae80094df15942bf54c4ca Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Fri, 11 Jan 2013 17:38:28 +0100
|
||||
Subject: [PATCH 03/15] Sigma0: raise sigma0's priority to maximum.
|
||||
|
||||
When sigma0 runs on a lower priority than the rest of the threads in the system
|
||||
it might come to the point that while answering a page fault or I/O memory area
|
||||
request the timeslice of the caller (core-pager) gets fully consumed. As long as
|
||||
other threads are still executable and don't block sigma0 won't do progress
|
||||
anymore, because it runs at the lowest priority. This commit simply sets
|
||||
sigma0's priority to the highest in the system.
|
||||
|
||||
Was: 'sigma0_prio.patch'
|
||||
---
|
||||
l4/pkg/l4re-core/sigma0/server/src/init.cc | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/l4/pkg/l4re-core/sigma0/server/src/init.cc b/l4/pkg/l4re-core/sigma0/server/src/init.cc
|
||||
index c2608ceb..ebd8d479 100644
|
||||
--- a/l4/pkg/l4re-core/sigma0/server/src/init.cc
|
||||
+++ b/l4/pkg/l4re-core/sigma0/server/src/init.cc
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "ioports.h"
|
||||
#include "mem_man_test.h"
|
||||
#include <l4/sys/debugger.h>
|
||||
+#include <l4/sys/scheduler.h>
|
||||
|
||||
/* started as the L4 sigma0 task from crt0.S */
|
||||
|
||||
@@ -61,6 +62,10 @@ init(l4_kernel_info_t *info)
|
||||
l4_debugger_set_object_name(L4_BASE_FACTORY_CAP, "root factory");
|
||||
l4_debugger_set_object_name(L4_BASE_THREAD_CAP, "sigma0");
|
||||
|
||||
+ l4_sched_param_t params = l4_sched_param(255);
|
||||
+ l4_scheduler_run_thread(L4_BASE_SCHEDULER_CAP, L4_BASE_THREAD_CAP, ¶ms);
|
||||
+
|
||||
+
|
||||
Page_alloc_base::init();
|
||||
|
||||
init_memory(info);
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From 09f403d2eb2c7dc089796f58c9a1f359fdea2c35 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Fri, 11 Jan 2013 17:34:06 +0100
|
||||
Subject: [PATCH 05/15] FOC: Increase name buffer of JDB to 32K
|
||||
|
||||
Increase the size of the JDB kernel object names buffer. The original size was
|
||||
too small for some Genode scenarios and caused missing thread names in the
|
||||
kernel debugger thread list.
|
||||
|
||||
Was: 'jdb_kobject_names.patch'
|
||||
---
|
||||
kernel/fiasco/src/jdb/jdb_kobject_names.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/jdb/jdb_kobject_names.cpp b/kernel/fiasco/src/jdb/jdb_kobject_names.cpp
|
||||
index 5b5adbad..d65fbd56 100644
|
||||
--- a/kernel/fiasco/src/jdb/jdb_kobject_names.cpp
|
||||
+++ b/kernel/fiasco/src/jdb/jdb_kobject_names.cpp
|
||||
@@ -43,7 +43,7 @@ IMPLEMENTATION:
|
||||
|
||||
enum
|
||||
{
|
||||
- Name_buffer_size = 8192,
|
||||
+ Name_buffer_size = 4*8192,
|
||||
Name_entries = Name_buffer_size / sizeof(Jdb_kobject_name),
|
||||
};
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 8ce1c02d02fa8a9e50124e3237c2e01ae73c248c Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Wed, 8 Mar 2017 16:58:27 +0100
|
||||
Subject: [PATCH 06/15] FOC: adjust panda timer to version A6
|
||||
|
||||
A6 runs at 800 not 700 MHz (as the ES2 does) when bootstrapped by U-boot
|
||||
|
||||
(thanks to mstein)
|
||||
---
|
||||
.../fiasco/src/kern/arm/bsp/omap/timer-arm-mptimer-omap4.cpp | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/arm/bsp/omap/timer-arm-mptimer-omap4.cpp b/kernel/fiasco/src/kern/arm/bsp/omap/timer-arm-mptimer-omap4.cpp
|
||||
index 72ef9b90..c0aef990 100644
|
||||
--- a/kernel/fiasco/src/kern/arm/bsp/omap/timer-arm-mptimer-omap4.cpp
|
||||
+++ b/kernel/fiasco/src/kern/arm/bsp/omap/timer-arm-mptimer-omap4.cpp
|
||||
@@ -4,5 +4,13 @@ INTERFACE [arm && mptimer && pf_omap4_pandaboard]:
|
||||
EXTENSION class Timer
|
||||
{
|
||||
private:
|
||||
- static Mword interval() { return 499999; }
|
||||
+ static Mword interval()
|
||||
+ {
|
||||
+ /*
|
||||
+ * This is only valid for Panda A6, as we run it at our offices. For A6
|
||||
+ * U-Boot will clock the board at 800 MHz leading to a 400 MHz private timer
|
||||
+ * tick.
|
||||
+ */
|
||||
+ return 399999;
|
||||
+ }
|
||||
};
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From 266d89b9a54653bfe5cae2744ab72cf83ec13d6d Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
|
||||
Date: Wed, 3 May 2017 15:01:31 +0200
|
||||
Subject: [PATCH 07/15] L4RE: fix x86 syscall bindings to use in C++ namespace
|
||||
|
||||
---
|
||||
l4/pkg/l4re-core/l4sys/include/ARCH-x86/ipc-invoke.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/l4/pkg/l4re-core/l4sys/include/ARCH-x86/ipc-invoke.h b/l4/pkg/l4re-core/l4sys/include/ARCH-x86/ipc-invoke.h
|
||||
index 6e635697..18ef1f6d 100644
|
||||
--- a/l4/pkg/l4re-core/l4sys/include/ARCH-x86/ipc-invoke.h
|
||||
+++ b/l4/pkg/l4re-core/l4sys/include/ARCH-x86/ipc-invoke.h
|
||||
@@ -48,7 +48,11 @@
|
||||
#if 1
|
||||
|
||||
#ifdef __PIC__
|
||||
+#ifndef __cplusplus
|
||||
extern void (*__l4sys_invoke_indirect)(void);
|
||||
+#else
|
||||
+extern "C" void (*__l4sys_invoke_indirect)(void);
|
||||
+#endif
|
||||
#endif
|
||||
# define IPC_SYSENTER "# indirect sys invoke \n\t" \
|
||||
"call *%[func] \n\t"
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From 2cf8f6f608aa4ade16402c10751aaa7d90b994f8 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Boettcher <alexander.boettcher@genode-labs.com>
|
||||
Date: Mon, 10 Jun 2013 10:30:49 +0200
|
||||
Subject: [PATCH 09/15] Bootstrap: read out comport on x86 from BDA area
|
||||
|
||||
With this patch the comport are tried to read out from the BIOS Data Area
|
||||
on x86 machines. The BDA Area are part of the first physical page and may
|
||||
contain the non-default io ports of the comport.
|
||||
|
||||
When used together with 'bender' from the 'morbo' toolchain, even serial PCI
|
||||
cards (also Intel's AMT Serial Over Line adapter) are detected automatically.
|
||||
---
|
||||
l4/pkg/bootstrap/server/src/platform/x86_pc-base.h | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/l4/pkg/bootstrap/server/src/platform/x86_pc-base.h b/l4/pkg/bootstrap/server/src/platform/x86_pc-base.h
|
||||
index c3e8c12f..95579c09 100644
|
||||
--- a/l4/pkg/bootstrap/server/src/platform/x86_pc-base.h
|
||||
+++ b/l4/pkg/bootstrap/server/src/platform/x86_pc-base.h
|
||||
@@ -957,7 +957,11 @@ public:
|
||||
}
|
||||
else if (comport == -1)
|
||||
{
|
||||
- legacy_uart(1, comirq, &board);
|
||||
+ /* try to read Bios Data Area (BDA) to get comport information */
|
||||
+ unsigned short comport_count = (*((unsigned short *)0x410) >> 9) & 0x7;
|
||||
+ if (comport_count) comport = *((unsigned short *)0x400), comirq, &board;
|
||||
+ else comport = 1;
|
||||
+ legacy_uart(comport, comirq, &board);
|
||||
comport = 0;
|
||||
}
|
||||
else
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From f3d44f2a42763bbcba7085f3005ee8a36dbf23e9 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
|
||||
Date: Tue, 30 May 2017 09:03:57 +0200
|
||||
Subject: [PATCH 10/15] L4RE: get rid of __builtin_strlen usage
|
||||
|
||||
---
|
||||
l4/pkg/l4re-core/l4sys/include/kdebug.h | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/l4/pkg/l4re-core/l4sys/include/kdebug.h b/l4/pkg/l4re-core/l4sys/include/kdebug.h
|
||||
index cfb17464..64ee9900 100644
|
||||
--- a/l4/pkg/l4re-core/l4sys/include/kdebug.h
|
||||
+++ b/l4/pkg/l4re-core/l4sys/include/kdebug.h
|
||||
@@ -133,6 +133,13 @@ __kdebug_op_1(unsigned op, l4_mword_t val) L4_NOTHROW
|
||||
return res;
|
||||
}
|
||||
|
||||
+L4_INLINE unsigned __kdebug_strlen(char const * s)
|
||||
+{
|
||||
+ unsigned r = 0;
|
||||
+ for (; s && *s; s++, r++);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
L4_INLINE void enter_kdebug(char const *text) L4_NOTHROW
|
||||
{
|
||||
/* special case, enter without any text and use of the UTCB */
|
||||
@@ -144,14 +151,14 @@ L4_INLINE void enter_kdebug(char const *text) L4_NOTHROW
|
||||
return;
|
||||
}
|
||||
|
||||
- __kdebug_text(L4_KDEBUG_ENTER, text, __builtin_strlen(text));
|
||||
+ __kdebug_text(L4_KDEBUG_ENTER, text, __kdebug_strlen(text));
|
||||
}
|
||||
|
||||
L4_INLINE void outnstring(char const *text, unsigned len)
|
||||
{ __kdebug_text(L4_KDEBUG_OUTNSTRING, text, len); }
|
||||
|
||||
L4_INLINE void outstring(char const *text)
|
||||
-{ outnstring(text, __builtin_strlen(text)); }
|
||||
+{ outnstring(text, __kdebug_strlen(text)); }
|
||||
|
||||
|
||||
L4_INLINE void outchar(char c)
|
||||
--
|
||||
2.11.0
|
||||
|
||||
45
repos/base-foc/patches/0011-Ex_regs-Change-user_flags.patch
Normal file
45
repos/base-foc/patches/0011-Ex_regs-Change-user_flags.patch
Normal file
@@ -0,0 +1,45 @@
|
||||
From b9323143eead13223b658c92010c923c959e2159 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
||||
Date: Fri, 11 Jan 2013 17:27:42 +0100
|
||||
Subject: [PATCH 11/15] Ex_regs: Change 'user_flags'
|
||||
|
||||
Return true if thread is ready.
|
||||
|
||||
Was: 'foc_exregs_ret_state.patch'
|
||||
---
|
||||
kernel/fiasco/src/kern/arm/thread-arm.cpp | 2 +-
|
||||
kernel/fiasco/src/kern/ia32/thread-ia32.cpp | 5 ++++-
|
||||
2 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/arm/thread-arm.cpp b/kernel/fiasco/src/kern/arm/thread-arm.cpp
|
||||
index 82b62998..7bce193b 100644
|
||||
--- a/kernel/fiasco/src/kern/arm/thread-arm.cpp
|
||||
+++ b/kernel/fiasco/src/kern/arm/thread-arm.cpp
|
||||
@@ -325,7 +325,7 @@ Thread::user_sp(Mword sp)
|
||||
IMPLEMENT inline
|
||||
Mword
|
||||
Thread::user_flags() const
|
||||
-{ return 0; }
|
||||
+{ return state() & Thread_ready; }
|
||||
|
||||
PUBLIC inline NEEDS ["trap_state.h"]
|
||||
int
|
||||
diff --git a/kernel/fiasco/src/kern/ia32/thread-ia32.cpp b/kernel/fiasco/src/kern/ia32/thread-ia32.cpp
|
||||
index 3777821d..62a561a9 100644
|
||||
--- a/kernel/fiasco/src/kern/ia32/thread-ia32.cpp
|
||||
+++ b/kernel/fiasco/src/kern/ia32/thread-ia32.cpp
|
||||
@@ -80,7 +80,10 @@ Thread::user_ip() const
|
||||
IMPLEMENT inline
|
||||
Mword
|
||||
Thread::user_flags() const
|
||||
-{ return regs()->flags(); }
|
||||
+{
|
||||
+ // pass thread-ready state in carry flag (Thread_ready is bit 0)
|
||||
+ return (regs()->flags() & ~Thread_ready) | (state() & Thread_ready);
|
||||
+}
|
||||
|
||||
PRIVATE static inline
|
||||
Mword
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From 43cd446fe9bcba67a7d7312b14004e9063343a89 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Prochaska <christian.prochaska@genode-labs.com>
|
||||
Date: Wed, 28 Aug 2013 19:53:23 +0200
|
||||
Subject: [PATCH 12/15] Flush the TLB after idle operation
|
||||
|
||||
While a CPU executes the idle thread, it receives no cross-CPU TLB flush
|
||||
requests. Therefore, the TLB needs to get flushed when leaving the idle
|
||||
thread to compensate for any missed flush requests.
|
||||
|
||||
Fixes ssumpf/foc#9.
|
||||
---
|
||||
kernel/fiasco/src/kern/kernel_thread.cpp | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/kernel_thread.cpp b/kernel/fiasco/src/kern/kernel_thread.cpp
|
||||
index 348fde9c..7e4a0d31 100644
|
||||
--- a/kernel/fiasco/src/kern/kernel_thread.cpp
|
||||
+++ b/kernel/fiasco/src/kern/kernel_thread.cpp
|
||||
@@ -182,6 +182,7 @@ Kernel_thread::idle_op()
|
||||
arch_tickless_idle(cpu);
|
||||
|
||||
Mem_space::enable_tlb(cpu);
|
||||
+ Mem_unit::tlb_flush();
|
||||
Rcu::leave_idle(cpu);
|
||||
Timer_tick::enable(cpu);
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From b74e427801f045578c401a140a8e66404bb3ff19 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Prochaska <christian.prochaska@genode-labs.com>
|
||||
Date: Tue, 12 Feb 2019 19:54:06 +0100
|
||||
Subject: [PATCH 14/15] Always enable user mode access for performance monitors
|
||||
|
||||
QEMU implements the cycle count register read by
|
||||
'Genode::Trace::timestamp()', but does not report a supported debug model
|
||||
version for Cortex-A9.
|
||||
---
|
||||
kernel/fiasco/src/kern/arm/perf_cnt-arm.cpp | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/arm/perf_cnt-arm.cpp b/kernel/fiasco/src/kern/arm/perf_cnt-arm.cpp
|
||||
index b7d6a935..bff54286 100644
|
||||
--- a/kernel/fiasco/src/kern/arm/perf_cnt-arm.cpp
|
||||
+++ b/kernel/fiasco/src/kern/arm/perf_cnt-arm.cpp
|
||||
@@ -190,8 +190,13 @@ PUBLIC static FIASCO_INIT_CPU
|
||||
void
|
||||
Perf_cnt::init_cpu()
|
||||
{
|
||||
- if (!is_avail())
|
||||
- return;
|
||||
+ /*
|
||||
+ * QEMU implements the cycle count register read by
|
||||
+ * 'Genode::Trace::timestamp()', but does not report a supported debug model
|
||||
+ * version for Cortex-A9.
|
||||
+ */
|
||||
+ //if (!is_avail())
|
||||
+ //return;
|
||||
|
||||
_nr_counters = (pmcr() >> 11) & 0x1f;
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From a8411389dffc3c55dc5809d2e849b3afac94ee5d Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Boettcher <alexander.boettcher@genode-labs.com>
|
||||
Date: Fri, 12 Apr 2019 13:53:24 +0200
|
||||
Subject: [PATCH 15/15] VMX: disable event injection if requested by VMM
|
||||
|
||||
---
|
||||
kernel/fiasco/src/kern/ia32/vm_vmx.cpp | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/ia32/vm_vmx.cpp b/kernel/fiasco/src/kern/ia32/vm_vmx.cpp
|
||||
index 7de4110f..44483b48 100644
|
||||
--- a/kernel/fiasco/src/kern/ia32/vm_vmx.cpp
|
||||
+++ b/kernel/fiasco/src/kern/ia32/vm_vmx.cpp
|
||||
@@ -306,6 +306,12 @@ Vm_vmx_t<X>::load_guest_state(Cpu_number cpu, void *src)
|
||||
|
||||
Vmx::vmwrite(Vmx::F_entry_int_info, irq_info);
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ // switch off event injection if requested but still pending in hw
|
||||
+ if (Vmx::vmread<Mword>(Vmx::F_entry_int_info) & (1UL << 31))
|
||||
+ Vmx::vmwrite(Vmx::F_entry_int_info, irq_info);
|
||||
+ }
|
||||
|
||||
// hm, we have to check for sanitizing the cr0 and cr4 shadow stuff
|
||||
load(0x6000, 0x6006, src);
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
From 518f0ab153ab528fb78c3643d490c2cbefe0dd80 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Boettcher <alexander.boettcher@genode-labs.com>
|
||||
Date: Sat, 4 May 2019 19:19:22 +0200
|
||||
Subject: [PATCH 16/17] svm: provide cr0 to guest if np enabled
|
||||
|
||||
---
|
||||
kernel/fiasco/src/kern/ia32/vm_svm.cpp | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/ia32/vm_svm.cpp b/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
index 9960a830..1330e36a 100644
|
||||
--- a/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
+++ b/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
@@ -656,6 +656,7 @@ Vm_svm::do_resume_vcpu(Context *ctxt, Vcpu_state *vcpu, Vmcb *vmcb_s)
|
||||
|
||||
if (EXPECT_TRUE(kernel_vmcb_s->np_enabled()))
|
||||
{
|
||||
+ vmcb_s->state_save_area.cr0 = kernel_vmcb_s->state_save_area.cr0;
|
||||
vmcb_s->state_save_area.cr3 = kernel_vmcb_s->state_save_area.cr3;
|
||||
vmcb_s->state_save_area.cr4 = kernel_vmcb_s->state_save_area.cr4;
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
From 45bf2c699552d1e2891d322bea479d95f8c93d02 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Boettcher <alexander.boettcher@genode-labs.com>
|
||||
Date: Sat, 4 May 2019 19:20:41 +0200
|
||||
Subject: [PATCH 17/17] svm: avoid forceful exit on task switch
|
||||
|
||||
---
|
||||
kernel/fiasco/src/kern/ia32/vm_svm.cpp | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/kernel/fiasco/src/kern/ia32/vm_svm.cpp b/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
index 1330e36a..9ac5b87b 100644
|
||||
--- a/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
+++ b/kernel/fiasco/src/kern/ia32/vm_svm.cpp
|
||||
@@ -486,8 +486,6 @@ Vm_svm::do_resume_vcpu(Context *ctxt, Vcpu_state *vcpu, Vmcb *vmcb_s)
|
||||
kernel_vmcb_s->control_area.intercept_instruction0 |= (1 << 22);
|
||||
// intercept HLT
|
||||
kernel_vmcb_s->control_area.intercept_instruction0 |= (1 << 24);
|
||||
- // intercept task switch
|
||||
- kernel_vmcb_s->control_area.intercept_instruction0 |= (1 << 29);
|
||||
// intercept shutdown
|
||||
kernel_vmcb_s->control_area.intercept_instruction0 |= (1 << 31);
|
||||
// intercept MONITOR/MWAIT
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1 +1 @@
|
||||
1367e8214fa7c02682a97bbb3b375b0d792f4fed
|
||||
91ca3363690c5b9c992a110375242f5d426a6848
|
||||
|
||||
@@ -1,6 +1,40 @@
|
||||
LICENSE := GPLv2
|
||||
VERSION := git
|
||||
DOWNLOADS := foc.git
|
||||
URL(foc) := https://github.com/cproc/foc.git
|
||||
REV(foc) := b74e427801f045578c401a140a8e66404bb3ff19
|
||||
DIR(foc) := src/kernel/foc
|
||||
LICENSE := GPLv2
|
||||
VERSION := git
|
||||
DOWNLOADS := mk.git foc.git l4re-core.git drivers-frst.git bootstrap.git
|
||||
|
||||
URL(mk) := https://github.com/kernkonzept/mk.git
|
||||
REV(mk) := dc4501f9cc3910c2038e0703ffdcd9062d2610e1
|
||||
DIR(mk) := src/kernel/foc/l4
|
||||
|
||||
URL(foc) := https://github.com/kernkonzept/fiasco.git
|
||||
REV(foc) := 4367c50b1df878604b9833d4b41ae311d6e12e03
|
||||
DIR(foc) := src/kernel/foc/kernel/fiasco
|
||||
|
||||
URL(l4re-core) := https://github.com/kernkonzept/l4re-core.git
|
||||
REV(l4re-core) := fe794038e477e5a54762126689483c0e91a177a8
|
||||
DIR(l4re-core) := src/kernel/foc/l4/pkg/l4re-core
|
||||
|
||||
URL(drivers-frst) := https://github.com/kernkonzept/drivers-frst.git
|
||||
REV(drivers-frst) := ce2d7d33294cb7034a4226912463b24f6ffe1bc7
|
||||
DIR(drivers-frst) := src/kernel/foc/l4/pkg/drivers-frst
|
||||
|
||||
URL(bootstrap) := https://github.com/kernkonzept/bootstrap.git
|
||||
REV(bootstrap) := 36500c1253f46f527098febd4da7cbc9d0e2c218
|
||||
DIR(bootstrap) := src/kernel/foc/l4/pkg/bootstrap
|
||||
|
||||
PATCHES := $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/*.patch)))
|
||||
|
||||
PATCH_OPT(patches/0001-L4RE-Remove-moe-from-switch_ram_base-target.patch) := -p2 -d${DIR(mk)}
|
||||
PATCH_OPT(patches/0002-FOC-change-l4_task_cap_equal-semantic.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0003-Sigma0-raise-sigma0-s-priority-to-maximum.patch) := -p4 -d${DIR(l4re-core)}
|
||||
PATCH_OPT(patches/0005-FOC-Increase-name-buffer-of-JDB-to-32K.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0006-FOC-adjust-panda-timer-to-version-A6.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0007-L4RE-fix-x86-syscall-bindings-to-use-in-C-namespace.patch) := -p4 -d${DIR(l4re-core)}
|
||||
PATCH_OPT(patches/0009-Bootstrap-read-out-comport-on-x86-from-BDA-area.patch) := -p4 -d${DIR(bootstrap)}
|
||||
PATCH_OPT(patches/0010-L4RE-get-rid-of-__builtin_strlen-usage.patch) := -p4 -d${DIR(l4re-core)}
|
||||
PATCH_OPT(patches/0011-Ex_regs-Change-user_flags.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0012-Flush-the-TLB-after-idle-operation.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0014-Always-enable-user-mode-access-for-performance-monit.patch):= -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0015-VMX-disable-event-injection-if-requested-by-VMM.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0016-svm-provide-cr0-to-guest-if-np-enabled.patch) := -p3 -d${DIR(foc)}
|
||||
PATCH_OPT(patches/0017-svm-avoid-forceful-exit-on-task-switch.patch) := -p3 -d${DIR(foc)}
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-arndale
|
||||
BOARD := arndale
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
|
||||
content: enable_board_spec
|
||||
enable_board_spec: etc/specs.conf
|
||||
echo "SPECS += arndale" >> etc/specs.conf
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019-03-17 afceec17effa93a876ccd74986aaeefedc55fbec
|
||||
2019-07-08 f3bfd189708c82317b021ffdc53ba80128037465
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-imx6q_sabrelite
|
||||
BOARD := imx6q_sabrelite
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
|
||||
content: enable_board_spec
|
||||
enable_board_spec: etc/specs.conf
|
||||
echo "SPECS += imx6q_sabrelite" >> etc/specs.conf
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019-03-17 3abba41d8511785a7a36ddd14020981f0e923dd1
|
||||
2019-07-08 87f41f86afb0c19e5682e2e2d41ed182f9334ef1
|
||||
|
||||
7
repos/base-foc/recipes/src/base-foc-imx7d_sabre/README
Normal file
7
repos/base-foc/recipes/src/base-foc-imx7d_sabre/README
Normal file
@@ -0,0 +1,7 @@
|
||||
This archive contains the Fiasco.OC-specific part of Genode.
|
||||
|
||||
It also contains the source code of the Fiasco.OC kernel in the
|
||||
'src/kernel/foc' directory.
|
||||
|
||||
Please note that Fiasco.OC has a license distinct from Genode. Fiasco.OC's
|
||||
license can be found at 'src/kernel/foc/COPYING-GPL-2'.
|
||||
@@ -0,0 +1,3 @@
|
||||
BOARD := imx7d_sabre
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
1
repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash
Normal file
1
repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash
Normal file
@@ -0,0 +1 @@
|
||||
2019-07-08 d370ecc4cb2ce3f370cfaefecbf97a1c05ef3e69
|
||||
@@ -0,0 +1 @@
|
||||
base
|
||||
@@ -1,7 +1,3 @@
|
||||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-pbxa9
|
||||
BOARD := pbxa9
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
|
||||
content: enable_board_spec
|
||||
enable_board_spec: etc/specs.conf
|
||||
echo "SPECS += pbxa9" >> etc/specs.conf
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019-03-17 de9d9d8416994b1708b0aab1b4b97192f83aa76d
|
||||
2019-07-08 075559ecf0b1206c45de3fc7ccd9b6198bd41d41
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-pc
|
||||
BOARD := pc
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019-03-17 c5e7af183d462433ed46588a2d9a28ce36e830f3
|
||||
2019-07-08 536625983e4733b833706e59c35591fe5d06020c
|
||||
|
||||
7
repos/base-foc/recipes/src/base-foc-rpi3/README
Normal file
7
repos/base-foc/recipes/src/base-foc-rpi3/README
Normal file
@@ -0,0 +1,7 @@
|
||||
This archive contains the Fiasco.OC-specific part of Genode.
|
||||
|
||||
It also contains the source code of the Fiasco.OC kernel in the
|
||||
'src/kernel/foc' directory.
|
||||
|
||||
Please note that Fiasco.OC has a license distinct from Genode. Fiasco.OC's
|
||||
license can be found at 'src/kernel/foc/COPYING-GPL-2'.
|
||||
3
repos/base-foc/recipes/src/base-foc-rpi3/content.mk
Normal file
3
repos/base-foc/recipes/src/base-foc-rpi3/content.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
BOARD := rpi3
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
||||
1
repos/base-foc/recipes/src/base-foc-rpi3/hash
Normal file
1
repos/base-foc/recipes/src/base-foc-rpi3/hash
Normal file
@@ -0,0 +1 @@
|
||||
2019-07-08 5f648e24bfed0e532ad659cc87d8cf60a11efe05
|
||||
1
repos/base-foc/recipes/src/base-foc-rpi3/used_apis
Normal file
1
repos/base-foc/recipes/src/base-foc-rpi3/used_apis
Normal file
@@ -0,0 +1 @@
|
||||
base
|
||||
@@ -1,5 +1,6 @@
|
||||
include $(GENODE_DIR)/repos/base/recipes/src/base_content.inc
|
||||
|
||||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-$(BOARD)
|
||||
FROM_BASE_FOC := include/foc include/foc_native_cpu
|
||||
|
||||
content: $(FROM_BASE_FOC)
|
||||
@@ -25,9 +26,16 @@ src/kernel/foc: src/kernel
|
||||
cp -r $(KERNEL_PORT_DIR)/src/kernel/foc/* $@
|
||||
|
||||
content:
|
||||
for spec in x86_32 x86_64 arm; do \
|
||||
for spec in x86_32 x86_64 arm arm_64; do \
|
||||
mv lib/mk/spec/$$spec/ld-foc.mk lib/mk/spec/$$spec/ld.mk; \
|
||||
done;
|
||||
sed -i "s/ld-foc/ld/" src/lib/ld/foc/target.mk
|
||||
sed -i "s/foc_timer_drv/timer/" src/timer/foc/target.mk
|
||||
sed -i "s/BOARD.*unknown/BOARD = $(BOARD)/" src/core/foc/target.mk
|
||||
sed -i "s/BOARD.*unknown/BOARD = $(BOARD)/" src/kernel/foc/target.mk
|
||||
sed -i "s/BOARD.*unknown/BOARD = $(BOARD)/" lib/mk/syscall-foc.inc
|
||||
sed -i "s/BOARD.*unknown/BOARD = $(BOARD)/" lib/mk/kernel-foc.inc
|
||||
|
||||
content: enable_board_spec
|
||||
enable_board_spec: etc/specs.conf
|
||||
echo "SPECS += $(BOARD)" >> etc/specs.conf
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
BOARD ?= unknown
|
||||
TARGET := foc-$(BOARD)
|
||||
LIBS := core-foc
|
||||
CORE_OBJ := core-foc.o
|
||||
CORE_OBJ := core-foc-$(BOARD).o
|
||||
|
||||
include $(BASE_DIR)/src/core/target.inc
|
||||
|
||||
@@ -28,9 +28,14 @@
|
||||
#include <platform_pd.h>
|
||||
#include <assertion.h>
|
||||
|
||||
namespace Fiasco {
|
||||
struct l4_kernel_info_t;
|
||||
}
|
||||
|
||||
namespace Genode {
|
||||
|
||||
class Xml_generator;
|
||||
|
||||
class Platform : public Platform_generic
|
||||
{
|
||||
private:
|
||||
@@ -73,12 +78,6 @@ namespace Genode {
|
||||
addr_t _vm_start = 0; /* begin of virtual memory */
|
||||
size_t _vm_size = 0; /* size of virtual memory */
|
||||
|
||||
|
||||
/*
|
||||
* We do not export any boot module loaded before FIRST_ROM.
|
||||
*/
|
||||
enum { FIRST_ROM = 3 };
|
||||
|
||||
/**
|
||||
* Setup base resources
|
||||
*
|
||||
@@ -97,6 +96,12 @@ namespace Genode {
|
||||
*/
|
||||
void _setup_io_port_alloc();
|
||||
|
||||
/**
|
||||
* Setup content of platform_info ROM
|
||||
*/
|
||||
void _setup_platform_info(Xml_generator &,
|
||||
Fiasco::l4_kernel_info_t &);
|
||||
|
||||
/**
|
||||
* Setup IRQ allocator
|
||||
*/
|
||||
@@ -116,6 +121,8 @@ namespace Genode {
|
||||
|
||||
public:
|
||||
|
||||
enum { VCPU_VIRT_EXT_START = 0x1000, VCPU_VIRT_EXT_END = 0x10000 };
|
||||
|
||||
/**
|
||||
* Core pager thread that handles core-internal page-faults
|
||||
*/
|
||||
|
||||
@@ -52,20 +52,19 @@ namespace Genode {
|
||||
Platform_pd &operator = (Platform_pd const &);
|
||||
|
||||
enum {
|
||||
THREAD_MAX = (1 << 7),
|
||||
UTCB_AREA_SIZE = (THREAD_MAX * Fiasco::L4_UTCB_OFFSET),
|
||||
UTCB_AREA_SIZE = (Fiasco::THREAD_MAX * Fiasco::L4_UTCB_OFFSET),
|
||||
};
|
||||
|
||||
addr_t utcb_area_start()
|
||||
{
|
||||
return NON_CORE_STACK_AREA_ADDR +
|
||||
THREAD_MAX*stack_virtual_size();
|
||||
Fiasco::THREAD_MAX*stack_virtual_size();
|
||||
}
|
||||
|
||||
Cap_mapping _task;
|
||||
Cap_mapping _parent { };
|
||||
Cap_mapping _debug { };
|
||||
Platform_thread *_threads[THREAD_MAX] { };
|
||||
Platform_thread *_threads[Fiasco::THREAD_MAX] { };
|
||||
|
||||
public:
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
/* Genode includes */
|
||||
#include <base/native_capability.h>
|
||||
#include <base/thread_state.h>
|
||||
#include <base/trace/types.h>
|
||||
|
||||
/* core includes */
|
||||
#include <pager.h>
|
||||
@@ -156,6 +157,12 @@ namespace Genode {
|
||||
*/
|
||||
Affinity::Location affinity() const;
|
||||
|
||||
/**
|
||||
* Make thread to vCPU
|
||||
*/
|
||||
Fiasco::l4_cap_idx_t setup_vcpu(unsigned, Cap_mapping const &,
|
||||
Cap_mapping &);
|
||||
|
||||
/************************
|
||||
** Accessor functions **
|
||||
************************/
|
||||
@@ -187,7 +194,7 @@ namespace Genode {
|
||||
/**
|
||||
* Return execution time consumed by the thread
|
||||
*/
|
||||
unsigned long long execution_time() const;
|
||||
Trace::Execution_time execution_time() const;
|
||||
|
||||
|
||||
/*******************************
|
||||
@@ -199,6 +206,7 @@ namespace Genode {
|
||||
Name name() const { return _name; }
|
||||
bool core_thread() const { return _core_thread; }
|
||||
addr_t utcb() const { return _utcb; }
|
||||
unsigned prio() const { return _prio; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
114
repos/base-foc/src/core/include/vm_session_component.h
Normal file
114
repos/base-foc/src/core/include/vm_session_component.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* \brief Core-specific instance of the VM session interface
|
||||
* \author Alexander Boettcher
|
||||
* \date 2018-08-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
#ifndef _CORE__VM_SESSION_COMPONENT_H_
|
||||
#define _CORE__VM_SESSION_COMPONENT_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/allocator_guard.h>
|
||||
#include <base/rpc_server.h>
|
||||
#include <base/heap.h>
|
||||
#include <vm_session/vm_session.h>
|
||||
|
||||
/* Core includes */
|
||||
#include <cap_mapping.h>
|
||||
#include <dataspace_component.h>
|
||||
#include <region_map_component.h>
|
||||
|
||||
#include <trace/source_registry.h>
|
||||
|
||||
namespace Genode { class Vm_session_component; struct Vcpu; }
|
||||
|
||||
struct Genode::Vcpu : Genode::List<Vcpu>::Element
|
||||
{
|
||||
private:
|
||||
|
||||
Constrained_ram_allocator &_ram_alloc;
|
||||
Cap_quota_guard &_cap_alloc;
|
||||
Ram_dataspace_capability _ds_cap { };
|
||||
Vm_session::Vcpu_id const _id;
|
||||
Cap_mapping _recall { true };
|
||||
|
||||
public:
|
||||
|
||||
Vcpu(Constrained_ram_allocator &ram_alloc,
|
||||
Cap_quota_guard &cap_alloc, Vm_session::Vcpu_id const id);
|
||||
|
||||
~Vcpu();
|
||||
|
||||
bool match(Vm_session::Vcpu_id const id) const { return id.id == _id.id; }
|
||||
Dataspace_capability ds_cap() { return _ds_cap; }
|
||||
Cap_mapping &recall_cap() { return _recall; }
|
||||
};
|
||||
|
||||
class Genode::Vm_session_component
|
||||
:
|
||||
private Ram_quota_guard,
|
||||
private Cap_quota_guard,
|
||||
public Rpc_object<Vm_session, Vm_session_component>,
|
||||
public Region_map_detach
|
||||
{
|
||||
private:
|
||||
|
||||
typedef Constrained_ram_allocator Con_ram_allocator;
|
||||
typedef Allocator_avl_tpl<Rm_region> Avl_region;
|
||||
|
||||
Rpc_entrypoint &_ep;
|
||||
Con_ram_allocator _constrained_md_ram_alloc;
|
||||
Sliced_heap _heap;
|
||||
Avl_region _map { &_heap };
|
||||
List<Vcpu> _vcpus { };
|
||||
Cap_mapping _task_vcpu { true };
|
||||
unsigned _id_alloc { 0 };
|
||||
|
||||
void _attach_vm_memory(Dataspace_component &, addr_t, Attach_attr);
|
||||
void _detach_vm_memory(addr_t, size_t);
|
||||
|
||||
protected:
|
||||
|
||||
Ram_quota_guard &_ram_quota_guard() { return *this; }
|
||||
Cap_quota_guard &_cap_quota_guard() { return *this; }
|
||||
|
||||
public:
|
||||
|
||||
using Ram_quota_guard::upgrade;
|
||||
using Cap_quota_guard::upgrade;
|
||||
|
||||
Vm_session_component(Rpc_entrypoint &, Resources, Label const &,
|
||||
Diag, Ram_allocator &ram, Region_map &, unsigned,
|
||||
Trace::Source_registry &);
|
||||
~Vm_session_component();
|
||||
|
||||
/*********************************
|
||||
** Region_map_detach interface **
|
||||
*********************************/
|
||||
|
||||
void detach(Region_map::Local_addr) override;
|
||||
void unmap_region(addr_t, size_t) override;
|
||||
|
||||
/**************************
|
||||
** Vm session interface **
|
||||
**************************/
|
||||
|
||||
Dataspace_capability _cpu_state(Vcpu_id);
|
||||
|
||||
void _exception_handler(Signal_context_capability, Vcpu_id) { }
|
||||
void _run(Vcpu_id) { }
|
||||
void _pause(Vcpu_id) { }
|
||||
void attach(Dataspace_capability, addr_t, Attach_attr) override;
|
||||
void attach_pic(addr_t) override { }
|
||||
void detach(addr_t, size_t) override;
|
||||
void _create_vcpu(Thread_capability);
|
||||
};
|
||||
|
||||
#endif /* _CORE__VM_SESSION_COMPONENT_H_ */
|
||||
@@ -16,7 +16,10 @@
|
||||
#include <base/log.h>
|
||||
#include <base/allocator_avl.h>
|
||||
#include <base/sleep.h>
|
||||
#include <dataspace/capability.h>
|
||||
#include <trace/source_registry.h>
|
||||
#include <util/misc_math.h>
|
||||
#include <util/xml_generator.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
@@ -384,6 +387,13 @@ void Platform::_setup_basics()
|
||||
/* configure applicable address space but never use page0 */
|
||||
_vm_size = _vm_start == 0 ? _vm_size - L4_PAGESIZE : _vm_size;
|
||||
_vm_start = _vm_start == 0 ? L4_PAGESIZE : _vm_start;
|
||||
|
||||
/* reserve virtual range for extended vCPU features - better way XXX ? */
|
||||
if (_vm_start < VCPU_VIRT_EXT_END) {
|
||||
_vm_size -= VCPU_VIRT_EXT_END - _vm_start;
|
||||
_vm_start = VCPU_VIRT_EXT_END;
|
||||
}
|
||||
|
||||
_region_alloc.add_range(_vm_start, _vm_size);
|
||||
|
||||
/* preserve stack area in core's virtual address space */
|
||||
@@ -456,17 +466,39 @@ Platform::Platform() :
|
||||
core_thread.pager(_sigma0);
|
||||
_core_pd->bind_thread(core_thread);
|
||||
|
||||
/* export x86 platform specific infos */
|
||||
{
|
||||
/* export x86 platform specific infos */
|
||||
void * phys_ptr = nullptr;
|
||||
if (ram_alloc().alloc_aligned(get_page_size(), &phys_ptr,
|
||||
get_page_size_log2()).ok()) {
|
||||
addr_t const phys_addr = reinterpret_cast<addr_t>(phys_ptr);
|
||||
/* empty for now */
|
||||
_rom_fs.insert(new (core_mem_alloc()) Rom_module(phys_addr,
|
||||
get_page_size(),
|
||||
"platform_info"));
|
||||
}
|
||||
void * core_local_ptr = nullptr;
|
||||
void * phys_ptr = nullptr;
|
||||
unsigned const pages = 1;
|
||||
size_t const align = get_page_size_log2();
|
||||
size_t const size = pages << get_page_size_log2();
|
||||
|
||||
if (ram_alloc().alloc_aligned(size, &phys_ptr, align).error())
|
||||
return;
|
||||
if (region_alloc().alloc_aligned(size, &core_local_ptr, align).error())
|
||||
return;
|
||||
|
||||
addr_t const phys_addr = reinterpret_cast<addr_t>(phys_ptr);
|
||||
addr_t const core_local_addr = reinterpret_cast<addr_t>(core_local_ptr);
|
||||
|
||||
if (!map_local(phys_addr, core_local_addr, pages))
|
||||
return;
|
||||
|
||||
memset(core_local_ptr, 0, size);
|
||||
|
||||
Genode::Xml_generator xml(reinterpret_cast<char *>(core_local_addr),
|
||||
pages << get_page_size_log2(),
|
||||
"platform_info", [&] ()
|
||||
{
|
||||
xml.node("kernel", [&] () { xml.attribute("name", "foc"); });
|
||||
xml.node("hardware", [&] () {
|
||||
_setup_platform_info(xml, sigma0_map_kip());
|
||||
});
|
||||
});
|
||||
|
||||
_rom_fs.insert(new (core_mem_alloc()) Rom_module(phys_addr, size,
|
||||
"platform_info"));
|
||||
}
|
||||
|
||||
/* core log as ROM module */
|
||||
@@ -474,22 +506,74 @@ Platform::Platform() :
|
||||
void * core_local_ptr = nullptr;
|
||||
void * phys_ptr = nullptr;
|
||||
unsigned const pages = 1;
|
||||
size_t const log_size = pages << get_page_size_log2();
|
||||
size_t const align = get_page_size_log2();
|
||||
size_t const size = pages << get_page_size_log2();
|
||||
|
||||
if (ram_alloc().alloc_aligned(size, &phys_ptr, align).error())
|
||||
return;
|
||||
if (region_alloc().alloc_aligned(size, &core_local_ptr, align).error())
|
||||
return;
|
||||
|
||||
ram_alloc().alloc_aligned(log_size, &phys_ptr, get_page_size_log2());
|
||||
addr_t const phys_addr = reinterpret_cast<addr_t>(phys_ptr);
|
||||
|
||||
/* let one page free after the log buffer */
|
||||
region_alloc().alloc_aligned(log_size, &core_local_ptr, get_page_size_log2());
|
||||
addr_t const core_local_addr = reinterpret_cast<addr_t>(core_local_ptr);
|
||||
|
||||
map_local(phys_addr, core_local_addr, pages);
|
||||
memset(core_local_ptr, 0, log_size);
|
||||
if (!map_local(phys_addr, core_local_addr, pages))
|
||||
return;
|
||||
|
||||
_rom_fs.insert(new (core_mem_alloc()) Rom_module(phys_addr, log_size,
|
||||
memset(core_local_ptr, 0, size);
|
||||
|
||||
_rom_fs.insert(new (core_mem_alloc()) Rom_module(phys_addr, size,
|
||||
"core_log"));
|
||||
|
||||
init_core_log(Core_log_range { core_local_addr, log_size } );
|
||||
init_core_log(Core_log_range { core_local_addr, size } );
|
||||
}
|
||||
|
||||
Affinity::Space const cpus = affinity_space();
|
||||
for (unsigned cpu_id = 0; cpu_id < cpus.width(); cpu_id++)
|
||||
{
|
||||
struct Trace_source : public Trace::Source::Info_accessor,
|
||||
private Trace::Control,
|
||||
private Trace::Source
|
||||
{
|
||||
Affinity::Location const affinity;
|
||||
Genode::String<8> const name;
|
||||
|
||||
/**
|
||||
* Trace::Source::Info_accessor interface
|
||||
*/
|
||||
Info trace_source_info() const override
|
||||
{
|
||||
uint64_t ec_time = 0;
|
||||
uint64_t const sc_time = 0;
|
||||
|
||||
using namespace Fiasco;
|
||||
l4_sched_cpu_set_t const cpu = l4_sched_cpu_set(affinity.xpos(), 0);
|
||||
l4_msgtag_t const res = l4_scheduler_idle_time(L4_BASE_SCHEDULER_CAP,
|
||||
&cpu, &ec_time);
|
||||
if (l4_error(res))
|
||||
Genode::error("idle times for cpu ", affinity.xpos(),
|
||||
" are not available");
|
||||
|
||||
return { Session_label("kernel"), Trace::Thread_name(name),
|
||||
Trace::Execution_time(ec_time, sc_time), affinity };
|
||||
}
|
||||
|
||||
Trace_source(Trace::Source_registry ®istry,
|
||||
Affinity::Location const affinity,
|
||||
char const * type_name)
|
||||
:
|
||||
Trace::Control(),
|
||||
Trace::Source(*this, *this), affinity(affinity),
|
||||
name(type_name)
|
||||
{
|
||||
registry.insert(this);
|
||||
}
|
||||
};
|
||||
|
||||
new (core_mem_alloc()) Trace_source(Trace::sources(),
|
||||
Affinity::Location(cpu_id, 0,
|
||||
cpus.width(), 1),
|
||||
"idle");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,8 +72,13 @@ bool Platform_pd::bind_thread(Platform_thread &thread)
|
||||
/* if it's no core-thread we have to map parent and pager gate cap */
|
||||
if (!thread.core_thread()) {
|
||||
_task.map(_task.local.data()->kcap());
|
||||
// FIXME: there is no debug cap anymore
|
||||
// _debug.map(_task.local.data()->kcap());
|
||||
|
||||
/*
|
||||
* Set true low level debugging through the kernel debugger interface
|
||||
*/
|
||||
constexpr bool map_debug_cap = false;
|
||||
if (map_debug_cap)
|
||||
_debug.map(_task.local.data()->kcap());
|
||||
}
|
||||
|
||||
/* inform thread about binding */
|
||||
@@ -115,11 +120,12 @@ void Platform_pd::flush(addr_t, size_t size, Core_local_addr core_local)
|
||||
}
|
||||
|
||||
|
||||
static Core_cap_index * debug_cap()
|
||||
static Native_capability debug_cap()
|
||||
{
|
||||
unsigned long const id = platform_specific().cap_id_alloc().alloc();
|
||||
static Cap_index * idx = cap_map().insert(id, DEBUG_CAP);
|
||||
return reinterpret_cast<Core_cap_index*>(idx);
|
||||
static Native_capability debug_cap(reinterpret_cast<Core_cap_index*>(idx));
|
||||
return debug_cap;
|
||||
}
|
||||
|
||||
Platform_pd::Platform_pd(Core_cap_index &ci)
|
||||
|
||||
@@ -35,11 +35,11 @@ namespace Fiasco {
|
||||
using namespace Genode;
|
||||
using namespace Fiasco;
|
||||
|
||||
unsigned long long Platform_thread::execution_time() const
|
||||
Trace::Execution_time Platform_thread::execution_time() const
|
||||
{
|
||||
Fiasco::l4_kernel_clock_t us = 0;
|
||||
l4_thread_stats_time(_thread.local.data()->kcap(), &us);
|
||||
return (unsigned long long)us;
|
||||
return { us, 0, 10000 /* quantum readable ?*/, _prio };
|
||||
}
|
||||
|
||||
|
||||
@@ -356,3 +356,43 @@ Platform_thread::~Platform_thread()
|
||||
if (_platform_pd)
|
||||
_platform_pd->unbind_thread(*this);
|
||||
}
|
||||
|
||||
Fiasco::l4_cap_idx_t Platform_thread::setup_vcpu(unsigned const vcpu_id,
|
||||
Cap_mapping const &task_vcpu,
|
||||
Cap_mapping &vcpu_irq)
|
||||
{
|
||||
if (!_platform_pd)
|
||||
return Fiasco::L4_INVALID_CAP;
|
||||
if (vcpu_id >= (Platform::VCPU_VIRT_EXT_END - Platform::VCPU_VIRT_EXT_START) / L4_PAGESIZE)
|
||||
return Fiasco::L4_INVALID_CAP;
|
||||
|
||||
Genode::addr_t const vcpu_addr = Platform::VCPU_VIRT_EXT_START +
|
||||
L4_PAGESIZE * vcpu_id;
|
||||
l4_fpage_t vm_page = l4_fpage( vcpu_addr, L4_PAGESHIFT, L4_FPAGE_RW);
|
||||
|
||||
l4_msgtag_t msg = l4_task_add_ku_mem(_platform_pd->native_task().data()->kcap(), vm_page);
|
||||
if (l4_error(msg)) {
|
||||
Genode::error("ku_mem failed ", l4_error(msg));
|
||||
return Fiasco::L4_INVALID_CAP;
|
||||
}
|
||||
|
||||
msg = l4_thread_vcpu_control_ext(_thread.local.data()->kcap(), vcpu_addr);
|
||||
if (l4_error(msg)) {
|
||||
Genode::error("vcpu_control_exit failed ", l4_error(msg));
|
||||
return Fiasco::L4_INVALID_CAP;
|
||||
}
|
||||
|
||||
/* attach thread to irq */
|
||||
vcpu_irq.remote = _gate.remote + TASK_VCPU_IRQ_CAP;
|
||||
l4_msgtag_t tag = l4_rcv_ep_bind_thread(vcpu_irq.local.data()->kcap(),
|
||||
_thread.local.data()->kcap(), 0);
|
||||
if (l4_msgtag_has_error(tag))
|
||||
warning("attaching thread's irq failed");
|
||||
|
||||
vcpu_irq.map(_platform_pd->native_task().data()->kcap());
|
||||
|
||||
/* set human readable name in kernel debugger */
|
||||
Cap_mapping map(task_vcpu.local, _gate.remote + TASK_VCPU_CAP);
|
||||
map.map(_platform_pd->native_task().data()->kcap());
|
||||
return map.remote;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user