哈喽,大家好,今天和大家聊聊如何让 iStoreOS 支持新的硬件?
不管你懂不懂技术,应该都会给你一些收获。
不管有多少个硬件,多少个电脑,从大家的习惯来说,选择一个文件安装系统就行。
为何 arm 要按硬件型号分开那么多文件?
要解释这个问题,我们核心要知道,CPU 是如何发现外围设备的?本质就是一句话:CPU 作为控制中心,需要通路去触达外网设备。这种通路,叫总线。
CPU 需要通过总线去寻找外围设备,并记录每个设备的地址跟能力,以及对应的驱动。
而之所以大家更喜欢买 X86 的原因在于,X86 可以自动找到外围设备,并记录地址,最后驱动他们工作。所以 X86 机器可以换内存,换显卡,换网卡等等。只要有合适的驱动,一个系统可以让不同的X86机器运行起来。
解决的问题不一样,每家公司做产品也不一样。X86那套自动发现的能力太复杂了。
当要做小硬件的时候,还搞得那么复杂,耗电高,成本贵,研发贵,这样就不合理。arm 的思路很简单,它认为每个硬件都是针对特定功能的。
把CPU固定,网口固定,内存固定这样考虑的情况少了,也更简单,也更省钱了。因为这种思想,还需要啥 CPU 自动发现外围设备,去逐个等级设备的地址?
所有都固定了,直接约定好每个设备的地址就完事了。
所以每个 arm 做的硬件型号,都需要提前写入好外围设备的地址,能力。
最后编译出来一个针对这个硬件型号的系统文件,也叫固件。
以上科普信息就到这里。我给大家简单找到两篇文章:
https://unix.stackexchange.com/questions/399619/why-do-embedded-systems-need-device-tree-while-pcs-dont
https://www.zhihu.com/question/475730584/answer/2974259137
前面科普讲完了,现在给大家提供一些思路,如何来适配新的一款硬件?
我们还是拿 E20C 作为例子,大家不需要学习太多的知识,核心就是多动手,多实践。当然我不是这方面的专家,接下来我讲讲我的思路:
首先,E20C 跟哪个硬件最接近?和H28K最接近。
这样我们就可以参考h28k的相关代码,大体就是参考rk给的电路板的设计,找一个相近的适配的好的h28k,来修改相关参数,进行适配;
先新建一个e20c的dts文件,复制h28k的dts内容,然后再rk35xx.mk里增加e20c的编译选项;
修改灯的相关代码;
设置e20c的cpumask,为啥要这样?多看看相近硬件的参数,多看;
这期我们就只是简单的讲讲大的方向来移植系统,不可能手把手的教,更多的靠大家自己的兴趣,懂一些硬件相关的知识,自己多实践。
大家如果有兴趣,可以仔细研究下我前面推荐的两篇文章,让自己有个深刻的认识。
大家如果对我们的内容感兴趣,请大家多多关注我们。
对 iStoreOS 固件感兴趣,可以刷入体验。