每次烧写都是uboot,image,roots,为什么不整一套,为什么分开
什么是uboot 什么是内核,三者为什么分开
如果你上网去搜一下,你会发现这样的答案
另注:本文含有大量的错误和意测成份,智者勿入
如果你希望只得到的这些就满足的话,后续的不需要再看了
我们拿到一个开发板,项目是为了“使用的”,市面上有大量的不同产商的开发板(如果只有一个产商也就不需要这么麻烦了),我们的的项目所要实现的功能只需要几种,我们却需要不断的与底层的寄存器打交道,为了写一个LED灯,可能需要查阅大量的文件,写几十,上百行的代码,初始化时钟,配置引脚,开启时钟,读写寄存器;为了读写文件,需要使用不同的协议,不同的协议,移植到其它地方,还是需要写大量的相同的代码,修改的只是针对不同板子的寄存器,更不要说还有有显示器,输入输出 键盘 鼠标 等统一的操作;同样是点LED灯,不同的板子寄存器地址,操作还不同,大量的重复操作;
操作系统就是一个软件,帮我们处理底层的操作,然后使我们更专注于我们的任务,项目使用,而不是每次都要重新操作大量的重复的操作
我们也可以自己写操作系统(定制的操作系统,针对具体的任务的),但是有个统一的操作系统,并且经过验证的,更大适应性的,
规范的,操作系统有个特征,就是经过千C百练 验证(砸不烂,很稳定)还有一群人给你维护,修正,你自己写的就,看你技术水平了
操作系统就操作系统吧,为什么又分成uboot kernel roots呢
我们先来看一下操作系统吧,最简单的操作系统while(){}语句,单行的,想要什么往里面写就行,点灯,BEEP,显示,键盘都可以;
OK,换一块不同的板子,照样查寄存器,读写寄存器,点灯,BEEP,显示
再换块不同的板子,再查寄存器,点灯,BEEP
操作都一样,不停的,不断的重复同样的操作,所要改的只是寄存器的地址;一次两次还可以,上百人,上百次,上千人; OK
上面是最简单的操作系统了:给操作系统一个定义吧,就是一软件,跟底层打交道,使客户更专于自己的需求与项目,而不是与底层打交道
OK
上面的操作系统简陋了点,有点浪费,一时只运行一个任务,能不能同时多运行几个,点灯的同时,beep,同时还监控外面有没有信号传入,如接个热敏电阻看下开水是不是熟了(好吧,while中也能实现),但是实现起来有点烦索,我给你包装包装,你只要调用相应的函数就能另开一个任务(就是更方便用),这样下次就不需要修改哪,修改哪,加个任务在中间; 这就是“多任务”的由来了(伪“多任务”)最终还是由一个CPU通包,分给不同的任务一定时间,看起来像多任务; 好吧这时也不需要linux,或是linux的kenel也就可以了,不需要文件系统
操作系统
while(){} | ucos freeRtoos | linux winodws |
——> | ——> | ——> |
我们先看一下早期的“电脑”,一块芯片,一个几Byte的内存,几个输入输出“按键”进行输入输出进行“计算”任务(需要什么操作系统)
——> | ——> | ——> | ——> | ——> |
那时处理器产商很少,或说只有一个巴掌能数得过来的,最后INTEL一枝独秀,但是吧你说你把一整套硬盘,内存,显卡。。。都集成到一块了,也就不需要分什么uboot先引导kernel,kernel再加载roots了,但是他只做芯片,外围的给你们自己配去了,只能了你一个小小的flash让你存储信息,好吧,这就来了,你没办法了,你只能在他提供的一个小小芯片里把你的,大大的系统引进来,引就引进来吧,但计算机只用来点灯,BEEP,监控,这么大的性能,完成一个小小的任务有点太可惜了,还是拿来办点现实中的事吧,比如写个论文,画个报表,看一下千里之外的工地上有没有人在偷懒,看一下工程运行的怎么样了,发个邮件给客户,晚上约个时间吃饭,好谈谈下个项目
我们使用rtos的时候,你操作吧,还是需要涉及到一些专门知识与硬件相关的,对非专业的,由其是大企业,大财主,大需求来说,你让他来操作底层的,然后告诉他可以让你的工作效率大大提升? (我想他会把锤子砸你头上)
而linux windows则提供了一整套的程序,但同时带来了体积急速膨胀的
一整套的任务管理机制,创建,退出,程序之间的交互,多任务(就是更方便使用,而不需要每个人都要专业知识才能应对,只需要记住几个简单的命令即可)
我们拿ARM,X86是拿来为了办公,为了休闲,查找信息,计算 控制用的,而不是为了显示几个图片;点几个灯的
好吧,这时你靠rtos就不行了,你要写文档,你要写报表,你要统计今年的销售额,写文档总得有个存放文档的地方吧,难到写个文档还要写一堆代码(还不如直接写在本子上呢),你要上网,总要有个显示器吧,总得有个键盘,鼠标,一个图片动Z几KB,几十M的,你喊我用几KB的机器给你加工处理
嵌入式Linux系统移植的四大步骤 - 知乎