嵌入式面试常见问题

1、什么是嵌入式

以应用为中心,以计算机技术为基础,软硬件可裁剪,
适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

2、字符设备和块设备的区别?

Linux里设备类型分:字符设备、块设备和网络设备;
(PCI和ISA为一类的总线结构,属于网络驱动设备)
字符设备按字符流的方式有序访问(串口和键盘等),直接读取;
字符设备实现的比较简单,内核例程和用户态API一一对应,用户层的read函数直接对应了内核中的read例程,这种映射关系由字符设备的file_operations维护。
块设备能够随机(不按顺序)访问固定大小数据片(硬盘、软驱、闪存等),从系统缓存读取。
块设备接口相对于字符设备复杂,read、write API没有直接到块设备层, 而是通过IO请求的方式通过OS的IO请求队列实现。
P.S 内核需要专门的子系统管理块设备

3、进程与程序,进程与线程的区别

程序是一组指令的集合,它是静态的实体,没有执行的含义。
进程程序的执行过程,是一个动态的实体,有自己的生命周期,包括产生、运行、消亡的过程。
进程还有并发性和交往性。
简单地说,进程是程序的一部分,程序运行的时候会产生进程。
介质不同:程序保存在存储介质,比如FLASH,硬盘等中,进程运行在RAM中
内容不完全相同:程序有数据段,代码段,调试信息等
进程有代码段,数据段,以及堆栈

进程定义:执行中一段程序,即一旦程序被载入到内存中并准备执行,就是一个进程。
它表示资源分配的基本概念,调度运行的基本单位,系统并发的执行单位。
线程定义:单个进程执行中每个任务就是一个线程。线程是进程执行运算的最小单位。

线程属于进程,一个进程可以有多个线程;
线程是轻量级的进程,线程没有地址空间,线程包含在进程的地址空间中,线程上下文只包含一个堆栈、一个寄存器、一个优先权。进程拥有的所有资源都属于线程。
线程运行时共享进程的内存和资源(代码段、数据段、扩展段),每个线程有自己的栈段(存放临时变量、局部变量)

进程有几种状态?进程间通信都有些什么?

状态:就绪、运行、阻塞
IPC通信:

  • 管道:由内核管理的一个缓存区;半双工
  • 信号:用于一个或几个进程之间传递异步信号
  • 消息队列:消息队列是内核地址空间中的内部链表
  • 共享内存:共享内存是在多个进程之间共享内存区域的一种进程间的通信方式
  • 信号量:信号量是一种计数器,用于控制对多个进程共享的资源进行的访问
  • 套接字:套接字机制不但可以单机的不同进程通信,而且使得跨网机器间进程可以通信
IPC优点缺点
管道自身具备同步机制只能用于有亲缘关系进程之间的通信;只支持单向数据流
信号异步通信可携带信息少,不具备同步机制
消息队列提供有格式字节流,消息有类型或优先级速度相比较慢,在新的应用程序中不应当再使用
共享内存最快,效率高自身不具备同步机制
信号量速度快于记录锁复杂
socket实现简单,同步机制

4、嵌入式的移植过程

  • 搭建交叉开发环境:在PC机上开发出能在开发板上运行的程序。
    原因:
    1.嵌入式系统硬件资源有限,在PC机开发效率更高;
    2.嵌入式系统MCU体系结构和指令集不同,需要安装交叉编译工具

  • BootLoader的选择和移植
    Boot Loader是系统内核运行前的小程序,用于初始化硬件设备、建立内存空间的映射图,即引导加载程序。

  • Kernel的配置、编译和移植

  • 根文件系统的制作

https://blog.csdn.net/victorwjw/article/details/72864770

5、守护进程的编写步骤

1.创建子进程,父进程退出


pid_t pid;


pid=fork();
if(pid>0){
	exit(0);
}

2.在子进程中创建新会话

pid_t setsid();

3.改变当前目录为根目录

chdir("/tmp");

4.重设文件权限掩码

umask(0);

5.关闭文件描述符

for(int i=0;i<gettablesize();i++){
	close(i);
}

http://blog.chinaunix.net/uid-29784793-id-4437034.html

6、网络的Socket交互过程

在这里插入图片描述

7、TCP 三次握手和终止连接的4次握手过程

TCP三次握手由客户端(Client)调用connect函数发起
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
————————————————
四次挥手由客户端或服务端任一方执行close触发
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
————————————————
https://blog.csdn.net/weixin_42153410/article/details/80277733

8、列举几种文件系统,分别说说他们的优缺点。

Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。

Jffs2(journaling flash filesystem V2),
主要用于NORflash,基于MTD驱动层,特点:可读写、支持数据压缩,基于哈希表的日志型文件系统,提供掉电保护。缺点是文件系统已满或接近满时,因为垃圾收集的原因运行速度放慢。

Yaffs :yet another flash file system
用于NAND flash,不支持数据压缩,速度快,yaffs2支持2kB的大页nand flash 。

Cramfs:只读文件系统,基于MTD驱动,压缩比高达2:1,运行时解压缩到Ram中

Romfs:只读的,按顺序存放数据。Uclinux常用的文件系统

Ramdisk:将一部分固定大小的内存当做分区来使用,可作为根文件系统。

NFS:network file system
在开发阶段,可以在主机上建立根文件系统用于调试,挂载到嵌入式设备,可以很方便修改根文件系统的内容

9、uboot作用与功能

https://blog.csdn.net/yilongdashi/article/details/87968572

10、

  • 14
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

toctor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值