【原创】关于wince OS开发面试问题的总结系列之Bootloader

嵌入式面试题汇总】 嵌入式面试题 阅读详情

参考资料:

1.《Windows CE 工程事件完全解析》 by:李大为

2.《Windos CE 实用开发技术》by:张冬泉 等

3.《Windows®Embedded CE 6.0 Fundamentals》

4.http://www.cnblogs.com/we-hjb/ HJB的WinCE blog

前序:

自从2月1日正式提出离职到今天已经一个星期了,在这个一周的时间里面面试了 几家公司,第一感觉都还是比较好的公司,很正规,应聘的职位是嵌入式软件工程师 wince os方向,经过几场面试下来,完全的无地自容,第一,三年工作下来,发现自己的基础知识仍然是薄弱,说起来好像什么都做过了,但是实际问起细节还是说不清 楚,最悲哀的是智商都貌似变低很多,30秒之内回答这个问题:“长跑超过第二名,是第几名”。这样的幼稚园问题都不知道如何去作答,很尴尬。看到这个文章 的朋友应该都能在10秒中之内回答的很清楚。

以下的文章对这类的考察智力的题目不在做过多说明,只希望大家不要像我工作的技术知识基础 不牢固,连智商都工作的低了很多,这样就很亏,下面只对关于wince os方向嵌入式工程师开发面试做一些个总结,今天做一个大概的分析和关于bootloader方面的总结,在接下来的两天再对OAL和驱动两块进行一个分 析。临近春节,祝大家新年快乐,希望通过这个文章能给和我一样正在找工作的和在年后准备找工作的朋友一点帮助。

 

正 文:

Bootloader

关于Bootloader,说过很多次了,我们就直接进入主题,在这段时间的面试 中,bootloader做为问题的次数出现过两次,一般考官会先问一下你对wince的整体结构有什么认识,个人感觉这个问的有些太大了,特别是面试的 时候来问,但是考官们会很喜欢问这个问题,所以不管个人感觉如何,能说多少是多少,具体的大家可以参考《Windows®Embedded CE 6.0 Fundamentals》中76页的图3-1来说,这里我做个简单的描述,具体如下:

做为一个完整的wince嵌入式设备系统,当 然,有一套完整的硬件做为支撑,硬件包括CPU,RAM,ROM以及一系列的I/O Device.在此基础上,我们就可以构建我们的软件平台,最初一层的是kernel,也就是内核层,这一层的开发也就是针对嵌入式软件工程师 wince os方向开发的一个主要目标层,在这一个层次的开发中,我们会遇到一个bootloader的开发,这个功能部分主要起到引导系统工作的作用,通常在上电 或者复位后马上进行,后面我们详细说一下,完成了bootloader,系统的镜像将会被加载,也就是内核层开始,内核层主要的接口有两个,一个是 OAL,也就是OEM适配层,另外一个是Device Driver层,OAL层的硬件层对象是CPU,RAM和ROM,然后牵涉到一些基本通讯调试的I/O,例如串口,Device Driver层主要面向的是触摸,SD卡接口,串口,音视频输入输出以及LAN等设备,在Kernel层中我们还需要处理到一些内核中设备的管理,文件系 统的管理,GWES图形环境的处理,网络等(这里能说多少说多少,不能确定的不要说了。说不出来就等等过去),这一部分就基本上处理到整个系统内核成功建 立,完成了这个部分就进入用户处理层,也就是USER PROCESSES这个层次上,这个层次主要是针对应用程序开发,也就是关于WINCE APP开发工程师需要进一步了解的东西,这里我们也需要对其进行了解,这个地方主要牵涉到一个wince api的接口,同时有系统界面的处理,进程线程服务控制处理,设备使用,在此基础上的一系列的应用开发。

 

做答完毕 上面一个问题,我们来详细的看看bootloader,这个bootloader我们反复说过多次,可能是我个人实在太愚笨在加上考场上比较紧张,考官的 口音有点跟不上(我承认是我广东话的却呒没学好,实在是听有些听唔懂,有机会得恶补广东话嘅),前段时间还写文章分析过,说起来还是丢三落四的,很无语, 下面再来过一边,结合考过的例子,反复说多说几遍就熟悉了。呵呵,以下问题均基于wince来说。

Q1:bootloader是什么?

A1:bootloader是在wince内核程序启动前的一小段引导程序,用来引导系统内核的启动,bootloader的种类还是比较多 的,有nboot eboot uboot等等,但目的都是用来引导系统从上电或者复位进入正常工作状态的一段小程序,一般建议存放在flash中;

Q2:一般来说,bootloader运行的第一句话是什么?整个bootloader过程中做了哪些事情?

A2:第一句话 是startup()函数的运行,在startup中,主要做了如下工作:清空TLB和cache,关闭中断,配置PLL,配置内存控制器等;

Q3:刚才你回答了要在bootloader中的startup关闭中断,这是为什么呢?

A3:这个是wince系统设备的一 个约定,关闭中断是把整个ARM设备开发简易化,所有的外设中断请求(IRQ)全部关闭,ARM就变成了一个相对不太复杂的单片机,开发起来难度会比原先 降低很多,中断打开反倒会使得整个系统的开发复杂度上升;

