文章目录
-
- 嵌入式软件工程师面试题目整理(六)
-
- 请问uboot启动过程都做了些什么
- 为什么uboot要关掉cache?
- nandflash和norflash的区别,对norflash的操作方式的理解?
- 嵌入式系统中代码的执行方式主要有3种:
- 语句for( ;1 ;)有什么问题?它是什么意思?
- do……while和while……do有什么区别?
- 代码输出结果是?
- Linux中引入模块机制有什么好处
- MMU的作用有( )?
- 以下属于DMA特点的有( )
- FIQ的什么特点使得它处理的速度比IRQ快?
- 全局变量、局部变量、静态全局变量、静态局部变量的区别和引用方式?
- 内存的分配方式有哪三种,请简单介绍一下。
- 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?
- 什么是GPIO?
- 写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?
嵌入式软件工程师面试题目整理(六)
请问uboot启动过程都做了些什么
见之前ARM部分
为什么uboot要关掉cache?
1、cpu刚开始初始化的时候,还未设置栈,所以先使用汇编代码,构建异常项链表,然后设置cpu为svc(特权)模式,同时关闭FIQ和IRQ(防止突发中断程序跑飞了)
注:在跳转到内核之前,要满足CPU出在SVC模式下。
2、对cp15协处理器进行设置,这里主要是关闭MMU和cache
3、进入到板级初始化阶段,这里会进行时钟、内存、串口的初始化。最后还要关闭看门狗。
4、接下来就是设置栈,为c语言准备运行环境,调用board_init_f,填充gd结构体。
5、对代码重定位,搬运到内存中去,搬运之后,跳转到内存中去执行board_init_r,这里就可以开启cache了,当然也可以不开启。然后初始化其他设备。比如flash、网卡、emmc等。初始化完之后,在执行main_loop。