0
点赞
收藏
分享

微信扫一扫

MIPS Linux内核编译构建环境的搭建

_铁马冰河_ 2022-04-17 阅读 39
MIPSLINUX

AI的端侧应用离不开各种算力平台,目前形成了CPU+NPU,CPU+FPGA以及CPU+GPU的几类算力搭配,他们各有优势,也各有弱点。先看它们的共同点,从组合名字可以看出,那就是他们都依赖CPU,这是因为无论NPU,FPGA还是GPU,它们的架构特点决定了在流水线pipeline,逻辑控制方面要弱于CPU,它们要么作为专用算力加速器,没有完备的指令集系统,比如GPU有简单的流水线,可以完成取指,解码执行的操作,但是它的流水线适合做大量的SIMD并行数据计算,无法完成复杂的执行流以及逻辑控制。另外还有一些没有取指流水等机制,无法自举执行指令,必须依赖CPU打配合,有点类似于FPU或者NEON单元,比如NPU就是这个样子,无法独立完成取指令执行的操作,运行依赖于CPU不断的喂指令。

之前对与RISCV Vector指令,MIPS的FPU以及ARM的NEON都有过一些分析,但当时对AI没有太多概念,对AI如何使用这些单元提供的算力缺乏认识,分析完了感觉没有结果。现在对AI有了一些了解,尤其其中的算子实现对异构算力的设计需求有了一些自己的看法,这样反过来从需求方倒推,对ISA指令集的设计理解的会更加深刻。 所以觉得有必要结合AI,对一些主流的CPU ISA指令集特点做一个总结,包括最早接触的MIPS,用Xlinux(FPGA)做过验证,之后是ARM,Altera FPGA,然后RISCV和DSP(Xtensa)。这里面RISCV是最精简的,软件上可以认为是MIPS的一个子集(可能Vector向量指令的区别会大一些),可以放在一起分析,感觉这是一个比较大的主题和工作量,万事开头难,先从重温MIPS开始,之后逐渐切入其它ISA,横向对比,纵向深挖,分析它们各自对AI加速提供的各类ISA级的机制以及背后的思考,个人的一些看法,期待被打脸。

首先从搭建MIPS开发环境说起

MIPS编译工具链下载

MIPS官网:MIPS

奇葩的是MIPS官网的副标题竟然是elevating riscv,几年前MIPS就已经宣布放弃MIPS拥抱RISCV,一代旗手沦落至此,令人唏嘘。

顺着导航,来到Developer Tools – MIPS,可以看到开发工具和开发模式。

之后来到编译器下载链接:MIPS Compilers – MIPS

MIPS支持LLVM工具开发,不过我们这里用GCC

 我们将bare metal和Linux用户态工具链都下载下来,由于我们要编译的是Linux内核,究竟使用哪种工具链关系不大,任何一个都可以,我们解压:Codescape.GNU.Tools.Package.2019.02-05.for.MIPS.IMG.Linux.CentOS-6.x86_64.tar.gz

之后导出环境变量:

export PATH=$PATH:/home/caozilong/mips/mips-img-linux-gnu/2019.02-05/bin

之后,在任何一个目录,都可以直接输入mips-img-linux-gnu-gcc访问GCC了。

下载最新的Linux内核代码:

从kernel.org下载并解压:

编译

make ARCH=mips CROSS_COMPILE=mips-img-linux-gnu- malta_defconfig 
make ARCH=mips CROSS_COMPILE=mips-img-linux-gnu- menuconfig
make -j4 ARCH=mips CROSS_COMPILE=mips-img-linux-gnu-

编译结果:

 反编译

mips-img-linux-gnu-objdump -d vmlinux>vmlinux.dis

编译完成,下一步准备用busybox构建一个小的文件系统,之后用qemu模拟器进行启动,就可以愉快的跑MIPS ISA了。


结束!

举报

相关推荐

0 条评论