首先个人文笔有限,并不是专业写文章的人,同时知识面也比较局限,以下只是个人对这个问题,在日常闲余时间去对这个问题进行的一些探索总结,如有疏漏不足望客官海涵。这是系列文章,后续我会持续记录。好现在来聊聊这个问题。

如何开发一个全新的操作系统呢?这个是很大的问题,很多人在很多时候都会想到这个问题。
       前段时间我又想到这个问题,同时在网络上进行初步查找资料,以期望来得到这个问题的答案。在查找过程中,首先找到的不是如何开发的具体思路与方法,而是为什么做一款操作系统那么难?这个文章在开源中国也有,有兴趣的朋友可以看看。我对这个文章的总结理解就是做一款操作系统非常耗钱,如果不能商业化,就算做出来也是活不来的。就文章里的观点我就不评论了,有没有必要再去开发一个全新系统也不讨论了,当然做系统难肯定是难的,而一直以来能让我们可以做选择的,无非就是做与不做的选择。如果我们选择就为了个人乐趣做一个操作系统呢,可行吗?在我看来没有答案,只有做了才知道。当然很多人会说一个人是做不了这个事,需要团队,这一点我也不否认。
       好回到主题,那么如果要开发一个操作系统要如何做呢,首先我整理了一下现有成熟操作系统派系,Windows、Unix,其他或许还有但是大多数人估计听都没听过,就不特意去深入叙述了。Windows PC机的王者、Unix派系的系统就五花八门了,比如苹果的Mac OS X 、 iOS啊,知名的Linux啊,以及基于Linux衍生各类系统,移动端知名的就是安卓系统。这个话题衍生下去内容也很多,这也不是我们要关注的点。因此只是有个大概的了解就可以了。这些系统都是如何开发的呢,或者简单点问是用什么语言开发的,在网络找到最多的答案是C语言+汇编语言。我们姑且相信这是真实的答案。那么有了这个答案后,后面就有新的问题,有了语言用什么工具呢,有了工具如何调试呢?带这这个问题我开始新的探索之路。

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。这个是百度百科里的介绍,同时下面有给我们整理了对应的编译器、集成开发环境。

编译器

GCC,GNU组织开发的开源免费的编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

Visual C++ :: cl.exe,Microsoft VC++自带的编译器

集成开发环境

CodeBlocks,开源免费的C/C++ IDE

CodeLite,开源、跨平台的C/C++集成开发环境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

那么有这些,我们是不是先要学会C语言跟这些工具呢,然后就可以开始开发系统了?当然不是,首先我们要理解什么叫操作系统。这方面的资料又是海量的,需要大量的时间去了解,但是我在这里归结两个点,第一个点操作系统是一个集合体,是有很多子程序组合而成的。第二点目前的操作系统都是可以兼容很多不同的硬件环境。为什么只提这两个点呢,因为通过这两个点可以帮助我们判断很多事情。第一件最重要的事,我们要开发一个怎么样的操作系统,是大而全,还是小而美的系统,大而全自然工程量会几何性的增长。第二件事就是既然操作系统是集合体,我们能不能先开始搭建最重要的子程序,先搭建一个框架的问题。目前手机成为了生活息息相关的必须品,未来还有各种智能设备会出现在人们的生活中,目前这些设备都基于Linux系统去开发的居多,比如:OpenWrt项目。题外话:同时我也搜索到另外一篇文章叫  为什么谷歌会从零开始构建一个全新的操作系统?,同时我也搜索了下国产操作系统发展,得到大多就是 以Linux 为基础二次开发的操作系统。同时得到一个有趣的现象就是公司倒闭了,所有的努力过的东西就这样随风而去,没有留下可以让其他人可以追寻的脚印,让更多的国人对如何开发一个操作系统更多只停留在想象上,无从入手。
      基于上面两个总结,以及自身的能力做出判断是,想朝开发操作系统踏出第一步,需要先想好做一个怎么样的操作系统。未来最火热的是什么,手机?好就手机,当然我们做的系统最好也能在这些小设备上、比如路由器啊、智能音响、家庭投影啊等上面运行,未来物联网是趋势,终极目标是可以在手机上运行。好现在目标有了,我们来分解下难度,首先就目前安卓手机配置五花八门,连安卓也是需要厂商自行适配调整,而它的对手苹果就纯粹得多,只支持自家定制的配置。而回到我们自己这里,那么我们不可能一开始就制作一个兼容性很高的操作系统,我们要先尝试做一个就支持固定配置,然后预留拓展功能的系统。方向目标都有了,那就到了如何去实现上了。

