qemu-trustzone编译&运行(包含linux内核的编译方法)

时间:2024-01-05 18:37:50

由于之前都是用的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,发现不行,给我报错,错误如下:

qemu-trustzone编译&运行(包含linux内核的编译方法)

其实这种错误,我估计也是缺某个库,于是到网络找一下,果然是,只要执行下面这句话就OK:

sudo apt-get install libncurses5-dev

到这里图形界面终于可以run起来了。

qemu-trustzone编译&运行(包含linux内核的编译方法)

可问题似乎还远远没有解决。打开配置文件你会发现,what??这么多,这都是啥?哎,其实我也想知道。参看上图读者可以发现,左上角明确标明是配置x86架构的,这再次证明了一个真理,就是图形化的东西往往功能不全,我们只能回到文字时代去解决,首先去Makefile里找到ARCH,把ARCH改成arm,再执行make menuconfig就变得合理多了。

qemu-trustzone编译&运行(包含linux内核的编译方法)

由于这个配置太复杂,我决定不改了,就按默认的来,出问题再说。但是这里需要有一处额外修改,如下所示:

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-

(本文未完,我有时间继续写)