Linux面试高频(Linux系统移植)

Linux系统移植

1 Linux内核启动流程⭐⭐⭐⭐⭐

引导加载阶段

  • 计算机通电后,首先由 BIOS 或 UEFI 进行初始化,完成硬件自检等操作。
  • 找到可启动设备,读取其第一个扇区的 MBR,MBR 中的引导加载程序(如 GRUB)被加载到内存并运行。

内核初始化阶段

  • 引导加载程序将内核映像加载到内存后,内核开始初始化,首先进行体系结构相关的初始化,如设置 CPU 寄存器、内存映射等。
  • 接着进行内核的基本初始化,包括内存管理、进程调度、中断处理等子系统的初始化。

系统服务启动阶段

  • 内核初始化完成后,启动系统的第一个进程 init,init 进程会根据配置文件来启动其它系统服务和进程,如网络服务、文件系统服务等。
  • 系统进入运行状态,等待用户操作。

2 什么是bootloader?在嵌入式系统当中bootloader的作用是什么?⭐⭐⭐⭐

Bootloader 是一段在操作系统内核运行之前执行的小程序。在嵌入式系统中,它具有至关重要的作用:

  • 系统初始化:Bootloader 会对嵌入式系统中的硬件进行初始化,包括 CPU、内存、时钟、串口等设备,为后续内核的运行搭建好基础环境,确保硬件处于合适的工作状态。
  • 加载内核:从存储设备(如 Flash、SD 卡)中读取操作系统内核映像到内存指定位置,并将系统控制权交给内核,使内核能够开始执行,完成系统的启动。
  • 参数传递:在加载内核的过程中,Bootloader 可以向内核传递一些必要的参数,如硬件配置信息、内存布局等,帮助内核更好地适应硬件环境。
  • 系统调试与维护:提供交互界面,允许开发人员通过串口或网络等方式与系统进行交互,实现对系统的调试、更新内核和文件系统等操作。

3 为什么汇编语言对硬件平台有依赖性而C语言却可以不依赖硬件平台?⭐⭐⭐⭐

汇编语言对硬件平台有依赖性而 C 语言相对不依赖硬件平台,主要原因如下:

  • 指令集相关性:汇编语言是直接面向硬件的编程语言,它的每条指令都与特定硬件平台的指令集紧密相关,不同硬件平台的指令集和寄存器结构差异很大,所以汇编语言程序通常只能在特定的硬件平台上运行。而 C 语言是高级编程语言,它通过编译器将代码转换为目标硬件平台的机器码,编译器会根据不同平台的特点进行适配,开发者无需直接针对特定平台的指令集编程。
  • 内存管理差异:汇编语言需要程序员直接操作内存地址和寄存器来进行数据存储和读取,要清楚了解硬件的内存布局等细节。C 语言有相对统一的内存管理机制,通过指针等概念操作内存,编译器会负责将这些操作映射到具体硬件平台的内存管理方式上,降低了对硬件平台内存细节的依赖。

4 什么叫做交叉编译?⭐⭐⭐

交叉编译是指在一个平台上生成能在另一个不同平台上运行的目标代码的编译过程。比如,在 PC 机(x86 架构)上安装交叉编译工具链,然后用它来编译适用于 ARM 架构嵌入式设备的程序。

在嵌入式开发等场景中,交叉编译非常重要。由于目标设备(如嵌入式芯片)的资源有限,往往无法直接在上面进行编译工作,所以需要在性能较强的主机上进行编译。通过交叉编译,开发者可以利用主机的计算资源,针对不同架构和操作系统的目标设备生成可执行代码,方便将软件部署到各种目标平台上,而无需在每个目标设备上都搭建完整的开发环境。

5 Linux平台下的可执行文件是什么格式?⭐⭐⭐

Linux 平台下常见的可执行文件格式主要是 ELF 格式,以下是具体介绍:

ELF(Executable and Linking Format):是 Linux 系统中最常用的可执行文件格式,可用于可执行程序、共享库和目标文件等。它具有良好的可移植性和扩展性,支持多种硬件平台和操作系统。ELF 文件包含了多个段,如代码段、数据段、符号表等,这些段记录了程序的指令、数据以及与链接和运行相关的信息,系统的加载器能够根据 ELF 文件的结构和信息,将程序正确地加载到内存中并运行。

此外,在 Linux 早期还存在 a.out 格式,但因其局限性已逐渐被 ELF 格式取代。

6 什么叫做反汇编?⭐⭐⭐⭐

反汇编是将机器语言程序转换为汇编语言程序的过程,与汇编过程相反。具体来说,就是把计算机可执行的二进制机器码,按照一定的规则和算法,转换为人类可读的汇编语言指令形式。

在软件逆向工程、程序调试、漏洞分析等场景中,反汇编技术应用广泛。通过反汇编,分析人员可以查看程序的汇编代码,了解程序的执行逻辑、算法实现,检查是否存在安全漏洞或恶意代码等。例如,在调试程序时,反汇编可以帮助开发人员查看机器码对应的汇编指令,更深入地理解程序的运行情况,找出程序出现问题的原因。