Q4:startup的作用是什么?

A4:1.对cpu进 行简单的初始化,类似于BIOS的功能;2.将自身bootloader加载到RAM中;

Q5:说说MMU是什么,大概描述下其工作的 原理?MMU在什么时候开始工作?

A5:MMU是用在多任务操作系统中,给每个任务提供独立的虚拟地址空间,其实现原理是:在主存中存 贮页表等数据,通过MMU映射到CPU,然后CPU就可以使用虚拟地址调度任务,访问外设等,虚拟地址和物理地址映射是固定的,这样操作系统比较安全稳 定,其转换地址的依据是根绝g_oalAddressTable这个数组来确认。其工作是在startup初始化完成时钟,并建立完成指针堆栈的时候将 MMU打开;

Q6:bootloader的大小如何确定?

A6:一般可以参考在对应boot代码路径下的 boot.bib文件中有定义其大小;

Q7:bootloader为什么有的是nb0,有的是bin文件?有什么区别,如何确定使用的 是nb0还是bin文件?

A7:bin为记录式镜像,nb0为原始镜像,前者是单位组织的镜像数据,后者是二进制数据的镜像快照,说通 俗写bin是压缩后的nb0,使用nb0还是bin主要是根绝DownloadeImage函数中进行区分,一般来说,在此函数中会将image的起始7 个字节与特征值进行比较,特征值有6个,分别代表bin,nb0,带数字签名的bin,带数字签名的nb0,MULTXIP,MANIFEST。一般采取 如下方式进行区分

if (!memcmp (hdr, "N000FF/x0A", BL_HDRSIG_SIZE)) 其中N000FF/x0A是特征值,hdr是获取到的头7个字节;

以下给出6个特征值做为本次总结的结束

N000FF/x0A=BL_IMAGE_TYPE_MANIFEST
X000FF/x0A=BL_IMAGE_TYPE_MULTXIP
B000FF/x0A=BL_IMAGE_TYPE_BIN
S000FF/x0A=BL_IMAGE_TYPE_SIGNED_BIN
R000FF/x0A=BL_IMAGE_TYPE_SIGNED_NB0
None=BL_IMAGE_TYPE_UNKNOWN

面试题总结(十四)【系统移植】【华清远见西安中心】 阅读详情

相关推荐

嵌入式软件面试经典问题

嵌入式软件面试题汇总

weixin_48819160的博客 6538

