首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
拒绝偷懒010101
门头沟学院 C++
发布于浙江
关注
已关注
取消关注
@嵌入式与Linux那些事:
嵌入式软件开发知识点总结(一)-uboot&文件系统
uboot 什么是bootloader? Linux系统要启动就必须需要一个 bootloader程序,也就说芯片上电以后先运行一段bootloader程序。这段 bootloader程序会先初始化时钟,看门狗,中断,SDRAM,等外设,然后将 Linux内核从 flash(NAND, NOR FLASH,SD,MMC等)拷贝到SDRAM中,最后启动Linux内核。当然了, bootloader的实际工作要复杂的多,但是它最主要的工作就是启动 Linux内核。 bootloader和 Linux内核的关系就跟PC上的BIOS和 Windows的关系一样, bootloader就相当于BIOS。总得来说,Bootloader就是一小段程序,它在系统上电时开始执行,初始化硬件设各、准备好软件环境,最后调用操作系统内核。 uboot启动过程中做了那些事? 第一阶段 初始化时钟,关闭看门狗,关中断,启动ICACHE,关闭DCACHE和TLB,关闭MMU,初始化SDRAM,初始化NAND FLASH,重定位。 第二阶段 初始化一个串口,检测系统内存映射,将内核映象和根文件系统映象从 Flash上读到SDRAM空间中,为内核设置启动参数,调用内核。 uboot和内核如何完成参数传递? uboot启动后已经完成了基本的硬件初始化(如:内存、串口等),接下来,它的主要任务就是加载Linux内核到开发板的内存,然后跳转到Linux内核所在的地址运行。 PS:只要问到uboot,面试官必问uboot和内核的参数传递,所以一定要知道! 具体是如何跳转呢?做法很简单,直接修改PC寄存器的值为Linux内核所在的地址,这样CPU就会从Linux内核所在的地址去取指令,从而执行内核代码。 在前面我们已经知道,在跳转到内核以前,uboot需要做好以下三件事情: (1) CPU寄存器的设置 R0=0 R1=机器类型ID;对于ARM结构的CPU,其机器类型ID可以参见 linux/arch/arm tools/ mach-types R2=启动参数标记列表在RAM中起始基地址 (2) CPU工作模式 必须禁止中断(IRQs和FIQs) CPU必须为SVC模式 (3) Cache和MMU的设置 MMU必须关闭 指令 Cache可以打开也可以关闭 数据 Cache必须关闭 其中上面第一步CPU寄存器的设置中,就是通过R0,R1,R2三个参数给内核传递参数的。 为什么要给内核传递参数呢? 在此之前,uboot已经完成了硬件的初始化,可以说已经”适应了“这块开发板。然而,内核并不是对于所有的开发板都能完美适配的(如果适配了,可想而知这个内核有多庞大,又或者有新技术发明了,可以完美的适配各种开发板),此时,对于开发板的环境一无所知。所以,要想启动Linux内核,uboot必须要给内核传递一些必要的信息来告诉内核当前所处的环境。 如何给内核传递参数? uboot把机器ID通过R1传递给内核,Linux内核运行的时候,首先就从R1中读取机器ID来判断是否支持当前机器。这个机器ID实际上就是开发板CPU的ID,每个厂家生产出一款CPU的时候都会给它指定一个唯一的ID,大家可以到uboot源码的arch\arm\include\asm\mach-type.h文件中去查看。 R2存放的是块内存的基地址,这块内存中存放的是uboot给Linux内核的其他参数。这些参数有内存的起始地址、内存大小、Linux内核启动后挂载文件系统的方式等信息。很明显,参数有多个,不同的参数有不同的内容,为了让Linux内核能精确的解析出这些参数,双方在传递参数的时候要求参数在存放的时猴需要按照双方规定的格式存放。 除了约定好参数存放的地址外,还要规定参数的结构。Linux2.4.x以后的内核都期望以标记列表(tagged_list)的形式来传递启动参数。标记,就是一种数据结构;标记列表,就是挨着存放的多个标记。标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。 标记的数据结构为tag,它由一个tag_header结构和一个联合(union)组成。tag_header结构表示标记的类型及长度,比如是表示内存还是表示命令行参数等。对于不同类型的标记使用不同的联合(union),比如表示内存时使用tag_ mem32,表示命令行时使用 tag_cmdline。具体代码见arch\arm\include\asm\setup.h。 从上面可以看出,struct_tag结构体由structtag_header+联合体union构成,结构体struct tag_header用来描述每个tag的头部信息,如tag的类型,tag大小。联合体union用来描述每个传递给Linux内核的参数信息。 为什么uboot要关掉caches? caches是cpu内部的一个2级缓存,它的作用是将常用的数据和指令放在cpu内部。caches是通过CP15管理的,刚上电的时候,cpu还不能管理caches。上电的时候指令cache可关闭,也可不关闭,但数据cache一定要关闭,否则可能导致刚开始的代码里面,去取数据的时候,从cache里面取,而这时候RAM中数据还没有caches过来,导致数据预取异常 。 文件系统 什么是根文件系统? 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行,里面包含了 Linux系统能够运行所必需的应用程序、库等,比如可以给用户提供操作 Linux的控制界面的shell程序、动态连接的程序运行时需要的glibc库等。 我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。 根文件系统为什么这么重要? 根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以挂载(mount)所必要的文件。例如: init进程的应用程序必须运行在根文件系统上。 根文件系统提供了根目录“/”。 linux挂载分区时所依赖的信息存放于根文件系统/etc/fstab这个文件中。 shell命令程序必须运行在根文件系统上,譬如ls、cd等命令。 总之:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等)相配合才能工作。 可执行映像文件通常由几部分构成,它们有什么特点? 可执行映像文件通常由以下几部分构成。 一个或多个代码段,代码段的属性为只读。 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。 如果觉得本篇文章对你有帮助,在【收藏】的时候,可以点个【赞】支持下作者,谢谢各位兄弟姐妹啦! 如果大家都喜欢这个系列的文章,我也会持续更新下去的~
点赞 12
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-15 11:34
饿了么_后端研发工程师(准入职员工)
春秋航空内推,春秋航空内推码
春秋✈️ 综合管理类培训生 初试面经搜遍全网没有面经,趁着下午刚面完出一波攒攒秋招人品,希望对uu们有帮助在上海线下面的,半小时左右一波人,是群面哦~记得打印两份简历带上流程:1、自我介绍2、对春秋航空成本管控方面的理解(同组uu答的都好全面,完全没有什么补充hhhh)3、有关财务方面的实习经历介绍,谈谈自己参与的工作、对岗位的理解、对工作提效的想法之类的4、什么渠道投递的简历5、自己的实习投递的渠道是什么6、横向多岗位实习较垂直实习的优劣势(本人实习岗位比较杂hhh)7、对未来的规划,是否想好要做财务方面8、例行反问总体而言,面试官们都非常好,超级温柔~春秋航空2026届秋招启动~ 【我们是...
点赞
评论
收藏
分享
10-16 18:05
已编辑
小红书_前端开发(实习员工)
面试最后的反问环节,能问些什么?(附特供问题)
🎯 写在前面 相信有很多牛油和我一样,明明已经不是新兵蛋子了,但在最后的反问环节,还是会大脑空空,翻来覆去只会问业务,问完之后,空气又瞬间凝固…… 今天就来聊聊,如何把这个看似“走过场”的环节,变成你展现深度、反向“摸底”、甚至锁定Offer的关键一步。 反问环节,不是面试结束前的客套。这是整个面试中,你唯一掌握主动权的机会,是在疯狂“输出”后,为数不多的“输入”时刻。不要敷衍,套瓷就对了! 一、核心战略:看人下菜碟 反问的精髓,五个字就能概括:看人下菜碟。 每一轮的面试官,其身份、视角和关注点都截然不同。我们的策略就是,识别出对方的角色,然后提出与他角色最匹配的问题。 面试官的角色 ...
中意你的梅花鹿all...:
接offer
秋招踩过的“雷”,希望你...
点赞
评论
收藏
分享
10-05 21:58
广西职业师范学院 Java
像这种破学校破简历是不是找不到实习了
像这种破学校破简历是不是找不到实习了
在看牛客的社畜很积极:
身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞
评论
收藏
分享
08-27 14:33
已编辑
哈尔滨工程大学 机械设计/制造
求大佬拷打简历
无实习,没过六级,课题组做的项目太杂了,不知道能投什么岗位😭
阿武同学:
不要写至今,写具体哪年哪月毕业,专业技能往后排,项目往前排,共青团员可以不写
投了多少份简历才上岸
点赞
评论
收藏
分享
10-13 11:16
上海交通大学 嵌入式软件开发
工作后才觉得选择大于努力—(Linux/MCU双路径详解)
一、学习方向选择以下仅代表笔者个人看法:嵌入式软件总体分为linux和mcu方向。这两个方向的应用场景不同,导致无法在同一份工作中既做Linux,又做mcu。因此,如果在时间不充裕的情况下,大家根据自身情况挑一个方向去学习就够了。mcu方向(也称为嵌入式软硬件方向)更专注于软硬件结合,也就是说除了软件部分之外,还需要懂硬件。如果在软件和硬件分的没那么开的公司,作为一名嵌入式软件工程师,不仅要自己写代码,还需要自己画原理图,画PCB。在软硬件分开的情况下,基本要求是要能看的懂电路原理图,这也是大多数转行者很容易忽视的点。linux方向由于岗位较少,通常需要驱动/内核/应用一起做,仅有部分公司或者...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
族望留原籍,家贫走四方
8915
2
...
待了一年,一点没亏
2594
3
...
找工作,不用等许可
2442
4
...
被秋招面试感动了
2235
5
...
大厂这么卷,去国企,外企“上岸”?
2212
6
...
字节日常实习面试记录
2093
7
...
实习越多越好还是越精越好?
1874
8
...
回忆录:计算机鼠鼠这一路的成长
1771
9
...
1016 信也科技一面
1740
10
...
秋招现状: 9offer+2HR面 200%的努力期待100%的回报
1648
创作者周榜
更多
正在热议
更多
#
你现在会用到哪些AI技能?
#
6746次浏览
88人参与
#
蚂蚁求职进展汇总
#
123349次浏览
1163人参与
#
智慧芽求职进展汇总
#
1924次浏览
5人参与
#
秋招踩过的“雷”,希望你别再踩
#
86190次浏览
1093人参与
#
我对___祛魅了
#
132544次浏览
736人参与
#
大厂VS公务员你怎么选
#
28620次浏览
402人参与
#
平安产险科技校招
#
876次浏览
0人参与
#
你还有多少年退休?
#
26982次浏览
192人参与
#
我的求职进度条
#
93369次浏览
1213人参与
#
实习在多还是在精
#
35442次浏览
244人参与
#
实习下班不想学习,正常吗?
#
20633次浏览
176人参与
#
小马智行求职进展汇总
#
13775次浏览
50人参与
#
你的房租占工资的比例是多少?
#
65110次浏览
801人参与
#
你见过哪些工贼行为
#
17023次浏览
91人参与
#
金蝶求职进展汇总
#
54126次浏览
263人参与
#
总结:哪家公司面试体验感最好
#
70389次浏览
416人参与
#
校招谈薪一定要知道的事
#
13716次浏览
118人参与
#
找工作中的小确幸
#
27756次浏览
282人参与
#
顺丰求职进展汇总
#
63653次浏览
315人参与
#
非技术岗投递进展
#
158159次浏览
1314人参与
#
反问环节如何提问
#
115643次浏览
2470人参与
#
你觉得材料多少算高薪
#
26335次浏览
159人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务