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查看相关问题解答之 ...
随机推荐
- -------- ROOTKIT 核心技术——系统服务调度表挂钩调试(PART III) --------
---------------------------------------------------------------------------------------- 本篇开始进行真枪实弹的 ...
- RequestParam\@ResponseBody
为什么不写 RequestParam 也能拿到参数 三种写法,test(String name), test(@RequestParam String name), test(@RequestPara ...
- IDEA新建Maven项目
Maven是什么? 当我们在开发一个项目的时候,不可避免地会使用到第三方的类库,而它们又可能依赖着另外的Jar包,又得引入其他Jar包,而且我们很容易就会引漏掉~然后就会报错,有时候报的错会让我们花掉 ...
- Spring 4.x (二)
1 静态代理 PersonDAO.java package com.xuweiwei.staticproxy; public interface PersonDAO { public void sav ...
- js中的一元加法和一元减法
大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同. 一元加法本质上对数字无任何影响: var iNum = 20; iNum = +iNum; al ...
- php与HTML交互问题
1.将表单中的action属性值设为PHP路径,则网页会跳转到这个网址 <html> <body> <form action="welcome.php" ...
- find与tar的结合使用
新建一个文件,自定义时间点[root@nhserver2 ~]# touch -t 1403010000.00 file1.txt 新建一个文件,自定义时间点[root@nhserver2 ~]# ...
- IOS 时间字符串转换时间戳失败问题
链接:https://pan.baidu.com/s/1nw6VWoD 密码:1peh 有时候获取到的时间带有毫秒数或者是(2018-2-6 11:11:11)格式的(别说你没遇到过,也别什么都让后台 ...
- SQL Server比较2table字段的差异
由于项目前后用了2个数据库,需要统计数据库结构的变化,需要统计每个表的变化,由于人工核对挺浪费时间,就写了一点代码: 1.统计表的字段数量(查询表有多少列): select count(name) ...
- transfer-webpack-plugin最简使用示例
转移文件的插件 加载插件 $ npm install transfer-webpack-plugin --save-dev API new CopyWebpackPlugin(patterns: Ar ...