嵌入式面试笔试题目——附部分答案

2023-05-16

1 、如何自动创建设备文件?
class_create device_create

2、led驱动编写有几种方式?
输入子系统 字符设备驱动 总线platform led子系统

3、如何实现http服务器?
tcp服务器:socket

4、如何编写守护进程,简述syslog的作用?
第一步:创建进程、杀死父进程
第二步:创建新的会话
第三步:改变工作路径路径
第四步:修改文件掩码权限
第五步:关闭文件描述符

5、bootloader和uboot的区别?
bootloader是启动装载。这是一段很小的程序,用于在系统上电启动初期运行,
初始化关键接口,如内存,串口,关闭中断,关闭看门狗,引导系统进入内核
的一段初始化的程序。它主要任务就是将内核映像从硬盘读到RAM中,然后跳转
到内核的入口点去运行内核,从而建立系统运行的必要环境。
uboot:是bootloader的一种

6、如何移植uboot?
1、下载源码
2、解压uboot源码并进入目录
3、指定交叉编译工具链
4、指定产品BOARD 底板
5、编译u-boot


7、传感器驱动如何编写?

8、BL0,BL1,BL2,BL3的作用?
BL0 文件是存放在 CPU 内部 IROM 中的一段固化代码,CPU 上点之后,首先去
运行soc中的BL0,运行时会将 BL1 拷贝到 CPU 的 IRAM 中,然后执行BL1;BL1文件执行
起来之后会先进行内存的初始化,之后将 BL2 文件拷贝到外部内存中,BL2会初始化BL3
的运行环境,将BL3搬移到DRAM中,BL3会有一个自搬移的过程,从而启动内核入口。
BL0:CPU内部的固化代码
BL1:三星提供的加密文件
BL2:截取uboot.bin 前14k
BL3:剩下的uboot 执行命令以及加载引导内核

9、exynos4412 时钟 APLL,MPLL,VPLL的区别?------倍频锁相环
APLL:用于 CPU_BLK (可产生高达1.4GHz的频率);作为 MPLL 的补充,它也可以给
DMC_BLK 、LEFTBUS_BLK 、RIGHTBUS_BLK 和 CMU_TOP 提供时钟。
MPLL:(可产生高达1GHz的频率)用于DMC_BLK 、LEFTBUS_BLK 、RIGHTBUS_BLK 和
CMU_TOP。
EPLL :主要给音频模块提供时钟,192MHz
VPLL :主要给视频系统提供54MHz时钟, 给 G3D(3D图形加速器 )提供时钟,或者是
1.1V下的440MHz。

10、arm中icache的作用
因为CPU的运行速度很快,而内存的速度比CPU的速度慢很多,因为icache是高速
缓存寄存器,将内存中的数据读取到cache中,所以这样会提高CPU的运行效率。

11、uboot启动流程?
1、初始化异常向量表
2、关中断,关看门狗,关MMU,关闭DCACHE,使能ICACHE
3、初始化时钟
4、初始化DRAM
5、初始化串口
6、设置栈
7、清BSS段
8、重定位
9、进一步初始化硬件
10、启动内核
1、初始化硬件
2、传递参数
3、启动内核


