Linux 5.7 将支持国产 RISC-V 芯片 K210

这是转载的一篇文章,文章主要内容是Linux合入了一个国产芯片k210的代码,虽然这个芯片不是很强大,但是对于学习来说非常有意义,而且,还有人在这个开发板上移植了Linux 0.11。


今天早上我在查阅 Linux 内核邮件列表的时候,看到了一封 Linus 本人的回复:

这封邮件的大概意思是说:
Palmer Dabbelt 向 Linus 大神发了一个 Linux 内核补丁的合并请求(PR), 但是大神发现这个 PR 有问题,准确的说是不规范——其中有一条提交里面混杂了一个其他功能的修改,而这个修改和他对应的 commit message 的描述不一致。

一般我们在软件开发的流程中,有一个朴素的版本管理哲学:开发者的提交要尽量干净,简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能,而且要在对应的 commit message 里面描述清楚。

在这个 PR 中,有条提交里面确实混杂了其他的一个修改,所以 Linus 说 Palmer 的代码树不干净。

不过让人出乎意料的是 Linus 大神没有直接把这条 PR 打回去,而且自己亲自修改了里面的问题,然后把他们合并到 Linux 5.7 mainline 上了。大神以前在 Linux kernel 开源社区是出了名的暴躁,经常因为开发者提交的一些看不顺眼的代码怒发冲冠,在邮件列表了直接回复 F**K 啊,骂对方 brain damaged 啊什么的。看来经过 2018 年的闭关自省后,大神确实变的温润如玉了很多。

这是我们从这封邮件里面看到的开发规范问题,其实对于很多爱好 RISC-V 或者 K210 SOC 的开发者来说,这封邮件还隐含着另外一个十分重要的信息。

这个 PR 的提交者 Palmer Dabbelt 也非等闲之辈,他 2017 于伯克利大学计算机硕士毕业,然后进入 RISC-V 领头羊 SiFive,在这家公司他领导实现了 Linux、GCC、glibc 等基础组件对 RISC-V 架构的支持,是这些开源项目在 RISC-V 分支的 maintainer。去年他从 SiFive 离职,加入了 Google Android 部门。

Palmer 的这个 PR 其中重要一部分内容是向 Linux 内核添加对 K210 SOC 的支持。


K210 是中国一家叫做嘉楠耘智的公司(嗯,他们最开始是做矿机的,现在开始做 AI,和比特大陆、亿帮国际合称矿机三巨头,并于 2019 年在纳斯达克上市)开发的 SOC,采用 RISC-V 架构, 双核 CPU、64 位,台积电 28 nm 制程,运行频率能到 400 MHZ,还带有神经网络加速器 KPU,算力能到 1TOPS、主要面向音视觉等 AI 和 IOT 领域。

总体来说 K210 还是一颗  MCU 级别的芯片,只有 8M 的 SRAM,无法外接大容量的 DDR 等存储器,固态存储接口好像也只有 SPI 接口,可以接 SPI Nor Flash 这种小容量的存储,所以在设计定位上,这是一颗只适合运行 RTOS 的 MCU。

不过还是挡不住很多充满探索精神的 Linux Hacker,想尝试在 K210 上运行 Linux,毕竟现在 RISC-V 这么火,可是能跑 Linux 的却不多,SiFive 到是有一款能运行 Linux 的开发板叫做 HiFive Unleashed,但是价格让人望而却步。K210 的 8M SARM 以及友好的价格让广大爱好者看到了希望,

我还在 Github 上看到有人移植了 Linux 0.11 到 K210 上,不过在这个 Linux 5.X 的时代,0.11 还是不够刺激。


所以我立刻更新了一把最新的 Linux mainline 代码,查到了关于 K210 的相关提交:

