随想录(定义自己的cpu和工具链)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
很早就看过cpu的书,对cpu的实现还是有很大兴趣的。当时就在想,如果有一套自己的cpu,需要做哪些工作呢?带着这个疑问,搜索了一些资料,并且看了一些代码,还是有不少收获的。特别是在github上面看到了https://github.com/cassuto的工作,满震撼的。
1、定义自己的指令集
这个是基础,没有自己的指令集,一切都是空谈。目前最火的riscv可以拿来练手,没有侵权这方面的烦恼。
2、移植binutils
binutils里面有很多的工具,主要的是as和ld。前者负责将as编译成*.o文件,后者负责将*.o连接成elf文件。其他比较重要的还要readelf、objcopy、objdump,而objcopy就负责将elf转变成bin文件使用。
3、cpu仿真器
仿真器是验证cpu比较好的一个方法。因为你的cpu是独一份,所以仿真器的工作基本上只能靠你自己开发了。
4、gcc移植
有了binutils是远远不够的,我们最终还是希望用c语言开发,对gcc进行后端移植是十分必要的。至此,我们可以用gcc+binutils开发类似于mcu的开发程序了。gcc的主要作用就是将c变成汇编文件。
5、uboot & linux kernel移植
从生态链的考虑,使linux运行在我们设计的cpu上是十分必要的。暂时,你也不能指望你的cpu可以运行windows系统。linux基本上是唯一的选择。接入了linux,就相当于接入了整个linux生态链。所以,我们需要手动添加代码,使得linux可以支持我们的cpu。
uboot移植主要是为了启动linux的需要,这部分工作不多。
6、uclibc移植
linux上面的程序依赖于libc库,因此有必要移植一个uclibc,这样就可以编译busybox代码了。
7、openjdk等移植
如果我们希望cpu用在更多的领域,那么有必要在openjdk上对我们的cpu进行适配,毕竟目前使用java的开发者还是非常多的。
其他的移植还有.NET Core等第三方软件,这部分其实和指令集本身关系不大,主要还是为了融入某一个技术生态。
8、RTL的编写
实际上上面第三项工作完成后,就可以开始RTL的设计,或者可以一起做。用fpga和仿真器一起验证指令设计有没有问题。
9、soc的编写
单个cpu的功能总是有限的,因此有必要编写一个最小Soc,包括cpu、gpio、uart、debug、spi、timer、sram的添加。
10、linux运行在fpga上面
等到soc没有问题之后,就可以将之前移植好的linux转到fpga上面,这个时候应该有大量的问题需要处理,比如功能、稳定性和性能。当然在此之前,可以先跑一个rtos试试水。
11、其他需要移植或者修改的部分
软件部分,
a)gdb移植
b)gdbserver移植
c)libpthread移植
硬件部分,
a)sdram移植
b)nandflash移植
随想录(定义自己的cpu和工具链)相关推荐
- Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义
Keil MDK是非常常用的单片机开发集成环境,Keil公司2005年由ARM公司收购,现在是ARM主要的嵌入系统开发平台(ARM的另一个开发环境ds-5早在九年前就停止更新了). Keil虽然是个集 ...
- Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- linux centos7 使用 crosstool-ng 构建 交叉编译 工具链 即构建各cpu架构平台的gcc编译器
简介 crosstool-ng,全称是crosstool Next Generation,即下一代crosstool.crosstool是个交叉编译器的制作工具,但是做的不够好,于是有人(Yann E ...
- cmake:ESP32交叉编译工具链定义
ESP32的SDK(ESP-IDF)本身提供了esp32平台的cmake toolchain文件: esp-idf-v4.4\tools\cmake\toolchain-esp32.cmake 1就是 ...
- LLVM 编译器和工具链技术
LLVM 编译器和工具链技术 LLVM概述 LLVM项目是模块化和可重用的编译器和工具链技术的集合.尽管名称如此,LLVM与传统虚拟机几乎没有关系.LLVM本身不是首字母缩略词,项目的全名. LLVM ...
- linux mipi驱动分析_寒武纪社招内推数字IC设计、DSI驱动、软件架构、产品经理、芯片架构、工具链开发、深度学习、FAE工程师...
点击上方蓝字关注我吧! 为什么内推更靠谱?内推是基于人脉关系链的推荐,其背后有一定的信用背书,靠谱的人推荐的人相对也会比较靠谱,所以企业一般职位都是从内部开始分享的,相较于自己海投简历,内推的效率和成 ...
- C 语言编程 — GCC 工具链
目录 文章目录 目录 文章目录 GCC 工具链 GCC 编译器 GCC 的常用指令选项 GCC 所遵循的部分约定规则 Binutils C 运行时库 Clang 和 LLVM 文章目录 <C 语 ...
- gcc mips64编译后无法运行在octeon上运行_编译工具链
软件的编译过程由一系列的步骤完成,每一个步骤都有一个对应的工具.这些工具紧密地工作在一起,前一个工具的输出是后一个工具的输入,像一根链条一样,我们称这些工具为工具链. Linux系统上,通常只需要使用 ...
最新文章
- 生成对抗网络gan原理_中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解...
- 话里话外:“按单制造”的业务特点(二)
- linux获取命令的返回值,怎样获取shell函数的返回值及shell命令的返回值?
- java thread join()_Java Thread join() 的用法
- Java EE调度程序
- JAVA 反射机制 获得 private 变量
- 12.使用hashcat暴力破解加密office文档密码
- WEB API 接口签名sign验证入门与实战
- CGAL点云重建白膜
- two sample ttest paired ttst
- Null(空值)和 Undefined(未定义)
- 【Tools】HP/惠普v285w 量产工具
- C++结构型模式-适配器模式
- [数据库笔记] SQL50题11 - 30
- 前端移动端几个组件库
- elementui[el-table]表格全选操作以及翻页选中取消相关效果
- 智慧井盖解决方案-最新全套文件
- COMFAST CF-WU785AC在Ubuntu无法上网问题的解决
- 爬取百度地图 商店铺联系电话地址定位
- 滴滴架构师被迫离职后,只留下这份731页Java程序性能优化手册