直指MIPS交叉编译环境
#什么是MIPS交叉编译环境
MIPS是一个RISC的处理器体系结构,与之类似的还有x86,ARM等,ARM在移动平台,因为在路由器领域基本还是以MIPS架构为主,而诸如树莓派/单片机大部分均为ARM架构。因为最近一直在研究路由器安全领域本文记录下MIPS交叉编译环境的几个坑。
操作系统:Ubuntu16.04
作为RISC精简指令集的代表,MIPS处理器曾经比ARM还要火,比ARM更早支持64位,也是安卓系统支持的三大指令集之一,只不过现在MIPS指令集在移动、嵌入式领域影响比ARM小。
#历史悠久的MIPS
网上很多环境搭建的资料太久了,最早的MIPS交叉编译环境可追溯到2013年,最迟的交叉编译环境构建文章停留在2017年,阿里先知社区,Freebuf等文章中提到的部分库和涉及的安装流程已经逐步失效。
#安装buildroot
sudo apt-get install curses-devel sudo apt-get install libncurs* sudo apt-get update
然后下载
git clone https://github.com/buildroot/buildroot.git
(GitHub下载文件较慢,因此这里我们使用码云上公开的库。下载速度99+)
git clone https://gitee.com/cc-key/buildroot
进行编译配置
cd buildroot make clean make menuconfig
不出意外的话,就来到了buildroot的编译配置界面,这里也是最为重要的部分。
target option中设置,第一个是询问你设置大端序还是小端序,这里我打算两个端序都安装,所以这里任意选,第二个设置成generic mips32即可。
这里补充一点关于大端序小端序的知识。
《加密与解密(第四版)》中详细介绍了有关大端序,小端序。这里我贴部分图
这里我选择设置的图如下:
然后是toolchain,这里我们需要选择比我们系统内核版本低的进行配置。
Target Arch选择MIPS(little endian)小端序
uname -r
查看本地Linux的内核版本
选择较低系统内核配置即可。
然后make开始编译(此处略去五小时)
由于我们选择的是小端,所以我们看到misp开头的都是小端序编译的程序。
由于工具都在这些路径之下,我们在其他路径下编译很不方便,所以需要设置环境变量,使其在外部可完全被调用。这样子MIPS交叉编译环境就算是在本地搭建完成。
我们再来看看是否顺利的安装成功。我们进入/buildroot/output/target/bin目录
file查看busybox是否为可用的MIPS小端序文件
king@king-virtual-machine:~$ cd buildroot/output/target/bin/ king@king-virtual-machine:~/buildroot/output/target/bin$ file busybox busybox: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, stripped
#配置环境变量
为了以后方便使用,我们直接将其中的bin文件夹添加到环境变量中,省得我们日后输入长长的路径了。将路径添加到~/.bashrc文件中,输入vim ~/.bashrc,在该文件最后添加如下环境变量,按照格式:export PATH="$PATH:your path"(即程序的编译库原本是在/buildroot/output/target/bin目录内-以gcc为例MIPS所对应的c语言编译库gcc为/buildroot/output/target/bin目录下的mipsel-linux-gcc而普通Linux下使用gcc编译c语言时,只需要在终端输入gcc,此刻我们配置好环境变量,使得mipsel-linux-gcc也可在所属目录以外的地方调用)
#验证测试
使用c语言编写a.c,在终端下使用mipsel-linux-gcc进行编译
编译后生成a.out可执行文件
可见成功生成了小端序的mips文件,至此mips交叉编译环境搭建完毕。此时,我们在配合QEMU-MIPS模拟我们需要进行固件分析的大部分路由器及各种普通板子环境。
- 点赞
- 收藏
- 关注作者
评论(0)