由于之前都是用的mtk6797开发板,回到实验室之后想要做实验的话需要弄一个支持trustzone的qemu,在这里记录一下我的编译和调试过程。本来最近一直忙着看论文和写论文,但是忽然发现自己在实验部分还有好多欠缺,对一些关键问题的理解存在一部分想象(没有经过实践验证),这让我有些难以接受,虽然去搞源码、调试和分析一定会很耗时间,但是奈何水平不高,我觉得这些事情都是我无法回避的,引用大学时高数老师的一句话,“欠了帐总是要还的”,还是踏踏实实从头做起吧!
首先去github上找一份源码,这里我找的是qemu-trustzone+linux kernel,读者可按照这个名字进行搜索即可(也可以搜索neuzm,我自己分别fork了一份)。
compile qemu
首先对qemu进行配置,这里的arm-softmmu是选择system mode,qemu在system mode能模拟整个计算机,类似于VMware。
./configure --target-list=arm-softmmu --audio-drv-list=
执行上面这句话会告诉你缺一些库,缺什么安装什么就行了,我这里提示我安装glib2.0和pixman。首先用apt-cache search找一下相关的包,然后安装,很简单就不介绍了。然后执行下面这句话就ok了。
make & make install
注意,这里面的make install需要在root模式下才能执行。
compile linux kernel
想要编译Linux,第一步肯定先要进行配置,看了一下网络上的介绍,有以下几条配置命令:
- make config #遍历选择编译内核功能
- make allyesconfig #启用内核全部功能
- make allnoconfig #内核功能选项全部为否
- make menuconfig #开启文本菜单选项,对窗口有限制,尽量调大窗口,否则会出错
- #使用此命令需安装gcc和ncurses-devel
- make gconfig #依赖GNome桌面环境及GNome的图形开发环境,gtk2
- make kconfig #依赖KDE桌面环境及KDE的图形开发环境,qt
选择其中哪一条都可以,对我来说,我一般都是选择有图的,所以我准备执行make menuconfig,发现不行,给我报错,错误如下:
其实这种错误,我估计也是缺某个库,于是到网络找一下,果然是,只要执行下面这句话就OK:
sudo apt-get install libncurses5-dev
到这里图形界面终于可以run起来了。
可问题似乎还远远没有解决。打开配置文件你会发现,what??这么多,这都是啥?哎,其实我也想知道。参看上图读者可以发现,左上角明确标明是配置x86架构的,这再次证明了一个真理,就是图形化的东西往往功能不全,我们只能回到文字时代去解决,首先去Makefile里找到ARCH,把ARCH改成arm,再执行make menuconfig就变得合理多了。
由于这个配置太复杂,我决定不改了,就按默认的来,出问题再说。但是这里需要有一处额外修改,如下所示:
CROSS_COMPILE ?= ~/microkernel/tools/arm-2011.03/bin/arm-none-linux-gnueabi-
这个就是交叉编译链的路径,我在x86架构下编译arm平台的指令肯定需要改这个,你也可以不改,那就需要每次make的时候把这个路径作为参数制定,我当然不喜欢每次都要打额外的命令,所以改了。但是后来我发现,这样做不行,因为它们内部脚本关系很复杂,我这样简单的改了一处编译时会出现错误。于是我自己写了个脚本envsetup.sh把它设置成环境变量就行了,脚本里最重要的是下面两句:
- export PATH=~/microkernel/tools/arm-2011.03/bin:$PATH
- export CROSS_COMPILE=~/microkernel/tools/arm-2011.03/bin/arm-none-linux-gnueabi-
(本文未完,我有时间继续写)