Compare commits
542 Commits
Author | SHA1 | Date |
---|---|---|
Ehmry - | c6f3dfc3ec | |
Ehmry - | 11ff9a1dc5 | |
Ehmry - | e0b84beafa | |
Ehmry - | da0c9da996 | |
Ehmry - | fa5b9a9002 | |
Ehmry - | 71e1a286e5 | |
Ehmry - | 196c340aa9 | |
Ehmry - | 200d82b4f5 | |
Ehmry - | 5d4e72c874 | |
Norman Feske | 7c4568fb5a | |
Ehmry - | b20ca5f254 | |
Ehmry - | 4287419392 | |
Ehmry - | 42f93ce3da | |
Ehmry - | 59caa85840 | |
Ehmry - | f902a21213 | |
Ehmry - | ee7773567a | |
Ehmry - | a1e84f0485 | |
Ehmry - | 9e1e1186dc | |
Ehmry - | 292bd3f579 | |
Ehmry - | 18c0e21996 | |
Ehmry - | e45088704c | |
Ehmry - | 8c8606b375 | |
Ehmry - | c812fdf629 | |
Ehmry - | 6463f84741 | |
Ehmry - | b8e25c82da | |
Ehmry - | 955e95272c | |
Ehmry - | 4235b5ab9b | |
Ehmry - | 97e01182ca | |
Ehmry - | 90c4d291b4 | |
Ehmry - | d8074773d1 | |
Ehmry - | 3fb87d9ea0 | |
Ehmry - | 969180525f | |
Ehmry - | bab7a572fe | |
Ehmry - | 32f8b603cb | |
Ehmry - | 94266a7bb0 | |
Ehmry - | 24deef9495 | |
Ehmry - | 54776f36eb | |
Ehmry - | 3dc909bb24 | |
Ehmry - | d650a7b0e0 | |
Ehmry - | 63c4974587 | |
Ehmry - | 0797619d29 | |
Ehmry - | 3d68a520cb | |
Ehmry - | dd07e99ef6 | |
Christian Helmuth | 8cf7aaad65 | |
Norman Feske | 25a8ef3b7c | |
Norman Feske | b18a56c2c4 | |
Christian Helmuth | 9d42e3f69b | |
Christian Helmuth | 11ef8e1ff2 | |
Christian Helmuth | 1deab4a67f | |
Christian Helmuth | f23c70e068 | |
Alexander Boettcher | f7c818d303 | |
Stefan Kalkowski | 7996cf06ab | |
Stefan Kalkowski | 4800bcf5a0 | |
Christian Prochaska | 4c74f4792c | |
Christian Prochaska | 57d080d4f8 | |
Alexander Boettcher | 2778debc29 | |
Martin Stein | 7182c10c90 | |
Christian Prochaska | 7309bcf4b5 | |
Sebastian Sumpf | 309bc2083e | |
Norman Feske | 6e098a9d17 | |
Norman Feske | 573b6d3345 | |
Norman Feske | 077fa355ce | |
Norman Feske | e76ce05844 | |
Norman Feske | 4622ddb46f | |
Stefan Kalkowski | 972e1893c9 | |
Stefan Kalkowski | af29dcf557 | |
Stefan Kalkowski | f82714f341 | |
Stefan Kalkowski | 02d68fdb97 | |
Stefan Kalkowski | 065b9fdb46 | |
Stefan Kalkowski | 18dbd75860 | |
Norman Feske | 3ac970ac1d | |
Norman Feske | 3aaed7188f | |
Norman Feske | ee64e29e77 | |
Norman Feske | cfba429c15 | |
Ehmry - | af9b91e94c | |
Josef Söntgen | 25aa25c6a0 | |
Josef Söntgen | 2afc02051c | |
Christian Helmuth | ce1b813105 | |
Christian Helmuth | 7ed1d7f11d | |
Norman Feske | 6ccd65bd8e | |
Norman Feske | 18b621c2fe | |
Alexander Boettcher | cb61a28362 | |
Norman Feske | 4d7d208940 | |
Sebastian Sumpf | f7509a5b78 | |
Christian Helmuth | a54c04d247 | |
Christian Helmuth | e70c04ef86 | |
Christian Helmuth | 6410e88698 | |
Christian Helmuth | a3cb9d9897 | |
Alexander Boettcher | b2a7ac2996 | |
Norman Feske | 5f350adb57 | |
Norman Feske | 1485cd9d24 | |
Norman Feske | 65d72fb07a | |
Norman Feske | 4871c7bba0 | |
Norman Feske | 97e2968986 | |
Norman Feske | eb9a9bf23d | |
Ehmry - | c51b4b5742 | |
Norman Feske | 9b7915facb | |
Norman Feske | f0de187bbb | |
Norman Feske | 539110c0b1 | |
Norman Feske | d7b1a89087 | |
Christian Helmuth | c50252fb35 | |
Christian Helmuth | 54002e6e6b | |
Sebastian Sumpf | 16994d637b | |
Martin Stein | b541a0d448 | |
Norman Feske | d4e0d2f578 | |
Norman Feske | fab2fc874f | |
Sebastian Sumpf | 54643d6878 | |
Sebastian Sumpf | 2653fad0c4 | |
Sebastian Sumpf | b752d22a77 | |
Sebastian Sumpf | ad12b42d1c | |
Sebastian Sumpf | c845a2d943 | |
Sebastian Sumpf | b7e06a0b5b | |
Sebastian Sumpf | 417dd59b22 | |
Sebastian Sumpf | 3024720656 | |
Sebastian Sumpf | f23eab735b | |
Sebastian Sumpf | 112c32eb54 | |
Sebastian Sumpf | 3103ce1fa8 | |
Sebastian Sumpf | db18fc42fe | |
Sebastian Sumpf | d28fe9e938 | |
Sebastian Sumpf | 31a035a907 | |
Norman Feske | 91412c6c52 | |
Norman Feske | 068324536c | |
Norman Feske | bb6eb0f6ea | |
Norman Feske | c1012e6a45 | |
Norman Feske | 23d21d77e9 | |
Norman Feske | 8c44b17e86 | |
Norman Feske | 636e0f6444 | |
Josef Söntgen | fafa409cf9 | |
Josef Söntgen | dbecceec09 | |
Josef Söntgen | 60f390ddf8 | |
Josef Söntgen | c79ebc93a2 | |
Josef Söntgen | 55ab694d79 | |
Josef Söntgen | f5c5479faa | |
Josef Söntgen | ba9b612c4f | |
Norman Feske | 7b0771659e | |
Norman Feske | e9762ee25f | |
Norman Feske | 7549189f88 | |
Oleg Girko | a5bc031cca | |
Oleg Girko | 5cd684997a | |
Christian Helmuth | 93d3a0848a | |
Christian Helmuth | f1b1dd26cf | |
Christian Helmuth | cd5e906bd0 | |
Oleg Girko | c589660182 | |
Stefan Kalkowski | 8a8aa85726 | |
Stefan Kalkowski | 105b2c9b7a | |
Stefan Kalkowski | f6435d91fc | |
Stefan Kalkowski | 3e3fb63863 | |
Oleg Girko | 4007cee852 | |
Christian Helmuth | b622a5a788 | |
Christian Helmuth | ec9e40695d | |
Martin Stein | 0ad0153626 | |
Martin Stein | cd37bff514 | |
Martin Stein | 27c2a66bbd | |
Martin Stein | 58247737fd | |
Martin Stein | ebcca179ed | |
Martin Stein | 60d37f690c | |
Martin Stein | 0ed5655086 | |
Stefan Kalkowski | 87a6368ba1 | |
Stefan Kalkowski | 1cbd77c806 | |
Stefan Kalkowski | e3f82b09d7 | |
Christian Helmuth | d4a3db22bd | |
Christian Helmuth | 43f28e0451 | |
Norman Feske | d516515c7a | |
Norman Feske | 7ac32ea60c | |
Christian Prochaska | 07a40d028a | |
Christian Prochaska | a47adecdcd | |
Christian Helmuth | 355d94f5df | |
Pirmin Duss | c0789a6c0e | |
Norman Feske | 530144b040 | |
Norman Feske | c85bc38802 | |
Norman Feske | a8dd7dd2fa | |
Norman Feske | 6e86d6d699 | |
Norman Feske | 2954abb58a | |
Norman Feske | 5bb366513b | |
Norman Feske | 4bcc75365c | |
Ehmry - | 288f79270d | |
Christian Prochaska | 3c62a33a25 | |
Piotr Tworek | 80a84bef26 | |
Johannes Kliemann | 022fac0d37 | |
Norman Feske | 5ab1505d43 | |
Alexander Boettcher | 1297a8fb57 | |
Christian Helmuth | 732215a83f | |
Christian Helmuth | e11addec7d | |
Christian Helmuth | 2166a4b17f | |
Christian Helmuth | 291587f545 | |
Christian Helmuth | 97df705e53 | |
Josef Söntgen | e281174dae | |
Alexander Boettcher | ed73feddc5 | |
Josef Söntgen | c5706e8f4a | |
Christian Helmuth | 1782c6be79 | |
Christian Helmuth | cccfd0719d | |
Christian Helmuth | edc9545229 | |
Christian Helmuth | cc611834c9 | |
Christian Helmuth | bbd27a54d3 | |
Christian Helmuth | 5a06751242 | |
Christian Helmuth | 6df8b44616 | |
Christian Helmuth | e0af9c2d8b | |
Christian Helmuth | 11a7ac0536 | |
Christian Prochaska | 5c25e0bdb0 | |
Norman Feske | 222f214341 | |
Norman Feske | eefe91ee41 | |
Norman Feske | 979d823d85 | |
Christian Helmuth | 76438a3f85 | |
Christian Helmuth | b0271ae5e1 | |
Norman Feske | 6a063364da | |
Josef Söntgen | 99b632f86c | |
Josef Söntgen | 180f9e6384 | |
Josef Söntgen | 94b63924ed | |
Josef Söntgen | d0bf6d2b52 | |
Josef Söntgen | 9a82bbb54d | |
Josef Söntgen | 400039e1b6 | |
Josef Söntgen | 2e5166efd7 | |
Josef Söntgen | 2ec3aaf639 | |
Norman Feske | ab5187d673 | |
Norman Feske | 697d496093 | |
Norman Feske | a17c5e30b7 | |
Christian Helmuth | 8d6285927b | |
Norman Feske | 90a91f3536 | |
Norman Feske | c8b7710e5d | |
Norman Feske | 59c60b8031 | |
Norman Feske | 9500e8b6e1 | |
Norman Feske | e0ee56275e | |
Norman Feske | 418ac4c560 | |
Norman Feske | 5f5d709c07 | |
Norman Feske | 89a38723bd | |
Norman Feske | 648bcd1505 | |
Norman Feske | bf92232698 | |
Ehmry - | c6c7870a29 | |
Ehmry - | 0b427b65aa | |
Ehmry - | c2a543ed20 | |
Ehmry - | 1dc25293b8 | |
Ehmry - | 3bf1cc09eb | |
Ehmry - | fa0c527732 | |
Ehmry - | 29613c217b | |
Ehmry - | be04cfe899 | |
Ehmry - | f037044ec5 | |
Ehmry - | ecd0252b40 | |
Ehmry - | 4921168eda | |
Ehmry - | af52274972 | |
Ehmry - | f931ce2e19 | |
Ehmry - | ac8fb6702a | |
Ehmry - | c67d81dc99 | |
Ehmry - | 3c8117e555 | |
Ehmry - | a7a0d3fe63 | |
Ehmry - | d348e96b84 | |
Ehmry - | 5e87eee9b8 | |
Ehmry - | 6e9f9ce3a8 | |
Ehmry - | a83ffd4821 | |
Ehmry - | d07ff84f5c | |
Ehmry - | 790b82a88d | |
Ehmry - | 65d7eff10f | |
Ehmry - | 228bb4f189 | |
Ehmry - | d0865d365c | |
Ehmry - | 2d7dff54ec | |
Ehmry - | 5587f0992b | |
Ehmry - | 7d7659635c | |
Ehmry - | 5682ad8e2b | |
Ehmry - | 7d384bc3e6 | |
Ehmry - | 5a8686eaf9 | |
Ehmry - | 4e94dd4265 | |
Ehmry - | a7f4384b12 | |
Ehmry - | 02365c171e | |
Ehmry - | 075ab46d39 | |
Ehmry - | d52f74c7c2 | |
Ehmry - | 44f2c86a91 | |
Ehmry - | f42e7f1ff4 | |
Ehmry - | b50d28c3e4 | |
Ehmry - | d557624469 | |
Ehmry - | 221320af47 | |
Ehmry - | 2d60fc9f65 | |
Ehmry - | c39507e591 | |
Ehmry - | 77873c7808 | |
Ehmry - | 855a9375ac | |
Ehmry - | f6553d2872 | |
Ehmry - | 54480c1c3d | |
Ehmry - | 2509d95d98 | |
Ehmry - | e3c285ac0c | |
Ehmry - | ca98ac2a0f | |
Ehmry - | a3241becf0 | |
Ehmry - | 8979b7ffbb | |
Ehmry - | b7c63e38f7 | |
Ehmry - | 28eb528148 | |
Ehmry - | 24f4608ce7 | |
Ehmry - | 852651b3f2 | |
Ehmry - | 69ca5b133b | |
Ehmry - | e46099e224 | |
Ehmry - | c770a8b9ec | |
Ehmry - | 2dc6ea2042 | |
Ehmry - | 30700e179a | |
Ehmry - | 829b629a0c | |
Ehmry - | 59ab4ef6bc | |
Ehmry - | 4952b37e4c | |
Norman Feske | aec1178ab1 | |
Norman Feske | efe7f5172d | |
Norman Feske | 0aedabd245 | |
Christian Helmuth | 4a7b0e99a6 | |
Norman Feske | 614f7fa56a | |
Norman Feske | 6d230134cb | |
Pirmin Duss | d953030c0e | |
Alexander Boettcher | 6fe80c3cc7 | |
Christian Prochaska | afa0e26a6a | |
Christian Prochaska | 1d3bbde70a | |
Alexander Boettcher | 6f0c6501f2 | |
Christian Helmuth | e448022f23 | |
Christian Helmuth | 664d858e63 | |
Christian Helmuth | ede009edf9 | |
Christian Helmuth | 08aa7d310a | |
Christian Helmuth | 19bf0fdeb8 | |
Ehmry - | 36111a2edf | |
Christian Prochaska | ab017607a2 | |
Christian Helmuth | 2c47cd5c94 | |
Norman Feske | 44ce1b37c1 | |
Norman Feske | 9a52a93c24 | |
Christian Helmuth | b2c59576ae | |
Norman Feske | 7f8fe00cdc | |
Norman Feske | c0e8336e98 | |
Norman Feske | 155e214a69 | |
Christian Helmuth | 4911acedf5 | |
Christian Helmuth | 01bd87e90b | |
Christian Prochaska | 65f402807f | |
Christian Prochaska | d00cfd7cff | |
Christian Helmuth | 701b1d41e8 | |
Sebastian Sumpf | 8ae5c906d0 | |
Christian Helmuth | 43a8118d2e | |
Christian Helmuth | ca850c787f | |
Christian Helmuth | 4491c070be | |
Christian Helmuth | a97b8043b5 | |
Christian Helmuth | 4967166811 | |
Martin Stein | cc2828cf3a | |
Norman Feske | 1dd68ce04b | |
Norman Feske | 23f3112e3e | |
Norman Feske | 6894ced63b | |
Alexander Senier | 2a3cebdd6e | |
Norman Feske | 66d5359d75 | |
Norman Feske | fa48054959 | |
Norman Feske | 808ff3714e | |
Norman Feske | a98f78afd9 | |
Sebastian Sumpf | 4c14af4d8a | |
Norman Feske | 817ff6ca68 | |
Norman Feske | 3c6fe6e741 | |
Norman Feske | bb5827b4e3 | |
Norman Feske | 581785a48f | |
Norman Feske | 65f75589e9 | |
Norman Feske | 6e38b53001 | |
Norman Feske | 354e310c87 | |
Norman Feske | 2cff12e1fb | |
Norman Feske | 55e99e16ef | |
Norman Feske | e499a04de7 | |
Norman Feske | abdf422681 | |
Norman Feske | fd8a209da2 | |
Sebastian Sumpf | 15b27a1e9d | |
Norman Feske | b113f869bb | |
Norman Feske | 6fb7022508 | |
Norman Feske | cc437a5eca | |
Christian Helmuth | 312f801f8a | |
Sebastian Sumpf | 8509687c8d | |
Martin Stein | ce633c0bba | |
Sebastian Sumpf | 2fc6cedcc0 | |
Christian Helmuth | 468270f6e9 | |
Alexander Boettcher | 32323abe8e | |
Martin Stein | 1113c4f6a2 | |
Sebastian Sumpf | e855638266 | |
Sebastian Sumpf | f3a7d3750f | |
Johannes Kliemann | 1bdd18a196 | |
Christian Helmuth | 0c20bb6ab9 | |
Christian Helmuth | d01cc3bf41 | |
Josef Söntgen | 9cf5da85ef | |
Josef Söntgen | 316f9e4df3 | |
Josef Söntgen | 18e586daed | |
Christian Helmuth | 1fdd5b636b | |
Christian Helmuth | b8ed80b7dd | |
Martin Stein | cb6377355e | |
Martin Stein | 322bacd380 | |
Josef Söntgen | 99cb585b6e | |
Christian Helmuth | 0037edfeee | |
Josef Söntgen | a7fe4a502d | |
Josef Söntgen | ea2b330158 | |
Josef Söntgen | 86cacd23bb | |
Christian Prochaska | 85b1563e57 | |
Christian Prochaska | 35c724512d | |
Norman Feske | ff07654560 | |
Norman Feske | 695a212877 | |
Norman Feske | 686dd8affd | |
Christian Prochaska | 3acb509b9e | |
Norman Feske | 874172ca76 | |
Norman Feske | 114de7721f | |
Norman Feske | ceae637416 | |
Norman Feske | 23c2606ce0 | |
Norman Feske | 67a3c2ea4b | |
Norman Feske | 2d03e622f1 | |
Christian Prochaska | b9f0318ab8 | |
Christian Helmuth | 08ac64bba9 | |
Stefan Thöni | f018dac506 | |
Christian Helmuth | 607fe83c63 | |
Christian Prochaska | f73c63900f | |
Christian Prochaska | 2fad5eff95 | |
Christian Prochaska | 1f56ffa51a | |
Christian Helmuth | ce149397ec | |
Christian Helmuth | a7835650e8 | |
Christian Helmuth | 83ead086a1 | |
Christian Prochaska | 91c8e70bef | |
Christian Prochaska | 38dcdeeb04 | |
Christian Helmuth | 1c77ea2b03 | |
Christian Helmuth | 82d50912f6 | |
Christian Prochaska | 4c113182b0 | |
Stefan Kalkowski | 7ced122ddc | |
Stefan Kalkowski | 6b09ac59f0 | |
Stefan Kalkowski | ee38504d81 | |
Sebastian Sumpf | dd505edd19 | |
Stefan Kalkowski | fa1aa33f83 | |
Stefan Kalkowski | 907de9d37f | |
Stefan Kalkowski | 5c7436bf10 | |
Stefan Kalkowski | 0b77e8ea62 | |
Stefan Kalkowski | 875858b2cc | |
Martin Stein | fe426e6f8f | |
Martin Stein | 1e379cb3a9 | |
Martin Stein | ead385dd17 | |
Martin Stein | b87e21a392 | |
Christian Prochaska | 04e8ba716c | |
Christian Prochaska | 193a401097 | |
Alexander Boettcher | 53a83fb76e | |
Josef Söntgen | 47e6d72bf2 | |
Josef Söntgen | 91ce57848c | |
Martin Stein | 22d7871e1d | |
Tomasz Gajewski | 4189157d10 | |
Sid Hussmann | eaefcc2c6f | |
Christian Helmuth | 92bdcbf1fe | |
Norman Feske | c011d54158 | |
Norman Feske | d782499541 | |
Norman Feske | 59f9af23b9 | |
Norman Feske | 70a236cccd | |
Norman Feske | d33bef2e49 | |
Christian Helmuth | fbae7767b4 | |
Christian Helmuth | 17d32b3e15 | |
Norman Feske | 6380ad1c80 | |
Norman Feske | 0c3d3e7c8f | |
Norman Feske | 3b0d694f42 | |
Norman Feske | c7e79030dd | |
Norman Feske | 58a0f5c30b | |
Norman Feske | c92a9ce591 | |
Norman Feske | 605f9abf96 | |
Norman Feske | e4412a3e56 | |
Norman Feske | 1fe9b07c99 | |
Norman Feske | 2da604a6e2 | |
Norman Feske | fc7b983a40 | |
Norman Feske | 6399fc12ac | |
Norman Feske | db6e013577 | |
Christian Prochaska | 71ce1442c8 | |
Christian Prochaska | 5dd1abcc2d | |
Christian Prochaska | 4dafdbd5b7 | |
Christian Helmuth | 949130d80e | |
Josef Söntgen | 4c8369ab1b | |
Christian Helmuth | fcdad00044 | |
Norman Feske | 417191bdbd | |
Norman Feske | c00666b7e8 | |
Norman Feske | 854a154fb4 | |
Norman Feske | 7e7eff0eb7 | |
Norman Feske | 48a361107f | |
Norman Feske | 716453aaa1 | |
Christian Helmuth | 63e69d35e0 | |
Christian Helmuth | a0c71cffd4 | |
Norman Feske | d1da5b9e16 | |
Norman Feske | 52ec4526e1 | |
Martin Stein | e199acca05 | |
Christian Helmuth | cea842b256 | |
Josef Söntgen | 984bddcedd | |
Josef Söntgen | d32e8390c2 | |
Sebastian Sumpf | 57e650ef2c | |
Sebastian Sumpf | c34176580c | |
Ehmry - | 807f5d9af1 | |
Norman Feske | d18f8eea2b | |
Christian Helmuth | 8d62f21b40 | |
Norman Feske | 7b1e3a9d63 | |
Norman Feske | 070a24956d | |
Norman Feske | dec2d897c3 | |
Norman Feske | 8625146011 | |
Sebastian Sumpf | 24eea0b653 | |
Sebastian Sumpf | 18b3253cac | |
Sebastian Sumpf | 25484f870e | |
Sebastian Sumpf | ac0ecdf855 | |
Sebastian Sumpf | 399487c85d | |
Alexander Boettcher | bc14a32998 | |
Christian Helmuth | cf2c9f8d88 | |
Stefan Kalkowski | 186c35bb09 | |
Sebastian Sumpf | 3a2de0d9a3 | |
Sebastian Sumpf | 1b489820a9 | |
Sebastian Sumpf | ef8140cce5 | |
Sebastian Sumpf | 790a57041c | |
Sebastian Sumpf | e43b848ac8 | |
Sebastian Sumpf | 59347d2560 | |
Sebastian Sumpf | 2b14284e2b | |
Sebastian Sumpf | c107aba913 | |
Sebastian Sumpf | e337b844e5 | |
Stefan Kalkowski | 90d07741aa | |
Stefan Kalkowski | 87015df66c | |
Stefan Kalkowski | d9a0f76e7a | |
Tomasz Gajewski | 0ecc48e6de | |
Christian Helmuth | efe0887247 | |
Christian Helmuth | 3c4c460f82 | |
Christian Helmuth | ab3efc0a33 | |
Christian Helmuth | e1e67d8330 | |
Christian Helmuth | de4c31e557 | |
Martin Stein | 5a59d295a4 | |
Martin Stein | fe5ada85cb | |
Johannes Kliemann | b55358c535 | |
Christian Helmuth | 1b059649ff | |
Christian Helmuth | 45f3ccc42a | |
Christian Helmuth | 4d34f9f9f4 | |
Christian Prochaska | 62232f9a35 | |
Alexander Boettcher | a25c656b1a | |
Christian Helmuth | ed0d76552b | |
Ehmry - | 43315444a8 | |
Alexander Boettcher | c055986e38 | |
Alexander Boettcher | 7ec37b2d8d | |
Alexander Boettcher | 64fac6cee7 | |
Ehmry - | 12127a7bd2 | |
Josef Söntgen | eaed28f68d | |
Tomasz Gajewski | 4a102fb58c | |
Christian Helmuth | ae7fbd6b1a | |
Christian Helmuth | 72478a9e31 | |
Stefan Kalkowski | 811410fdbb | |
Christian Helmuth | 5738e53be2 | |
Christian Helmuth | be4d8b24e2 | |
Christian Helmuth | 1f77f37310 | |
Norman Feske | 7e174e73be | |
Ehmry - | ff23d665c6 | |
Christian Helmuth | 00daecf838 | |
Christian Helmuth | f8f9f710e5 | |
Alexander Boettcher | e77362e7b9 | |
Alexander Boettcher | c58acbd444 | |
Alexander Boettcher | e2c1ce2add | |
Alexander Boettcher | fc1b7a626c | |
Christian Prochaska | a7825ef292 | |
Christian Prochaska | 8dd391371c | |
Josef Söntgen | 737e9580b8 | |
Josef Söntgen | a2abc13425 | |
Josef Söntgen | 1daf179db9 | |
Josef Söntgen | 6b48a08697 | |
Ehmry - | dc8a2ec523 | |
Christian Prochaska | 46f89d143b | |
Ehmry - | 8a4adceaf0 | |
Ehmry - | bbf7a6230e |
|
@ -2,10 +2,21 @@
|
|||
*.orig
|
||||
*.swp
|
||||
*.rej
|
||||
result
|
||||
result-*
|
||||
|
||||
/build
|
||||
/contrib
|
||||
/depot
|
||||
/public
|
||||
/repos/world
|
||||
|
||||
/.tup
|
||||
/build-*
|
||||
/configs
|
||||
##### TUP GITIGNORE #####
|
||||
##### Lines below automatically generated by Tup.
|
||||
##### Do not edit.
|
||||
.tup
|
||||
/.gitignore
|
||||
/dev
|
||||
/out
|
||||
|
|
|
@ -1,16 +1,29 @@
|
|||
**FORK AHEAD**
|
||||
|
||||
=================================
|
||||
Genode Operating System Framework
|
||||
=================================
|
||||
This a fork of the Genode OS reference implementation with a replacement
|
||||
build system that is humane and interoperable.
|
||||
|
||||
Changes against [Genode Labs](https://genode-labs.com/) master may be
|
||||
reviewed with the following commands:
|
||||
|
||||
```sh
|
||||
git remote add genodelabs https://github.com/genodelabs/genode.git
|
||||
git fetch genodelabs
|
||||
git diff genodelabs/master
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Genode Operating System Framework
|
||||
|
||||
This is the source tree of the reference implementation of the Genode OS
|
||||
architecture. For a general overview about the architecture, please refer to
|
||||
the project's official website:
|
||||
|
||||
:Official project website for the Genode OS Framework:
|
||||
### Official project website for the Genode OS Framework
|
||||
|
||||
https://genode.org/documentation/general-overview
|
||||
|
||||
[https://genode.org/documentation/general-overview]
|
||||
|
||||
The current implementation can be compiled for 8 different kernels: Linux,
|
||||
L4ka::Pistachio, L4/Fiasco, OKL4, NOVA, Fiasco.OC, seL4, and a custom
|
||||
|
@ -33,15 +46,14 @@ the kernel that fits best with the requirements at hand for the particular
|
|||
usage scenario.
|
||||
|
||||
|
||||
Documentation
|
||||
#############
|
||||
## Documentation
|
||||
|
||||
The primary documentation is the book "Genode Foundations", which is available
|
||||
on the front page of Genode website:
|
||||
|
||||
:Download the book "Genode Foundations":
|
||||
### Download the book "Genode Foundations"
|
||||
|
||||
[https://genode.org]
|
||||
https://genode.org
|
||||
|
||||
The book describes Genode in a holistic and comprehensive way. It equips you
|
||||
with a thorough understanding of the architecture, assists developers with the
|
||||
|
@ -53,79 +65,75 @@ The project has a quarterly release cycle. Each version is accompanied with
|
|||
detailed release documentation, which is available at the documentation
|
||||
section of the project website:
|
||||
|
||||
:Release documentation:
|
||||
### Release documentation
|
||||
|
||||
[https://genode.org/documentation/release-notes/]
|
||||
https://genode.org/documentation/release-notes/
|
||||
|
||||
|
||||
Directory overview
|
||||
##################
|
||||
## Directory overview
|
||||
|
||||
The source tree is composed of the following subdirectories:
|
||||
|
||||
:'doc':
|
||||
### 'doc'
|
||||
|
||||
This directory contains general documentation. Please consider the following
|
||||
document for a quick guide to get started with the framework:
|
||||
|
||||
! doc/getting_started.txt
|
||||
[doc/getting_started.txt](doc/getting_started.txt)
|
||||
|
||||
If you are curious about the ready-to-use components that come with the
|
||||
framework, please review the components overview:
|
||||
|
||||
! doc/components.txt
|
||||
[doc/components.txt](doc/components.txt)
|
||||
|
||||
:'repos':
|
||||
### 'repos':
|
||||
|
||||
This directory contains the so-called source-code repositories of Genode.
|
||||
Please refer to the README file in the 'repos' directory to learn more
|
||||
about the roles of the individual repositories.
|
||||
|
||||
:'tool':
|
||||
### 'tool'
|
||||
|
||||
Source-code management tools and scripts. Please refer to the README file
|
||||
contained in the directory.
|
||||
|
||||
:'depot' and 'public':
|
||||
### 'depot' and 'public'
|
||||
|
||||
Local depot and public archive of Genode packages. Please refer to
|
||||
|
||||
! doc/depot.txt
|
||||
[doc/depot.txt](doc/depot.txt)
|
||||
|
||||
for more details.
|
||||
|
||||
|
||||
Additional community-maintained components
|
||||
##########################################
|
||||
## Additional community-maintained components
|
||||
|
||||
The components found within the main source tree are complemented by a growing
|
||||
library of additional software, which can be seamlessly integrated into Genode
|
||||
system scenarios.
|
||||
|
||||
:Genode-world repository:
|
||||
### Genode-world repository
|
||||
|
||||
[https://github.com/genodelabs/genode-world]
|
||||
https://github.com/genodelabs/genode-world
|
||||
|
||||
|
||||
Contact
|
||||
#######
|
||||
## Contact
|
||||
|
||||
The best way to get in touch with Genode developers and users is the project's
|
||||
mailing list. Please feel welcome to join in!
|
||||
|
||||
:Genode Mailing Lists:
|
||||
### Genode Mailing Lists
|
||||
|
||||
[https://genode.org/community/mailing-lists]
|
||||
https://genode.org/community/mailing-lists
|
||||
|
||||
|
||||
Commercial support
|
||||
##################
|
||||
## Commercial support
|
||||
|
||||
The driving force behind the Genode OS Framework is the German company Genode
|
||||
Labs. The company offers commercial licensing, trainings, support, and
|
||||
contracted development work:
|
||||
|
||||
:Genode Labs website:
|
||||
### Genode Labs website
|
||||
|
||||
[https://www.genode-labs.com]
|
||||
https://www.genode-labs.com
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
TOOLCHAIN_CONFIGURED=$(TOOLCHAIN_CONFIGURED)X
|
||||
|
||||
ifeq (@(TUP_ARCH),i386)
|
||||
CC_MARCH = -march=i686 -m32
|
||||
LD_MARCH = -melf_i386
|
||||
AS_MARCH = -march=i686 --32
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),x86_64)
|
||||
CC_MARCH = -m64 -mcmodel=large
|
||||
LD_MARCH = -melf_x86_64
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),arm_v8)
|
||||
CC_MARCH = -march=armv8-a
|
||||
endif
|
||||
|
||||
ifdef CXXFLAGS
|
||||
CXXFLAGS = @(CXXFLAGS)
|
||||
endif
|
||||
|
||||
CXXFLAGS += -Wno-error=implicit-fallthrough
|
||||
CXXFLAGS += -Wno-error=unknown-pragmas
|
||||
CXXFLAGS += -Wextra
|
||||
CXXFLAGS += -Weffc++
|
||||
CXXFLAGS += -Werror
|
||||
CXXFLAGS += -Wsuggest-override
|
||||
CXXFLAGS += -Wno-unknown-pragmas
|
||||
|
||||
LIBGCC = `$(CXX) $(CC_MARCH) -print-libgcc-file-name`
|
||||
|
||||
!ir = | $(DEV_DIR)/<pkg-config> |> clang $(OLEVEL) $(CXXFLAGS) $(CXXFLAGS_%e) $(CXXFLAGS_%f) `$(PKG_CONFIG) --cflags $(LIBS)` $(CPPFLAGS) -S -emit-llvm %f |> %B.ll
|
||||
|
||||
!asm = |> ^ CC %b^ @(CC_WRAPPER) $(CC) $(OLEVEL) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) -D__ASSEMBLY__ $(CPPFLAGS) -c %f -o %o |> %B.o
|
||||
|
||||
!cc = | $(DEV_DIR)/<pkg-config> |> ^o CC %f^ @(CC_WRAPPER) $(CC) $(OLEVEL) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) $(CPPFLAGS) `$(PKG_CONFIG) --cflags $(LIBS) $(LIBS_CFLAGS)` -c -fPIC %f -o %o |> %B.o
|
||||
|
||||
!cxx = | $(DEV_DIR)/<pkg-config> |> ^o CXX %b^ @(CC_WRAPPER) $(CXX) $(OLEVEL) $(CXXFLAGS) $(CXXFLAGS_%e) $(CXXFLAGS_%f) $(CPPFLAGS) `$(PKG_CONFIG) --cflags $(LIBS)` -c -fPIC %f -o %o |> %B.o
|
||||
|
||||
!ld = | $(DEV_DIR)/<lib> $(DEV_DIR)/<pkg-config> |> ^o LD %o^ $(LD) -o %o $(LDFLAGS) `$(PKG_CONFIG) --libs $(LIBS)` %f |>
|
||||
|
||||
!incbin = |> ^ incbin %f^ \
|
||||
export SYM=_binary_`echo %b | sed 's/\./_/g'`; \
|
||||
echo ".global ${SYM}_start, ${SYM}_end; .data; .align 4; ${SYM}_start:; .incbin \"%f\"; ${SYM}_end:" \
|
||||
| x86_64-unknown-genode-as $(AS_MARCH) -o %o - \
|
||||
|> binary_%b.o
|
|
@ -0,0 +1,40 @@
|
|||
TOOLCHAIN_CONFIGURED=$(TOOLCHAIN_CONFIGURED)X
|
||||
|
||||
ifeq (@(TUP_ARCH),i386)
|
||||
CC_MARCH = -march=i686 -m32
|
||||
LD_MARCH = -melf_i386
|
||||
AS_MARCH = -march=i686 --32
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),x86_64)
|
||||
CC_MARCH = -m64 -mcmodel=large
|
||||
LD_MARCH = -melf_x86_64
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),arm_v8)
|
||||
CC_MARCH = -march=armv8-a
|
||||
endif
|
||||
|
||||
ifdef CXXFLAGS
|
||||
CXXFLAGS = @(CXXFLAGS)
|
||||
endif
|
||||
|
||||
CXXFLAGS += -Wno-undefined-bool-conversion -Wno-unknown-attributes -Wsystem-headers -Werror -Wno-uninitialized -Wno-mismatched-tags
|
||||
|
||||
LIBGCC = `$(CC) $(CC_MARCH) -print-libgcc-file-name`
|
||||
|
||||
!ir = | $(DEV_DIR)/<pkg-config> |> clang $(OLEVEL) $(CXXFLAGS) $(CXXFLAGS_%e) $(CXXFLAGS_%f) `$(PKG_CONFIG) --cflags $(LIBS)` $(CPPFLAGS) -S -emit-llvm %f |> %B.ll
|
||||
|
||||
!asm = |> ^ CC %b^ @(CC_WRAPPER) $(CC) $(OLEVEL) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) -D__ASSEMBLY__ $(CPPFLAGS) -c %f -o %o |> %B.o
|
||||
|
||||
!cc = | $(DEV_DIR)/<pkg-config> |> ^o CC %f^ @(CC_WRAPPER) $(CC) $(OLEVEL) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) $(CPPFLAGS) `$(PKG_CONFIG) --cflags $(LIBS) $(LIBS_CFLAGS)` -c -fPIC %f -o %o |> %B.o
|
||||
|
||||
!cxx = | $(DEV_DIR)/<pkg-config> |> ^o CXX %b^ @(CC_WRAPPER) $(CXX) $(OLEVEL) $(CXXFLAGS) $(CXXFLAGS_%e) $(CXXFLAGS_%f) $(CPPFLAGS) `$(PKG_CONFIG) --cflags $(LIBS)` -c -fPIC %f -o %o |> %B.o
|
||||
|
||||
!ld = | $(DEV_DIR)/<lib> $(DEV_DIR)/<pkg-config> |> ^o LD %o^ $(LD) $(LDFLAGS) `$(PKG_CONFIG) --libs $(LIBS)` --whole-archive --start-group %f --no-whole-archive --end-group -o %o |>
|
||||
|
||||
!incbin = |> ^ incbin %f^ \
|
||||
export SYM=_binary_`echo %b | sed 's/\./_/g'`; \
|
||||
echo ".global ${SYM}_start, ${SYM}_end; .data; .align 4; ${SYM}_start:; .incbin \"%f\"; ${SYM}_end:" \
|
||||
| llvm-mc -filetype=obj - > %o \
|
||||
|> binary_%b.o
|
|
@ -0,0 +1,103 @@
|
|||
.gitignore
|
||||
|
||||
AR = @(AR)
|
||||
AS = @(AS)
|
||||
CC = @(CC)
|
||||
CXX = @(CXX)
|
||||
LD= @(LD)
|
||||
OBJCOPY = @(OBJCOPY)
|
||||
STRIP = @(STRIP)
|
||||
|
||||
OUT_DIR=$(TUP_CWD)/out
|
||||
DEV_DIR = $(TUP_CWD)/dev
|
||||
DEV_LIB_DIR = $(DEV_DIR)/lib
|
||||
|
||||
ifdef IS_GCC
|
||||
include Tuprules.gcc
|
||||
endif
|
||||
|
||||
ifdef IS_LLVM
|
||||
include Tuprules.llvm
|
||||
endif
|
||||
|
||||
ifeq ($(TOOLCHAIN_CONFIGURED),)
|
||||
error no toolchain configuration is active
|
||||
endif
|
||||
|
||||
ifneq ($(TOOLCHAIN_CONFIGURED),X)
|
||||
error "multiple toolchain configurations are active "
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),i386)
|
||||
X86 = y
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),x86_64)
|
||||
X86 = y
|
||||
endif
|
||||
|
||||
GENODE_DIR = $(TUP_CWD)
|
||||
|
||||
!prg = | $(DEV_DIR)/<lib> $(DEV_DIR)/<pkg-config> \
|
||||
|> ^o LD %o^ $(LD) -o %o $(LD_MARCH) $(LDFLAGS) -L$(DEV_LIB_DIR) %f `$(PKG_CONFIG) --libs $(LIBS) genode-prg` $(LIBGCC) |> %d
|
||||
|
||||
!lib = | $(DEV_DIR)/<lib> $(DEV_DIR)/<pkg-config> |> ^o LD %o^ $(LD) $(LD_MARCH) %f $(LDFLAGS) `$(PKG_CONFIG) --libs genode-lib $(LIBS)` -L$(DEV_LIB_DIR) -o %o |> %d.lib.so
|
||||
|
||||
!collect_bin = |> ^ COLLECT %b^ \
|
||||
$(STRIP) -o %o %f \
|
||||
|> $(OUT_DIR)/bin/%b $(OUT_DIR)/<bin>
|
||||
|
||||
!collect_shared = |> ^ COLLECT %b^ \
|
||||
cp %f %o \
|
||||
|> $(OUT_DIR)/lib/%b $(OUT_DIR)/<lib>
|
||||
|
||||
!collect_static = |> ^ COLLECT %b^ \
|
||||
cp %f %o \
|
||||
|> $(DEV_LIB_DIR)/%b \
|
||||
$(DEV_DIR)/<lib> \
|
||||
|
||||
PKG_CONFIG_DIR = $(DEV_DIR)/lib/pkgconfig
|
||||
|
||||
ifdef NIX_OUTPUTS_DEV
|
||||
export PKG_CONFIG_PATH
|
||||
PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_DIR):$PKG_CONFIG_PATH @(PKGCONFIG)
|
||||
else
|
||||
PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_DIR) @(PKGCONFIG)
|
||||
endif
|
||||
|
||||
CFLAGS += -g
|
||||
CXXFLAGS += -g
|
||||
|
||||
ifdef OLEVEL
|
||||
OLEVEL = @(OLEVEL)
|
||||
else
|
||||
OLEVEL = -O2
|
||||
endif
|
||||
|
||||
!strip = |> $(STRIP) -o %o %f |>
|
||||
|
||||
!ln = |> ln -s %f %o |>
|
||||
|
||||
!ar = |> $(AR) -rcs %o %f |> %d.a
|
||||
|
||||
GIT_VERSION = `git describe || echo @(VERSION)`
|
||||
|
||||
SED_PKGCONFIG_FLAGS += -e "s|@VERSION@|$(GIT_VERSION)|"
|
||||
|
||||
!sed_pkgconfig_file = |> ^o SED %B^ \
|
||||
sed $(SED_PKGCONFIG_FLAGS) $(SED_FLAGS) < %f > %o; \
|
||||
$(PKG_CONFIG) --validate %o; \
|
||||
|> $(PKG_CONFIG_DIR)/%B $(DEV_DIR)/<pkg-config>
|
||||
|
||||
!sed_pkgconfig_flags = |> ^o SED %d.pc^ \
|
||||
sed $(SED_PKGCONFIG_FLAGS) $(SED_FLAGS) > %o; \
|
||||
$(PKG_CONFIG) --validate %o; \
|
||||
|> $(PKG_CONFIG_DIR)/%d.pc $(DEV_DIR)/<pkg-config>
|
||||
|
||||
!emit_lib_pkg_config = |> ^ emit %d.a pkg-config^ \
|
||||
echo Name: %d >> %o; \
|
||||
echo Description: Genode %d library >> %o; \
|
||||
echo Version: $(GIT_VERSION) >> %o; \
|
||||
echo Libs: -l:%d.a >> %o; \
|
||||
$(PKG_CONFIG) --validate %o; \
|
||||
|> $(PKG_CONFIG_DIR)/%d.pc $(DEV_DIR)/<pkg-config>
|
|
@ -1 +1 @@
|
|||
https://depot.fuzzlabs.org
|
||||
https://depot.1337.cx
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
https://depot.genode.org
|
|
@ -0,0 +1,51 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBFuhfGYBEADOj0EW/U2O3koeGIuNGDuBDSzkYjncoBrrPN1z69hgK349xiP7
|
||||
ZwrPBA0kJ3ctLcRQcOEDF5XJzjByuNk3JV6MuKFqwy2i9dDTHkv5pv7Na/R3L2CM
|
||||
k79weVahjPllt9nnbSMMtYH0eL187EhLW9owd0CY9wDj1lhLISHpyKvb9vwiUAwQ
|
||||
i+xypGgU+Qvf8BmfTDdjfP0n+Iw31z+R3xiHhWmhrs9gID2XVtGZIy9NQQrijJYS
|
||||
1Hp8hjgH9Fzmj0GkxUI+2mEqLeEp6wBmmo+7PRzc+iRYJNocyRxDbmdE0eyh3P93
|
||||
QABzZiWTU+Feq0MYa1FK55uFCFHe6MSFLq33CGYMzQ9oFQHjuEX1KqJT/OoumPgN
|
||||
iEb8Bt3XmqiI8GejafLKIW8gO8tYLABdrEpFelnyXy12IIOpOwb8GrxFUEu8+bDb
|
||||
Fc0YkV7cZ4NH2Kq/6/Or30gCA2XUpqhDNSxA6jer35a3ZzvgXvcRkNR/oOt+qt/3
|
||||
u9ew+e6Xjque0PRWzdavVlKdYWzSV8umVw5DGgQj/rSn+8spog/5w1lElyUa/5Yx
|
||||
Z+1bvOIyXPg+tTLimWtGRZQorak1sMsLMDqQck9SwOQWpSmVGsJ14uWXSMaZjdj9
|
||||
4rHSSymYlcQWP8t9lfPf6/ZSH8574PbbJSe71UXcWWznSGprSt2QQAQ7NwARAQAB
|
||||
tCtNYXJ0aW4gU3RlaW4gPG1hcnRpbi5zdGVpbkBnZW5vZGUtbGFicy5jb20+iQI+
|
||||
BBMBAgAoBQJboXxmAhsDBQkDwmcABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
|
||||
CRDJZVRAR8NPkiTSD/9xiUVNgKTkmH9WRdCcaHuyhKoQI6CsWnMOW5OZ+gVXPc9U
|
||||
LapQ5Wymb+yGE8Uyn4EJnwdEa8TdWztMs3TNtK5vh1Pk1lKmtKcblBiDrUPEURhR
|
||||
mUBoUkMe2VDXyN27e0lkbxcFJ0HrYnhvb72Yfnw6B3XMa/NIhbOU3ttB/tVR6Kjl
|
||||
YVDtTokfILQc07Ai+TqkqNARtPGntHAn9qFvPLNKI31c+Xw/QGZbVPNFW1QAYBiO
|
||||
5dqsSwKaouapHAb0GBmU0fAfJZNcvwt9Ph7WDXU9Ce3LZmIshGW7Gzm7EGdf4VS6
|
||||
k4OtEWZhZHRnl9/sBJ2UlQU0tFs3ow53aDZQIa4FKd4JKabBeRgDUKCGEyfoNKCq
|
||||
NKkLZaR/kFA9EqTPZSIXPLYIzIlSFoL3LVDOc5O7hDT9vXaubdZeAfE9VcHDdm3u
|
||||
usW034F0zbsuu4G83qZ6QhDOp0UhujfSU+BDkH0I+OfFyVkQAmy69J3byi7Iluno
|
||||
OcZM13rbe30jzyyyWAnjHicAt8tNwCLMmnIRvYT9ELqywID0Zzxkct61eJQ6L6aq
|
||||
/DnUD9Kq0OwdxC1wMGtimX5eUnN7S7y5+TMRepJnWcTtgrLBVqwRrvSLnsKVd4Gb
|
||||
Bu3dSs+BxMV1UcyU0KWwDPY2D7k8SGgeH7IEPo/JiGO8RrWYJRac9qel9egMYbkC
|
||||
DQRboXxmARAAoaRH/xgKvp0QrNFJZBW12SdXT4h1nXglbpZd+bUl738LqM2JSIC5
|
||||
Qq7t2DUtOiL9UxqvRgAIjkVLR+hHJBZyuPOP5Ebaf3Mr7eAdmCx2TMsHZPKBLnTy
|
||||
EqeUcnPwThNKcUaGsQYlkxIQAJtPzy3YBuDCYnzzSi6KzP3VC8szHsXcPo2DeKWI
|
||||
m9BbMMSQkB3m0fz8W3ar/64RDoubRWRJ07b7q4WUb4jPvql+Tz+Gv5x3qm8g6m1j
|
||||
uD+U5OhGCe3m5/MsI2JYdWXEwif8YD59gylsj3LJIu3i4SkR8aS+x6n3LIvdSCOt
|
||||
P3To87wfoSqBWWObVe/vOHRXqpzEF6T/ih/rkhUFzrHNMziTPsujBazm82AUZ6xi
|
||||
2TddbdSAK+ZpSPQjyyRflNyNgv0iu6P3BnBgv0Xcuf2RsDMBDjdvHtX0lXkPMB+r
|
||||
6jgxl0faV6UktH5R2d4Zt9i0/vWlZZd0MDylPNQDiKs+qSIX3ntfUUaPdEJqYAwM
|
||||
gloXr3cZtsVh+Yoqt8pa4x0x6kqez+oyBUFf6y1FCKYq2H/QfPRkF/DrfZS+7jXW
|
||||
iAX8PcrDceCN6Dr10/g5LPWXQOHUWxCu7FEYoYJsVXst4N0FnCOCe/OGYIhMteSV
|
||||
IJJvNS4qwXZKKZ+cmuT9skEQ6zsLV9+VDYMwVqXB4wTp4EwT2pCp6LEAEQEAAYkC
|
||||
JQQYAQIADwUCW6F8ZgIbDAUJA8JnAAAKCRDJZVRAR8NPktRiD/9qjH6uuT1y5uNA
|
||||
4E8u6/vxZGsyBG57dtnQ0KQbcsZSrUxMiDTtMMrklsl2vtut/XDroajm+d2eaQ4K
|
||||
j0h285VRkT5xJ79JaIQ8oyzRWBtpENy0iLUm7CmqCMuH8VFifZyEBYZgR/K+9ago
|
||||
WwF3sk0QP0WJTFqIZajKK0Lo5Juk8DCXjvtkvGNytHkZ2vEkiZ9m7Eq0AjQnts5T
|
||||
PdHkob7Z8fu0KfUMoCUtb+TzNyMYOVGE6uTfo8wKvbhwzUWSymZkrecx73XUUmew
|
||||
MdZ2WzwGdUMXwcBZ4LvgrZVg+LKxR1lyJ+qbIUpDKXCZGGH2VZVaQspgnx2Yt0EI
|
||||
Zl2ELMrTq5IcOkxtblEZpQkwaXszqUDNO43ezp/PmbTRWChoM/k3RAbp9rvoYx93
|
||||
UChyRXpJRaqDxK502k3BSnOfmolpQvxTMKtLZO50URa0F0F4qD2csns4QrqOWsGr
|
||||
qPqVKcLn8Q/yMW9fm5+xX+ZHICKk64GAB0YyHcw9lOWekLhGzZV1KnD5ID6+5E0B
|
||||
nsWZB6PDqLM+/ykXh0rcN8DWwZvhimI5/dOEIWIkADKT8WGwh+2JnRyimhxYdaiH
|
||||
ul1BvZAYqF1FVXAHd0u48MssLywGGbW4fH8D9SM+LFpP4+8oYFLNgH1OreMENuag
|
||||
i47EaxpnQUgIt8PZ/gL3LeiGs8SNpw==
|
||||
=flyM
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -16,17 +16,6 @@ research projects on Genode.
|
|||
Applications and library infrastructure
|
||||
#######################################
|
||||
|
||||
:GNU Privacy Guard:
|
||||
|
||||
The [https://gnupg.org/ - GNU Privacy Guard] (GNUPG) is the most widely
|
||||
used Free-Software implementation of the OpenGPG standard. It comprises a
|
||||
rich set of tools for encryption and key management. For many forthcoming
|
||||
application scenarios of Genode such as package management and email
|
||||
communication, GNUPG is crucial. Hence, it should be ported to Genode. Such
|
||||
a port may leverage Genode's fine-grained component architecture to strongly
|
||||
separate network-exposed functionality, the storage of key material, and the
|
||||
cryptographic functions.
|
||||
|
||||
:VNC server implementing Genode's framebuffer session interface:
|
||||
|
||||
With 'Input' and 'Framebuffer', Genode provides two low-level interfaces
|
||||
|
@ -50,24 +39,6 @@ Applications and library infrastructure
|
|||
integrated in the operating system, i.e., in the form of Genode components
|
||||
or a set of Genode VFS plugins.
|
||||
|
||||
:Tiled window manager:
|
||||
|
||||
At Genode Labs, we pursue the goal to shape Genode into an general-purpose
|
||||
operating system suitable for productive work. The feature set needed to
|
||||
achieve this goal largely depends on the tools and applications daily used by
|
||||
the Genode engineers. As one particularly important tool for being highly
|
||||
productive, we identified a tiled user interface. Currently, all developers
|
||||
at Genode Labs embrace either the Ion3 window manager or the tiled Terminator
|
||||
terminal emulator. Hence, we desire to have a similar mode of user
|
||||
interaction on Genode as well. The goal of this challenge is to identify the
|
||||
most important usage patters and the implementation of a tiled GUI that
|
||||
multiplexes the framebuffer into a set of tiled and tabbed virtual
|
||||
framebuffers.
|
||||
|
||||
Related to this work, the low-level 'Framebuffer' and 'Input' interfaces
|
||||
should be subject to a revision, for example for enabling the flexible change
|
||||
of framebuffer sizes as needed by a tiled user interface.
|
||||
|
||||
:Interactive sound switchbox based on Genode's Audio_out session interface:
|
||||
|
||||
Since version 10.05, Genode features a highly flexible configuration concept
|
||||
|
@ -116,6 +87,11 @@ Applications and library infrastructure
|
|||
of communicating threads as captured on the running system. The tool should
|
||||
work on a selected kernel that provides a facility for tracing IPC messages.
|
||||
|
||||
The underlying light-weight tracing infrastructure is
|
||||
[https://genode.org/documentation/release-notes/19.08#Tracinghttps://genode.org/documentation/release-notes/19.08#Tracing - already in place].
|
||||
The Qt-based tracing tools would complement this infrastructure with
|
||||
an interactive front end.
|
||||
|
||||
:Ports of popular software:
|
||||
|
||||
Genode features a ports mechanism to cleanly integrate 3rd-party software.
|
||||
|
@ -127,6 +103,18 @@ Applications and library infrastructure
|
|||
have available on Genode is available at
|
||||
[http://usr.sysret.de/jws/genode/porting_wishlist.html].
|
||||
|
||||
:Native Open-Street-Maps (OSM) client:
|
||||
|
||||
When using Sculpt OS, we regularly need to spawn a fully fledged web
|
||||
browser in a virtual machine for using OSM or Google maps. The goal
|
||||
of this project would be a native component that makes maps functionality
|
||||
directly available on Genode, alleviating the urge to reach for a SaaS
|
||||
product. The work would include a review of existing OSM clients regarding
|
||||
their feature sets and the feasibility of porting them to Genode.
|
||||
Depending on the outcome of this review, an existing application could
|
||||
be ported or a new component could be developed, e.g., leveraging Genode's
|
||||
Qt support.
|
||||
|
||||
|
||||
Application frameworks and runtime environments
|
||||
###############################################
|
||||
|
@ -135,18 +123,18 @@ Application frameworks and runtime environments
|
|||
|
||||
[http://openjdk.java.net/ - OpenJDK] is the reference implementation of the
|
||||
Java programming language and hosts an enormous ecosystem of application
|
||||
software. The goal of this line of work is the ability to run this
|
||||
software directly on Genode. The centerpiece of OpenJDK is Hotspot - the
|
||||
Java virtual machine implementation, which must be ported to Genode.
|
||||
The initial port should suffice to execute simple example programs that
|
||||
operate on textual input. Since Genode has the FreeBSD libc readily
|
||||
available, OpenJDK's existing POSIX backends can be reused. The next step
|
||||
is the creation of Genode-specific native classes that bridge the gap
|
||||
between the Java world and Genode, in particular the glue code to
|
||||
run graphical applications as clients of Genode's GUI server. Since
|
||||
OpenJDK has been ported to numerous platforms (such as Haiku), there
|
||||
exists a comforting number of implementations that can be taken as
|
||||
reference.
|
||||
software.
|
||||
|
||||
Since
|
||||
[https://genode.org/documentation/release-notes/19.02#Showcase_of_a_Java-based_network_appliance - version 19.02],
|
||||
Genode features a port of OpenJDK that allows the use of Java for networking
|
||||
applications.
|
||||
|
||||
The next step would be the creation of Genode-specific native classes that
|
||||
bridge the gap between the Java world and Genode, in particular the glue
|
||||
code to run graphical applications as clients of Genode's GUI server. Since
|
||||
OpenJDK has been ported to numerous platforms (such as Haiku), there exists
|
||||
a comforting number of implementations that can be taken as reference.
|
||||
|
||||
:Android's ART VM natively on Genode:
|
||||
|
||||
|
@ -155,22 +143,6 @@ Application frameworks and runtime environments
|
|||
removed from the trusted computing base of Android, facilitating the use of
|
||||
this mobile OS in high-assurance settings.
|
||||
|
||||
:Rust bindings for the Genode API:
|
||||
|
||||
Rust is a low-level systems programming language that ensures memory
|
||||
safety without employing a garbage collector. It thereby challenges C++
|
||||
as the go-to programming language for high-performance and low-level code.
|
||||
Since
|
||||
[http://genode.org/documentation/release-notes/16.05#New_support_for_the_Rust_programming_language - version 16.05],
|
||||
Genode supports the use of the Rust programming language within
|
||||
components. However, to unleash the potential of this combination,
|
||||
Genode's API must become available to native Rust code. The intermediate goal
|
||||
of this project is the implementation of an example server, e.g., a
|
||||
component that provides a terminal-session interface. Thereby, we
|
||||
will encounter the problems of bootstrapping and configuration of the
|
||||
component, the provisioning of signal handlers and session objects, and
|
||||
memory management.
|
||||
|
||||
:Go language runtime:
|
||||
|
||||
Go is a popular language in particular for web applications. In the past,
|
||||
|
@ -222,6 +194,33 @@ Application frameworks and runtime environments
|
|||
development is [http://halvm.org - HalVM] - a light-weight OS runtime for
|
||||
Xen that is based on Haskell.
|
||||
|
||||
:Xlib compatibility:
|
||||
|
||||
Developments like Wayland notwithstanding, most application software on
|
||||
GNU/Linux systems is built on top of the Xlib programming interface.
|
||||
However, only a few parts of this wide interface are actually used today.
|
||||
I.e., modern applications generally deal with pixel buffers instead of
|
||||
relying on graphical drawing primitives of the X protocol. Hence, it seems
|
||||
feasible to reimplement the most important parts of the Xlib interface to
|
||||
target Genode's native GUI interfaces (nitpicker) directly. This would
|
||||
allow us to port popular application software to Sculpt OS without
|
||||
changing the application code.
|
||||
|
||||
:Bump-in-the-wire components for visualizing session interfaces:
|
||||
|
||||
Genode's session interfaces bear the potential for monitoring and
|
||||
visualizing their use by plugging a graphical application
|
||||
in-between any two components. For example, by intercepting block
|
||||
requests issued by a block-session client to a block-device driver,
|
||||
such a bump-in-the-wire component could visualize
|
||||
the access patterns of a block device. Similar ideas could be pursued for
|
||||
other session interfaces, like the audio-out (sound visualization) or NIC
|
||||
session (live visualization of network communication).
|
||||
|
||||
The visualization of system behavior would offer valuable insights,
|
||||
e.g., new opportunities for optimization. But more importantly, they
|
||||
would be extremely fun to play with.
|
||||
|
||||
|
||||
Virtualization
|
||||
##############
|
||||
|
@ -237,21 +236,6 @@ Virtualization
|
|||
is normally not possible. Also, complex Genode scenarios (like Turmvilla)
|
||||
could be prototyped on GNU/Linux.
|
||||
|
||||
:VirtualBox on top of seL4:
|
||||
|
||||
The [https://sel4.systems - seL4 microkernel] is a modern microkernel that
|
||||
undergoes formal verification to prove the absence of bugs. Since version
|
||||
4.0, the kernel supports virtualization support on x86-based hardware.
|
||||
Genode has experimental support for seL4 that allows almost all Genode
|
||||
components to be used on top of this kernel. VirtualBox is an exception
|
||||
because it closely interacts with the underlying kernel (like NOVA) to
|
||||
attain good performance. We have shown that VirtualBox can be executed
|
||||
within a protection domain of the NOVA microhypervisor. The goal of this
|
||||
project is the application of this approach to the virtualization
|
||||
interface of seL4. The result will be a VM hosting environment that
|
||||
ensures the separation of virtual machines via the formally verified
|
||||
seL4 kernel.
|
||||
|
||||
:Xen as kernel for Genode:
|
||||
|
||||
Using Xen as kernel for Genode would clear the way to remove the
|
||||
|
@ -294,22 +278,25 @@ Virtualization
|
|||
the project bears the opportunity to explore the provisioning of the
|
||||
KVM interface based on Genode's VFS plugin concept.
|
||||
|
||||
:Hardware-accelerated graphics for virtual machines:
|
||||
|
||||
In
|
||||
[https://genode.org/documentation/release-notes/17.08#Hardware-accelerated_graphics_for_Intel_Gen-8_GPUs - Genode 17.08],
|
||||
we introduced a GPU multiplexer for Intel Broadwell along with support
|
||||
for Mesa-based 3D-accelerated applications.
|
||||
While designing Genode's GPU-session interface, we also aimed at supporting
|
||||
the hardware-accelerated graphics for Genode's virtual machine monitors like
|
||||
VirtualBox or Seoul, but until now, we did not took the practical steps of
|
||||
implementing a virtual GPU device model.
|
||||
|
||||
The goal of this project is the offering of a virtual GPU to a Linux guest
|
||||
OS running on top of Genode's existing virtualization and driver
|
||||
infrastructure.
|
||||
|
||||
|
||||
Device drivers
|
||||
##############
|
||||
|
||||
:Isochronous USB devices:
|
||||
|
||||
Genode's USB driver supports bulk and interrupt endpoints. Thereby, most
|
||||
USB devices like USB storage, user input, printers, and networking devices
|
||||
can be used. However, multi-media devices such as cameras or audio
|
||||
equipment use isochronous endpoints, which are not supported. The goal
|
||||
of this line of work is the support of these devices in Genode. The topic
|
||||
touches the USB driver, the USB session interface, an example implementation
|
||||
of a USB client driver (using the session interface) for a device of choice,
|
||||
and - potentially - the enhancement of Genode's USB-pass-through mechanism
|
||||
for VirtualBox.
|
||||
|
||||
:Sound on the Raspberry Pi:
|
||||
|
||||
The goal of this project is a component that uses the Raspberry Pi's
|
||||
|
@ -318,18 +305,6 @@ Device drivers
|
|||
backend, the new driver will make the sound of all SDL-based games
|
||||
available on the Raspberry Pi.
|
||||
|
||||
:Framebuffer for UEFI and Coreboot:
|
||||
|
||||
By moving away from the legacy BIOS boot mechanism, it is time to
|
||||
reconsider closely related traditional approaches such as the use of
|
||||
the VESA BIOS extensions for accessing the frame buffer. On UEFI or
|
||||
Coreboot systems, there exist alternative ways to initialize and
|
||||
access the framebuffer in a hardware-independent way. On the course of
|
||||
this project, we will explore the available options and create dedicated
|
||||
Genode driver components that use the modern mechanisms.
|
||||
For reference, the current state of Genode's UEFI support is documented
|
||||
in [https://github.com/genodelabs/genode/issues/2242 - Issue 2242].
|
||||
|
||||
:Data Plane Development Kit (DPDK):
|
||||
|
||||
Genode utilizes the network device drivers of the iPXE project, which
|
||||
|
@ -357,8 +332,22 @@ Platforms
|
|||
Genode functionality such as its native GUI, lwIP, and Noux, many protocol
|
||||
stacks can effectively be removed from the Linux kernel.
|
||||
|
||||
The goal of this project is to evaluate how small the Linux kernel can get
|
||||
when used as a microkernel.
|
||||
In 2018, Johannes Kliemann pursued this topic to a state where Genode
|
||||
could be used as init process atop a customized Linux kernel.
|
||||
[https://lists.genode.org/pipermail/users/2018-May/006066.html - His work]
|
||||
included the execution of Genode's regular device drivers for VESA and
|
||||
PS/2 as regular Genode components so that Genode's interactive demo
|
||||
scenario ran happily on a laptop. At this time, however, only parts of
|
||||
his results were merged into Genode's mainline.
|
||||
|
||||
The goal of this project is to follow up on Johannes' work, bring the
|
||||
[https://github.com/genodelabs/genode/pull/2829 - remaining parts] into
|
||||
shape for the inclusion into Genode, and address outstanding topics, in
|
||||
particular the handling of DMA by user-level device drivers. Further down
|
||||
the road, it would be tempting to explore the use of
|
||||
[https://en.wikipedia.org/wiki/Seccomp - seccomp] as sandboxing mechanism
|
||||
for Genode on Linux and the improvement of the Linux-specific implementation
|
||||
of Genode's object-capability model.
|
||||
|
||||
:Support for the HelenOS/SPARTAN kernel:
|
||||
|
||||
|
@ -381,34 +370,46 @@ Platforms
|
|||
kernel is used for Mac OS X, it could represent an industry-strength
|
||||
base platform for Genode supporting all CPU features as used by Mac OS X.
|
||||
|
||||
:Linux process containers for supporting Genode`s resource trading:
|
||||
:Genode on the Librem5 phone hardware:
|
||||
|
||||
Even though the Linux version of Genode is primarily meant as a development
|
||||
platform, there exist interesting opportunities to explore when combining
|
||||
Genode with Linux, in particular Linux' process containers.
|
||||
Linux process containers provide a mechanism to partition physical resources,
|
||||
foremost CPU time, between Linux processes. This raises the interesting
|
||||
question of whether this mechanism could be used for a proper implementation
|
||||
of Genode's resource trading on Linux.
|
||||
[http://lwn.net/Articles/236038/ - Process containers introduction...]
|
||||
Even though there exists a great variety of ARM-based SoCs, Genode
|
||||
primarily focuses on the NXP i.MX family because it is - in contrast
|
||||
to most SoCs in the consumer space - very liberal in terms of
|
||||
good-quality public documentation and reference code, and it scales
|
||||
from industrial to end-user-facing use cases (multi-media).
|
||||
|
||||
The [https://puri.sm/products/librem-5/ - Librem5] project - with its
|
||||
mission to build a trustworthy mobile phone - has chosen the i.MX family as
|
||||
the basis for their product for likely the same reasons that attract us.
|
||||
|
||||
To goal of this work is bringing Genode to the Librem5 hardware.
|
||||
For the Librem5 project, Genode could pave the ground towards new use cases
|
||||
like high-security markets where a regular Linux-based OS would not be
|
||||
accepted. For the Genode community, the Librem5 hardware could become an
|
||||
attractive mobile platform for everyday use, similar to how we developers
|
||||
use our Genode-based [https://genode.org/download/sculpt - Sculpt OS] on our
|
||||
laptops.
|
||||
|
||||
|
||||
System management
|
||||
#################
|
||||
|
||||
:Remote management of Sculpt OS via Puppet:
|
||||
|
||||
[https://en.wikipedia.org/wiki/Puppet_(company)#Puppet - Puppet] is a
|
||||
software-configuration management tool for administering a large amount
|
||||
of machines from one central place. Genode's
|
||||
[https://genode.org/download/sculpt - Sculpt OS] lends itself to such
|
||||
an approach of remote configuration management by the means of the
|
||||
"config" file system (for configuring components and deployments) and
|
||||
the "report" file system (for obtaining the runtime state of components).
|
||||
The project would explore the application of the Puppet approach and tools
|
||||
to Sculpt OS.
|
||||
|
||||
|
||||
Optimizations
|
||||
#############
|
||||
|
||||
:Low-latency audio streaming:
|
||||
|
||||
Genode comes with an audio streaming interface called 'Audio_out' session.
|
||||
It is based on a shared-memory packet stream accompanied with asynchronous
|
||||
data-flow signals. For real-time audio processing involving chains of Genode
|
||||
components, streams of audio data must be carried at low latency, imposing
|
||||
constraints to buffer sizes and the modes of operation of the audio mixer and
|
||||
audio drivers. The goal of this project is to create a holistic design of the
|
||||
whole chain of audio processing, taking thread-scheduling into account. A
|
||||
particular challenge is the mixed output of real-time (small buffer, low
|
||||
latency) and non-real-time (larger buffer to compensate jitter, higher
|
||||
latency) audio sources.
|
||||
|
||||
:De-privileging the VESA graphics driver:
|
||||
|
||||
The VESA graphics driver executes the graphics initialization code provided
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -53,14 +53,15 @@ architecture independent from the underlying base platform, in this case Linux.
|
|||
To give Genode a try, build and execute a simple demo scenario via:
|
||||
|
||||
! cd build/x86_64
|
||||
! make KERNEL=linux run/demo
|
||||
! make KERNEL=linux BOARD=linux run/demo
|
||||
|
||||
By invoking 'make' with the 'run/demo' argument, all components needed by the
|
||||
demo scenario are built and the demo is executed. This includes all components
|
||||
which are implicitly needed by the base platform. The base platform that the
|
||||
components will be executed upon on is selected via the 'KERNEL' variable. If
|
||||
you are interested in looking behind the scenes of the demo scenario, please
|
||||
refer to 'doc/build_system.txt' and the run script at 'os/run/demo.run'.
|
||||
components will be executed upon on is selected via the 'KERNEL' and 'BOARD'
|
||||
variables. If you are interested in looking behind the scenes of the demo
|
||||
scenario, please refer to 'doc/build_system.txt' and the run script at
|
||||
'os/run/demo.run'.
|
||||
|
||||
|
||||
Using platforms other than Linux
|
||||
|
@ -112,7 +113,7 @@ steps are required:
|
|||
# Uncomment the following line in 'x86_32/etc/build.conf'
|
||||
! REPOSITORIES += $(GENODE_DIR)/repos/libports
|
||||
# Build and execute the demo using Qemu
|
||||
! make -C build/x86_32 KERNEL=okl4 run/demo
|
||||
! make -C build/x86_32 KERNEL=okl4 BOARD=pc run/demo
|
||||
|
||||
The procedure works analogously for the other base platforms. You can, however,
|
||||
reuse the already created build directory and skip its creation step if the
|
||||
|
|
95
doc/news.txt
95
doc/news.txt
|
@ -3,6 +3,101 @@
|
|||
Genode News
|
||||
===========
|
||||
|
||||
Genode OS Framework release 19.11 | 2019-11-28
|
||||
##############################################
|
||||
|
||||
| Following this year's theme of "bridging worlds", Genode 19.11 adds the
|
||||
| ability to use popular build tools like CMake for application development,
|
||||
| introduces a new virtual-machine monitor for 64-bit ARM, and enhances
|
||||
| POSIX compatibility. As another highlight, it features the first version
|
||||
| of our custom block-device encrypter.
|
||||
|
||||
Block-device encryption is a feature often requested by users of our Sculpt OS.
|
||||
Until now, we deliberately left this topic unaddressed because we felt that a
|
||||
profound answer was beyond our expertise. However, during the past year, we
|
||||
dived deep into it. The result is the prototype for a new block encrypter that
|
||||
encrypts data but also protects integrity and freshness. For us, the
|
||||
implementation of the encrypter is especially intriguing because - with about
|
||||
7000 lines of code - it is Genode's first non-trivial component written in the
|
||||
[https://en.wikipedia.org/wiki/SPARK_(programming_language) - SPARK]
|
||||
programming language.
|
||||
|
||||
The second major addition is a new virtual machine monitor (VMM) for 64-bit
|
||||
ARM platforms such as the NXP i.MX8. It leverages the
|
||||
[https://genode.org/documentation/articles/arm_virtualization - proof of concept]
|
||||
we developed in 2015 for ARMv7, which we pursued as a technology exploration.
|
||||
In contrast, our aspiration with the new VMM is a product-quality solution.
|
||||
|
||||
In our [https://genode.org/about/road-map - road map] for 2019, we stated
|
||||
the "bridging of worlds" as our overall theme for this year. On that account,
|
||||
the current release moves the project forward on two levels. First, by
|
||||
successively increasing the scope of POSIX compatibility, we reduce the
|
||||
friction when porting existing application software to Genode. We managed
|
||||
to bridge several gaps in our POSIX support that we considered as impossible
|
||||
to cover some years ago. In particular, we identified ways to emulate certain
|
||||
POSIX signals, ioctl calls, and fork/execve semantics. This way, popular
|
||||
software such as bash, coreutils, or Vim can now be executed as regular
|
||||
Genode components with no additional runtime environment (like Noux or a VMM)
|
||||
required.
|
||||
|
||||
At a higher level, the current release introduces new tooling especially
|
||||
geared at the development and porting of application software. Compared to
|
||||
Genode's regular development tools, which were designed for whole-system
|
||||
development, the new tool called Goa relieves the developer from the
|
||||
complexity of Genode's custom build system and instead promotes the use of
|
||||
popular commodity solutions like CMake.
|
||||
|
||||
These and more topics are described in the
|
||||
[https:/documentation/release-notes/19.11 - release documentation of version 19.11...]
|
||||
|
||||
|
||||
Genode OS Framework release 19.08 | 2019-08-28
|
||||
##############################################
|
||||
|
||||
| Genode 19.08 puts emphasis on practical concerns ranging from
|
||||
| keyboard layouts, over system-time management, to remote system
|
||||
| administration. It also continues our commitment to the 64-bit ARM
|
||||
| i.MX8 SoC, comes with Qt5 version 5.13, and improves POSIX compatibility.
|
||||
|
||||
The summer release of Genode addresses a variety of topics when using Genode
|
||||
and Sculpt OS in practice. The confrontation with the real world prompted us
|
||||
to develop new concepts for managing system time, keyboards layouts, and
|
||||
copy-and-paste. For using Sculpt OS on the road, a new application VM for
|
||||
accessing captive portals smoothes the experience of connecting to public WiFi
|
||||
networks.
|
||||
|
||||
Besides the practical focus, the new release continues our commitment to the
|
||||
64-bit ARM i.MX8 platform through new kernel support, device drivers, and test
|
||||
coverage. Further topics include SMBIOS support for commodity PC hardware, a
|
||||
new tracing tool, enhanced POSIX compatibility, and a major update of Qt5 to
|
||||
version 5.13.
|
||||
|
||||
The complete picture is presented in the
|
||||
[https:/documentation/release-notes/19.08 - release documentation of version 19.08...]
|
||||
|
||||
|
||||
Sculpt OS release 19.07 | 2019-07-09
|
||||
####################################
|
||||
|
||||
| Version 19.07 of the Sculpt operating system improves overall performance
|
||||
| and introduces copy and paste between terminals, virtual machines, and
|
||||
| graphical applications.
|
||||
|
||||
The most prominent user-visible feature of Sculpt OS 19.07 is the ability
|
||||
of copy and paste text between terminals, graphical applications, and
|
||||
virtual machines. Our unique take on this feature is described in
|
||||
a [https://genodians.org/nfeske/2019-07-03-copy-paste - dedicated article].
|
||||
|
||||
Under the hood, Sculpt 19.07 benefits from the massive infrastructure
|
||||
improvements that came with
|
||||
[https://genode.org/documentation/release-notes/19.05 - Genode 19.05],
|
||||
yielding a smoother user experience compared to earlier versions.
|
||||
|
||||
The new release can be obtained from the
|
||||
[https://genode.org/download/sculpt - Sculpt download page] and is
|
||||
accompanied by updated
|
||||
[https://genode.org/documentation/articles/sculpt-19-07 - documentation].
|
||||
|
||||
|
||||
Genode OS Framework release 19.05 | 2019-05-29
|
||||
##############################################
|
||||
|
|
|
@ -0,0 +1,681 @@
|
|||
|
||||
|
||||
===============================================
|
||||
Release notes for the Genode OS Framework 19.08
|
||||
===============================================
|
||||
|
||||
Genode Labs
|
||||
|
||||
|
||||
|
||||
The stated theme of this year's [https://genode.org/about/road-map - road map]
|
||||
is "bridging worlds", which expresses our ambition to smoothen the practical
|
||||
use of Genode-based systems such as Sculpt OS. The current release pays
|
||||
tribute to this ambition by addressing a great number of practical concerns:
|
||||
How to accommodate the staggering variety of keyboard layouts out there?
|
||||
(Section [Flexible keyboard layouts])
|
||||
How can the system gracefully respond when confronted with exotic USB devices?
|
||||
(Section [Storage-stack improvements])
|
||||
How to set the system time from within the system? How does SNTP fit in here?
|
||||
(Section [General system time concept])
|
||||
How to approach the remote administration of the system?
|
||||
(Section [Enhanced SSH terminal])
|
||||
How to copy and paste text securely between mutually distrusting subsystems?
|
||||
(Section [Clipboard])
|
||||
Or how to overcome the captive portal of a Hotel WiFi with Sculpt OS?
|
||||
(Section [Disposable VM for handling captive portals])
|
||||
By providing answers to those questions, we believe to make Genode - and Sculpt
|
||||
OS in particular - generally more useful.
|
||||
|
||||
As another take on "bridging worlds", we continue our effort to bring the rich
|
||||
Sculpt OS software stack to the 64-bit ARM world, in particular to our most
|
||||
loved SoC family, namely NXP i.MX. Section [64-bit ARM and NXP i.MX8] reports
|
||||
on our progress in this direction.
|
||||
|
||||
Under the hood, there are a few exciting developments that will greatly reduce
|
||||
the effort of running existing software on Genode. In particular, Genode's
|
||||
(entirely optional) C runtime has gained the ability to emulate the
|
||||
traditional execve and fork mechanisms.
|
||||
(Section [Consolidation of the C runtime and Noux]) This will eventually
|
||||
alleviate the need for our present noux runtime environment to the benefits of
|
||||
better performance and increased flexibility.
|
||||
|
||||
Further highlights of Genode 19.08 are a major update of Qt5 to version 5.13
|
||||
(Section [Updated Qt5]) and the continuation of our kernel-agnostic
|
||||
virtualization story (Section [Virtualization]).
|
||||
|
||||
|
||||
Flexible keyboard layouts
|
||||
#########################
|
||||
|
||||
Genode is used worldwide in a multilingual context beyond Germany and common
|
||||
technical realms of English. Therefore, we had to address localized
|
||||
keyboard-input handling for quite some time now and introduced the
|
||||
_input-filter_ component in
|
||||
[https://genode.org/documentation/release-notes/17.02#Input-event_filter - 17.02].
|
||||
The component merges input streams and applies several forms of input
|
||||
transformations, in particular the application of keyboard layouts to
|
||||
supplement the input-event stream with character events.
|
||||
|
||||
But as we are by no means localization experts, our solution, while performing
|
||||
a solid job for selected layouts, also had some quirks and rough edges when it
|
||||
came to French or even Swiss German. First, our oversimplified notion of
|
||||
[https://en.wikipedia.org/wiki/Caps_Lock - Caps Lock] as _just a pressed Shift_
|
||||
_key_ is plain wrong but part of all our character-generator configurations.
|
||||
We just missed this drawback because none of our developers uses Caps Lock
|
||||
regularly. Further, US English and Germany layouts work very well without
|
||||
[https://en.wikipedia.org/wiki/Dead_key - dead keys], but crossing any German
|
||||
border (except the Austrian) is impossible without support for key sequences
|
||||
composing special characters. The French keyboard layout in Genode tried to
|
||||
alleviate the lack of compose sequences by adding an additional Circumflex
|
||||
modifier and character mapping, which unfortunately is not standard.
|
||||
|
||||
[image keyboard_stack]
|
||||
|
||||
Beginning at this state of affairs, we researched common practice in
|
||||
international keyboard-input handling, sought a quasi-standard source for
|
||||
layout configurations, and addressed the drawbacks mentioned before. During
|
||||
our research we found out that no current implementation is void of critique
|
||||
and, therefore, decided to look more into X11/XKB as our open-source
|
||||
quasi-standard solution, but always had an eye on the proprietary world.
|
||||
|
||||
The handling of key events in X11/XKB happens on three layers.
|
||||
|
||||
:Key codes: On the key-code layer, the device driver programs the
|
||||
keyboard and generates a stream of key-code (i.e., scan-code)
|
||||
events, which represent the physical location of the actual key on
|
||||
the keyboard.
|
||||
|
||||
:Key symbols: These key codes are mapped to key symbols, which
|
||||
represent the label imprinted on the key. So, the key code producing
|
||||
US English _Q_ (QWERTY keyboard) generates _A_ on a French keyboard
|
||||
(AZERTY). Modifiers like Shift, AltGr, and Caps Lock are included in
|
||||
the key-symbol mapping. Additionally, some layouts map key codes to
|
||||
dead key symbols, which start the before-mentioned compose
|
||||
sequences. Key repeat is also implemented as key-symbol repeat
|
||||
actually.
|
||||
|
||||
:Characters: On top of this stack, the key symbols are mapped to
|
||||
characters represented as Unicode codepoints or UTF-8 strings.
|
||||
The procedure obviously includes key symbols that have no character
|
||||
representation (e.g. Control and Alt). Key symbols forming a valid compose
|
||||
sequence generate characters on this level (e.g., dead-key circumflex plus
|
||||
e generates ê).
|
||||
|
||||
We limited our research to Western keyboard-input handling and only had a
|
||||
blink into the direction of Chinese-Japanese-Korean (CJK) and advanced input
|
||||
methods (IM). This simplification is supported by the fact that CJK can also
|
||||
be based on the mechanisms mentioned with some limitations only. Nevertheless,
|
||||
we do not expect to never touch this topic again.
|
||||
|
||||
After doing our homework of keyboard-input handling, we worked on squeezing
|
||||
all available layout information out of X11/XKB, which resulted in a small
|
||||
tool residing in _tool/xkb2ifcfg_. For those wondering, the name is just a
|
||||
silly acronym for _XKB to input-filter_ _configuration_ that pays tribute to
|
||||
the boringness of this task. After building the tool by a run of 'make' in the
|
||||
tool path, it can be used as follows. Please make sure you have libxkbcommon
|
||||
development packages installed beforehand.
|
||||
|
||||
! xkb2ifcfg generate <layout> <variant> <locale>
|
||||
!
|
||||
! xkb2ifcfg generate us euro en_US.UTF-8
|
||||
! xkb2ifcfg generate de nodeadkeys de_DE.UTF-8
|
||||
|
||||
If the parameter combination is available, xkb2ifcfg prints a input-filer
|
||||
chargen configuration for the selected layout to standard output. Valid
|
||||
'layout' and 'variant' options can be figured out from the LAYOUTS section in
|
||||
'man 7 xkeyboard-config', where 'variant' strings are depicted in parentheses
|
||||
after the layout (e.g., 'us(euro)'). The 'locale' option has the standard
|
||||
locale syntax (see /usr/share/i18n/locales). The tool needs all three
|
||||
parameters to gather the correct key-map and compose-sequence information. The
|
||||
generated chargen configurations include '<map>' and '<key>' nodes
|
||||
corresponding to significant modifier states and '<sequence>' nodes (described
|
||||
later). For simplicity of the generator, the '<key>' nodes always use the
|
||||
'code="..."' attribute, but also have a comment with the UTF-8 character
|
||||
appended.
|
||||
|
||||
! <key name="KEY_MINUS" code="0x00df"/> <!-- ß -->
|
||||
|
||||
Last, we addressed the improvement of the input-filter character generator and
|
||||
the actual chargen configuration files in Genode. Therefore, we specified the
|
||||
modifier configuration assumed by the standard chargen files as '<mod1>'
|
||||
corresponds to Shift, '<mod2>' to Control, '<mod3>' to AltGr, and '<mod4>' to
|
||||
Caps Lock.
|
||||
|
||||
! <mod1> <key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/> </mod1>
|
||||
! <mod2> <key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/> </mod2>
|
||||
! <mod3> <key name="KEY_RIGHTALT"/> </mod3> <!-- AltGr -->
|
||||
! <mod4> <rom name="capslock"/> </mod4>
|
||||
|
||||
As outlined above, the '<key>' nodes generated by xkb2ifcfg always use the
|
||||
'code' attribute for the Unicode codepoint. Because of this and because UTF-8
|
||||
also refers to codepoints, we deprecated the 'b0/b1/b2/b3' attributes for
|
||||
character definition with this release.
|
||||
|
||||
The chargen is also extended by the '<sequence>' configuration node. A
|
||||
sequence node permits the definition of dead-key/composing character
|
||||
sequences. With such sequences, the character is not generated instantly on
|
||||
key press but only after the sequence is completed. If an unfinished sequence
|
||||
can't be completed due to an unmatched character, the sequence is aborted and
|
||||
no character is generated. We support sequences of up to four characters at
|
||||
the moment.
|
||||
|
||||
For example, the French AZERTY
|
||||
[https://docs.microsoft.com/en-us/globalization/keyboards/kbdfr.html - keyboard layout]
|
||||
has a dead key for Circumflex Accent _^_ right of the _P_ key (which is
|
||||
bracket left _[_ on US keyboards). When Circumflex is pressed no visible
|
||||
character should be generated instantly but the accent must be combined with a
|
||||
follow-up character (e.g., Circumflex plus _a_ generates _â_).
|
||||
|
||||
Dead keys can be defined in the '<key>' nodes of any '<map>' by using
|
||||
codepoints not used for direct output, for example, Combining Diacritical
|
||||
Marks beginning at U+0300. The French Circumflex example can be configured
|
||||
like follows.
|
||||
|
||||
! <mod1>
|
||||
! <key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
|
||||
! </mod1>
|
||||
! <map>
|
||||
! <key name="KEY_Q" code="0x0061"/> <!-- a -->
|
||||
! <key name="KEY_LEFTBRACE" code="0x0302"/> <!-- dead_circumflex -->
|
||||
! </map>
|
||||
! <map mod1="true">
|
||||
! <key name="KEY_Q" code="0x0041"/> <!-- A -->
|
||||
! </map>
|
||||
! <sequence first="0x0302" second="0x0061" code="0x00e2"/> <!-- â -->
|
||||
! <sequence first="0x0302" second="0x0041" code="0x00c2"/> <!-- Â -->
|
||||
|
||||
Fortunately, the configuration is automatically generated by xkb2ifcfg, but
|
||||
admittedly quite extensive. Therefore, we manually amended the chargen
|
||||
configurations before adding them to Genode, which also gave us the chance to
|
||||
apply some adjustments like follows for AltGr in Swiss German.
|
||||
|
||||
! <map mod1="false" mod2="false" mod3="true" mod4="false">
|
||||
! <key name="KEY_1" code="0x00a6"/> <!-- ¦ (*) -->
|
||||
! <key name="KEY_4" code="0x00b0"/> <!-- ° (*) -->
|
||||
! <key name="KEY_5" code="0x00a7"/> <!-- § (*) -->
|
||||
! </map>
|
||||
|
||||
|
||||
Beside the advanced input methods mentioned before, there are still loose ends
|
||||
we are going to address in the upcoming releases. For example, the current key
|
||||
handling in our Qt5 back end maps localized key symbols incorrectly (think
|
||||
AZERTY vs. QWERTY) in combination with shortcuts like Ctrl-A.
|
||||
|
||||
|
||||
64-bit ARM and NXP i.MX8
|
||||
########################
|
||||
|
||||
64-bit ARM support in our custom base-hw kernel
|
||||
-----------------------------------------------
|
||||
|
||||
By introducing rudimentary Raspberry Pi 3 support on top of the Fiasco.OC
|
||||
kernel in the previous release, the first ARM 64-bit support has entered the
|
||||
Genode OS framework. We continued pursuing the ARM 64-bit path and introduce
|
||||
support for Raspberry Pi 3 as well as the i.MX8 evaluation kit (EVK), this
|
||||
time using our own base-hw kernel.
|
||||
|
||||
Noteworthy additions in the base-hw kernel are support for the AARCH64 system
|
||||
level architecture, and the use of the modern GIC v3 interrupt controller on
|
||||
top of the i.MX8 EVK board. In comparison to the GICv2, GICv3 adds support for
|
||||
more than eight CPUs, more than 1020 interrupt IDs, and offers fast register
|
||||
access to the CPU interface, instead of memory-mapped I/O access. Minor
|
||||
changes had to be made to the page-table implementation of ARMv7 with Large
|
||||
Physical Address Extension (LPAE) to re-use it for ARMv8. Moreover, the
|
||||
internal kernel API for TLB maintenance needed to be changed slightly for all
|
||||
ARM platforms.
|
||||
|
||||
We expanded our regular testing infrastructure with two AARCH64 platforms,
|
||||
namely Raspberry Pi 3 via Qemu and the NXP i.MX8 EVK board as physical
|
||||
hardware. Both platforms are driven with a single CPU core only at the moment.
|
||||
|
||||
|
||||
Network driver for i.MX7 and i.MX8
|
||||
----------------------------------
|
||||
|
||||
We updated the 'fec' network driver to version 4.16.3, which adds support for
|
||||
i.MX7 and i.MX8 SoCs. This makes i.MX8 a viable platform for Genode-based
|
||||
networking scenarios.
|
||||
|
||||
|
||||
Enhanced packaging and test infrastructure for ARMv8
|
||||
----------------------------------------------------
|
||||
|
||||
Besides the improved base-hw kernel, we enabled additional infrastructure for
|
||||
ARMv8 platforms. For example, noux packages - like _coreutils_, _bash_ - are
|
||||
now available, the standard C++ library is in place, and support for Genode's
|
||||
port of the Linux TCP/IP stack is enabled.
|
||||
|
||||
Additionally, ARMv8 is now regularly tested within our nightly
|
||||
_depot_autopilot_ runs.
|
||||
|
||||
|
||||
Base framework and OS-level infrastructure
|
||||
##########################################
|
||||
|
||||
Tracing
|
||||
=======
|
||||
|
||||
Support for fast tracing has been built into Genode for a long time. However,
|
||||
the stakes to take advantage of this feature remained high because convenience
|
||||
functions were not in place. With the current release, we added the support
|
||||
for easy trace setups through a VFS plugin. The plugin is called _vfs_trace_
|
||||
and can be mounted into a Genode component as follows:
|
||||
|
||||
!<config>
|
||||
! <vfs>
|
||||
! <trace ram=32MB/>
|
||||
! </vfs>
|
||||
!</config>
|
||||
|
||||
This configuration will create a trace file system at the root of the VFS. The
|
||||
_ram_ attribute is mandatory and determines the maximum size of all trace
|
||||
buffers. The file system forms a recursive directory structure that represents
|
||||
the parent/child relationship of running components, whereas the leaf
|
||||
directories represent single threads within a component. Each leaf directory
|
||||
currently contains three files:
|
||||
|
||||
:'enable': Start or stop the tracing of a thread by writing "true" or "false"
|
||||
into the file.
|
||||
|
||||
:'buffer_size': Allows for the configuration of the trace-buffer size for the
|
||||
thread in the usual Genode format (e.g. 5M, 512K, 1024).
|
||||
|
||||
:'trace_buffer': This read-only file contains the current content of the trace
|
||||
buffer. Each trace entry can only be read once, after that only new entries
|
||||
appear. "tail -f" can also be used to display continuous output.
|
||||
|
||||
As an example, tracing is started by writing _true_ to the _enable_ file:
|
||||
|
||||
! echo "true" > enable
|
||||
|
||||
The trace buffer can then be displayed using Unix tools like _tail_
|
||||
|
||||
! tail -f trace_buffer
|
||||
|
||||
which provides a continuous output.
|
||||
|
||||
Additionally, we have added the _trace_ function to _base/log.h_ that
|
||||
facilitates identical functionality as _Genode::log_
|
||||
|
||||
! Genode::trace("Tracepoint value: ", value);
|
||||
|
||||
In order to enable tracing, the parent must provide the "TRACE" service. For a
|
||||
real world example on Sculpt OS, please refer to this
|
||||
[https://genodians.org/ssumpf/2019-06-18-trace_fs - Genodians article].
|
||||
|
||||
With the _vfs_trace_ plugin in place, we removed the outdated _trace_fs_.
|
||||
|
||||
|
||||
Consolidation of the C runtime and Noux
|
||||
=======================================
|
||||
|
||||
On our [https://genode.org/about/road-map#August_-_Release_19.08 - road map],
|
||||
we vaguely hinted at our plan for the "consolidation" of the noux runtime,
|
||||
which is actually meant as a polite way of announcing that we are going to
|
||||
remove it. We introduced the
|
||||
[https://genode.org/documentation/release-notes/11.02#Noux_-_an_execution_environment_for_the_GNU_userland - Noux runtime]
|
||||
in 2011 as a way to execute command-line-based GNU software directly on
|
||||
Genode. It has served us well over the years and is - in fact - a crucial
|
||||
ingredient of Sculpt OS and other system scenarios such as the Genodians.org
|
||||
web server. Noux supplements Genode with two valuable assets, namely a
|
||||
flexible and expandable virtual file system (VFS) layer, and the
|
||||
implementation of the
|
||||
[https://genode.org/documentation/release-notes/12.02#Noux_support_for_fork_semantics - Unix way]
|
||||
to spawn applications ('fork' and 'execve').
|
||||
|
||||
In the
|
||||
[https://genode.org/documentation/release-notes/17.02#Enhanced_VFS_infrastructure - meantime],
|
||||
noux' VFS implementation has become independent from the noux runtime and is
|
||||
now prominently employed by Genode's C runtime and the VFS server component.
|
||||
Genode's C runtime became more and more complete, alleviating the use of noux
|
||||
as POSIX compatibility layer except for programs that depended on a working
|
||||
implementation of 'fork' and 'execve'.
|
||||
|
||||
The current release fills this remaining gap in Genode's C runtime by
|
||||
providing 'fork', 'execve', and cousins such as 'wait4' and 'getpid' as
|
||||
regular parts of the libc. This will eventually make noux redundant.
|
||||
|
||||
Note that this change does *NOT* make Genode reliant on POSIX. The C runtime
|
||||
including the Unix features are entirely optional.
|
||||
|
||||
As one stepping stone of this undertaking, noux applications, which previously
|
||||
had to be compiled for noux, have become binary compatible with the regular C
|
||||
runtime. So one can execute programs like 'bash' directly as a Genode
|
||||
component without any friction.
|
||||
|
||||
There are a few collateral improvements of Genode's dynamic linker and the C
|
||||
runtime on the account of the new 'fork' and 'execve' implementation. E.g., in
|
||||
addition to the already supported 'stdin', 'stdout', and 'stderr'
|
||||
configuration, the libc can be instructed to initialize arbitrary file
|
||||
descriptors as follows:
|
||||
|
||||
! <config>
|
||||
! ...
|
||||
! <libc ...>
|
||||
! <fd id="3" path="/dev/log" writeable="yes" readable="no" seek="10"/>
|
||||
! ...
|
||||
! </libc>
|
||||
! </config>
|
||||
|
||||
The libc-based implementation of 'fork' and 'execve' can be tried out via
|
||||
the new _ports/run/bash.run_ script. Note that there are still a number of
|
||||
limitations such as the lack of signal and ioctl handling. Pipes are not
|
||||
supported, and shebangs ('#!') are not interpreted yet. That said, once those
|
||||
missing pieces come into place, we can fade out the use of noux within Genode.
|
||||
|
||||
|
||||
General system time concept
|
||||
===========================
|
||||
|
||||
Briefly speaking, up to now there has been no notion of an overall concept of
|
||||
system time in Genode. Components that need to have access to some kind of
|
||||
real time are either configured locally, e.g., libc-based components access a
|
||||
configured "device" (/dev/rtc), which just might be an inline file system
|
||||
containing an artificial timestamp or the VFS RTC plugin, while other
|
||||
components query some RTC session directly. Most of the time, this session is
|
||||
provided by the 'rtc_drv' on x86 machines, which is somewhat costly as reading
|
||||
the RTC via I/O ports takes time and is therefore done scarcely. For example,
|
||||
the libc will query an RTC source only once and uses this initial value to
|
||||
interpolate the current time. However, for executing long-running components,
|
||||
it will be necessary to adjust the clock to compensate for any occurring clock
|
||||
drift or to correct a misconfigured clock in general. In addition it is
|
||||
desirable to be able to use a remote time source, e.g., an NTP-server, to
|
||||
synchronize the system time.
|
||||
|
||||
To address this, we came up with the following concept:
|
||||
|
||||
[image system_rtc]
|
||||
|
||||
The new "System RTC" component, located at
|
||||
_repos/libports/src/server/system_rtc_, acts as proxy for the RTC service in
|
||||
front of the actual RTC driver. It uses the driver to get the initial RTC
|
||||
value and then uses a timer session (via the timeout framework) to locally
|
||||
interpolate the time. In contrast to querying the RTC driver, querying the
|
||||
System RTC is fast.
|
||||
|
||||
The RTC driver and the System RTC are bundled up together in the new
|
||||
_drivers-rtc-pc_ package. The runtime of this package requests two ROM modules
|
||||
used to update the RTC value. The first one, named 'system_set_rtc', is used
|
||||
to update the proxy component while the second one, called 'hw_set_rtc', is
|
||||
used by the RTC driver to write the value into the battery-backed RTC. A
|
||||
separate component, potentially accessing a remote time source, may generate
|
||||
these ROMs to adjust the time in the package's runtime.
|
||||
|
||||
The new native *SNTP* client at _repos/libports/src/app/sntp_client_ is such a
|
||||
component. It periodically requests the current time from a given SNTP server
|
||||
and generates a report. The report produced by the component contains the time
|
||||
as UTC/GMT. Depending on the system policy, it can be used to update the time
|
||||
of the System RTC and/or instruct the driver to set the RTC value.
|
||||
|
||||
To propagate such changes to RTC values, the RTC session was enhanced by the
|
||||
new 'set' signal. A client of the session can install a signal handler to
|
||||
adapt its own time when necessary. Based on this, the time back end of the
|
||||
libc was changed to instantiate a watch handler for the RTC device, which,
|
||||
when triggered, will cause the libc to re-read the RTC value.
|
||||
|
||||
This constellation should, under normal operation, allow for second to
|
||||
sub-second granularity updates of the overall system time and avoid drifting
|
||||
away from network time.
|
||||
|
||||
|
||||
Accessing SMBIOS tables
|
||||
=======================
|
||||
|
||||
The System Management BIOS (SMBIOS) is a specification that allows for reading
|
||||
management information produced by the BIOS of a system as a collection of
|
||||
data structures in memory. It has the potential to eliminate the need for the
|
||||
operating system to probe hardware for discovering present devices and their
|
||||
characteristics. Nowadays, the SMBIOS specification is implemented widely in
|
||||
PC systems, which includes modern UEFI systems as well. The data structures
|
||||
are referred to as _tables_ or _records_ by public documentation.
|
||||
|
||||
The new native SMBIOS decoder at _os/src/app/smbios_decoder_ can be used on
|
||||
x86 to parse SMBIOS tables and report gathered information in a human-readable
|
||||
way. Besides general table information like number and size of structures,
|
||||
etc., the component supports complete parsing of SMBIOS structures of types
|
||||
"BIOS", "System", and "Baseboard".
|
||||
|
||||
The component is free from any code for acquiring an SMBIOS table through
|
||||
means like the bootloader or BIOS information. It expects a table to be
|
||||
present through a regular Genode ROM session with a 'smbios_table' label. This
|
||||
way, the underlying system is required to find, select, and save the raw table
|
||||
on startup and create a ROM module out of it. This is currently achieved on
|
||||
NOVA and base-hw through an interplay of kernel, the core component, and the
|
||||
ACPI driver and was tested for legacy BIOSes as well as UEFI systems.
|
||||
|
||||
|
||||
Clipboard
|
||||
=========
|
||||
|
||||
Genode introduced a principle copy-and-paste mechanism already
|
||||
[https://genode.org/documentation/release-notes/15.11#Copy_and_paste - four years ago].
|
||||
However, originally created as a part of a tech demo, the mechanism remained
|
||||
unused in our day to day Genode work. This changed now. We took the
|
||||
integration of copy-and-paste support in Sculpt OS as an opportunity to revive
|
||||
and refine the existing mechanism and supplement it with the features needed
|
||||
to make it practical for daily use. We believe that the result aligns ease of
|
||||
use nicely with security. The concept is described in a
|
||||
[https://genodians.org/nfeske/2019-07-03-copy-paste - dedicated article]
|
||||
at Genodians.org.
|
||||
|
||||
On a technical level, the existing clipboard component has received a new
|
||||
option that allows for dynamic information-flow policies based on user
|
||||
interactivity (keyboard focus, activity). When setting the config attribute
|
||||
'match_labels="yes"', the clipboard performs plausibility checks for copy and
|
||||
paste operations against the focus of the Nitpicker GUI server. All aspects of
|
||||
the clipboard policy - including information-flow policies - have become
|
||||
reconfigurable.
|
||||
|
||||
To make window-manager clients compatible with the clipboard's dynamic policy,
|
||||
the window manager got enhanced with the ability to proxy the interaction with
|
||||
the clipboard. GUI clients in turn - in particular the graphical *terminal* -
|
||||
became able to interact with the clipboard. With the '<config>' attribute
|
||||
'copy="yes"' specified, the terminal allows the user to select text to be
|
||||
reported to a "clipboard" report. The selection mode is activated by holding
|
||||
the left shift key. While the selection mode is active, the text position
|
||||
under the mouse pointer is highlighted and the user can select text via the
|
||||
left mouse button. Upon release of the mouse button, the selection is
|
||||
reported. Vice versa, with the '<config>' attribute 'paste="yes"' specified,
|
||||
the terminal allows the user to paste the content of a "clipboard" ROM session
|
||||
to the terminal client by pressing the middle mouse button.
|
||||
|
||||
Finally, we integrated those new abilities into Sculpt OS and into several
|
||||
installable packages, including virtual machines, the noux-system package,
|
||||
and graphical Qt5-based applications.
|
||||
|
||||
|
||||
Enhanced SSH terminal
|
||||
=====================
|
||||
|
||||
This release paves the way for remotely managing Genode devices over SSH.
|
||||
Until now, only interactive SSH sessions were supported. It is now possible to
|
||||
execute commands from a remote SSH client. E.g., 'ssh noux@localhost -p 5555
|
||||
"ls -hal /bin/"'. For non-interactive sessions, ssh_terminal requires a helper
|
||||
component. This component is responsible to create the environment for the
|
||||
command to run in. You can find an example for such a component at
|
||||
_gems/src/test/exec_terminal_. It starts noux in a sub init and executes the
|
||||
provided command inside of it. The new _ssh_exec_channel.run_ script gives a
|
||||
demonstration on how this feature can be used.
|
||||
|
||||
This work is a contribution by Sid Hussmann of
|
||||
[https://gapfruit.com - Gapfruit]. Thanks for this great new feature!
|
||||
|
||||
|
||||
Storage-stack improvements
|
||||
==========================
|
||||
|
||||
The desire of one Genode developer to exchange data via Iomega ZIP drives
|
||||
between an Atari Falcon and Sculpt OS called for a number of small
|
||||
improvements across several components of the storage stack.
|
||||
|
||||
First, the USB-block driver has been changed to exit on an initialization
|
||||
failure instead of waiting for another (supported) device. This change enables
|
||||
the Sculpt manager to detect such conditions and release the USB device
|
||||
hardware by removing the driver component. Such a failed initialization may
|
||||
happen with exotic USB-storage devices such as ZIP drives. With the device
|
||||
released, however, it can be assigned to a virtual machine to access it using
|
||||
a guest OS with a broader support of devices.
|
||||
|
||||
Second, the USB-block driver received new support for issuing the SCSI
|
||||
START-STOP command at initialization time, thereby overcoming the ZIP-drive
|
||||
initialization failure.
|
||||
|
||||
Third, we enhanced the part-block component with the ability to parse AHDI
|
||||
partition schemes and detect the GEMDOS variant of FAT as used by Atari TOS.
|
||||
|
||||
Fourth, we enabled the Rump VFS plugin to access GEMDOS file systems. The
|
||||
GEMDOS variant is readily supported by NetBSD's "msdos" file-system driver.
|
||||
However, it must explicitly be enabled by a mount flag. Hence, we added the
|
||||
principle ability for passing mount flags to NetBSD file-system drivers and
|
||||
enabled the MSDOSFSMNT_GEMDOSFS flag based on the VFS plugin's config
|
||||
attribute 'gemdos="yes"'.
|
||||
|
||||
With these changes in place, data can now be exchanged directly between
|
||||
Atari-formatted disks and Sculpt OS. That said, advanced use cases such as
|
||||
media changes at runtime are not covered yet.
|
||||
|
||||
|
||||
Updated Ada/SPARK runtime
|
||||
=========================
|
||||
|
||||
Genode's Ada/SPARK runtime is developed and maintained by
|
||||
[https://componolit.com - Componolit]. Thanks for this excellent
|
||||
collaboration!
|
||||
|
||||
The updated Componolit Ada runtime 1.1.0 increases the proof coverage and
|
||||
cleans up the source-code structure. SPARK mode is now enabled wherever
|
||||
possible and unneeded abstractions have been removed. Furthermore, the 64-bit
|
||||
addition and subtraction have been proven to be free of runtime errors.
|
||||
As a new feature, the runtime now supports the use of inline assembly in Ada.
|
||||
|
||||
The removal of unneeded features such as the incomplete threading support for
|
||||
the secondary stack has greatly reduced the runtime's complexity while keeping
|
||||
the current functionality available. Also GNAT.IO has been removed as its
|
||||
implementation was incomplete and complex. A simpler replacement has been
|
||||
introduced with 'Componolit.Runtime.Debug'.
|
||||
|
||||
Unrelated to Genode, the runtime now supports [https://muen.sk/ - Muen] and
|
||||
the API/ABI of the runtime has been separated from the GNAT ABI.
|
||||
|
||||
|
||||
Libraries and applications
|
||||
##########################
|
||||
|
||||
Updated Qt5
|
||||
===========
|
||||
|
||||
We updated our Qt5 port to the latest upstream version 5.13.0. Before
|
||||
preparing the 'qt5' port, please make sure to build and install the updated
|
||||
Qt5 host tools with the 'tool/tool_chain_qt5' script.
|
||||
|
||||
|
||||
Virtualization
|
||||
==============
|
||||
|
||||
As follow-up of our work on the
|
||||
[https://genode.org/documentation/release-notes/19.05#Kernel-agnostic_virtual-machine_monitors - kernel agnostic virtual-machine monitor interface]
|
||||
on x86, we added principle support to run our port of VirtualBox on
|
||||
Genode/Fiasco.OC. We write _principle_ support, since we managed to get the
|
||||
VMM running with Fiasco.OC, but unfortunately not all features required by the
|
||||
VMM are available using the Fiasco.OC kernel, e.g., guest FPU registers, PDPTE
|
||||
registers, and task-priority support. In practice this means that the VMs with
|
||||
Windows and Linux come up to a certain point but will fail later whenever the
|
||||
guest state runs out of synchronization between VMM and hardware. In contrast,
|
||||
the Seoul VMM runs fine on Fiasco.OC since it does not depend on the mentioned
|
||||
missing features.
|
||||
|
||||
Our main working items have been the completion of transfer of the available
|
||||
guest registers and control flow synchronization improvements between VMM and
|
||||
Fiasco.OC kernel. Additionally, the usage of priorities for VirtualBox's
|
||||
pthreads in the VMM had to be disabled. Finally, some tests for VirtualBox
|
||||
with Genode/Fiasco.OC are enabled for nightly regular testing now.
|
||||
|
||||
As a side topic, we added support for using the VirtualBox
|
||||
[https://forums.virtualbox.org/viewtopic.php?f=2&t=82299&start=15 - CPU profile]
|
||||
feature, which allows for presenting a different CPUID to the VM than the one
|
||||
of the real CPU. This can help when running Windows 7 on a Kaby Lake or newer
|
||||
CPU, which are considered _unsupported hardware_ and reason enough not to
|
||||
receive security updates from Microsoft. The feature can be used on Genode by
|
||||
adding the 'CpuProfile' attribute to the '<CPU>' XML node in the .vbox file,
|
||||
like:
|
||||
|
||||
! <CPU CpuProfile="Intel Core i7-5600U">
|
||||
|
||||
|
||||
Disposable VM for handling captive portals
|
||||
==========================================
|
||||
|
||||
It is common that WiFi networks require the user to interact with a specific
|
||||
web page before gaining access to full network functionality. Such captive
|
||||
portal pages are completely individual to the accessed network and not limited
|
||||
in the use of common web techniques. Therefore, their handling is best be done
|
||||
using a fully-featured web browser like Mozilla Firefox.
|
||||
|
||||
This is where, in a Genode-based desktop system like Sculpt, a disposable VM
|
||||
for hosting a minimal browser setup becomes desirable. Its goal is to unlock a
|
||||
network for the native Genode surroundings with as little inconvenience as
|
||||
possible just to be thrown away afterwards without any side effects on the
|
||||
system.
|
||||
|
||||
Now, one could use the Firefox appliance VM of Sculpt (see the
|
||||
[https://genode.org/documentation/release-notes/18.05 - release notes] or the
|
||||
[http://genodians.org/alex-ab/2019-03-06-disposal-browser-vm - Genodians article])
|
||||
for this. But this VM aims for a long-term browsing experience which, in the
|
||||
context of mere captive-portal handling, brings some drawbacks like a much
|
||||
higher RAM consumption or the required sessions for USB detection and shared
|
||||
folders.
|
||||
|
||||
Furthermore, in the captive portal VM, there's no need for managing windows or
|
||||
browser tabs. The one browser tab needed can always be shown in fullscreen. It
|
||||
is also unnecessary for the browser to maintain a content cache or remember
|
||||
user data. This can reduce resource consumption.
|
||||
|
||||
[image captive_portal_vm]
|
||||
|
||||
The VM we came up with is provided as package for Sculpt by Martin Stein
|
||||
(depot user 'mstein'). You'll possibly need to manually add Martin's
|
||||
[https://github.com/genodelabs/genode/tree/master/depot/mstein - depot key and download location]
|
||||
to your Sculpt depot directory. After enabling this user, the captive portal
|
||||
VM can be found in the Sculpt menu under "Depot -> mstein -> Virtual
|
||||
Machines -> vbox5-nova-captive-portal".
|
||||
|
||||
The VM is based on a TinyCore 10 Linux with Xserver, i3 WM, and a tailored
|
||||
Firefox browser. The package runtime doesn't need access to your file system,
|
||||
it merely loads some ROMs into a RAM FS, so, it will completely forget any
|
||||
changes made during a session. Therefore, it's also safe to simply remove an
|
||||
instance via the Leitzentrale component-view once you don't need it anymore.
|
||||
The guest additions are also included to make the VM window resizable.
|
||||
|
||||
|
||||
Build system and tools
|
||||
######################
|
||||
|
||||
At Genode Labs, we have used _tool/autopilot_ for the steering of tests in our
|
||||
Continuous Integration workflow for almost a decade now. This implied various
|
||||
improvements over the years and with the completion of our work on
|
||||
[https://genode.org/documentation/release-notes/19.05#Unified_build_directories_for_ARM - unified build directories]
|
||||
it was time to amend this handy tool once again. Unified build directories
|
||||
support building all components for one CPU architecture in one directory
|
||||
saving the build server from the redundant work we previously had with
|
||||
board-specific directories. With the new notion of boards during builds, the
|
||||
definition of the target platform when integrating Genode system scenarios is
|
||||
now a triplet of _CPU architecture_, _board_, and _kernel_. This is reflected
|
||||
in the new '-t <architecture-board-kernel>' command line option, which
|
||||
instructs autopilot to generate a build directory for _architecture_ and
|
||||
execute tests for the _board-kernel_ combination.
|
||||
|
||||
! autopilot -t x86_64-pc-sel4 -t x86_64-pc-nova -r run/log
|
||||
|
||||
The known options for '-k kernel' and '-p platform' are still supported with
|
||||
the small change that the platform must now be defined as
|
||||
_architecture-board_.
|
||||
|
||||
! autopilot -p x86_64-pc -k sel4 -k nova -r run/log
|
||||
|
||||
Autopilot now also documents the hidden feature to propagate custom 'RUN_OPTs'
|
||||
via the 'RUN_OPT_AUTOPILOT' environment variable to the run tool executed.
|
||||
Besides that, the tool always appends 'RUN_OPT' with '--autopilot'.
|
||||
|
||||
! RUN_OPT_AUTOPILOT="--depot-dir /data/depot" autopilot ...
|
||||
|
|
@ -0,0 +1,815 @@
|
|||
|
||||
|
||||
===============================================
|
||||
Release notes for the Genode OS Framework 19.11
|
||||
===============================================
|
||||
|
||||
Genode Labs
|
||||
|
||||
|
||||
|
||||
On our [https://genode.org/about/road-map - road map] for this year, we stated
|
||||
"bridging worlds" as our guiding theme of 2019. The current release pays
|
||||
tribute to this ambition on several accounts.
|
||||
|
||||
First, acknowledging the role of POSIX in the real world outside the heavens
|
||||
of Genode, the release vastly improves our (optional) C runtime with respect
|
||||
to the emulation of POSIX signals, execve, and ioctl calls. With the line of
|
||||
work described in Section [C runtime with improved POSIX compatibility], we
|
||||
hope to greatly reduce the friction when porting and hosting existing
|
||||
application software directly on Genode.
|
||||
|
||||
Second, we identified the process of porting or developing application
|
||||
software worth improving. Our existing tools were primarily geared to
|
||||
operating-system development, not application development. Application
|
||||
developers demand different work flows and tools, including the freedom to use
|
||||
a build system of their choice.
|
||||
Section [New tooling for bridging existing build systems with Genode]
|
||||
introduces our new take on this productivity issue.
|
||||
|
||||
Third, in cases where the porting of software to Genode is considered
|
||||
infeasible, virtualization comes to the rescue. With the current release, a
|
||||
new virtual machine monitor for the 64-bit ARM architecture enters the
|
||||
framework. It is presented in Section [Virtualization of 64-bit ARM platforms].
|
||||
|
||||
As another goal for 2019, we envisioned a solution for block-level device
|
||||
encryption, which is a highly anticipated feature among Genode users. We are
|
||||
proud to present the preliminary result of our year-long development in
|
||||
Section [Preliminary block-device encrypter].
|
||||
|
||||
|
||||
Preliminary block-device encrypter
|
||||
##################################
|
||||
|
||||
Over the past year, we worked on implementing a block-device encryption
|
||||
component that makes use of the
|
||||
[https://en.wikipedia.org/wiki/SPARK_(programming_language) - SPARK]
|
||||
programming language for its core logic. In contrast to common
|
||||
block-device encryption techniques where normally is little done besides
|
||||
the encryption of the on-disk blocks, the _consistent block encrypter (CBE)_
|
||||
aims for more. It combines multiple techniques to ensure integrity -
|
||||
the detection of unauthorized modifications of the block-device -
|
||||
and robustness against data loss. Robustness is achieved by keeping snapshots
|
||||
of old states of the device that remain unaffected by the further operation of
|
||||
the device. A copy-on-write mechanism (only the differential changes to the
|
||||
last snapshot are stored) is employed to maintain this snapshot history with
|
||||
low overhead. To be able to access all states of the device in the same manner,
|
||||
some kind of translation from virtual blocks to blocks on the device is needed.
|
||||
Hash-trees, where each node contains the hash of its sub-nodes, combine the
|
||||
aspect of translating blocks and ensuring their integrity in an elegant way.
|
||||
During the tree traversal, the computed hash of each node can be easily checked
|
||||
against the hash stored in the parent node.
|
||||
|
||||
The CBE does not perform any cryptography by itself but delegates
|
||||
cryptographic operations to another entity. It neither knows nor cares about
|
||||
the used algorithm. Of all the nodes in the virtual block device (VBD), only
|
||||
the leaf nodes, which contain the data, are encrypted. All other nodes, which
|
||||
only contain meta-data, are stored unencrypted.
|
||||
|
||||
Design
|
||||
------
|
||||
|
||||
As depicted in Figure [cbe_trees], all information describing the various
|
||||
parts of the CBE is stored in the superblock. The referenced VBD is a set of
|
||||
several hash trees, each representing a certain device state including the
|
||||
current working state. Only the tree of the current working state is used to
|
||||
write data to the block device. All other trees represent snapshots of older
|
||||
states and are immutable. Each stored device state has a generation number
|
||||
that provides the chronological order of the states.
|
||||
|
||||
As you can see, in the depicted situation, there exist four device states - the
|
||||
snapshot with generation 3 is the oldest, followed by two newer snapshots and
|
||||
generation 6 that marks the working state of the virtual device. The tree with
|
||||
generation 6 is the current working tree. Each tree contains all changes done
|
||||
to the VBD since the previous generation (for generation 6 the red nodes). All
|
||||
parts of a tree that didn't change since the previous generation are references
|
||||
into older trees (for generation 6 the gray nodes). Note that in the picture,
|
||||
nodes that are not relevant for generation 6 are omitted to keep it manageable.
|
||||
The actual data blocks of the virtual device are the leaf nodes of the trees,
|
||||
shown as squares.
|
||||
|
||||
[image cbe_trees]
|
||||
|
||||
Whenever a block request from the client would override data blocks in
|
||||
generation 6 that are still referenced from an older generation, new blocks for
|
||||
storing the changes are needed. Here is where the so-called _Free Tree_ enters
|
||||
the picture. This tree contains and manages the spare blocks. Spare blocks are
|
||||
a certain amount of blocks that the CBE has in addition to the number of blocks
|
||||
needed for initializing the virtual device. So, after having initialized a
|
||||
virtual device, they remain unused and are only referenced by the Free Tree.
|
||||
Therefore, in case the VBD needs new blocks, it consults the Free Tree (red
|
||||
arrow).
|
||||
|
||||
In the depicted situation, writing the first data block (red square) would
|
||||
require allocating 4 new blocks as all nodes in the branch leading to the
|
||||
corresponding leaf node - including the leaf node itself - have to be written.
|
||||
In contrast, writing the second data block would require allocating only one
|
||||
new block as the inner nodes (red circles) now already exist. Subsequent write
|
||||
requests affecting only the new blocks will not trigger further block
|
||||
allocations because they still belong to the current generation and will be
|
||||
changed in-place. To make them immutable we have to create a new snapshot.
|
||||
|
||||
The blocks in generation 5 that were replaced by the change to generation 6
|
||||
(blue nodes) are not needed for the working state of the virtual device
|
||||
anymore. They are therefore, in exchange for the allocated blocks, added to
|
||||
the Free Tree. But don't be fooled by the name, they are not free for
|
||||
allocation yet, but marked as "reserved" only. This means, they are
|
||||
potentially still part of a snapshot (as is the case in our example) but the
|
||||
Free Tree shall keep checking, because once all snapshots that referenced the
|
||||
blue blocks have disappeared, they become free blocks and can be allocated
|
||||
again.
|
||||
|
||||
To create a new snapshot, we first have to make all changes done to the VBDs
|
||||
working state as well as the Free Tree persistent by writing all corresponding
|
||||
blocks to the block-device. After that, the new superblock state is written to
|
||||
the block-device. To safeguard this operation, the CBE always maintains several
|
||||
older states of the superblock on the block device. In case writing the new
|
||||
state of the superblock fails, the CBE could fall back to the last state that,
|
||||
in our example, would contain only generations 3, 4, and 5. Finally, the
|
||||
current generation of the superblock in RAM is incremented by one (in the
|
||||
example to generation 7). Thereby, generation 6 becomes immutable.
|
||||
|
||||
A question that remains is when to create snapshots. Triggering a snapshot
|
||||
according to some heuristics inside the CBE might result in unnecessary
|
||||
overhead. For instance, the inner nodes of the tree change frequently during a
|
||||
sequential operation. We might not want them to be re-allocated all the time.
|
||||
Therefore, the creation of a snapshot must be triggered explicitly from the
|
||||
outside world. This way, we can accommodate different strategies, for
|
||||
instance, client-triggered, time-based, or based on the amount of data
|
||||
written.
|
||||
|
||||
When creating a snapshot, it can be specified whether it shall be disposable
|
||||
or persistent. A disposable snapshot will be removed automatically by the CBE
|
||||
in two situations, either
|
||||
|
||||
* When there are not enough usable nodes in the Free Tree left to
|
||||
satisfy a write request, or
|
||||
* When creating a new snapshot and all slots in the superblock that might
|
||||
reference snapshots are already occupied.
|
||||
|
||||
A persistent snapshot, or quarantine snapshot, on the other hand will never be
|
||||
removed automatically. Its removal must be requested explicitly.
|
||||
|
||||
During initialization, the CBE selects the most recent superblock and reads the
|
||||
last generation value from it. The current generation (or working state
|
||||
generation) is then set to the value incremented by one. Since all old blocks,
|
||||
that are still referenced by a snapshot, are never changed again, overall
|
||||
consistency is guaranteed for every generation whose superblock was stored
|
||||
safely on disk.
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
|
||||
Although we aimed for a SPARK implementation of the CBE, we saw several
|
||||
obstacles with developing it in SPARK right from the beginning. These obstacles
|
||||
mainly came from the fact that none of us was experienced in designing
|
||||
complex software in SPARK. So we started by conducting a rapid design-space
|
||||
exploration using our mother tongue (C++) while using only language features
|
||||
that can be mapped 1:1 to SPARK concepts. Additionally, we applied a clear
|
||||
design methodology that allowed us to keep implementation-to-test cycles
|
||||
small and perform a seamless and gradual translation into SPARK:
|
||||
|
||||
* _Control flow_
|
||||
|
||||
The core logic of the CBE is a big state machine that doesn't block. On each
|
||||
external event, the state machine gets poked to update itself accordingly.
|
||||
C++ can call SPARK but SPARK never calls C++. The SPARK code therefore
|
||||
evolves as self-contained library.
|
||||
|
||||
* _Modularity_
|
||||
|
||||
The complex state machine of the CBE as a whole is split-up into smaller
|
||||
manageable sub-state-machines, working independently from each other. These
|
||||
modules don't call each other directly. Instead, an additional superior
|
||||
module handles the interplay. This is done by constantly iterating over all
|
||||
modules with the following procedure until no further progress can be made:
|
||||
|
||||
# Try to enter requests of other modules into the current one
|
||||
# Poke the state machine of the current module
|
||||
# The current module may have generated requests - Try to enter them into
|
||||
the targeted modules
|
||||
# The current module may have finished requests - Acknowledge them at the
|
||||
modules they came from
|
||||
|
||||
Each module is represented through a class (C++) respectively a package with
|
||||
a private state record (SPARK).
|
||||
|
||||
* _No global state_
|
||||
|
||||
There are no static (C++) or package (SPARK) variables. All state is kept in
|
||||
members of objects (C++) respectively records (SPARK). All packages are pure
|
||||
and sub-programs have no side-effects. Therefore, memory management and
|
||||
communication with other components is left to OS glue-code outside the
|
||||
core logic.
|
||||
|
||||
This approach worked out well. Module by module, we were able to translate the
|
||||
C++ prototype to SPARK without long untested phases, rendering all regression
|
||||
bugs manageable. In Genode, the CBE library is currently integrated through
|
||||
the CBE-VFS plugin. Figure [cbe_modules] depicts its current structure and the
|
||||
integration via VFS plugin.
|
||||
|
||||
[image cbe_modules]
|
||||
|
||||
The green and blue boxes each represent an Ada/SPARK package. The translation
|
||||
to SPARK started at the bottom of the picture moving up to the more abstract
|
||||
levels until it reached the Library module. This is the module that handles
|
||||
the interplay of all other modules. Its interface is the front end of the CBE
|
||||
library. So, all green packages are now completely written in SPARK and
|
||||
together form the CBE library. Positioned above, the CXX library in blue is
|
||||
brought in by a separate library and exports the CBE interface to C++. This
|
||||
way, the CBE can also be used in other environments including pure SPARK
|
||||
programs. The CXX Library package is not written in SPARK but Ada and performs
|
||||
all the conversions and checks required to meet the preconditions set by the
|
||||
SPARK packages below.
|
||||
|
||||
At the C++ side, we have the VFS plugin. Even at this level, the already
|
||||
mentioned procedure applies: The plugin continuously tries to enter requests
|
||||
coming from the VFS client (above) into the CBE (below), pokes the CBE state
|
||||
machine, and puts thereby generated block/crypto requests of the CBE into the
|
||||
corresponding back-ends (left). This process is repeated until there is no
|
||||
further progress without waiting for an external event.
|
||||
|
||||
Current state
|
||||
-------------
|
||||
|
||||
In its current state, the CBE library is still pretty much in flux and is not
|
||||
meant for productive use.
|
||||
|
||||
As the Free Tree does not employ copy-on-write semantics for its meta-data, a
|
||||
crash, software- or hardware-wise, will corrupt the tree structure and renders
|
||||
the CBE unusable on the next start.
|
||||
|
||||
This issue is subject to ongoing work. That being said, there are
|
||||
components that, besides being used for testing, show how the interface of the
|
||||
CBE library lends itself to be integrated in components in different ways. At
|
||||
the moment, there are two components making use of the CBE library as
|
||||
block-device provider.
|
||||
|
||||
The first one is the aforementioned CBE-VFS plugin. Besides r/w access to the
|
||||
working tree and r/o access to all persistent snapshots, it also provides a
|
||||
management interface where persistent snapshots can be created or discarded.
|
||||
Its current layout is illustrated by Figure [cbe_vfs]. The VFS plugin
|
||||
generates three top directories in its root directory. The first one is the
|
||||
_control_ directory. It contains several pseudo files for managing the CBE:
|
||||
|
||||
[image cbe_vfs]
|
||||
|
||||
:'key': set a key by writing a string into the file.
|
||||
:'create_snapshot': writing 'true' to this file will attempt to create
|
||||
a new snapshot. (Eventually the snapshot will
|
||||
appear in the 'snapshots' directory if it could be
|
||||
created successfully.)
|
||||
:'discard_snapshot': writing a snapshot ID into this file will discard
|
||||
the snapshot
|
||||
|
||||
The second is the 'current' directory. It gives access to the current
|
||||
working tree of the CBE and contains the following file:
|
||||
|
||||
:'data': this file represents the virtual block device and gives
|
||||
read and write access to the data stored by the CBE.
|
||||
|
||||
The third and last is the 'snapshots' directory. For each persistent snapshot,
|
||||
there is a sub-directory named after the ID of the snapshot. This directory,
|
||||
like the 'current' directory, contains a 'data' file. This file, however,
|
||||
gives only read access to the data belonging to the snapshot.
|
||||
|
||||
The CBE-VFS plugin itself uses the VFS to access the underlying block device.
|
||||
It utilizes the file specified in its configuration. Here is a '<vfs>'
|
||||
snippet that shows a configured CBE-VFS plugin where the block device is
|
||||
provided by the block VFS plugin.
|
||||
|
||||
! <vfs>
|
||||
! <dir name="dev">
|
||||
! <block name="block"/>
|
||||
! <cbe name="cbe" block="/dev/block"/>
|
||||
! </dir>
|
||||
! </vfs>
|
||||
|
||||
An exemplary ready-to-use run script can be found in the CBE repository
|
||||
at _run/cbe_vfs_snaps.run_. This run script uses a bash script to
|
||||
automatically perform a few operations on the CBE using the VFS plugin.
|
||||
Afterwards it will drop the user into a shell where further operations
|
||||
can be performed manually, e.g.:
|
||||
|
||||
! dd if=/dev/zero of=/dev/cbe/current/data bs=4K
|
||||
|
||||
The second component is the CBE server. In contrast to the CBE-VFS plugin,
|
||||
it is just a simple block-session proxy component that uses a block connection
|
||||
as back end to access a block-device. It provides a front-end block session to
|
||||
its client, creates disposable snapshots every few seconds, and uses the
|
||||
'External_Crypto' library to encrypt the data blocks using AES-CBC-ESSIV. The
|
||||
used key is a plain passphrase. The following snippet illustrates its
|
||||
configuration:
|
||||
|
||||
! <start name="cbe">
|
||||
! <resource name="RAM" quantum="4M"/>
|
||||
! <provides><service name="Block"/></provides>
|
||||
! <config sync_interval="5" passphrase="All your base are belong to us"/>
|
||||
! </start>
|
||||
|
||||
The _run/cbe.run_ run script in the CBE repository showcases the use of the
|
||||
CBE server.
|
||||
|
||||
Both run scripts will create the initial CBE state in a RAM-backed
|
||||
block device that is then accessed by the CBE server or the CBE-VFS
|
||||
plugin.
|
||||
|
||||
The run-script and the code itself can be found on the
|
||||
[https://github.com/cnuke/cbe/tree/cbe_19.11 - cbe/cbe_19.11] branch on
|
||||
GitHub. If you intend to try it out, you have to checkout
|
||||
the corresponding
|
||||
[https://github.com/cnuke/genode/tree/cbe_19.11 - genode/cbe_19.11]
|
||||
branch in the Genode repository as well.
|
||||
|
||||
Future plans
|
||||
------------
|
||||
|
||||
Besides addressing the current shortcomings and getting the CBE library
|
||||
production-ready so that it can be used in Sculpt, there are still
|
||||
a few features that are currently unimplemented. For one we would like
|
||||
to add support for making it possible to resize the VBD as well as the
|
||||
Free Tree. For now the geometry is fixed at initialization time and cannot
|
||||
be changed afterwards. Furthermore, we would like to enable re-keying,
|
||||
i.e., changing the used cryptographic key and re-encrypting the tree
|
||||
set of the VBD afterwards. In addition to implementing those features, the
|
||||
overall tooling for the CBE needs to be improved. E.g., there is currently
|
||||
no proper initialization component. For now, we rely on a component
|
||||
that was built merely as a test vehicle to generate the initial trees.
|
||||
|
||||
|
||||
Virtualization of 64-bit ARM platforms
|
||||
######################################
|
||||
|
||||
Genode has a long history regarding support of all kinds of
|
||||
virtualization-related techniques including
|
||||
[https://genode.org/documentation/release-notes/9.11#Paravirtualized_Linux_on_Genode_OKL4 - para-virtualization],
|
||||
[https://genode.org/documentation/articles/trustzone - TrustZone],
|
||||
hardware-assisted virtualization on
|
||||
[https://genode.org/documentation/articles/arm_virtualization - ARM],
|
||||
[https://genode.org/documentation/release-notes/13.02#Full_virtualization_on_NOVA_x86 - x86],
|
||||
up to the full virtualization stack of
|
||||
[https://genode.org/documentation/release-notes/14.02#VirtualBox_on_top_of_the_NOVA_microhypervisor - VirtualBox].
|
||||
|
||||
We regard those techniques as welcome stop-gap solutions for using non-trivial
|
||||
existing software stacks on top of Genode's clean-slate OS architecture. The
|
||||
[https://genode.org/documentation/release-notes/19.05#Kernel-agnostic_virtual-machine_monitors - recent]
|
||||
introduction of a kernel-agnostic interface to control virtual machines (VM)
|
||||
ushered a new level for the construction respectively porting of
|
||||
virtual-machine monitors (VMM). By introducing a new ARMv8-compliant VMM
|
||||
developed from scratch, we continue this line of work.
|
||||
|
||||
The new VMM builds upon our existing proof-of-concept (PoC) implementation for
|
||||
ARMv7 as introduced in release
|
||||
[https://genode.org/documentation/release-notes/15.02#Virtualization_on_ARM - 15.02].
|
||||
In contrast to the former PoC implementation, however, it aims to be complete
|
||||
to a greater extent. Currently, it comprises device models for the following
|
||||
virtual hardware:
|
||||
|
||||
* RAM
|
||||
* System Bus
|
||||
* CPU
|
||||
* Generic Interrupt Controller v2 and v3
|
||||
* Generic Timer
|
||||
* PL011 UART (limited)
|
||||
* Pass-through devices
|
||||
|
||||
The VMM is able to load diverse 64-bit Linux kernels including
|
||||
Device-Tree-Binary (DTB) and Initramfs. Currently, the implementation uses a
|
||||
fixed memory layout for the guest-physical memory view, which needs to be
|
||||
reflected by the DTB used by the guest OS. An example device-tree source file
|
||||
can be found at _repos/os/src/server/vmm/spec/arm_v8/virt.dts_. The actual VMM
|
||||
is located in the same directory.
|
||||
|
||||
Although support for multi-core VMs is already considered internally, it is
|
||||
not yet finished. Further outstanding features that are already in development
|
||||
are Virtio device model support for networking and console. As the first - and
|
||||
by now only - back end, we tied the VMM to the ARMv8 broadened Kernel-agnostic
|
||||
VM-session interface as implemented by Genode's custom base-hw kernel. As a
|
||||
side effect of this work, we consolidated the generic VM session interface
|
||||
slightly. The RPC call to create a new virtual-CPU now returns an identifier
|
||||
for identification.
|
||||
|
||||
The VMM has a strict dependency on ARM's hardware virtualization support
|
||||
(EL2), which comprises extensions for the ARMv8-A CPU, ARM's generic timer,
|
||||
and ARM's GIC. This rules out the Raspberry Pi 3 board as a base platform
|
||||
because it does not include a GIC but a custom interrupt-controller without
|
||||
hardware-assisted virtualization of interrupts. To give the new VMM a try, we
|
||||
recommend using the run script _repos/os/run/vmm_arm.run_ as a starting point
|
||||
for executing the VMM on top of the i.MX8 Evaluation Kit board.
|
||||
|
||||
|
||||
New tooling for bridging existing build systems with Genode
|
||||
###########################################################
|
||||
|
||||
Genode's development tools are powerful and intimidating at the same time.
|
||||
Being designed from the perspective of a whole-systems developer, they put
|
||||
emphasis on the modularity of the code base (separating concerns like
|
||||
different kernels or system abstraction levels), transitive dependency
|
||||
tracking between libraries, scripting of a wide variety of system-integration
|
||||
tasks, and the continuous integration of complete Genode-based
|
||||
operating-system scenarios. Those tools are a two-edged sword though.
|
||||
|
||||
On the one hand, the tools are key for the productivity of seasoned Genode
|
||||
developers once the potential of the tools is fully understood and leveraged.
|
||||
For example, during the development of Sculpt OS, we are able to
|
||||
change an arbitrary line of code in any system component and can test-drive
|
||||
the resulting Sculpt system on real hardware within a couple of seconds.
|
||||
As another example, the almost seamless switching from one OS kernel to
|
||||
another has become a daily routine that we just take for granted without
|
||||
even thinking about it.
|
||||
|
||||
On the other hand, the sophistication of the tools stands in the way of
|
||||
application developers who are focused on a particular component instead
|
||||
of the holistic Genode system. In this case, the powerful system-integration
|
||||
features remain unused but the complexity of the tools and the build system
|
||||
prevails. Speaking of build systems, this topic is ripe of emotions
|
||||
anyway. _Developers use to hate build systems._ Forcing Genode's build
|
||||
system down the throats of application developers is probably not the best
|
||||
idea to make Genode popular.
|
||||
|
||||
This line of thoughts prompted us to re-approach the tooling for Genode from
|
||||
the perspective of an application developer. The intermediate result is a new
|
||||
tool called Goa:
|
||||
|
||||
:Goa project at GitHub:
|
||||
|
||||
[https://github.com/nfeske/goa]
|
||||
|
||||
Unlike Genode's regular tools, Goa's work flow is project-centered. A project
|
||||
is a directory that may contain source code, data, instructions how to
|
||||
download source codes from a 3rd party, descriptions of system scenarios, or
|
||||
combinations thereof. Goa is independent from Genode's regular build system.
|
||||
It combines Genode's package management (depot) with commodity build systems
|
||||
such a CMake. In addition to building and test-driving application software
|
||||
directly on a Linux-based development system, Goa is able to aid the process
|
||||
of exporting and packaging the software in the format expected by Genode
|
||||
systems like Sculpt OS.
|
||||
|
||||
At the current stage, Goa should be considered as work in progress. It's a new
|
||||
approach and its success is anything but proven. That said, if you are
|
||||
interested in developing or porting application software for Genode, your
|
||||
feedback would be especially valuable. As a starting point, you may find the
|
||||
following introductory article helpful:
|
||||
|
||||
:Goa - streamlining the development of Genode applications:
|
||||
|
||||
[https://genodians.org/nfeske/2019-11-25-goa]
|
||||
|
||||
|
||||
Base framework and OS-level infrastructure
|
||||
##########################################
|
||||
|
||||
File-system session
|
||||
===================
|
||||
|
||||
The file-system session interface received a much anticipated update.
|
||||
|
||||
Writing modification times
|
||||
--------------------------
|
||||
|
||||
The new operation WRITE_TIMESTAMP allows a client to update the modification
|
||||
time of a file-system node. The time is defined by the client to keep
|
||||
file-system servers free from time-related concerns. The VFS server implements
|
||||
the operation by forwarding it to the VFS plugin interface. At present, this
|
||||
new interface is implemented by the rump VFS plugin to store modification
|
||||
times on EXT2 file systems.
|
||||
|
||||
|
||||
Enhanced file-status info
|
||||
-------------------------
|
||||
|
||||
The status of a file-system node as returned by the 'File_system::Status'
|
||||
operation has been revisited. First, we replaced the fairly opaque "mode" bits -
|
||||
which were an ad-hoc attempt to stay compatible with Unix - with the explicit
|
||||
notion of 'readable', 'writeable', and 'executable' attributes. We completely
|
||||
dropped the notion of users and groups. Second, we added the distinction
|
||||
between *continuous* and *transactional* files to allow for the robust
|
||||
implementation of continuous write operations across component boundaries. A
|
||||
continuous file can be written-to via a sequence of arbitrarily sized chunks
|
||||
of data. For such files, a client can split a large write operation into any
|
||||
number of smaller operations in accordance to the size of the used I/O
|
||||
buffers. In contrast, a write to a transactional file is regarded as a
|
||||
distinct operation. The canonical example of a transactional file is a
|
||||
socket-control pseudo file.
|
||||
|
||||
|
||||
Virtual file-system infrastructure
|
||||
==================================
|
||||
|
||||
First fragments of a front-end API
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The VFS is mostly used indirectly via the C runtime. However, it is also
|
||||
useful for a few components that use the Genode API directly without any
|
||||
libc. To accommodate such users of the VFS, we introduced the front-end
|
||||
API at _os/vfs.h_ that covers a variety of current use cases. Currently, those
|
||||
use cases revolve around the watching, reading, and parsing of files and
|
||||
file-system structures - as performed by Sculpt's deployment mechanism.
|
||||
Writing to files is not covered.
|
||||
|
||||
|
||||
Improved file-watching support
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All pseudo files that use the VFS-internal 'Readonly_value_file_system'
|
||||
utility have become able to deliver watch notifications. This change enables
|
||||
VFS clients to respond to VFS-plugin events (think of terminal resize)
|
||||
dynamically.
|
||||
|
||||
Speaking of the *terminal VFS plugin*, the current release enhances the plugin
|
||||
in several respects. First, it now delivers status information such as the
|
||||
terminal size via pseudo files. Second, we equipped the VFS terminal file
|
||||
system with the ability to detect user interrupts in the incoming data stream,
|
||||
and propagate this information via the new pseudo file '.terminal/interrupts'.
|
||||
Each time, the user presses control-c in the terminal, the value stored in
|
||||
this pseudo file is increased. Thereby, a VFS client can watch this file to
|
||||
get notified about the occurrences of user interrupts.
|
||||
|
||||
|
||||
VFS plugin for emulating POSIX pipes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We added a new VFS plugin for emulating POSIX pipes. The new plugin creates
|
||||
pipes between pairs of VFS handles. It replaces the deprecated libc_pipe
|
||||
plugin. In contrast to the libc_pipe plugin, which was limited to pipes within
|
||||
one component, the new VFS plugin can also be used to establish pipes between
|
||||
different components by mounting the plugin at a shared VFS server.
|
||||
|
||||
|
||||
C runtime with improved POSIX compatibility
|
||||
===========================================
|
||||
|
||||
Within Genode, we used to think of POSIX as a legacy that is best avoided.
|
||||
In fact, the foundational components of the framework do not depend on a
|
||||
C runtime at all. However, higher up the software stack - at the latest when
|
||||
3rd-party libraries enter the picture - a working C runtime is unavoidable. In
|
||||
this statement, the term "working" is rather muddy though. Since we have never
|
||||
fully embraced POSIX, we were content with cutting corners here and there. For
|
||||
example, given Genode's architecture, supporting 'fork' and 'execve' seemed
|
||||
totally out of question because those mechanisms would go against the grain of
|
||||
Genode.
|
||||
|
||||
However, our growing aspiration to bridge the gap between existing popular
|
||||
applications and Genode made us re-evaluate our stance towards POSIX.
|
||||
All technical criticism aside, POSIX is immensely useful because it is
|
||||
a universally accepted stable interface. To dissolve friction between
|
||||
Genode and popular application software, we have to satisfy the application's
|
||||
expectations. This ignited a series of developments, in particular
|
||||
the added support for 'fork' and 'execve' - of all things - in
|
||||
[https://genode.org/documentation/release-notes/19.08#Consolidation_of_the_C_runtime_and_Noux - Genode 19.08],
|
||||
which was nothing short of surprising, even to us.
|
||||
The current release continues this line of development and brings the
|
||||
following improvements.
|
||||
|
||||
|
||||
Execve
|
||||
------
|
||||
|
||||
The libc's 'execve' implementation got enhanced to evaluate the path of the
|
||||
executable binary according to the information found on the VFS, in particular
|
||||
by traversing directories and following symbolic links. This enables the libc
|
||||
to execute files stored at sub directories of the file system.
|
||||
|
||||
Furthermore, 'execve' received handling for *executing shell scripts* by
|
||||
parsing the shebang marker at the beginning of the executable file. This way,
|
||||
the 'execve' mechanism of the libc reaches parity with the feature set of the
|
||||
Noux runtime that we traditionally used to host Unix software on top of
|
||||
Genode.
|
||||
|
||||
|
||||
Modification-time handling
|
||||
--------------------------
|
||||
|
||||
By default, the libc uses the just added facility for updating the timestamp
|
||||
of file-system nodes when closing a written-to file, which clears the path
|
||||
towards using tools like 'make' that rely on file-modifications times.
|
||||
|
||||
The libc's mechanism can be explicitly disabled by specifying
|
||||
! <libc update_mtime="no"...>
|
||||
This is useful for applications that have no legitimate access to a time
|
||||
source.
|
||||
|
||||
|
||||
Emulation of 'ioctl' operations via pseudo files
|
||||
------------------------------------------------
|
||||
|
||||
With the current release, we introduce a new scheme of handling ioctl
|
||||
operations, which maps 'ioctl' calls to pseudo-file accesses, similar to how
|
||||
the libc already maps socket calls to socket-fs operations.
|
||||
|
||||
A device file can be accompanied with a (hidden) directory that is named after
|
||||
the device file and hosts pseudo files for triggering the various device
|
||||
operations. For example, for accessing a terminal, the directory structure
|
||||
looks like this:
|
||||
|
||||
! /dev/terminal
|
||||
! /dev/.terminal/info
|
||||
! /dev/.terminal/rows
|
||||
! /dev/.terminal/columns
|
||||
! /dev/.terminal/interrupts
|
||||
|
||||
The 'info' file contains device information in XML format. The type of the XML
|
||||
node corresponds to the device type. Whenever the libc receives a TIOCGWINSZ
|
||||
ioctl for _/dev/terminal_, it reads the content of _/dev/.terminal/info_ to
|
||||
obtain the terminal-size information. In this case, the _info_ file looks as
|
||||
follows:
|
||||
|
||||
! <terminal rows="25" columns="80/>
|
||||
|
||||
Following this scheme, VFS plugins can support ioctl operations by providing
|
||||
an ioctl directory in addition to the actual device file.
|
||||
|
||||
|
||||
Emulation of POSIX signals
|
||||
--------------------------
|
||||
|
||||
Even though there is no notion of POSIX signals at the Genode level, we
|
||||
can reasonably emulate certain POSIX signals at the libc level. The current
|
||||
release introduces the first bunch of such emulated signals:
|
||||
|
||||
:SIGWINCH: If 'stdout' is connected to a terminal, the libc watches the
|
||||
terminal's ioctl pseudo file _.terminal/info_. Whenever the terminal
|
||||
size changes, the POSIX signal SIGWINCH is delivered to the application.
|
||||
With this improvement, Vim becomes able to dynamically adjust itself
|
||||
to changed window dimensions when started as a native Genode component
|
||||
(w/o the Noux runtime environment).
|
||||
|
||||
:SIGINT: If 'stdin' is connected to a terminal, the libc watches the
|
||||
terminal's pseudo file _.terminal/interrupts_. Since, the terminal VFS
|
||||
plugin modifies the file for each occurred user interrupt (control-c),
|
||||
the libc is able to reflect such an event as SIGINT signal to the
|
||||
application.
|
||||
|
||||
:Process-local signal delivery: The libc's implementation of 'kill' got
|
||||
enhanced with the ability to submit signals to the local process.
|
||||
|
||||
|
||||
Support for arbitrarily large write operations
|
||||
----------------------------------------------
|
||||
|
||||
The number of bytes written by a single 'write' call used to be constrained by
|
||||
the file's underlying I/O buffer size. Even though our libc correctly returned
|
||||
this information to the application, we found that real-world applications
|
||||
rarely check the return value of 'write' because partial writes do usually not
|
||||
occur on popular POSIX systems. Thanks to the added distinction between
|
||||
continuous and transactional files as described in Section
|
||||
[File-system session], we became able to improve the libc's write operation to
|
||||
iterate on partial writes to continuous files until the original write count
|
||||
is reached. The split of large write operations into small partial writes as
|
||||
dictated by the VFS infrastructure becomes invisible to the libc-using
|
||||
application.
|
||||
|
||||
|
||||
Input-event handling
|
||||
====================
|
||||
|
||||
In Genode 19.08, we undertook a comprehensive rework of our keyboard-event
|
||||
handling in the light of localization and also promised to tie up remaining
|
||||
loose ends soon.
|
||||
|
||||
First, we again dived into our character generators for a thorough check of
|
||||
our stack of keyboards and fixed remaining inconsistencies in French and
|
||||
German layouts. En passant, we also increased the default RAM quotas for
|
||||
the input filter to 1280K in our recipes to cope with the increased
|
||||
layout-configuration sizes in corner cases.
|
||||
|
||||
Next - and more importantly - we subdued the monsters lurking in our Qt5
|
||||
keyboard back end and enabled transparent support for system-wide keyboard
|
||||
layout configuration for Qt5 components. One important change during this work
|
||||
was to move the handling of control key sequences into the clients. For
|
||||
example, the graphical terminal and Qt5 interpret key events in combination
|
||||
with the CTRL modifier based on characters and, thus, support CTRL-A with
|
||||
AZERTY and QWERTY layouts correctly. As a result we removed all CTRL modifier
|
||||
(mod2) configurations from our character-generator configurations.
|
||||
|
||||
Finally we'd like to point out one important change of our rework that
|
||||
repeatedly led to surprises: For keys without character mappings the reworked
|
||||
character-generator mechanism emits invalid codepoints in contrast to
|
||||
codepoints with value 0. For that reason, components interpreting character
|
||||
events should check 'Codepoint::valid()' to prevent the processing of invalid
|
||||
characters (and not the frequent pattern of 'codepoint.value != 0').
|
||||
|
||||
|
||||
NIC router
|
||||
==========
|
||||
|
||||
The NIC router has received the ability to report the link state of its NIC
|
||||
interfaces (downlinks and uplinks). To control this mechanism, there are two
|
||||
new boolean attributes 'link_state' and 'link_state_triggers' in the <report>
|
||||
tag of the NIC router configuration. If the former is set to "true", the report
|
||||
will contain the current link state for each interface:
|
||||
|
||||
! <domain name="domain1">
|
||||
! <interface label="uplink1" link_state="false"/>
|
||||
! <interface label="downlink1" link_state="true"/>
|
||||
! </domain>
|
||||
! <domain name="domain2">
|
||||
! <interface label="downlink2" link_state="true"/>
|
||||
! </domain>
|
||||
|
||||
The second attribute decides whether to trigger a report update each time the
|
||||
link state of an interface changes. By default, both attributes are set to
|
||||
"false".
|
||||
|
||||
|
||||
Device drivers
|
||||
==============
|
||||
|
||||
Platform driver on x86
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
During our enablement of Genode on a
|
||||
[https://genodians.org/chelmuth/2019-10-21-sculpt-elitebook - recent notebook],
|
||||
we spotted some PC platform shortcomings, we address with this release. Most
|
||||
prominently we added support for
|
||||
[https://en.wikipedia.org/wiki/PCI_configuration_space#Bus_enumeration - 64-bit PCI base address registers]
|
||||
to the x86 platform driver. This allows the use of PCI devices that are
|
||||
assigned to physical I/O-memory regions beyond 4 GiB by the boot firmware.
|
||||
|
||||
|
||||
Wireless driver
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
We added the firmware images for the 5000 and 9000 series of Intel wireless
|
||||
devices to the firmware white-list in the _wifi_drv_ component. Such devices
|
||||
as 5100AGN, 5300AGN and 5350AGN as well as 9461, 9462 and 9560 should now be
|
||||
usable on Genode.
|
||||
|
||||
|
||||
Libraries and applications
|
||||
##########################
|
||||
|
||||
VirtualBox improvements
|
||||
=======================
|
||||
|
||||
The GUI handling of our VirtualBox port got improved to react on window-size
|
||||
changes more instantly. The effect is that an interactive adjustment of the
|
||||
window size, e.g., on Sculpt, becomes quickly visible to the user. Still, the
|
||||
VM may take some time to adjust to the resolution change, which ultimately
|
||||
depends on the behavior of the driver of the VirtualBox guest additions.
|
||||
|
||||
|
||||
Updated 3rd-party software
|
||||
==========================
|
||||
|
||||
With the addition of the 64-bit ARM architecture (AARCH64) with the
|
||||
[https://genode.org/documentation/release-notes/19.05#Broadened_CPU_architecture_support_and_updated_tool_chain - 19.05]
|
||||
release, it became necessary to update the libraries the Genode tool chain
|
||||
(gcc) depends on in order to support AARCH64 properly. This concerns the GNU
|
||||
multi precision arithmetic library (gmp), which has been updated from version
|
||||
4.3.2 to 6.1.2, as well as the libraries that depend on it: Multi precision
|
||||
floating point (mpfr) and multi precision complex arithmetic (mpc). All those
|
||||
old versions did not offer support for the AARCH64 architecture, which is a
|
||||
requirement to make Genode self hosting. Targets for building binutils and GCC
|
||||
within Genode for AARCH64 are in place, GNU make is in place, and even code
|
||||
coverage (gcov) has been added. This work puts AARCH64 in line with other
|
||||
supported CPU architectures and emphasizes our interest in the ARM 64-bit
|
||||
architecture.
|
||||
|
||||
|
||||
Platforms
|
||||
#########
|
||||
|
||||
Execution on bare hardware (base-hw)
|
||||
====================================
|
||||
|
||||
With the previous release, Genode's base-hw kernel got extended to support the
|
||||
ARMv8-A architecture in principle. The first hardware supported was the
|
||||
Raspberry Pi 3 as well as the i.MX8 evaluation kit (EVK). But only a single
|
||||
CPU-core was usable at that time. Now, we lifted this limitation. On both
|
||||
boards, all four CPU-cores are available henceforth.
|
||||
|
||||
|
||||
Removed components
|
||||
##################
|
||||
|
||||
The current release removes the following components:
|
||||
|
||||
:gems/src/app/launcher:
|
||||
|
||||
The graphical launcher remained unused for a few years now. It is not
|
||||
suitable for systems as flexible as Sculpt OS.
|
||||
|
||||
:os/src/app/cli_monitor:
|
||||
|
||||
CLI monitor was a runtime environment with a custom command-line interface
|
||||
to start and stop subsystems. It was part of the user interface of our
|
||||
first take on a Genode-based desktop OS called
|
||||
[https://genode.org/documentation/release-notes/15.11#Genode_as_desktop_OS - Turmvilla].
|
||||
|
||||
Nowadays, we use standard command-line tools like Vim to edit init
|
||||
configurations dynamically, which is more flexible and - at the same time -
|
||||
alleviates the need for a custom CLI. The CLI-monitor component was too
|
||||
limited for use cases like Sculpt anyway.
|
||||
|
||||
Along with the CLI monitor, we removed the ancient (and untested for long
|
||||
time) _terminal_mux.run_ script, which was the only remaining user of the CLI
|
||||
monitor.
|
||||
|
||||
:fatfs_fs, rump_fs, and libc_fatfs plugin:
|
||||
|
||||
The stand-alone file-system servers fatfs_fs and rump_fs as well as the
|
||||
fatfs libc plugin have been superseded by the fatfs and rump VFS plugins.
|
||||
The stand-alone servers can be replaced by using the VFS server plus the
|
||||
corresponding VFS plugin as a drop-in replacement.
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"inputs": {
|
||||
"genodepkgs": {
|
||||
"inputs": {
|
||||
"dhall-haskell": {
|
||||
"inputs": {
|
||||
"nixpkgs": {
|
||||
"inputs": {},
|
||||
"narHash": "sha256-wJg4DA700SoQbEz61448sR6BgxRa1R92K3vvCV1g+HY=",
|
||||
"originalUrl": "git+https://github.com/nixos/nixpkgs.git?ref=18.09-beta&rev=1d4de0d552ae9aa66a5b8dee5fb0650a4372d148",
|
||||
"url": "git+https://github.com/nixos/nixpkgs.git?ref=18.09-beta&rev=1d4de0d552ae9aa66a5b8dee5fb0650a4372d148"
|
||||
},
|
||||
"nixpkgsStaticLinux": {
|
||||
"inputs": {},
|
||||
"narHash": "sha256-famU3pJZ4vkElV9qc71HmyRVSvcrAhfMZ0UJKpmmKP8=",
|
||||
"originalUrl": "git+https://github.com/nh2/nixpkgs.git?ref=static-haskell-nix-stack-dhall-working",
|
||||
"url": "git+https://github.com/nh2/nixpkgs.git?ref=static-haskell-nix-stack-dhall-working&rev=925aac04f4ca58aceb83beef18cb7dae0715421b"
|
||||
}
|
||||
},
|
||||
"narHash": "sha256-KJl9ZLcMcEsLSPcwcWoc0Ac74/6HKC9LkVMeLwhyhlg=",
|
||||
"originalUrl": "git+https://github.com/dhall-lang/dhall-haskell?ref=flake",
|
||||
"url": "git+https://github.com/dhall-lang/dhall-haskell?ref=flake&rev=aea28adf3d10ff1982aa4ddd176d1476251b932f"
|
||||
},
|
||||
"genode-depot": {
|
||||
"inputs": {
|
||||
"nixpkgs": {
|
||||
"inputs": {},
|
||||
"narHash": "sha256-NB+H7zK3BB//zM127FqgbG4iAfY+nS/IOyO+uGWA5Ho=",
|
||||
"originalUrl": "nixpkgs",
|
||||
"url": "github:edolstra/nixpkgs/7845bf5f4b3013df1cf036e9c9c3a55a30331db9"
|
||||
}
|
||||
},
|
||||
"narHash": "sha256-7eL2MfGgeEaIwJXPc4LQ7pBa4JeGicm9th7onjKgzsE=",
|
||||
"originalUrl": "git+https://gitea.c3d2.de/ehmry/genode-depot.git",
|
||||
"url": "git+https://gitea.c3d2.de/ehmry/genode-depot.git?ref=master&rev=8c2aafed45b4075e37f1cd93de0ebf93f38c83c3"
|
||||
},
|
||||
"nixpkgs": {
|
||||
"inputs": {},
|
||||
"narHash": "sha256-EqxCk6ORqq4fkewWttpvks0VycBec9X9spAZ+Pq/CEI=",
|
||||
"originalUrl": "github:ehmry/nixpkgs",
|
||||
"url": "github:ehmry/nixpkgs/cf50f3b8bdc28832249afab6bca68acad832e011"
|
||||
}
|
||||
},
|
||||
"narHash": "sha256-78eloDNkEjWAckNLbfNait0zb6QBG4QxltX6FyV1vAk=",
|
||||
"originalUrl": "git+https://git.sr.ht/~ehmry/genodepkgs",
|
||||
"url": "git+https://git.sr.ht/~ehmry/genodepkgs?ref=master&rev=dad28cc17b17542ada59ba2005fbf1af5d5f8209"
|
||||
},
|
||||
"nixpkgs": {
|
||||
"inputs": {},
|
||||
"narHash": "sha256-NB+H7zK3BB//zM127FqgbG4iAfY+nS/IOyO+uGWA5Ho=",
|
||||
"originalUrl": "nixpkgs",
|
||||
"url": "github:edolstra/nixpkgs/7845bf5f4b3013df1cf036e9c9c3a55a30331db9"
|
||||
}
|
||||
},
|
||||
"version": 3
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
description = "Genode development flake";
|
||||
|
||||
edition = 201909;
|
||||
|
||||
inputs.genodepkgs.uri = "git+https://git.sr.ht/~ehmry/genodepkgs";
|
||||
|
||||
outputs = { self, nixpkgs, genodepkgs }: {
|
||||
|
||||
devShell.x86_64-linux =
|
||||
genodepkgs.packages.x86_64-linux-x86_64-genode.genode.base;
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
# Tup rules that are local to this Git repo and
|
||||
# should not be shared with other projects.
|
||||
|
||||
&LD_SCRIPT_SO = base/src/ld/genode_rel.ld
|
||||
|
||||
ifeq (@(TUP_ARCH),x86_64)
|
||||
ASM_SYM_DEPENDENCY = movq \1@GOTPCREL(%rip), %rax
|
||||
else
|
||||
ASM_SYM_DEPENDENCY = .long \1
|
||||
endif
|
||||
|
||||
!abi_stub = |> ^ STUB %o^\
|
||||
sed \
|
||||
-e "s/^\(\w\+\) D \(\w\+\)\$/.data; .global \1; .type \1,%%object; .size \1,\2; \1:/" \
|
||||
-e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%%object; \1:/" \
|
||||
-e "s/^\(\w\+\) T/.text; .global \1; .type \1,%%function; \1:/" \
|
||||
-e "s/^\(\w\+\) R \(\w\+\)\$/.section .rodata; .global \1; .type \1,%%object; .size \1,\2; \1:/" \
|
||||
-e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%%function; \1:/" \
|
||||
-e "s/^\(\w\+\) B \(\w\+\)\$/.bss; .global \1; .type \1,%%object; .size \1,\2; \1:/" \
|
||||
-e "s/^\(\w\+\) U/.text; .global \1; $(ASM_SYM_DEPENDENCY)/" \
|
||||
%f > stub.s; \
|
||||
$(CC) $(CC_MARCH) -x assembler -c stub.s; \
|
||||
$(LD) -o %o \
|
||||
-shared \
|
||||
-T &(LD_SCRIPT_SO) \
|
||||
stub.o; \
|
||||
rm -v stub.o stub.s; \
|
||||
|> $(DEV_LIB_DIR)/%B.lib.so $(DEV_DIR)/<lib>
|
||||
|
||||
BASE_DIR = $(GENODE_DIR)/repos/base
|
||||
&BASE_DIR = base
|
||||
|
||||
ifeq (@(TUP_ARCH),i386)
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/x86_32
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/x86
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/32bit
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),x86_64)
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/x86_64
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/x86
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/64bit
|
||||
endif
|
||||
|
||||
ifeq (@(TUP_ARCH),arm64)
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/arm_64
|
||||
CPPFLAGS += -I$(BASE_DIR)/include/spec/64bit
|
||||
endif
|
||||
|
||||
CPPFLAGS += -I$(BASE_DIR)/include
|
|
@ -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-05-26 d974ee0ff1b1eb4a3790d00da9f5cbf80d8743ba
|
||||
2019-11-25 c7e2a3eca5820b2304b4520d0fc831ede73691f2
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
@ -51,6 +53,7 @@ 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
|
||||
|
@ -66,7 +69,7 @@ CONFIG_ARM_CPU_ERRATA=y
|
|||
# Kernel options
|
||||
#
|
||||
CONFIG_MP=y
|
||||
CONFIG_MP_MAX_CPUS=4
|
||||
CONFIG_MP_MAX_CPUS=2
|
||||
CONFIG_CONTEXT_4K=y
|
||||
# CONFIG_FINE_GRAINED_CPUTIME is not set
|
||||
CONFIG_SCHED_FIXED_PRIO=y
|
||||
|
@ -83,6 +86,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_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=y
|
||||
# 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="imx7"
|
||||
# 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
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
@ -43,12 +45,15 @@ 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
|
||||
|
@ -78,6 +83,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
|
||||
|
|
|
@ -19,12 +19,10 @@ CONFIG_CPU_ARM_ARMV8A=y
|
|||
# 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_m3 is not set
|
||||
# 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_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
|
||||
|
@ -25,6 +26,8 @@ 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
|
||||
|
@ -23,6 +24,8 @@ CONFIG_ABI_VF=y
|
|||
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
|
||||
|
|
|
@ -25,7 +25,7 @@ ifeq ($(filter-out $(SPECS),arm_v6),)
|
|||
endif
|
||||
|
||||
ifeq ($(filter-out $(SPECS),arm_v8),)
|
||||
L4_BUILD_ARCH := arm_armv8a
|
||||
L4_BUILD_ARCH := arm64_armv8a
|
||||
endif
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
L4_CONFIG := $(call select_from_repositories,config/rpi3.user)
|
||||
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi3-build/bin/arm_armv8
|
||||
L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi3-build/bin/arm64_armv8a
|
||||
|
||||
L4_INC_TARGETS = arm64/l4/sys \
|
||||
arm64/l4f/l4/sys \
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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 @@
|
|||
23f5b19a4853073d9cde790709f5e8d9a6c401d7
|
||||
91ca3363690c5b9c992a110375242f5d426a6848
|
||||
|
|
|
@ -1,6 +1,40 @@
|
|||
LICENSE := GPLv2
|
||||
VERSION := git
|
||||
DOWNLOADS := foc.git
|
||||
URL(foc) := https://github.com/alex-ab/foc.git
|
||||
REV(foc) := 45bf2c699552d1e2891d322bea479d95f8c93d02
|
||||
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 +0,0 @@
|
|||
RECIPE_DIR := $(REP_DIR)/recipes/src/base-foc-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 +0,0 @@
|
|||
2018-11-14 778d83a4be78dcd6d1e4d45f1ca103def7b298a5
|
|
@ -1 +1 @@
|
|||
2019-05-27 bf2cfe5972332c17f9e2abad0801ccdd0b2a55d3
|
||||
2019-11-25 9a459c4fd8a907810d91041751affcf3e119fcb1
|
||||
|
|
|
@ -1 +1 @@
|
|||
2019-05-27 da39d9b02cd9660f97c2cf8f3b159e89ee0836ab
|
||||
2019-11-25 d8ff4913b8aa117aef77a7918bc82808e38a4ee7
|
||||
|
|
|
@ -1 +1 @@
|
|||
2019-05-27 35856a61cd97b53af52b5410df08dfa7f60cd237
|
||||
2019-11-25 a750c8988106d5c26e46dcceb1f76bfd7bfa1457
|
||||
|
|
|
@ -1 +1 @@
|
|||
2019-05-27 1b3c98595adcfd5e0581755f54587414d50de0a5
|
||||
2019-11-25 0c0a26b6ddb0ee5261f0be30f229e9ce04b61eda
|
||||
|
|
|
@ -1 +1 @@
|
|||
2019-05-27 9664ffdaaa66319939cb47ada5097784a4a8eff5
|
||||
2019-11-25 bce6f0a8f1f46f8edf62ef2180dbfc949123432d
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
BOARD := rpi3
|
||||
|
||||
include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc
|
|
@ -0,0 +1 @@
|
|||
2019-11-25 307d01e531dbbcd672463a4ea090f40bb399cae8
|
|
@ -23,10 +23,12 @@ src/kernel:
|
|||
KERNEL_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/foc)
|
||||
|
||||
src/kernel/foc: src/kernel
|
||||
cp -r $(KERNEL_PORT_DIR)/src/kernel/foc/* $@
|
||||
tar -C $(KERNEL_PORT_DIR)/src/kernel/foc --exclude=.git -cf - . |\
|
||||
tar -C $@ -xf -
|
||||
|
||||
|
||||
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
|
||||
|
|
|
@ -206,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; }
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ class Genode::Vm_session_component
|
|||
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);
|
||||
Vcpu_id _create_vcpu(Thread_capability);
|
||||
};
|
||||
|
||||
#endif /* _CORE__VM_SESSION_COMPONENT_H_ */
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#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>
|
||||
|
||||
|
@ -525,6 +527,54 @@ Platform::Platform() :
|
|||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
/* Genode includes */
|
||||
#include <base/thread.h>
|
||||
#include <base/sleep.h>
|
||||
#include <trace/source_registry.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/stack.h>
|
||||
|
@ -26,6 +27,8 @@
|
|||
namespace Fiasco {
|
||||
#include <l4/sys/debugger.h>
|
||||
#include <l4/sys/factory.h>
|
||||
#include <l4/sys/scheduler.h>
|
||||
#include <l4/sys/thread.h>
|
||||
}
|
||||
|
||||
using namespace Genode;
|
||||
|
@ -65,6 +68,47 @@ void Thread::start()
|
|||
l4_utcb_tcr_u(foc_utcb)->user[UTCB_TCR_THREAD_OBJ] = (addr_t)this;
|
||||
|
||||
pt.start((void *)_thread_start, stack_top());
|
||||
|
||||
struct Core_trace_source : public Trace::Source::Info_accessor,
|
||||
private Trace::Control,
|
||||
private Trace::Source
|
||||
{
|
||||
Thread &thread;
|
||||
Platform_thread &platform_thread;
|
||||
|
||||
/**
|
||||
* Trace::Source::Info_accessor interface
|
||||
*/
|
||||
Info trace_source_info() const override
|
||||
{
|
||||
uint64_t const sc_time = 0;
|
||||
addr_t const kcap = (addr_t) platform_thread.pager_object_badge();
|
||||
|
||||
using namespace Fiasco;
|
||||
l4_kernel_clock_t ec_time = 0;
|
||||
l4_msgtag_t res = l4_thread_stats_time(kcap, &ec_time);
|
||||
if (l4_error(res))
|
||||
Genode::error("cpu time for ", thread.name(),
|
||||
" is not available ", l4_error(res));
|
||||
|
||||
return { Session_label("core"), thread.name(),
|
||||
Trace::Execution_time(ec_time, sc_time, 10000,
|
||||
platform_thread.prio()),
|
||||
thread._affinity };
|
||||
}
|
||||
|
||||
Core_trace_source(Trace::Source_registry ®istry, Thread &t,
|
||||
Platform_thread &pt)
|
||||
:
|
||||
Trace::Control(),
|
||||
Trace::Source(*this, *this), thread(t), platform_thread(pt)
|
||||
{
|
||||
registry.insert(this);
|
||||
}
|
||||
};
|
||||
|
||||
new (platform().core_mem_alloc()) Core_trace_source(Trace::sources(),
|
||||
*this, pt);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -107,10 +107,12 @@ Vcpu::~Vcpu()
|
|||
_ram_alloc.free(_ds_cap);
|
||||
}
|
||||
|
||||
void Vm_session_component::_create_vcpu(Thread_capability cap)
|
||||
Vm_session::Vcpu_id Vm_session_component::_create_vcpu(Thread_capability cap)
|
||||
{
|
||||
Vcpu_id ret;
|
||||
|
||||
if (!cap.valid())
|
||||
return;
|
||||
return ret;
|
||||
|
||||
auto lambda = [&] (Cpu_thread_component *thread) {
|
||||
if (!thread)
|
||||
|
@ -146,10 +148,11 @@ void Vm_session_component::_create_vcpu(Thread_capability cap)
|
|||
}
|
||||
|
||||
_vcpus.insert(vcpu);
|
||||
_id_alloc++;
|
||||
ret.id = _id_alloc++;
|
||||
};
|
||||
|
||||
_ep.apply(cap, lambda);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Dataspace_capability Vm_session_component::_cpu_state(Vcpu_id const vcpu_id)
|
||||
|
|
|
@ -50,7 +50,6 @@ static bool svm_np() { return svm_features() & (1U << 0); }
|
|||
struct Vcpu;
|
||||
|
||||
static Genode::Registry<Genode::Registered<Vcpu> > vcpus;
|
||||
static unsigned vcpu_id = 0;
|
||||
|
||||
struct Vcpu : Genode::Thread
|
||||
{
|
||||
|
@ -147,6 +146,11 @@ struct Vcpu : Genode::Thread
|
|||
TSC_OFF_LO = 0x2010,
|
||||
TSC_OFF_HI = 0x2011,
|
||||
|
||||
MSR_FMASK = 0x2842,
|
||||
MSR_LSTAR = 0x2844,
|
||||
MSR_STAR = 0x284a,
|
||||
KERNEL_GS_BASE = 0x284c,
|
||||
|
||||
CR4_VMX = 1 << 13,
|
||||
INTEL_EXIT_INVALID = 0x21,
|
||||
|
||||
|
@ -197,11 +201,14 @@ struct Vcpu : Genode::Thread
|
|||
Semaphore _wake_up { 0 };
|
||||
Semaphore &_handler_ready;
|
||||
Allocator &_alloc;
|
||||
Vm_session_client::Vcpu_id _id;
|
||||
Vm_session_client::Vcpu_id _id { Vm_session_client::Vcpu_id::INVALID };
|
||||
addr_t _state { 0 };
|
||||
addr_t _task { 0 };
|
||||
enum Virt const _vm_type;
|
||||
uint64_t _tsc_offset { 0 };
|
||||
bool _show_error_unsupported_pdpte { true };
|
||||
bool _show_error_unsupported_tpr { true };
|
||||
bool _show_error_unsupported_fpu { true };
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -216,8 +223,11 @@ struct Vcpu : Genode::Thread
|
|||
PAUSE = 1,
|
||||
RUN = 2,
|
||||
TERMINATE = 3,
|
||||
} _remote { NONE };
|
||||
Lock _remote_lock { Lock::UNLOCKED };
|
||||
};
|
||||
|
||||
State _state_request { NONE };
|
||||
State _state_current { NONE };
|
||||
Lock _remote_lock { Lock::UNLOCKED };
|
||||
|
||||
void entry() override
|
||||
{
|
||||
|
@ -227,10 +237,10 @@ struct Vcpu : Genode::Thread
|
|||
Lock::Guard guard(_remote_lock);
|
||||
|
||||
/* leave scope for Thread::join() - vCPU setup failed */
|
||||
if (_remote == TERMINATE)
|
||||
if (_state_request == TERMINATE)
|
||||
return;
|
||||
|
||||
_remote = NONE;
|
||||
_state_request = NONE;
|
||||
}
|
||||
|
||||
/* reserved ranged for state of vCPUs - see platform.cc */
|
||||
|
@ -306,56 +316,21 @@ struct Vcpu : Genode::Thread
|
|||
|
||||
vcpu->saved_state = L4_VCPU_F_USER_MODE | L4_VCPU_F_FPU_ENABLED;
|
||||
|
||||
State local_state { NONE };
|
||||
|
||||
while (true) {
|
||||
/* read in requested state from remote threads */
|
||||
{
|
||||
Lock::Guard guard(_remote_lock);
|
||||
local_state = _remote;
|
||||
_remote = NONE;
|
||||
|
||||
if (local_state == PAUSE) {
|
||||
while (vcpu->sticky_flags) {
|
||||
/* consume spurious notifications */
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
l4_irq_receive(irq, L4_IPC_RECV_TIMEOUT_0);
|
||||
}
|
||||
}
|
||||
_state_current = _state_request;
|
||||
_state_request = NONE;
|
||||
}
|
||||
|
||||
if (local_state == NONE) {
|
||||
if (_state_current == NONE) {
|
||||
_wake_up.down();
|
||||
continue;
|
||||
}
|
||||
if (local_state == PAUSE) {
|
||||
|
||||
if (_vm_type == Virt::SVM)
|
||||
_write_amd_state(state, vmcb, vcpu);
|
||||
if (_vm_type == Virt::VMX)
|
||||
_write_intel_state(state, vmcs, vcpu);
|
||||
|
||||
state.exit_reason = VMEXIT_PAUSED;
|
||||
|
||||
if (_vm_type == Virt::SVM)
|
||||
_read_amd_state(state, vmcb, vcpu);
|
||||
if (_vm_type == Virt::VMX)
|
||||
_read_intel_state(state, vmcs, vcpu);
|
||||
|
||||
/* notify VM handler */
|
||||
Genode::Signal_transmitter(_signal).submit();
|
||||
|
||||
/*
|
||||
* Wait until VM handler is really really done,
|
||||
* otherwise we lose state.
|
||||
*/
|
||||
_handler_ready.down();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (local_state != RUN) {
|
||||
Genode::error("unknown vcpu state ", (int)local_state);
|
||||
if (_state_current != RUN && _state_current != PAUSE) {
|
||||
Genode::error("unknown vcpu state ", (int)_state_current);
|
||||
while (true) { _remote_lock.lock(); }
|
||||
}
|
||||
|
||||
|
@ -379,21 +354,21 @@ struct Vcpu : Genode::Thread
|
|||
if (reason == 0x400) /* no NPT support */
|
||||
reason = 0xfc;
|
||||
|
||||
/* remotely PAUSE was called */
|
||||
if (l4_error(tag) && reason == 0x60) {
|
||||
reason = VMEXIT_PAUSED;
|
||||
|
||||
{
|
||||
Lock::Guard guard(_remote_lock);
|
||||
if (_remote == PAUSE) {
|
||||
_remote = NONE;
|
||||
_wake_up.down();
|
||||
}
|
||||
_state_request = NONE;
|
||||
_state_current = PAUSE;
|
||||
|
||||
/* consume notification */
|
||||
while (vcpu->sticky_flags) {
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
l4_irq_receive(irq, L4_IPC_RECV_TIMEOUT_0);
|
||||
/* remotely PAUSE was called */
|
||||
if (l4_error(tag) && reason == 0x60) {
|
||||
reason = VMEXIT_PAUSED;
|
||||
|
||||
/* consume notification */
|
||||
while (vcpu->sticky_flags) {
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
l4_irq_receive(irq, L4_IPC_RECV_TIMEOUT_0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,21 +379,21 @@ struct Vcpu : Genode::Thread
|
|||
if (_vm_type == Virt::VMX) {
|
||||
reason = Fiasco::l4_vm_vmx_read_32(vmcs, Vmcs::EXI_REASON);
|
||||
|
||||
/* remotely PAUSE was called */
|
||||
if (l4_error(tag) && reason == 0x1) {
|
||||
reason = VMEXIT_PAUSED;
|
||||
|
||||
{
|
||||
Lock::Guard guard(_remote_lock);
|
||||
if (_remote == PAUSE) {
|
||||
_remote = NONE;
|
||||
_wake_up.down();
|
||||
}
|
||||
_state_request = NONE;
|
||||
_state_current = PAUSE;
|
||||
|
||||
/* consume notification */
|
||||
while (vcpu->sticky_flags) {
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
l4_irq_receive(irq, L4_IPC_RECV_TIMEOUT_0);
|
||||
/* remotely PAUSE was called */
|
||||
if (l4_error(tag) && reason == 0x1) {
|
||||
reason = VMEXIT_PAUSED;
|
||||
|
||||
/* consume notification */
|
||||
while (vcpu->sticky_flags) {
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
l4_irq_receive(irq, L4_IPC_RECV_TIMEOUT_0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -615,11 +590,14 @@ struct Vcpu : Genode::Thread
|
|||
|
||||
state.efer.value(l4_vm_vmx_read(vmcs, Vmcs::EFER));
|
||||
|
||||
state.star.value(l4_vm_vmx_read(vmcs, Vmcs::MSR_STAR));
|
||||
state.lstar.value(l4_vm_vmx_read(vmcs, Vmcs::MSR_LSTAR));
|
||||
state.fmask.value(l4_vm_vmx_read(vmcs, Vmcs::MSR_FMASK));
|
||||
state.kernel_gs_base.value(l4_vm_vmx_read(vmcs, Vmcs::KERNEL_GS_BASE));
|
||||
|
||||
/* XXX missing */
|
||||
#if 0
|
||||
if (state.pdpte_0_updated() || state.pdpte_1_updated() ||
|
||||
if (state.star_updated() || state.lstar_updated() ||
|
||||
state.fmask_updated() || state.kernel_gs_base_updated()) {
|
||||
if (state.tpr_updated() || state.tpr_threshold_updated()) {
|
||||
#endif
|
||||
}
|
||||
|
@ -807,12 +785,24 @@ struct Vcpu : Genode::Thread
|
|||
l4_vm_vmx_write(vmcs, Vmcs::TSC_OFF_HI, (_tsc_offset >> 32) & 0xffffffffu);
|
||||
}
|
||||
|
||||
if (state.star.valid() || state.lstar.valid() ||
|
||||
state.fmask.valid() || state.kernel_gs_base.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.star.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::MSR_STAR, state.star.value());
|
||||
|
||||
if (state.tpr.valid() || state.tpr_threshold.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.lstar.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::MSR_LSTAR, state.lstar.value());
|
||||
|
||||
if (state.fmask.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::MSR_FMASK, state.fmask.value());
|
||||
|
||||
if (state.kernel_gs_base.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::KERNEL_GS_BASE, state.kernel_gs_base.value());
|
||||
|
||||
if (state.tpr.valid() || state.tpr_threshold.valid()) {
|
||||
if (_show_error_unsupported_tpr) {
|
||||
_show_error_unsupported_tpr = false;
|
||||
Genode::error("TPR & TPR_THRESHOLD not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
|
||||
if (state.dr7.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::DR7, state.dr7.value());
|
||||
|
@ -958,14 +948,14 @@ struct Vcpu : Genode::Thread
|
|||
l4_vm_vmx_write(vmcs, Vmcs::GDTR_LIMIT, state.gdtr.value().limit);
|
||||
}
|
||||
|
||||
if (state.pdpte_0.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_1.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_2.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_3.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_0.valid() || state.pdpte_1.valid() ||
|
||||
state.pdpte_2.valid() || state.pdpte_3.valid())
|
||||
{
|
||||
if (_show_error_unsupported_pdpte) {
|
||||
_show_error_unsupported_pdpte = false;
|
||||
Genode::error("PDPTE 0/1/2/3 not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
|
||||
if (state.sysenter_cs.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::SYSENTER_CS,
|
||||
|
@ -976,6 +966,13 @@ struct Vcpu : Genode::Thread
|
|||
if (state.sysenter_ip.valid())
|
||||
l4_vm_vmx_write(vmcs, Vmcs::SYSENTER_IP,
|
||||
state.sysenter_ip.value());
|
||||
|
||||
if (state.fpu.valid()) {
|
||||
if (_show_error_unsupported_fpu) {
|
||||
_show_error_unsupported_fpu = false;
|
||||
Genode::error("FPU guest state not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _write_amd_state(Vm_state &state, Fiasco::l4_vm_svm_vmcb_t *vmcb,
|
||||
|
@ -1021,8 +1018,12 @@ struct Vcpu : Genode::Thread
|
|||
state.fmask.value() || state.kernel_gs_base.value())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
|
||||
if (state.tpr.valid() || state.tpr_threshold.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.tpr.valid() || state.tpr_threshold.valid()) {
|
||||
if (_show_error_unsupported_tpr) {
|
||||
_show_error_unsupported_tpr = false;
|
||||
Genode::error("TPR & TPR_THRESHOLD not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
|
||||
if (state.dr7.valid())
|
||||
vmcb->state_save_area.dr7 = state.dr7.value();
|
||||
|
@ -1155,14 +1156,14 @@ struct Vcpu : Genode::Thread
|
|||
vmcb->state_save_area.gdtr.limit = state.gdtr.value().limit;
|
||||
}
|
||||
|
||||
if (state.pdpte_0.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_1.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_2.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_3.valid())
|
||||
Genode::error(__LINE__, " not implemented");
|
||||
if (state.pdpte_0.valid() || state.pdpte_1.valid() ||
|
||||
state.pdpte_2.valid() || state.pdpte_3.valid())
|
||||
{
|
||||
if (_show_error_unsupported_pdpte) {
|
||||
_show_error_unsupported_pdpte = false;
|
||||
Genode::error("PDPTE 0/1/2/3 not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
|
||||
if (state.sysenter_cs.valid())
|
||||
vmcb->state_save_area.sysenter_cs = state.sysenter_cs.value();
|
||||
|
@ -1170,25 +1171,32 @@ struct Vcpu : Genode::Thread
|
|||
vmcb->state_save_area.sysenter_esp = state.sysenter_sp.value();
|
||||
if (state.sysenter_ip.valid())
|
||||
vmcb->state_save_area.sysenter_eip = state.sysenter_ip.value();
|
||||
|
||||
if (state.fpu.valid()) {
|
||||
if (_show_error_unsupported_fpu) {
|
||||
_show_error_unsupported_fpu = false;
|
||||
Genode::error("FPU guest state not supported on Fiasco.OC");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
Vcpu(Env &env, Signal_context_capability &cap,
|
||||
Semaphore &handler_ready,
|
||||
Vm_session_client::Vcpu_id &id, enum Virt type,
|
||||
Semaphore &handler_ready, enum Virt type,
|
||||
Allocator &alloc, Affinity::Location location)
|
||||
:
|
||||
Thread(env, "vcpu_thread", STACK_SIZE, location, Weight(), env.cpu()),
|
||||
_signal(cap), _handler_ready(handler_ready), _alloc(alloc),
|
||||
_id(id), _vm_type(type)
|
||||
_vm_type(type)
|
||||
{ }
|
||||
|
||||
Allocator &allocator() const { return _alloc; }
|
||||
|
||||
bool match(Vm_session_client::Vcpu_id id) { return id.id == _id.id; }
|
||||
|
||||
Genode::Vm_session_client::Vcpu_id id() const { return _id; }
|
||||
Genode::Vm_session_client::Vcpu_id id() const { return _id; }
|
||||
void id(Genode::Vm_session_client::Vcpu_id id) { _id = id; }
|
||||
|
||||
void assign_ds_state(Region_map &rm, Dataspace_capability cap)
|
||||
{
|
||||
|
@ -1197,34 +1205,40 @@ struct Vcpu : Genode::Thread
|
|||
*reinterpret_cast<Fiasco::l4_cap_idx_t *>(_state) = 0UL;
|
||||
}
|
||||
|
||||
void resume() {
|
||||
void resume()
|
||||
{
|
||||
Lock::Guard guard(_remote_lock);
|
||||
|
||||
if (_remote == RUN || _remote == PAUSE)
|
||||
if (_state_request == RUN || _state_request == PAUSE)
|
||||
return;
|
||||
|
||||
_remote = RUN;
|
||||
_wake_up.up();
|
||||
_state_request = RUN;
|
||||
|
||||
if (_state_current == NONE)
|
||||
_wake_up.up();
|
||||
}
|
||||
|
||||
void pause() {
|
||||
void pause()
|
||||
{
|
||||
Lock::Guard guard(_remote_lock);
|
||||
|
||||
if (_remote == PAUSE)
|
||||
if (_state_request == PAUSE)
|
||||
return;
|
||||
|
||||
_remote = PAUSE;
|
||||
_state_request = PAUSE;
|
||||
|
||||
/* recall vCPU */
|
||||
Fiasco::l4_cap_idx_t tid = native_thread().kcap;
|
||||
Fiasco::l4_cap_idx_t irq = tid + Fiasco::TASK_VCPU_IRQ_CAP;
|
||||
Fiasco::l4_irq_trigger(irq);
|
||||
|
||||
_wake_up.up();
|
||||
if (_state_current == NONE)
|
||||
_wake_up.up();
|
||||
}
|
||||
|
||||
void terminate() {
|
||||
_remote = TERMINATE;
|
||||
void terminate()
|
||||
{
|
||||
_state_request = TERMINATE;
|
||||
_wake_up.up();
|
||||
}
|
||||
};
|
||||
|
@ -1251,12 +1265,10 @@ Vm_session_client::Vcpu_id
|
|||
Vm_session_client::create_vcpu(Allocator &alloc, Env &env,
|
||||
Vm_handler_base &handler)
|
||||
{
|
||||
Vm_session_client::Vcpu_id id = { vcpu_id };
|
||||
|
||||
enum Virt vm_type = virt_type(env);
|
||||
if (vm_type == Virt::UNKNOWN) {
|
||||
Genode::error("unsupported hardware virtualisation");
|
||||
return id;
|
||||
return Vm_session::Vcpu_id();
|
||||
}
|
||||
|
||||
Thread * ep = reinterpret_cast<Thread *>(&handler._rpc_ep);
|
||||
|
@ -1264,17 +1276,17 @@ Vm_session_client::create_vcpu(Allocator &alloc, Env &env,
|
|||
|
||||
/* create thread that switches modes between thread/cpu */
|
||||
Vcpu * vcpu = new (alloc) Registered<Vcpu>(vcpus, env, handler._cap,
|
||||
handler._done, id, vm_type,
|
||||
handler._done, vm_type,
|
||||
alloc, location);
|
||||
|
||||
try {
|
||||
/* now it gets actually valid - vcpu->cap() becomes valid */
|
||||
vcpu->start();
|
||||
|
||||
call<Rpc_exception_handler>(handler._cap, vcpu->id());
|
||||
|
||||
/* instruct core to let it become a vCPU */
|
||||
call<Rpc_create_vcpu>(vcpu->cap());
|
||||
vcpu->id(call<Rpc_create_vcpu>(vcpu->cap()));
|
||||
|
||||
call<Rpc_exception_handler>(handler._cap, vcpu->id());
|
||||
|
||||
vcpu->assign_ds_state(env.rm(), call<Rpc_cpu_state>(vcpu->id()));
|
||||
} catch (...) {
|
||||
|
@ -1284,9 +1296,7 @@ Vm_session_client::create_vcpu(Allocator &alloc, Env &env,
|
|||
destroy(alloc, vcpu);
|
||||
throw;
|
||||
}
|
||||
|
||||
vcpu_id ++;
|
||||
return id;
|
||||
return vcpu->id();
|
||||
}
|
||||
|
||||
void Vm_session_client::run(Vcpu_id vcpu_id)
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
ifeq (@(TUP_ARCH),x86_64)
|
||||
CPPFLAGS += -I$(TUP_CWD)/include/spec/x86_64
|
||||
endif
|
||||
|
||||
CPPFLAGS += -I$(TUP_CWD)/include
|
||||
|
||||
include &(BASE_DIR)/Tuprules.tup
|
||||
REP_DIR = $(TUP_CWD)
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* \brief CPU, PIC, and timer context of a virtual machine
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2015-02-10
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 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 _INCLUDE__SPEC__ARM_64__CPU__VM_STATE_VIRTUALIZATION_H_
|
||||
#define _INCLUDE__SPEC__ARM_64__CPU__VM_STATE_VIRTUALIZATION_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <cpu/cpu_state.h>
|
||||
|
||||
namespace Genode
|
||||
{
|
||||
/**
|
||||
* CPU context of a virtual machine
|
||||
*/
|
||||
struct Vm_state;
|
||||
|
||||
using uint128_t = __uint128_t;
|
||||
}
|
||||
|
||||
struct Genode::Vm_state : Genode::Cpu_state
|
||||
{
|
||||
Genode::uint64_t pstate { 0 };
|
||||
Genode::uint64_t exception_type { 0 };
|
||||
Genode::uint64_t esr_el2 { 0 };
|
||||
|
||||
/** Fpu registers **/
|
||||
Genode::uint128_t q[32] { 0 };
|
||||
Genode::uint32_t fpcr { 0 };
|
||||
Genode::uint32_t fpsr { 0 };
|
||||
|
||||
Genode::uint64_t elr_el1 { 0 };
|
||||
Genode::uint64_t sp_el1 { 0 };
|
||||
Genode::uint32_t spsr_el1 { 0 };
|
||||
Genode::uint32_t esr_el1 { 0 };
|
||||
|
||||
Genode::uint64_t sctlr_el1 { 0 };
|
||||
Genode::uint64_t actlr_el1 { 0 };
|
||||
Genode::uint64_t vbar_el1 { 0 };
|
||||
Genode::uint32_t cpacr_el1 { 0 };
|
||||
Genode::uint32_t afsr0_el1 { 0 };
|
||||
Genode::uint32_t afsr1_el1 { 0 };
|
||||
Genode::uint32_t contextidr_el1 { 0 };
|
||||
|
||||
Genode::uint64_t ttbr0_el1 { 0 };
|
||||
Genode::uint64_t ttbr1_el1 { 0 };
|
||||
Genode::uint64_t tcr_el1 { 0 };
|
||||
Genode::uint64_t mair_el1 { 0 };
|
||||
Genode::uint64_t amair_el1 { 0 };
|
||||
Genode::uint64_t far_el1 { 0 };
|
||||
Genode::uint64_t par_el1 { 0 };
|
||||
|
||||
Genode::uint64_t tpidrro_el0 { 0 };
|
||||
Genode::uint64_t tpidr_el0 { 0 };
|
||||
Genode::uint64_t tpidr_el1 { 0 };
|
||||
|
||||
Genode::uint64_t vmpidr_el2 { 0 };
|
||||
|
||||
Genode::uint64_t far_el2 { 0 };
|
||||
Genode::uint64_t hpfar_el2 { 0 };
|
||||
|
||||
/**
|
||||
* Timer related registers
|
||||
*/
|
||||
struct Timer {
|
||||
Genode::uint64_t offset { 0 };
|
||||
Genode::uint64_t compare { 0 };
|
||||
Genode::uint32_t control { 0 };
|
||||
Genode::uint32_t kcontrol { 0 };
|
||||
bool irq { false };
|
||||
} timer {};
|
||||
|
||||
/**
|
||||
* Interrupt related values
|
||||
*/
|
||||
struct Pic
|
||||
{
|
||||
unsigned last_irq { 1023 };
|
||||
unsigned virtual_irq { 1023 };
|
||||
} irqs {};
|
||||
|
||||
/**************************
|
||||
** Platform information **
|
||||
**************************/
|
||||
|
||||
Genode::uint64_t id_aa64isar0_el1 { 0 };
|
||||
Genode::uint64_t id_aa64isar1_el1 { 0 };
|
||||
Genode::uint64_t id_aa64mmfr0_el1 { 0 };
|
||||
Genode::uint64_t id_aa64mmfr1_el1 { 0 };
|
||||
Genode::uint64_t id_aa64mmfr2_el1 { 0 };
|
||||
Genode::uint64_t id_aa64pfr0_el1 { 0 };
|
||||
Genode::uint64_t id_aa64pfr1_el1 { 0 };
|
||||
Genode::uint64_t id_aa64zfr0_el1 { 0 };
|
||||
|
||||
Genode::uint32_t ccsidr_inst_el1[7] { 0 };
|
||||
Genode::uint32_t ccsidr_data_el1[7] { 0 };
|
||||
Genode::uint64_t clidr_el1 { 0 };
|
||||
};
|
||||
|
||||
#endif /* _INCLUDE__SPEC__ARM_64__CPU__VM_STATE_VIRTUALIZATION_H_ */
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* \brief Interface between kernel and userland
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2019-05-09
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2019 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 _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_
|
||||
#define _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/stdint.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
typedef Genode::uint64_t Call_arg;
|
||||
typedef Genode::uint64_t Call_ret;
|
||||
typedef Genode::uint64_t Call_ret_64;
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_ */
|
|
@ -17,6 +17,7 @@ SRC_CC += lib/base/heap.cc
|
|||
SRC_CC += lib/base/registry.cc
|
||||
SRC_CC += lib/base/log.cc
|
||||
SRC_CC += lib/base/output.cc
|
||||
SRC_CC += lib/base/raw_output.cc
|
||||
SRC_CC += lib/base/slab.cc
|
||||
SRC_CC += lib/base/sleep.cc
|
||||
SRC_CC += lib/base/sliced_heap.cc
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
include $(BASE_DIR)/lib/mk/startup.inc
|
||||
|
||||
vpath crt0.s $(BASE_DIR)/src/lib/startup/spec/arm_64
|
|
@ -0,0 +1,3 @@
|
|||
SRC_CC += kernel/interface.cc
|
||||
|
||||
vpath kernel/interface.cc $(REP_DIR)/src/lib/base/arm_64
|
|
@ -9,9 +9,9 @@ INC_DIR += $(REP_DIR)/src/core/spec/rpi
|
|||
|
||||
# add C++ sources
|
||||
SRC_CC += platform_services.cc
|
||||
SRC_CC += spec/arm/bcm2835_pic.cc
|
||||
SRC_CC += spec/arm/bcm2835_system_timer.cc
|
||||
SRC_CC += spec/arm/cpu.cc
|
||||
SRC_CC += spec/rpi/timer.cc
|
||||
SRC_CC += spec/rpi/pic.cc
|
||||
|
||||
# include less specific configuration
|
||||
include $(REP_DIR)/lib/mk/spec/arm_v6/core-hw.inc
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
INC_DIR += $(BASE_DIR)/../base-hw/src/bootstrap/spec/arndale
|
||||
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a15_cpu.cc
|
||||
SRC_CC += bootstrap/spec/arndale/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/arndale/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -4,7 +4,7 @@ SRC_S += bootstrap/spec/arm/crt0.s
|
|||
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/arm/imx6_platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
INC_DIR += $(BASE_DIR)/../base-hw/src/bootstrap/spec/imx7d_sabre
|
||||
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a15_cpu.cc
|
||||
SRC_CC += bootstrap/spec/arndale/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/imx7d_sabre/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -4,7 +4,7 @@ SRC_S += bootstrap/spec/arm/crt0.s
|
|||
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/arm/imx6_platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
INC_DIR += $(BASE_DIR)/../base-hw/src/bootstrap/spec/odroid_xu
|
||||
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a15_cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/odroid_xu/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -3,7 +3,7 @@ NR_OF_CPUS = 2
|
|||
INC_DIR += $(BASE_DIR)/../base-hw/src/bootstrap/spec/panda
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/panda/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -4,7 +4,7 @@ SRC_S += bootstrap/spec/arm/crt0.s
|
|||
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/pbxa9/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -4,7 +4,7 @@ SRC_S += bootstrap/spec/arm/crt0.s
|
|||
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/arm/imx6_platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -4,7 +4,7 @@ SRC_S += bootstrap/spec/arm/crt0.s
|
|||
|
||||
SRC_CC += bootstrap/spec/arm/cpu.cc
|
||||
SRC_CC += bootstrap/spec/arm/cortex_a9_mmu.cc
|
||||
SRC_CC += bootstrap/spec/arm/pic.cc
|
||||
SRC_CC += bootstrap/spec/arm/gicv2.cc
|
||||
SRC_CC += bootstrap/spec/zynq/platform.cc
|
||||
SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc
|
||||
SRC_CC += hw/spec/32bit/memory_map.cc
|
||||
|
|
|
@ -6,16 +6,16 @@
|
|||
|
||||
# add include paths
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/arndale
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/arm_v7/virtualization
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/arm/virtualization
|
||||
|
||||
# add C++ sources
|
||||
SRC_CC += spec/arm_gic/pic.cc
|
||||
SRC_CC += spec/arndale/platform_services.cc
|
||||
SRC_CC += kernel/vm_thread_on.cc
|
||||
SRC_CC += spec/arm/gicv2.cc
|
||||
SRC_CC += spec/arm_v7/virtualization/kernel/vm.cc
|
||||
SRC_CC += spec/arm_v7/vm_session_component.cc
|
||||
SRC_CC += spec/arm_v7/virtualization/vm_session_component.cc
|
||||
SRC_CC += spec/arm/virtualization/platform_services.cc
|
||||
SRC_CC += spec/arm/virtualization/vm_session_component.cc
|
||||
SRC_CC += vm_session_common.cc
|
||||
SRC_CC += vm_session_component.cc
|
||||
|
||||
# add assembly sources
|
||||
SRC_S += spec/arm_v7/virtualization/exception_vector.s
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
INC_DIR += $(REP_DIR)/src/core/spec/imx53_qsb
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/imx53
|
||||
|
||||
SRC_CC += spec/imx53/pic.cc
|
||||
SRC_CC += spec/imx53/timer.cc
|
||||
SRC_CC += spec/arm/imx_epit.cc
|
||||
SRC_CC += spec/arm/imx_tzic.cc
|
||||
|
||||
# include less specific configuration
|
||||
include $(REP_DIR)/lib/mk/spec/cortex_a8/core-hw.inc
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
INC_DIR += $(REP_DIR)/src/core/spec/arm_v7/trustzone
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/imx53/trustzone
|
||||
|
||||
SRC_CC += spec/imx53/trustzone/platform_services.cc
|
||||
SRC_CC += kernel/vm_thread_on.cc
|
||||
SRC_CC += spec/arm_v7/trustzone/kernel/vm.cc
|
||||
SRC_CC += spec/arm_v7/vm_session_component.cc
|
||||
SRC_CC += spec/arm_v7/trustzone/platform_services.cc
|
||||
SRC_CC += spec/arm_v7/trustzone/vm_session_component.cc
|
||||
SRC_CC += vm_session_common.cc
|
||||
SRC_CC += vm_session_component.cc
|
||||
|
||||
SRC_S += spec/arm_v7/trustzone/exception_vector.s
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue