美文网首页
操作系统形式化验证实践教程(5) - 搭建seL4环境

操作系统形式化验证实践教程(5) - 搭建seL4环境

作者: Jtag特工 | 来源:发表于2020-08-06 22:54 被阅读0次

    操作系统形式化验证实践教程(5) - 搭建seL4环境

    尽管我们有太多的基础知识都还没有讲,我们还是要快速进入到验证操作系统的世界中。先知道有什么用,然后再学习,可能是一种比较高效的方法。

    搭建seL4验证环境

    关于seL4有多牛,我们就不多介绍了,等我们了解了足够多的细节,回头再看,可能有更加鲜活的印象。基本上,seL4是第一个被完整形式化验证的有商用的操作系统。
    架构图我们也后面再讲,先搞工程化,搭环境。

    下载源代码

    验证seL4需要三部分, seL4源代码,l4v检验脚本代码,以及isabelle。

    我们创建一个验证的目录,然后将seL4代码和l4v代码clone下来:

    git clone https://github.com/seL4/seL4
    git clone https://github.com/seL4/l4v
    

    接着还需要将isabelle的路径link到这个验证目录下。

    安装依赖库

    从上一节我们已经了解到,isabelle的依赖环境很复杂。但是,要验证操作系统,我们依赖的工具更多,比如交叉编译链,设备树编译器,cmake, ninja等,还有一系列辅助的python库。
    在ubuntu下,可以使用apt-get安装部分依赖库:

    sudo apt-get install \
        python3 python3-pip python3-dev \
        gcc-arm-none-eabi build-essential libxml2-utils ccache \
        ncurses-dev librsvg2-bin device-tree-compiler cmake \
        ninja-build curl zlib1g-dev texlive-fonts-recommended \
        texlive-latex-extra texlive-metapost texlive-bibtex-extra \
        mlton-compiler haskell-stack
    

    安装python脚本

    基本操作是安装sel4-deps库。
    例如:

    pip3 install sel4-deps --user
    

    选择sudo pip install的,还有使用virtual-env的请自助。

    设置isabelle环境

    在l4v目录下,将l4vf的默认配置复制过来:

    mkdir -p ~/.isabelle/etc
    cp -i misc/etc/settings ~/.isabelle/etc/settings
    ./isabelle/bin/isabelle components -a
    ./isabelle/bin/isabelle jedit -bf
    

    最后检验一下环境是否可以正常工作:

    ./isabelle/bin/isabelle build -bv HOL-Word
    

    输出如下:

    Started at Thu Aug 6 17:45:32 GMT+8 2020 (polyml-5.8.1_x86_64_32-darwin on IT-C02YX0A4LVDQ)
    ISABELLE_BUILD_OPTIONS=""
    
    ML_PLATFORM="x86_64_32-darwin"
    ML_HOME="/Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/contrib/polyml-5.8.1-20200228/x86_64_32-darwin"
    ML_SYSTEM="polyml-5.8.1"
    ML_OPTIONS="--minheap 500"
    
    Session Pure/Pure
    Session Tools/Tools
    Session HOL/HOL (main)
    Session HOL/HOL-Library (main timing)
    Session HOL/HOL-Word (main timing)
    
    Finished at Thu Aug 6 17:45:35 GMT+8 2020
    0:00:02 elapsed time
    

    编译HOL-Word,需要依赖HOL/HOL-Libaray, HOL/HOL, Tools/Tools和最基础的Pure/Pure库。

    因为没有ROOT文件,大家可能觉得有点抽象,不知道幕后究竟发生了什么。没关系,我们增加一个-l参数列出每个会话的每个文件列表,我们会看到一个长长的列表,我选贴一部分,要不然太长了:

    Session Pure/Pure
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/contrib/polyml-5.8.1-20200228/x86_64_32-darwin/poly
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/cache.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/counter.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/event_timer.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/future.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/lazy.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/mailbox.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/multithreading.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/par_exn.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/par_list.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/single_assignment.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/standard_thread.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/synchronized.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/task_queue.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/thread_attributes.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/thread_data.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/thread_data_virtual.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/thread_position.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/timeout.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Pure/Concurrent/unsynchronized.ML
    ...
    Session Tools/Tools
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_haskell.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_ml.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_namespace.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_preproc.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_printer.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_runtime.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_scala.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_simp.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_symbol.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_target.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code/code_thingol.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/Code_Generator.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/cache_io.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/Tools/nbe.ML
    Session HOL/HOL (main)
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/ATP.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Archimedean_Field.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Argo.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Cardinal_Arithmetic.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Cardinal_Order_Relation.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Composition.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Def.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Fixpoint_Base.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Greatest_Fixpoint.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Least_Fixpoint.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Wellorder_Constructions.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Wellorder_Embedding.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/BNF_Wellorder_Relation.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Basic_BNF_LFPs.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Basic_BNFs.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Binomial.thy
    ...
    Session HOL/HOL-Library (main timing)
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/AList.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/AList_Mapping.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Adhoc_Overloading.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/BNF_Axiomatization.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/BNF_Corec.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/BigO.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Boolean_Algebra.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Bourbaki_Witt_Fixpoint.thy
    ...
    Session HOL/HOL-Word (main timing)
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Boolean_Algebra.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Cardinality.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Numeral_Type.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Phantom_Type.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Type_Length.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Library/Z2.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Bit_Comprehension.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Bits.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Bits_Int.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Bits_Z2.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Misc_Arithmetic.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Misc_Auxiliary.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Misc_Typedef.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/More_Word.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Tools/smt_word.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Tools/word_lib.ML
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Word.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Word_Bitwise.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/Word_Examples.thy
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/document/root.bib
      /Applications/Isabelle2020.app/Contents/Resources/Isabelle2020/src/HOL/Word/document/root.tex
    
    Finished at Thu Aug 6 17:59:10 GMT+8 2020
    0:00:03 elapsed time
    

    管理分支

    另外需要注意的是管理代码分支与Isabelle/HOL的兼容性。
    比如在目前的时间点上,默认分支使用Isabelle 2020是跑不通的,需要切换到isabelle-2020分支。

    git checkout isabelle-2020
    

    下面我们就可以通过跑测试来验证环境的问题了,运行l4v的run_tests脚本。大约需要十几个小时。

    运行结果类似下面这样:

    Testing for L4V_ARCH=ARM:
    Testing Orphanage for ARM
    Running 49 test(s)...
      Started isabelle ...
      Finished isabelle                  passed      ( 0:00:05 real,  0:00:22 cpu,  0.51GB)
      Started Lib ...
      Finished Lib                       passed      ( 0:00:56 real,  0:05:16 cpu,  3.31GB)
      Started CamkesGlueSpec ...
      Finished CamkesGlueSpec            passed      ( 0:00:31 real,  0:01:42 cpu,  1.83GB)
      Started Sep_Algebra ...
      Finished Sep_Algebra               passed      ( 0:00:39 real,  0:03:37 cpu,  2.91GB)
      Started Concurrency ...
      Finished Concurrency               passed      ( 0:01:09 real,  0:04:24 cpu,  1.87GB)
      Started tests-xml-correct ...
      Finished tests-xml-correct         FAILED *    ( 0:00:00 real,  0:00:00 cpu,  0.01GB)
      Started haskell-translator ...
      Finished haskell-translator        passed      ( 0:00:00 real,  0:00:00 cpu,  0.00GB)
      Started SepTactics ...
      Finished SepTactics                passed      ( 0:01:05 real,  0:05:20 cpu,  3.16GB)
      Started TakeGrant ...
      Finished TakeGrant                 passed      ( 0:00:28 real,  0:01:29 cpu,  1.75GB)
      Started ASpec ...
      Finished ASpec                     passed      ( 0:00:06 real,  0:00:23 cpu,  0.50GB)
      Started AInvs ...
      Finished AInvs                     passed      ( 0:19:53 real,  1:23:31 cpu, 14.11GB)
      Started BaseRefine ...
      Finished BaseRefine                passed      ( 0:04:39 real,  0:10:15 cpu,  5.49GB)
      Started Refine ...
      Finished Refine                    passed      ( 0:27:47 real,  2:25:11 cpu, 17.19GB)
      Started RefineOrphanage ...
      Finished RefineOrphanage           passed      ( 0:01:49 real,  0:05:21 cpu,  3.72GB)
      Started DBaseRefine ...
      Finished DBaseRefine               passed      ( 0:03:00 real,  0:07:30 cpu,  4.96GB)
      Started DRefine ...
      Finished DRefine                   passed      ( 0:08:57 real,  0:50:21 cpu,  5.12GB)
      Started Access ...
      Finished Access                    passed      ( 0:05:06 real,  0:24:18 cpu,  5.42GB)
      Started CamkesAdlSpec ...
      Finished CamkesAdlSpec             passed      ( 0:01:48 real,  0:03:42 cpu,  3.29GB)
      Started InfoFlow ...
      Finished InfoFlow                  passed      ( 0:25:37 real,  1:10:27 cpu,  8.55GB)
      Started DPolicy ...
      Finished DPolicy                   passed      ( 0:02:29 real,  0:07:55 cpu,  3.91GB)
      Started CamkesCdlRefine ...
      Finished CamkesCdlRefine           passed      ( 0:02:40 real,  0:06:38 cpu,  3.32GB)
      Started Bisim ...
      Finished Bisim                     passed      ( 0:00:47 real,  0:02:29 cpu,  2.87GB)
      Started ExecSpec ...
      Finished ExecSpec                  passed      ( 0:04:39 real,  0:11:51 cpu,  4.56GB)
      Started DSpec ...
      Finished DSpec                     passed      ( 0:02:39 real,  0:08:01 cpu,  4.40GB)
      Started SepDSpec ...
      Finished SepDSpec                  passed      ( 0:00:50 real,  0:04:05 cpu,  2.24GB)
      Started DSpecProofs ...
      Finished DSpecProofs               passed      ( 0:01:08 real,  0:06:09 cpu,  2.29GB)
      Started ASepSpec ...
      Finished ASepSpec                  passed      ( 0:00:20 real,  0:01:05 cpu,  1.55GB)
      Started HaskellKernel ...
      Finished HaskellKernel             FAILED *    ( 0:00:00 real,  0:00:00 cpu,  0.02GB)
      Started SysInit ...
      Finished SysInit                   passed      ( 0:02:58 real,  0:13:16 cpu,  3.42GB)
      Started SysInitExamples ...
      Finished SysInitExamples           passed      ( 0:02:19 real,  0:07:46 cpu,  2.20GB)
      Started CParser ...
      Finished CParser                   passed      ( 0:00:06 real,  0:00:25 cpu,  0.55GB)
      Started CLib ...
      Finished CLib                      passed      ( 0:00:42 real,  0:04:26 cpu,  3.65GB)
      Started LibTest ...
      Finished LibTest                   passed      ( 0:04:23 real,  0:13:57 cpu,  6.98GB)
      Started c-kernel ...
      Finished c-kernel                  passed      ( 0:00:01 real,  0:00:00 cpu,  0.02GB)
      Started CKernel ...
      Finished CKernel                   passed      ( 0:00:07 real,  0:00:26 cpu,  0.50GB)
      Started CSpec ...
      Finished CSpec                     passed      ( 0:07:10 real,  0:38:37 cpu,  9.98GB)
      Started CBaseRefine ...
      Finished CBaseRefine               passed      ( 1:07:16 real,  6:04:21 cpu, 17.59GB)
      Started CRefine ...
      Finished CRefine                   passed      ( 1:01:46 real,  4:59:21 cpu, 17.40GB)
      Started InfoFlowCBase ...
      Finished InfoFlowCBase             passed      ( 0:32:30 real,  1:32:45 cpu, 10.14GB)
      Finished SimplExportAndRefine      passed      ( 3:15:33 real,  7:36:36 cpu,  8.88GB)
      Started CParserTest ...
      Finished CParserTest               passed      ( 0:00:06 real,  0:00:23 cpu,  0.51GB)
      Started CParserTools ...
      Finished CParserTools              passed      ( 0:00:01 real,  0:00:00 cpu,  0.02GB)
      Started AutoCorres ...
      Finished AutoCorres                passed      ( 0:01:01 real,  0:05:48 cpu,  3.34GB)
      Started CamkesGlueProofs ...
      Finished CamkesGlueProofs          passed      ( 0:13:20 real,  0:45:57 cpu,  4.98GB)
      Started AutoCorresDoc ...
      Finished AutoCorresDoc             passed      ( 0:00:18 real,  0:00:53 cpu,  1.84GB)
      Started AutoCorresTest ...
      Finished AutoCorresTest            passed      ( 0:05:11 real,  0:32:09 cpu,  9.17GB)
    

    其中最长的用例SimplExportAndRefine消耗7个多小时CPU时间。

    相关文章

      网友评论

          本文标题:操作系统形式化验证实践教程(5) - 搭建seL4环境

          本文链接:https://www.haomeiwen.com/subject/okhtdktx.html