12、标准IO和文件IO的区别?
标准io是带缓存的,文件io不带缓存
标准io是属于库,文件io属于系统调用
标准io是流,文件io是文件描述符
标准io是一种特殊的文件io
13、select,poll,epoll的区别?
(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可
能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间
也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链
表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll
在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表
是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。

(2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要
把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列
上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是
一个epoll内部定义的等待队列)。这也能节省不少的开销

14、sysfs主要的作用?
sysfs文件系统不仅可以把设备(devices)和驱动程序(drivers) 的信息从内核
输出到 用户空间,也可以用来对设备和驱动程序做设置,
sysfs 的目的是把一些原本在 procfs 中的,关于设备的部份,独立出来,以‘
设备层次结构架构’(device tree)的形式呈现

15、内核为什么要引入平台总线?
是为了使得驱动程序中的硬件信息和软件分开

16、字符设备驱动实现流程?
申请设备号
注册设备号
调用file_operations函数

17、内核中select和异步通知的区别?

18、const int a,int const a, const int * a, const int const * a;
的区别?
const int a
int const a :表示都是int型变量a是只读的,不可写。
const int * a:表示指针地址不可以修改,为只读
const int const * a:表示指针*a和指针所指向的内容都是只读,不可修改
19、inline的作用?
内联函数,在程序设计的过程中,为了不让调用函数,使得程序跳来跳去,提供
程序的执行效率,用空间换取效率的一种手段
20、volatile 的作用?
防止编译器的过度优化
1.中断子服务的非自动变量
2.多线程中的被多个线程共享的变量
3.并行设备的硬件寄存器
21 、#ifndef define #end 的作用
防止在头文件中重复定义
22、设备树中
reg interrupt-parent interrupts status pinctl-0 pinctl-name
compatible 表示什么?
reg表示子节点数
interrupt-parent 表示中断父节点
interrupts 中断号
status 中断的开启状态
pinctl-0
pinctl-name 中断名字
compatible 匹配的中断的兼容性

23.进程和线程区别?
进程的地址空间是独立的。线程的地址空间共享的。
进程消耗的资源比较大,线程消耗的资源比较小
进程和进程通信通过进程间通信方式,线程和线程通信通过全局变量。
24.fork和vfork的区别?
vfork保证子进程先运行,在他调用exec或者exit之后,父进程才可能被调度运
行,如果在调用者两个函数之前子进程依赖于父进程的动作,会导致死锁
fork需要拷贝整个父进程的环境,而vfork不需要拷贝父进程的环境,在子进程
没有调用exec或者exit之前,父进程u子进程共享环境,此时的父进程相当于阻塞等待

25.进程间通信方式有几种?每一种的特点?
8种通信方式
有名管道
无名管道
信号
信号量
共享内存
消息队列
套接字
26.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程
序打开使用的文件?
mknod手动进行创建
自动创建class_create
device_create

27.insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要
注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?
会执行init函数,rmmod会执行exit函数
卸载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后
发现产生了死锁的问题。
评:要注意在init函数中申请的资源在exit函数中要释放,包括存储,ioremap,定时器
,工作队列等等。也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一
切不留下一点痕迹。
28.static作用?
1、修饰全局变量,限制全局变量在该目录下使用,不能被其他文件使用
2、修饰函数,限制函数在该目录下使用,不能被其他文件使用
3、修饰局部变量,使得该局部变量生命周期变长,改变了存储方式
29.inline的作用?
内联函数,在程序设计的过程中,为了不让调用函数,使得程序跳来跳去,提供
程序的执行效率,用空间换取效率的一种手段
30.在驱动调试过程中遇到过oops没?你是怎么处理的?
pc c
arm-none-linux-gnueabi-addr2line 地址 -e vmlinux -f


printk

汇编:
点灯
31.ioctl和unlock_ioctl有什么区别?
ioctl是应用层的,unlock_ioctl是底层提供给应用层的接口 属于内核层的
32.驱动中操作物理绝对地址为什么要先ioremap?
将一个IO地址空间映射到内核的虚拟地址空间上去。因为内核没有办法直接访问
物理内存地址,必须先通过ioremap获得对应的虚拟地址。,便于访问
33.设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先
注 册驱动再注册设备?有先后顺序没?
驱动 设备 总线
34.内核函数mmap的实现原理,机制?
map将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件
的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映
射调用系统中作用很大。
35.在Linux C中,ls这个命令是怎么被执行的?
fork+exec
system("ls -l");
36.uboot是如何引导内核?

37.请从网卡、LCD驱动器、传感器芯片中选择一个或者2个(可以以具体的芯片为例),
对下面的问题做答:
1)如果是外部扩展芯片,请说出你用的芯片的型号
2)画出上题中你选定相应硬件模块与CPU的主要引脚连线
3) 编写上题中你选定相应硬件模块相应LINUX驱动的流程?