可以看到代码比较简单,只有 5 个补丁,可以得到如下信息:

  • 支持的功能也比较简单,只支持 UART 通信,也就是说,按照目前的状态,可以运行一个能够通过命令行交互的 Linux 最小系统。

  • 目前的代码支持勘智的 KD233 和 Sipeed MAIX Dan 和 Sipeed MAIXDUINO 三款开发板,其他的基于 RISC-V 开发板我估计也能跑,顶多只要确认下 UART 口的差异。

  • 不支持 MMU,虽然从 Github 上找到的一些代码可以看出 K210 上面搭载了基于 SV39 标准的 MMU,但是勘智的官方文档并没有提及任何和 MMU 相关的信息。这也是国内一些 SOC 设计公司需要改进的地方,不能总是不愿意开放和自己芯片相关的详细文档。不过幸运的是现在的 Linux 已经支持 nommu 架构的处理器。

仔细查阅提交的代码可以发现,K210 是基于 SiFive 和 UC Berkeley 开源的 Rocket Core 实现的,这款开源的 Rocket Core 在业界很受欢迎,流片达十多次,性能和 Arm Cortex-A5 相当。

因为 Palmer 在 Sifive 工作的时候已经把 RISC-V 的基础支持代码提交到了 Linux mainline,所以这次朝 Linux mainline 添加对 K210 这款 SOC 的支持就简单了很多,可以复用大量 Palmer 提交的基础代码。

目前从提交记录还可以看到,这一系列补丁大部分是西部数据的工程师贡献的,西部数据目前是 RISC-V 处理器的超级支持者,他们已经在西数的大量产品中使用 RISC-V 处理器。

去年我就看到一份西数工程师的 PPT,描述在 K210 等处理器上运行 Linux,没想到他们这么快就把相关成果提交到 Linux mainline 了,还是很让人激动的。

我进一步查阅了 RISC-V 的内核邮件列表发现,这一系列补丁在提交的过程中,受到了很多极客的关注,有很多Geek 表示愿意进一步为 K210 贡献 Linux 的支持补丁,包括 LCD 屏幕、SPI 接口的 SD 卡,以及 UART 接口的 WIFI。

这使得这款 SOC 具有了很高的可玩性,这就是开源的力量!

在目前这种状态下,用 K210 来学习基本的 Linux 系统移植还是很不错的,因为它简单,不涉及太多复杂的东西,可以让我们快速掌握给一款芯片移植 Linux 所需要做的最基本工作,堪称一个完美的 Linux 最小系统学习平台,除了 SRAM 太小——只有 8MB。

另外如果有同学对西数那份在 K210 上运行 Linux 的 ppt 感兴趣的话,可以在公众号后台发送关键字 k210 获取下载链接。

  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态路由选择协议(二)距离矢量路由选择协议

大多数的路由选择协议属于下面二者之一: 距离矢量(distance vector)和链路状态(link state)。 本篇学习的是距离矢量路由选择协议的基础。 大多数的距离矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作为基…

我和蓝牙BT,BLE有一腿

你好,很不幸,你被一个标题骗了进来,可能我以后还会骗你,我这篇文章主要是写蓝牙相关的,不会涉及技术细节,主要是总结一些概念,这些概念会帮助你了解蓝牙知识,帮助你在面试或者聊天的…

循环链表、双链表

文章目录循环链表、双链表双链表插入删除单循环链表双循环链表习题线性表实现方法比较循环链表、双链表 双链表 插入 删除 单循环链表 双循环链表 习题 线性表实现方法比较

[芦半山]Binder的异常机制

文中代码分析基于Android 10.0 (Q)两个进程之间若是要进行Binder通信,那么发起通信的一端我们就称它为Client进程。Client进程调用每一个代理对象的方法,本质上都是一次跨进程通信。如果这个方法是同步方法(非oneway修饰)&#xf…

消息中间件核心实体(1)

接上一篇《消息中间件核心实体(0)》,这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体,这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。 1. 发送 1.1 增强Message属性 Message一般只包含…