上面我们去了解了操作系统的原理啊,发展史啊 等等信息,归结到底在与硬件与语言的配合,这里就有个新问题,我们也使用C语言和汇编语言吗?这两种语言已经很古老的语言,但是目前底层还是使用这两种语言开发,同时我们如果使用C语言跟汇编语言,这是站在巨人的肩膀上啊,毕竟这两种语言是经历过岁月沧桑论证的,用不用呢,我的选择不用,因为我们本身就是来尝试一个新事物的。能改变的就去试试改变,或许改着改着就有新的变化呢。
         那么如果创造一门语言呢,这又是一个大话题,网络上有句玩笑就是编程语言很多时候就是某个无聊的牛人在某个圣诞节的半夜闲得无聊折腾出来的,因此我继续我的探索之旅,看看编程语言相关知识,编程语言分为大致是命令式语言、函数式语言、逻辑语言和面向对象的语言(实际上还有很多不同的划分版本),那么C语言属于什么呢,就我看来 C语言属于命令式语言也可以称为过程式语言,通俗点理解就是,比如把大象放进冰箱分几步,这个过程的实现在C语言上面体现就按照步骤一个步骤一条多条语句来实现一整件事,按顺序来写,而汇编语言呢 ?汇编语言 属于 符号语言,什么是符号语言呢 ,这个要先说起计算机基础知识,机器语言,机器语言是谁能理解的呢,CPU,简单点说就是我们给CPU下个指令 。这个指令是一串二进制码类似这样1000100111011000  机器指令 而这些二进制码 是谁定义的呢,CPU生产商吗,是也不是,因为CPU 又分阵营 也有理念冲突,也有需求冲突的,因为这些冲突大致分成两个派系CISC(复杂指令集) 、RISC(精简指令集计算机) 具体的知识点就不展开细说了,我们只关心我们自己的,我们的目标需要用到的是RISC(精简指令集计算机),因为市面上的手机大多数都是用这个指令集的CPU ,而汇编语言就是例如mov ax,bx  等汇编指令,通过汇编的翻译器会转换成一条条的机器指令然后让CPU来执行,首先我不知道现在那些开发系统的牛人们还在使用汇编语言不,还是已经把汇编语言整合进新的开发语言里进去了,这个不得而知,反正我就知道汇编就干了这个活就好了。

好两种基础语言了解完了,我们来了解下跟我们有关系的东西,那就是CPU指令集,既然要做当然要做支持最新的指令集是最好的,因为本身我们没有实力去生产CPU,这个是我们个人力量无法去改变的东西,好我们里来看看我们的手机,苹果手机CPU ,哇塞自己设计让人代工生产,好吧我们搞不了,里面指令集怎么样的我们更无所得知,这路走不通了,那我们来看看安卓手机,小米、OPPO、VIVO、华为比较常见,一看手机CPU, 两种居多,高通、联科发。再来看看这两家公司最新CPU上用的是什么最新指令集呢,一家牛逼的公司映入眼前:英国Acorn有限公司 简称 ARM,然后到官网找找最新指令集ARMV8指令集,还分ARMV8-A、ARMV8-R、ARMV8-M,后面的先不管,我们就认准了ARMV8-A指令集。好了他们的CPU 就认这个指令集里的指令。等于我们首先要去学习这个指令集,否则后面啥也做不了。
 
     好些的问题出现了,如果学习ARMV8指令集呢,光靠看书肯定不行,需要实践调试,那么如何调试呢。这个就涉及到新的领域,ARM开发板的知识面,那么第一个想法是能不能把身边的手机啊、路由器拿来调试呢,答案是可以,但是先别高兴,前提是你有对应的设备的一些资料,没有对应的硬件资料,还是行不通的。于其去研究这些设备硬件,不如想找找有没有提供这些资料的开发板类似的东西卖。那要买个怎么样的开发板才适合我们目前的状态使用呢,这个又要先了解下这些硬件是怎么样植入系统的,或者说刷入系统的,就我目前找到资料显示,一般性的手机也好,其他小设备也好,本身在没有系统的时候,内部先有一个bootloader,类似PC机子上的BIOS,是最底层的引导软件,一般都是由硬件生产商写入的,简单的说,bootloader就是在操作系统内核运行前就运行的一段小程序。这段小程序可以初始化必要的硬件设备,将系统的软硬件环境带到一个合适的状态,并从外部存储器或通过网络等通信方式加载内核,创建内核需要的一些信息并将这些信息通过相关机制传递
给内核,最终调用操作系统内核。因此我们需要买一个开源bootloader的,支持最新ARMV8-A指令集、相关其他资料也公开的开发板。市面上有没有,我正在找,同时也在找这方面行业的朋友。如果你是从事这行业的可以评论留言给我。谢谢

目前探索到这一步,同时附带购买了一些书籍来补充对应一些点上的知识,比如汇编语言是如何设计的等等为后续做准备,后面有新的进展,再来文记录。

2018年11月02日     中国义乌    随笔

转载于:https://my.oschina.net/u/1014905/blog/2413765