38.platform总线设备及总线设备如何编写?
驱动 硬件

39.IIC原理,总线框架,设备编写方法,i2c_msg

40.查看驱动模块中打印信息应该使用什么命令?如何查看内核中已有的字符设备的信息
?如何查看正在使用的有哪些中断号?
dmesg cat /proc/devices
cat /proc/interrupt

41.中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?
中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是
否有请求。
凡事都是两面性,所以,看效率不能简单的说那个效率高。如果是请求设备是一个频
繁请求cpu的设备,
或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般设备,
并且该设备请求cpu的频率比较低,则用中断效率要高一些。主要是看请求频率。

42、IIC,SPI,串口的区别?
SPI总线由三条信号线组成
串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设
备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从
机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加
一条从设备选择线
I2C总线是双向、两线(SCL、SDA)
具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在
它的协议体系中,传输数据时都会带上目的设备的设备地址
UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波
特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件
上由两根线,一根用于发送,一根用于接收

43、输入子系统分为哪几层?如何编写设备驱动?
分为三层:硬件驱动层、子系统核心层、事件处理层

编写事件处理层


44、TCP和udp的区别?
tcp:是基于连接的,可靠的一种通信方式,而udp是不需要连接的,直接发送报

 

45、用变量a给出下面的定义
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a
pointer to an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10
pointers to integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10
integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer
to a function that takes an integer as an argument and returns an integer)
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回
一个整型数( An array of ten pointers tofunctions that take an integer
argument and return an integer )

46、中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标
准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了
__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf("\nArea = %f", area);
return area;
}

 

中断不能有返回值,不能使用printf函数,不能传递参数 不能进行浮点数计算

 

 

文中答案为本人整理而得到,不能保证百分之百正确,如有误,请联系作者本人修改

 

