直指MIPS交叉编译环境

举报
hepta_nian 发表于 2021/12/07 13:11:01 2021/12/07
【摘要】 #什么是MIPS交叉编译环境MIPS是一个RISC的处理器体系结构,与之类似的还有x86,ARM等,ARM在移动平台,因为在路由器领域基本还是以MIPS架构为主,而诸如树莓派/单片机大部分均为ARM架构。因为最近一直在研究路由器安全领域本文记录下MIPS交叉编译环境的几个坑。操作系统:Ubuntu16.04作为RISC精简指令集的代表,MIPS处理器曾经比ARM还要火,比ARM更早支持64位...

#什么是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模拟我们需要进行固件分析的大部分路由器及各种普通板子环境。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。