【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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和工具链)相关推荐

  1. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  2. cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义

    Keil MDK是非常常用的单片机开发集成环境,Keil公司2005年由ARM公司收购,现在是ARM主要的嵌入系统开发平台(ARM的另一个开发环境ds-5早在九年前就停止更新了). Keil虽然是个集 ...

  3. Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  4. linux centos7 使用 crosstool-ng 构建 交叉编译 工具链 即构建各cpu架构平台的gcc编译器

    简介 crosstool-ng,全称是crosstool Next Generation,即下一代crosstool.crosstool是个交叉编译器的制作工具,但是做的不够好,于是有人(Yann E ...

  5. cmake:ESP32交叉编译工具链定义

    ESP32的SDK(ESP-IDF)本身提供了esp32平台的cmake toolchain文件: esp-idf-v4.4\tools\cmake\toolchain-esp32.cmake 1就是 ...

  6. LLVM 编译器和工具链技术

    LLVM 编译器和工具链技术 LLVM概述 LLVM项目是模块化和可重用的编译器和工具链技术的集合.尽管名称如此,LLVM与传统虚拟机几乎没有关系.LLVM本身不是首字母缩略词,项目的全名. LLVM ...

  7. linux mipi驱动分析_寒武纪社招内推数字IC设计、DSI驱动、软件架构、产品经理、芯片架构、工具链开发、深度学习、FAE工程师...

    点击上方蓝字关注我吧! 为什么内推更靠谱?内推是基于人脉关系链的推荐,其背后有一定的信用背书,靠谱的人推荐的人相对也会比较靠谱,所以企业一般职位都是从内部开始分享的,相较于自己海投简历,内推的效率和成 ...

  8. C 语言编程 — GCC 工具链

    目录 文章目录 目录 文章目录 GCC 工具链 GCC 编译器 GCC 的常用指令选项 GCC 所遵循的部分约定规则 Binutils C 运行时库 Clang 和 LLVM 文章目录 <C 语 ...

  9. gcc mips64编译后无法运行在octeon上运行_编译工具链

    软件的编译过程由一系列的步骤完成,每一个步骤都有一个对应的工具.这些工具紧密地工作在一起,前一个工具的输出是后一个工具的输入,像一根链条一样,我们称这些工具为工具链. Linux系统上,通常只需要使用 ...

最新文章

  1. 生成对抗网络gan原理_中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解...
  2. 话里话外:“按单制造”的业务特点(二)
  3. linux获取命令的返回值,怎样获取shell函数的返回值及shell命令的返回值?
  4. java thread join()_Java Thread join() 的用法
  5. Java EE调度程序
  6. JAVA 反射机制 获得 private 变量
  7. 12.使用hashcat暴力破解加密office文档密码
  8. WEB API 接口签名sign验证入门与实战
  9. CGAL点云重建白膜
  10. two sample ttest paired ttst
  11. Null(空值)和 Undefined(未定义)
  12. 【Tools】HP/惠普v285w 量产工具
  13. C++结构型模式-适配器模式
  14. [数据库笔记] SQL50题11 - 30
  15. 前端移动端几个组件库
  16. elementui[el-table]表格全选操作以及翻页选中取消相关效果
  17. 智慧井盖解决方案-最新全套文件
  18. COMFAST CF-WU785AC在Ubuntu无法上网问题的解决
  19. 爬取百度地图 商店铺联系电话地址定位
  20. 滴滴架构师被迫离职后,只留下这份731页Java程序性能优化手册

热门文章

  1. 彻底删除0KB顽固文件或文件夹的方法
  2. Data Binding 使用教程一
  3. -Java基础-方法
  4. 《SpringBoot揭秘:快速构建微服务体系》—第1章1.2节微服务因何而生
  5. 《C程序员从校园到职场》一2.2 破除错误观念
  6. hdu1005 Number Sequence(寻找循环节)
  7. Android传感器应用——重力传感器实现滚动的弹球
  8. ASP.NET MVC:Razor 引入命名空间
  9. 我是个老爸--当局者迷,旁观者清
  10. 脚本实现补丁安装自动化