转载于:https://www.cnblogs.com/linuxuser-home/p/7642690.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式面试笔试题目——附部分答案 的相关文章

  • ArangoDB查询语言(AQL) 基本语法&用法

    原文链接 个人博客 欢迎访问 ArangoDB查询语言 xff08 AQL xff09 类似于结构化查询语言 xff08 SQL xff09 在它的目的 两者都支持读取和修改集合数据 xff0c 但AQL不支持数据定义操作 xff0c 例如
  • No compiler is provided in this environment. Perhaps you are running on a JR

    maven编译项目时出错 xff0c 提示信息如下 xff1a ERROR Failed to execute goal org apache maven plugins maven compiler plugin 3 1 testComp
  • [Error] assignment to expression with array type

    int array1 61 1 2 3 int array2 int array3 3 array2 61 array1 copy pointer only array3 61 amp array1 error To elaborate f
  • docker使用阿里云镜像加速

    由于很多镜像是国外网站的 xff0c 我们下载的话会比较耗时 xff0c 但是国内有些企业做了镜像拷贝工作 xff0c 这样 xff0c 我们就可以直接从他们的国内服务器上下载相应的文件就好了 xff0c 比如阿里云的服务 登录阿里云 xf
  • hive (with as)

    背景 xff1a 当我们书写一些结构相对复杂的SQL语句时 xff0c 可能某个子查询在多个层级多个地方存在重复使用的情况 xff0c 这个时候我们可以使用 with as 语句将其独立出来 xff0c 极大提高SQL可读性 xff0c 简
  • mysql执行顺序

    SQL Select语句完整的执行顺序 xff1a 1 from子句组装来自不同数据源的数据 xff1b 2 where子句基于指定的条件对记录行进行筛选 xff1b 3 group by子句将数据划分为多个分组 xff1b 4 使用聚集函
  • mysql的左连接

    哇 xff0c mysql的左连接我又忘记了 xff0c 做个笔记 select from table1 a left join table2 b on a id 61 b id 这样就连接起来了 xff0c 棒棒的 转载于 https w
  • 大学生应该懂得。。。葡萄酒知识

    葡萄酒 xff08 p t o ji xff09 xff1a 根据国际葡萄酒组织的规定 xff0c 葡萄酒只能是破碎或未破碎的新鲜葡萄果实或汁完全或部分酒精发酵后获得的饮料 xff0c 其酒精度数不能低于8 5 葡萄酒是用新鲜的葡萄或葡萄汁
  • 系统整体测试工具

    LoadRunner xff0c 是一种预测系统行为和性能的负载测试工具 通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题 xff0c LoadRunner 能够对整个企业架构进行测试 转载于 https www cnb
  • 数据结构习题——第一章 绪论

    整理自己学习过程中接触的习题 xff0c 不断更新中 答案在每个部分后面 第一部分 xff1a 第一章 绪论 一 xff0e 选择题 1 xff0e 数据结构被形式地定义为 xff08 K xff0c R xff09 xff0c 其中K是
  • php利用数组循环输出,php数组遍历,php循环输出数组

    php数组遍历 php循环输出数组 PHP数组循环遍历的四种方式 重点 数组循环遍历的四种方式 1 xff0c https www cnblogs com waj6511988 p 6927208 html 2 xff0c https ww
  • 产品开发阶段 EVT DVT PVT MP

    PLM xff08 Product Lifecycle Management xff09 System xff1a PLM是协助产品能够顺利完成在新产品开发 xff08 NPI xff1a New Product Introduction
  • 美图秀秀一寸照片的制作

    在浏览器里搜索美图秀秀 xff0c 并点击下载 2 安装之后 xff0c 打开美图秀秀 xff0c 选择图片美化 3 选择打开一张图片 xff0c 添加需要修改的图片 4 此时图片添加完成 xff0c 点击左侧的尺寸修改 5 点击取消锁定高
  • 使用虚拟机Ubuntu进行深度学习(一) ----安装虚拟机和Ubuntu系统

    使用虚拟机Ubuntu进行深度学习 xff08 一 xff09 安装虚拟机和Ubuntu系统 很多想要开展深度学习的小伙伴们 xff0c 可能没有或者即将拥有服务器和GPU这些比较好的深度学习硬件设备 xff0c 但又想较早开始和接触深度学
  • 有关YOLO目标检测的FPGA加速教程(一)

    1 内存卡的装配 详见 xff1a https blog csdn net weixin 38438451 article details 83474479 在这一步 xff0c 开发板启动后 xff0c 可以通过超级终端HyperTerm
  • java开发app后端_app后端用什么开发

    选择开发语言就一个核心原则 xff1a 在合适的业务场景的情况下选择最热门的语言 1 每种语言都有自己擅长的业务场景 xff0c 根据业务场景来选择 推荐学习 xff1a PHP视频教程 例如 xff0c 如果需要开发一个聊天服务器 xff
  • Python sphinx-build在Windows系统中生成Html文档

    看到前同事发布的 Markdown reST 文档发布流水线 基于TFS Docker Azure等工具和平台进行文档发布的介绍说明 xff0c 不得不在心中暗暗竖起大拇指 这套模式 xff0c 实现了文档编写后版本管理 发布 存档 分享的
  • php打开sdf文件,sdf文件扩展名,sdf文件怎么打开?

    sdf 文件类型1 xff1a SQL Server Compact Database File 文件说明 xff1a Compact relational database developed by Microsoft also know
  • 如何将获取的html源码重新加载,js中页面的重新加载的方法

    摘要 腾兴网为您分享 js中页面的重新加载的方法 xff0c 信用管家 xff0c 新浪博客 xff0c 听中国 xff0c 实时地球等软件知识 xff0c 以及apexlauncher xff0c 乐园rpg xff0c 正版秒挂抢红包挂
  • Git命令行介绍和使用说明(持续更新)

    Git命令行介绍和使用说明 xff08 持续更新 xff09 Git 命令行介绍和使用说明 xff08 持续更新 xff09 文档名称 Git 命令行介绍和使用说明会 创建时间 2012 8 23 修改时间 2012 8 23 创建人 Ba

随机推荐