如何开发一个全新的操作系统(手机操作系统)呢?相关推荐

  1. 为什么谷歌会从零开始构建一个全新的操作系统?

    腾讯科技编者按 <快公司>网站日前发表文章,对谷歌开发一个全新操作系统的原因进行了分析,解释了现有操作系统存在的问题,并对谷歌此举的动机进行了推测,以下为原文: 上周,谷歌一个团队做了一件 ...

  2. 他是世界上最杰出的程序员,一个月写了个操作系统,退休后去做飞行员!

    作者 | Mr.K 来源 | 技术领导力(ID:jishulingdaoli) 1983 年,美国计算机协会将图灵奖授予肯·汤普森和与丹尼斯·里奇. 获奖理由是:"For their dev ...

  3. 如何把一个qmake的Ubuntu手机应用打包为一个snap应用

    我们知道Ubuntu平台提供了良好的融合(convergence)设计.通过融合设计,使得我们的同样一个应用在不需要修改任何代码的情况下,重新打包就可以运行到不同的屏幕尺寸的设备上.当然,Canoni ...

  4. 自主手机操作系统:有无必要做以及如何开发

    来自52RD , http://www.52rd.com/S_TXT/2012_9/TXT39669.htm 编者按:本文由飞漫软件CEO魏永明授权发布.原文标题为<"自主" ...

  5. UBports使用和开发资料(Linux手机操作系统)

    2021年2月官方文档资料: https://download.csdn.net/download/ZhangRelay/15202602 文档还不完善,作为目前非常小众的手机操作系统,与Ubuntu ...

  6. java程序员可以只用windos吗_程序员要写多少代码 才能开发一个window操作系统

    开发一个window操作系统需要程序员写多少行代码呢? 微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统有一代会很 ...

  7. 以后国产手机都要装鸿蒙系统吗,如果华为发布鸿蒙手机操作系统,国产软件会能用吗,形成一个生态系统吗?...

    如果华为发布鸿蒙手机操作系统,国产软件会支持吗,形成一个生态系统吗?先来说下答案,国产软件厂商肯定会支持,但系统生态短时间内很难成熟起来. 最新的消息称,谷歌已经暂时停止了与华为的合作.尽管谷歌与其他 ...

  8. Android 是Google开发的基于Linux平台的开源手机操作系统

    Android 是Google开发的基于Linux平台的开源手机操作系统(在华注册商标名为"安致").它摩托罗拉的首款Android手机CLIQ包括操作系统.用户界面和应用程序 - ...

  9. 阿里手机操作系统全新策略发布

    4月15日消息,阿里手机系统对外公布了最新的商业策略,宣布将用平台.开放的方式.围绕手机操作系统,建立一个终端手机厂商.运营商.硬件厂商.设计公司.开发者等的新生态体系.同一天,云手机频道正式亮相淘宝 ...

最新文章

  1. JetBrains发布DataGrip 1.0——数据库与SQL领域中的瑞士军刀
  2. RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
  3. JavaScript中 var reEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; //邮箱检测
  4. 网站用户访问速度监测分析项目
  5. java set方法赋值_java方面:private属性,没有set方法,只有get方法,如何给这个属性赋值?...
  6. [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
  7. 经典机器学习系列(十三)【结构化学习】
  8. java怎么做小人跑动的动画_纯CSS3实现人物跑步动画
  9. Mac电脑怎样添加打印机?
  10. 中标麒麟Linux64平台上QT5.6.3源码编译安装
  11. 中国各地的特色茶,你知道几个?
  12. 狂野飙车显示无法连接服务器,狂野飙车(极速版)无法连接服务器是什么原因...
  13. linux 编译过程中acx_pthread.m4类错误解决办法
  14. 云课里计算机,【241天】网易云课堂计算机专业基础课程系列——计算机专业导论(6)...
  15. easyrecovery2023最新版本电脑数据恢复软件特点介绍
  16. Selenium原理以及Python从零实现
  17. 2022年MinGW-w64的安装及配置教程(傻瓜式)
  18. 【电力电子】【2015】基于输出总谐波失真的三种逆变器的比较研究
  19. SpringBoot整合email
  20. 韩国通关号免费查询系统,韩国清关码校验

热门文章

  1. 用ImgBurn做了一张可以安装所有版本的Win7安装盘
  2. 财经管理中的计算机应用第三版实验报告,管理系统中计算机应用实验报告.doc...
  3. 自然语言处理(NLP)简介
  4. 关于51单片机keil编程时头文件的引用
  5. 关于Ubuntu22.04安装宝塔面板错误解决
  6. 【已解决】pycharm 远程服务器报错 Couldn‘t refresh skeletons for remote interpreter
  7. java枚举类与成员变量的关系_深入理解枚举类
  8. 关于鲁班H5安装报错的问题
  9. 名画75 陈容《九龙图》
  10. 服务器销售新手怎么找客户,做销售怎么找客户 做销售寻找客户的方法