7 简述nfs服务的概念与作用?⭐⭐⭐

NFS(Network File System)即网络文件系统,是一种基于网络的文件共享服务,允许网络中的计算机之间通过网络协议共享和访问彼此的文件系统资源。

NFS 的作用主要体现在以下几个方面:

  • 资源共享:可使多台计算机共享同一组文件和数据,不同主机上的用户能像访问本地文件一样访问远程 NFS 服务器上的文件,提高了数据的共享性和利用率。
  • 便于管理:系统管理员能在 NFS 服务器上集中管理和维护共享文件,如进行文件的更新、备份等操作,而无需在每台客户端机器上分别进行,降低了管理成本和复杂度。
  • 增强灵活性:客户端可根据自身需求随时挂载或卸载 NFS 共享目录,方便灵活地使用服务器端的文件资源,有利于构建灵活的分布式计算环境。

8 简述一个装有linux内核的开发板的启动过程?⭐⭐⭐⭐⭐

装有 Linux 内核的开发板的启动过程一般可分为以下几个阶段:

上电复位阶

  • 开发板上电后,硬件电路会产生复位信号,使 CPU 进入复位状态,从预设的地址开始执行代码,通常这个地址对应的是启动 ROM 中的代码。

Bootloader 阶段

  • 启动 ROM 中的代码会首先加载 Bootloader 到内存中。Bootloader 是在操作系统内核运行之前运行的一段小程序,它的主要作用是初始化硬件设备、建立内存空间映射图,为加载内核做好准备

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式/C++面试八股文 文章被收录于专栏

该专栏面向嵌入式开发工程师、C++开发工程师,包括C语言、C++,操作系统,ARM架构、RTOS、Linux基础、Linux驱动、Linux系统移植、计算机网络、数据结构与算法、数电基础、模电基础、5篇面试题目、HR面试常见问题汇总和嵌入式面试简历模板等文章。超全的嵌入式软件工程师面试题目和高频知识点总结! 另外,专栏分为两个部分,大家可以各取所好,为了有更好的阅读体验,后面会持续更新!!!

全部评论

相关推荐

基本上都是在聊天,问各种思路,八股文不多。感觉时间过的很快,一下50分钟过去了。把一个基础问题说错了,不知道结果咋样了,再然后就是他是纯C++公司,大部分时间问我linux内核的东西1.你和照片长的不像 (我说商家P图的)2.自我介绍3.研究的什么方向,解释了很久,我的算法了啥的(我研究的是操作系统混合任务关键算法)4.有没有发论文,有没有啥成果(我说sci正在审稿,然后发了软著)5.对linux了解多少,对linux内核或者Linux系统哪里比较熟悉(我说内核驱动还有系统开发都比较熟悉,然后问更熟悉那个,我就说了现在是应用方面吧)6.问我linux内核驱动是怎么设计的(我说有3种方式,普通传统的软硬不分离一起写古老的版本,然后平台设备模型,还有设备树)7.你认为3种方式哪种好,(分别分析了优缺点,然后说最后一种好,也有可扩展性啥的)8.你觉得可扩展性是什么,怎么做到,你有什么优点9.设备树怎么就和软件匹配上了(我说了设备树本质就是个文本文件通过里面的属性匹配的,包括of_match_table啥的)10.又问设备树是怎么兼容那么多硬件平台的,写一个i2c设备驱动流程11.项目遇到了哪些问题,怎么解决的,怎么找到的,哪个项目学到的最多,为什么(我说的很详细,摄像头帧数不匹配啥的,排查是看手册,中间还考虑了av_compare_ts的函数api,查看了他们的返回值了,还试了修改缓冲区了啥的等等,最后就是查手册看到的那个参数,,,甚至还问怎么想到的看这个)12.场景题:假如客户端和服务器连接好着,过了几天突然服务器坏了,你觉得是哪里的问题怎么排查(我说了查看网络,查看日志,检测数据,管理软件,重启等方法)13.然后他就说假如日志看不懂,别的也没问题,我怎么还知道这个进程到底死没死(我就说了ps  top htop等命令可以看)14.然后接着问,假如我还想知道,这个进程他都有什么状态(我说了有运行态,停止态等,在PS命令里面的表现就是一个R T 等等大写字母表示)15.假如处于运行,怎么查看他在跑什么逻辑(我说这个我不是特别了解,就是一般也是通过命令查看,具体命令没记住)16.函数内部静态局部变量,和全局静态变量的区别17.如果他们都作为返回值会有什么问题,(然后我说了半天局部的会有问题,但是他好像没听懂以为我说的全局的,然后问我那局部的呢,我就又说了一遍局部的,因为作用域的问题可能函数调用完了就释放了,中间还扯了半天static的特点啥的,,但是算起来全局作为返回值应该是说错了,,)
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客企业服务