qemu-trustzone编译&运行(包含linux内核的编译方法)
由于之前都是用的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-
(本文未完,我有时间继续写)
qemu-trustzone编译&运行(包含linux内核的编译方法)的更多相关文章
- 在qemu环境中用gdb调试Linux内核
简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...
- Linux内核配置编译及基本调试方法
一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...
- 【Linux内核】编译与配置内核(x86)
[Linux内核]编译与配置内核(x86) https://www.cnblogs.com/jamesharden/p/6414736.html
- Linux内核源代码分析方法
Linux内核源代码分析方法 一.内核源代码之我见 Linux内核代码的庞大令不少人"望而生畏",也正由于如此,使得人们对Linux的了解仅处于泛泛的层次.假设想透析Linux ...
- Linux内核多线程实现方法 —— kthread_create函数【转】
转自:http://blog.csdn.net/sharecode/article/details/40076951 Linux内核多线程实现方法 —— kthread_create函数 内核经常需要 ...
- 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行
宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabiarm-linux-gcc:4.4.3QEMU:2.5.0Linux ke ...
- Linux内核的编译安装
前言 Linux内核是Linux操作2347系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性.内核主要功能包括进程管理.内存管理.文件管理.设备管理.网络管理等.Linux内 ...
- arm-linux-gcc4.4.3编译s3c2410平台linux内核
写在前面:2.6.14版本的内核用arm-linux-gcc4.4.3没有编译成功,下载2.6.37版本的内核用arm-linux-gcc4.4.3编译通过. 一.首先下载linux内核: linux ...
- 在linux环境下编译运行OpenCV程序的两种方法
原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之 ...
随机推荐
- PostgreSQL 的 distinct on 的理解
摘录自:http://www.cnblogs.com/gaojian/archive/2012/09/05/2671381.html 对于 select distinct on , 可以利用下面的例子 ...
- BIGIP-LTM中的NAT和SNAT
http://250688049.blog.51cto.com/643101/1095880 一.NAT(Network Address Translation)网络地址转换1.NAT简介 NAT ...
- U8g2库I2C总线再次突破性调试成功
这次采用U8X8的方式,不再采用u8g2,因为后者一直报内存问题.所以采用了不占内存的u8x8模式 同时u8g2库文件的示例代码也是很牛逼的, 里面还有message box 非常的可爱运行效果也非常 ...
- 模态框zeroModal快速引入
最基本快速接入 <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...
- sqlserver2008客户端设置主键自增
是标识改为是
- jsp小结
JSP执行步骤 完整步骤: 第一步:用户通过浏览器发出一个Http请求: 第二步:web服务器识别是对jsp页面的请求: 第三步:jsp容器通过jsp引擎将jsp页面转化为servlet代码(纯ja ...
- android adapter 中添加OnClickListener事件
public class SearchAutoAdapter extends BaseAdapter { private OnClickListener mOnClickListener; publi ...
- VisionPro学习笔记:用IEEE1394相机抓取图像
1)找到采集卡: CogFrameGrabber1394DCAMs cameras = new CogFrameGrabber1394DCAMs(); 2)列举相连接的相机: ICogFrameGra ...
- phpmailer发送邮件服务
获取开源的phpmail类 开启stmp服务登录126/163邮箱 ->设置->POPS/SMTP/IMAP(开启需要的服务,并点击保存,初次使用会要求设置一个授权码) 测试 <?p ...
- all,any函数
all函数:当矩阵全为非零元素时返回1,否则(存在零元素),返回0: any函数:当矩阵中存在非零 1 1 1 1 1 1 1 1 ...