嵌软秋招总结及两万字八股文汇总

投票
寄完了,只剩实习转正保底。主要是linux+soc方向岗位,少量mcu+rtos方向,少量算法方向。
面筋
1、嵌入式linux的启动过程?想linux启动之后执行一些服务的话,能通过什么方式?
2、为什么要用uboot,不能直接启动linux内核吗?
3、Select和epoll的区别?
4、TCP和UDP的区别?TCP\UDP报文头部开销为多少?
5、什么叫面向连接和面向非连接?
6、介绍一下TCP的拥塞控制机制?
7、说一下自己熟悉的排序算法,讲一下其中的一个复杂度?
8、二叉树、平衡树、红黑树怎么理解?
9、树的平衡有什么用?
10、堆和栈的区别?
11、进程和线程的区别?
12、进程/线程具体是怎么实现的?
13、介绍SPI,怎么给某一个地址发数据?
14、设备和驱动是如何匹配的,匹配后做什么?
15、写一个通用的字符设备驱动程序,需要实现哪些接口?
16、主次设备号是什么?
17、Linux虚拟内存管理,虚拟地址如何转化为物理地址?
18、fopen和open的区别?
19、讲一下什么是交叉编译?
20、讲一下中断流程,区分硬件中断和软件中断。
21、IIC原理,如何保证数据的准确性,最多挂载多少个设备,为什么要接上拉电阻?
22、串口通信原理,如何保证串口通信成功,如何修改波特率,说一下串口的缓冲区管理?
23、发生死锁的条件、怎么避免死锁?
24、DMA配置过程,如何通过DMA实现高效的SPI数据传输?
25、什么是中断优先级?如何在嵌入式系统中管理中断优先级?如何防止中断嵌套导致系统死锁?
26、如何调试和优化一个性能较差的Linux驱动程序?
27、解释RTOS中任务调度器的作用?
28、如何编写一个Linux应用程序来读写GPIO输入输出?
29、如何使用epoll实现高效的IO多路复用?
30、如何在Linux应用中处理信号和中断?信号和中断的区别是什么?
31、如何在Linux上实现守护进程?
32、如何调试在Linux上崩溃的嵌入式应用程序?
33、http和https的区别?
34、进程间通讯的方式有哪些,有什么优缺点,适合什么场景?
35、数据结构有哪些?
36、数组和链表的区别?什么时候用数组,什么时候用链表?
37、经常要进行增删改查的数据用什么存储?
38、如何理解操作系统?
39、两个线程操作同一个变量多次后会发生什么情况?
40、为什么要用RTOS?有什么意义?为什么能加快效率?
41、fork()如何创建子进程?什么是写时复制?什么是零拷贝?
42、define\const\typedef的区别?
43、GPIO的模式有哪几种?
44、Linux内存分配的几个函数(kmalloc()\kzalloc()\vmalloc())?
kzalloc 是强制清零的 kmalloc 操作;(以下描述不区分 kmalloc 和 kzalloc)
kmalloc 分配的内存大小有限制(128KB),而 vmalloc 没有限制;
kmalloc 可以保证分配的内存物理地址是连续的,但是 vmalloc 不能保证;
kmalloc 分配内存的过程可以是原子过程(使用 GFP_ATOMIC),而 vmalloc 分配内存时则可能产生阻塞;
kmalloc 分配内存的开销小,因此 kmalloc 比 vmalloc 要快;
45、wait()/waitpid()的区别?
46、什么是 inode、block、sector?
47、Linux常见的信号有哪些?接收到信号后怎么处理?
48、什么是线程池?
49、Linux网络编程流程,讲一下服务端与epoll结合的编写流程。
50、讲一下FreeRTOS的内存管理。
51、讲一下FreeRTOS的启动流程。
禁止全局中断: 通常会调用一个与平台相关的函数来禁止全局中断,例如 portDISABLE_INTERRUPTS()。 这是为了防止在初始化 FreeRTOS 的内部数据结构时发生中断,导致数据不一致。
设置系统时钟: 初始化 FreeRTOS 的系统时钟,通常会调用 xPortSysTickHandler(),并将其与 SysTick 中断关联。
创建空闲任务 (Idle Task): 空闲任务是 FreeRTOS 中优先级最低的任务,当没有其他任务可以运行时,空闲任务就会运行。空闲任务的主要作用是回收被删除的任务所占用的内存。
创建第一个任务: 选择就绪列表中优先级最高的任务,并将其状态设置为运行状态 (Running)。
启动 PendSV 中断: 配置 PendSV 中断,并触发它。 PendSV 中断用于进行任务切换。
恢复中断: 启用全局中断,例如 portENABLE_INTERRUPTS()。
进入第一个任务: 通过某种方式(通常是汇编代码),将 CPU 的控制权交给第一个任务。 这涉及到加载任务的栈指针、程序计数器等寄存器。
52、DMA和cache一致性问题怎么解决?
Cache Flush 操作: 指的是将 CPU Cache 中的数据写回主内存,并使相应的缓存行无效。
dma_sync_single_for_cpu(): 在 DMA 传输完成后,将 DMA 操作影响的内存区域中的数据从设备缓存同步到 CPU Cache。 适用于 DMA 写入内存 (从设备到内存) 的情况,确保 CPU 可以读取到 DMA 写入的最新数据。
dma_sync_single_for_device(): 在 DMA 传输开始前,将 CPU Cache 中的数据写回主内存,并使相应的缓存行无效。 适用于 DMA 从内存读取数据 (从内存到设备) 的情况,确保 DMA 设备读取到最新的数据,而不是过时的 Cache 数据。
Cache 一致性管理: 一些 IOMMU 可以通过硬件方式来管理 DMA 设备和 CPU Cache 之间的数据一致性。 例如,IOMMU 可以监听 DMA 设备的内存访问,并自动使 CPU Cache 中相应的缓存行无效。
53、在驱动中,物理地址向虚拟地址的转换接口是什么?
ioremap()传参为实际物理地址起始地址和地址范围大小
54、ioremap和iommu的区别是什么?

55、讲一下硬件i2c和软件i2c。
56、模块状态是什么?
未加载;加载中(modprobe);初始化;运行中;卸载中(rmmod);已卸载
57、静态加载和动态加载的区别?
58、Uboot怎么配置的?
59、知道uboot之前还有一段流程吗?
基本的硬件初始化:
时钟初始化: 设置 CPU 和外设的时钟频率。
电压调节: 调整 CPU 和内存的电压。
DRAM 初始化: 初始化 DRAM 控制器,以便后续的内存访问。 这通常是极其关键的一步。
最小化的存储器访问: 可能需要配置 SPI Flash 或其他类型的存储器,以便从那里加载后续的引导加载程序。
安全启动 (Secure Boot): 验证 U-Boot 镜像的签名,防止恶意代码启动。 (如果使能了安全启动)
选择启动设备: 确定从哪个存储设备 (例如 Flash、SD 卡、网络) 启动。
加载 SPL (Secondary Program Loader): 将 SPL 从存储设备加载到 RAM 中。
跳转到 SPL: 将 CPU 的执行权交给 SPL。
60、内核为什么存放在0x30008000中呢,而uboot存放在0x0000处,其中这些地址存放了些什么?

字数限制,还有很多下一次更新写上来#牛客创作赏金赛##面试问题记录#
全部评论
你这整理的,有驱动,有应用的,内容挺多的
点赞 回复 分享
发布于 昨天 20:18 陕西

相关推荐

评论
点赞
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务