sklearn(2

算法库顶层设计 SKLEARN监督学习模块 近邻算法 neighbors支持向量机SVM岭回归 kernal_ridge判别分析discriminant_analysis广义线性模型linear_model集成方法ensemble决策树tree朴素贝叶斯naive_bayes交叉分解cross_decompostition高斯过程gaussian_process多层神经网络neural…

该死的装修

周末了,没有写技术文~因为最近的新房子需要装修,谈了几个装修公司,不知道为什么,我对装修这个事情非常抵触,繁琐的事情太多了,还没有装修,我就觉得有很多事情要斗争。因为家里有小孩&#xff0c…

SKLEARN模型选择

数据集划分方法 K折交叉验证法 将全部训练集S分成k个不相交的子集,假设S中的训练样例子数为m,那么每一个子集有m/k个训练样例,相应子集称作{s1,s2……sk}每次从分好的子集里面,拿一个作为测试集,其他k-1作为训练集在k…

被该死的Openssl编译嘲讽了一个下午

昨晚比较尴尬,下班的时候已经很晚了,到半路突然想起来没有带钥匙回去,赶紧折返回公司拿钥匙,在已经很晚的路上我们又多花费了20分钟,到家已经挺晚了,具体多少点我都不好意思说,我要是说出来&…

JavaScript中本地对象、内置对象和宿主对象

http://www.jianshu.com/p/a52e6e183427 http://blog.csdn.net/weiyastory/article/details/52837466 http://www.cnblogs.com/qigang/p/3520974.html 在ECMAScript中,所有对象并非同等创建的。 一般来说,可以创建并使用的对象有3种:本地对象…

类的真正形态

类的真正形态 类的关键字 struct在C语言中已经有了自己的定义,必须继续兼容 在C中提供了新的关键字,class用于类定义 class和struct用法是完全相同 struct和class区别 用struct定义时,所有成员默认为public 用class定义时,所…

分类器

sklearn分类器性能指标 分类器性能评估指标 只限于二元单元标签分类问题 可用于二元多标签分类问题的评估指标 如何将二元分类指标扩展到多类或多标签问题中去 可用于多类分类问题的评估指标(紫色的可用于多标签问题) accuracy_score准确率 函数计算分类…

Cucumber+Rest Assured快速搭建api自动化测试平台

转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/  什么是Rest Assured?传送门:https://github.com/rest-assured…

让这个该死的服务跑起来了~

#前言被该死的Openssl编译嘲讽了一个下午之前的文章说了我的那个编译的问题,这里说下,知识点有点零散,最后的解决也是一个同事提示,感觉也有点奇葩的赶脚。到目前为止,我现在感受到了写文章的好处,昨晚的问…

深度学习概述

深度学习 传统学习与深度学习 深度学习应用特点 深度学习框架比较 Tensorflow 神经元 卷积核 分类 回归 生成

Python--递归

面向函数编程 def func():print(从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?)func() 解耦:尽量把不相关的功能拆开,用的时候再调用函数,增强代码重用性,减少代码变更的…

传统神经网络

文章目录神经网络的起源:线性回归一个线性回归问题线性回归优化方法:梯度下降梯度计算梯度计算总结线性回归:输出线性回归:局限从线性到非线性非线性激励常用的非线性激励函数tanhRELULecky RELU神经元—神经网络神经网络构建神经…

深度学习之卷积神经网络

文章目录深度学习之卷积神经网络链式反向梯度链式法则的计算神经网络中链式法则实例二、卷积神经网络-卷积层(一)什么是卷积层(二)有什么组成受什么影响,有何特点卷积网络正向传播反向传播卷积和神经网络功能层深度学习…

卷积神经网络高级篇

【 文章目录Alextnet参数计算VGG alexnet增强版VGG参数计算VGG作用GoogleNet 多分辨率融合全卷积神经网络RESNET结构特性有效性结构化图片特殊处理识别效果全局部卷积网络缺陷U-net图片生成网络VGG u-netAlextnet 参数计算 VGG alexnet增强版 VGG参数计算 VGG作用 GoogleNet 多…

LinuxGPIO操作和MTK平台GPIO

GPIO口配置是一个历史性的问题,不管我们使用什么MCU,单片机也好,ARM也好,都离不开驱动GPIO口。Linux下有一个宏,GPIO_GPIO_SYSFS,打开这个宏后,编译烧录到设备端,去看看sys/class/gp…