最全面的面试问题(让你轻松面对每一次面试

最全面的面试问题:让你轻松面对每一次面试。不管大型企业还是中型企业,有这资料绝对可以攻克每个问答。

嵌入式Bootloader面试题面面观(3万字长文)

Bootloader的架构特定代码会处理CPU寄存器的设置、中断向量表的初始化、内存管理单元的配置等,确保内核能够在特定的处理器架构上正确启动。在不同的系统中,可用的RAM空间和硬件配置可能会有很大差异,可重定位的Bootloader可以根据实际的内存布局动态调整自己的运行位置,从而确保在任何系统上都能正确运行。ROM stage,通常被称为stage1,是Bootloader的初始阶段,它存储在系统ROM中,通常是系统上电或复位后的第一个执行程序。它还应支持加密技术,保护患者数据和个人信息不被非法访问。

大模型大数据攻城狮的专栏 1525

【C++/嵌入式梳理】bootloader

【C++/嵌入式笔试面试八股】bootloader

Hi 1173

一些面试题2.0

红帽6的启动过程 1,bios加电自检,检测硬件,决定启动介质,找到引导扇区 2,读取并且执行第一个开机设备中的MBR的bootloader 3,根据bootloader设置去加载内核和驱动(grub.conf) 4,内核启动init进程 5,系统初始化 6,init找到/etc/inittab文件,决定系统的运行级别(X) 7,触发相应的运行级别的事件,运行/etc/rcX.d下的

yinzhipeng123的博客 517

【Android面试题】Android Framework核心面试题——Android 系统启动流程

总的来说,系统启动流程是先通电,然后进入BootLoader引导阶段,然后再启动linux系统,然后再启动Android系统各进程。由底层开始启动,逐步启动上层的过程。我整理了一套Android面试题合集,除了以上面试题,还包含【

datian1234的博客 383

关于wince OS开发面试问题的总结系列Bootloader

<br />参考资料:<br />1.《Windows CE 工程事件完全解析》 by:李大为<br />2.《Windos CE 实用开发技术》by:张冬泉 等<br />3.《Windows®Embedded CE 6.0 Fundamentals》<br />4.http://www.cnblogs.com/we-hjb/ HJB的WinCE blog<br />前序:<br />自 从2月1日正式提出离职到今天已经一个星期了,在这个一周的时间里面面试了几家公司,第一感觉都还是比较好的公司,很正

Schedule Plus 968

斩获大厂Offer:详解Linux Bootloader 助您面试通关

当计算机系统通电或重启,在操作系统内核运行之前,Bootloader 就开始忙碌起来。它执行一系列初始化操作,加载操作系统内核,为后续操作系统的顺畅运行创造必要条件。打个比方,如果把计算机系统比作一场盛大演出,那么 Bootloader 就是开场前的舞台搭建者和准备工作组织者,确保演出(操作系统运行)能顺利开始。

大模型大数据攻城狮的专栏 1299

linux驱动面试题

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。 评:这只是其中一种方式,也叫手动创建设备文件。还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后。那么在系统启动...

monkea123的博客 5903

成大事嵌入式面试题系列09:Bootloader 与 OTA 升级面试题(第3篇)| 设备侧实现细节(5题精讲)

本文精选5道Bootloader与OTA升级设备侧实现面试题,涵盖参数传递、多镜像协同、UDS诊断等核心内容。重点解析了共享内存区域设计、重启原因定义、多镜像依赖关系表等技术细节,并提供了具体的代码实现示例。文章详细说明了升级状态传递机制、日志循环缓冲实现以及拓扑排序确定镜像升级顺序等关键技术点,适合嵌入式及车载诊断工程师学习参考,帮助掌握OTA升级的工程实现细节。

成大事的博客 1314

2022春招大厂-嵌入式开发经典笔试面试题目大整理

1、什么是进程,线程,有什么区别2、多进程、多线程的优缺点3、什么时候用进程,什么时候用线程4、多进程、多线程同步(通讯)的方法5、进程线程的状态转换图。什么时候阻塞,什么时候就绪6、父进程、子进程的关系以及区别7、什么是进程上下文、中断上下文8、一个进程可以创建多少线程,和什么有关9、进程间通讯:(1)管道/无名管道(2)信号(3)共享内存(4)消息队列(5)信号量(6)socket注意:临界区则是一种概念,指的是访问公共资源的程序片段,并不是一种通信方式。

嵌入式Linux内核的博客 1383

韶音科技嵌入式面试题及参考答案

Bootloader 的启动流程是什么? Bootloader 是在操作系统内核运行之前运行的一段小程序。它的启动流程主要分为以下几个阶段。 首先是硬件初始化阶段。这个阶段会对处理器以及一些关键的硬件设备进行初始化。比如,会配置处理器的工作模式、设置堆栈指针等。以 ARM 处理器为例,会设置处理器进入 SVC(管理)模式,这是因为在这个模式下能够访问系统的所有资源,方便后续对硬件进行初始化。还会初始化一些基本的存储设备接口,像 Flash 的读取接口等。 接着是加载内核镜像阶段。Boo

大模型大数据攻城狮的专栏 1492

成大事嵌入式面试题系列07:Bootloader 与 OTA 升级面试题(第1篇)| 引导架构与镜像管理(5题精讲)

本文精选5道嵌入式Bootloader与OTA升级核心面试题,重点解析引导架构与镜像管理。主要内容包括: Bootloader分层设计(BootROM/BL1/BL2)的职责分工与故障回退链机制 镜像布局设计与头部结构(包含魔数、版本、CRC32、签名等关键字段) 参数存储区设计(版本号、启动计数、活跃槽位等状态管理) 存储对齐处理与可靠性增强措施(冗余头部、校验机制) 文章通过代码示例详细展示了各层Bootloader工作流程、镜像头部结构定义以及参数区操作实现,为嵌入式开发者提供了实用的工程实践参考。

成大事的博客 934

成大事嵌入式面试题系列08:Bootloader 与 OTA 升级面试题(第2篇)| 校验、签名与安全(5题精讲)

🔐Bootloader与OTA安全升级核心摘要(150字) 本文聚焦OTA升级安全机制,详解5大核心问题:1)采用CRC-SHA256-RSA三层次校验体系,兼顾传输校验、完整性和身份验证;2)通过eFuse/OTP存储版本计数器实现防回滚,Manifest需包含版本策略、依赖关系和紧急恢复通道;3)安全启动需提供统一验签API,密钥存储在HSM/安全区域,验签失败时禁用调试接口;4)闪存写入需处理坏块和Cache同步问题;5)回滚机制需设置健康检查阈值,保留手动回滚的物理操作接口。全文提供C代码示例和J

成大事的博客 595

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 953

嵌入式经典面试题之选择题

一、单项选择题 1、如下哪一个命令可以帮助你知道shell命令的用法( A ) A. man              B.pwd             C. help            D. more 2、Linux分区类型默认的是:( B ) A. vfat          B. ext2/ext3      C. swap         D. dos 3、在大多数

xchbx的专栏 6870

linux驱动基础面试题(二)

linux系统中多线程同步的方法有? 互斥锁、条件变量、信号量、读写锁 进程间通信的方式及优缺点 a、无名管道:无名管道是一种半双工的通信方式,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系通常是指父子进程关系。 b、有名管道:有名管道也是一种半双工的方式,但是它允许无亲缘关系进程间的通信 。 c、信号量:信号量是一个计时器,可以用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止某进程...

a1014388280的博客 3436
上一篇: 【原创】关于STL::_Lockit的问题
下一篇: 【原创】关于wince OS开发面试问题的总结系列之OAL
xumercury
博客等级 码龄19年 163粉丝 67原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值