OPPO面经

题目与答案

  1. 怎么构造根文件系统

根文件系统是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行
根文件系统中包含了一些子目录和文件,这些都是Linux所需要的,比如:

  • /bin是可执行文件,此目录下放着系统需要的可执行文件,比如ls、mv等命令,此目录下所有客户都可以使用
  • /dev下所有的文件与设备有关,此目录下的文件都是设备文件,也是与内核驱动相关程序很高的目录
  • /etc下存放各种配置文件
  • /lib下存放着Linux所必须的库文件,这些库文件是共享库,命令和用户编写的应用程序要使用这些库文件
  • /mnt是临时挂载目录,可以在此目录下创建空的子目录用于挂载其他设备如SD卡,U盘等
  • /usr是Unix操作系统软件资源目录
  • /var存放一些可以改变的数据
  • /sbin目录存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,主要用户系统管理
  • /sys目录用作系统启动后sysfs文件系统的挂载点,sysfs是一个类似于proc文件系统的特殊文件系统,sysfs也是基于ram的文件系统,也就是说它没有实际的存储设备。此目录是系统设备管理的重要目录
  • /opt 是可选文件,软件存放区

根文件系统就是由以上一堆的可执行文件和其他文件组成,构建根文件系统的话可以下载下来打包,也可以使用如busybox这样的第三方工具来进行构建
下载好busybox后用交叉编译器进行编译,然后存放如指定的目录(如新建一个rootfs文件夹)下,编译好后就会有/bin、/sbin、/usr目录以及linuxrc文件(作为用户空间init程序)
然后需要新建/lib并向其中添加库文件,库文件来自交叉编译链(*so*和*.a两类文件)。
/usr下的/lib文件夹也需要库文件,同样来自于交叉编译链
然后新建文件夹,补完/dev,/proc、/mnt、/sys、/tmp、/root等
最后将uboot中设置bootargs环境变量设置root的值,即使用NFS挂载。


  1. Linux操作系统有哪些文件系统,它们是怎么分类的

传统文件系统:

  • Ext2/Ext3/Ext4:Ext文件系统是Linux最常见的文件系统之一,能够在系统异常的情况下避免文件系统资料丢失,并且能够修复数据的不一致以及错误。
  • XFS: 高性能的日志文件系统,使用于大容量存储和高并发访问
  • JFS: 高性能和稳定

特殊用途文件系统:

  • sysfs: 虚拟文件系统,用于提供系统设备和驱动信息的访问接口,通常挂载在/sys下
  • procfs: procfs是一种虚拟文件系统,用于提供系统内核和进程信息的访问接口,通常挂载到/proc目录下
  • tmpfs: 基于内存的临时文件系统,用于存储临时数据和文件,挂载/tmp下

网络文件系统:

  • NFS: NFS是允许主机通过网络访问共享文件系统的协议和文件系统

加密文件系统:

  • eCryptfs: eCryptfs 是一种加密文件系统,可以提供文件级别的加密保护,用于保护敏感数据

闪存文件系统:

  • F2FS: 专门针对闪存存储介质(SSD、eMMC)设计的文件系统,具有优化的写入算法和垃圾回收机制

  1. Linux操作系统在设备树之前是怎么管理设备的

在没有引入设备树之前,每一个具体的硬件平台都会在linux源码包的arch/arm/mach-xxx/目录下存在一个硬件信息描述的源码包,其中定义了GPIO、I2C等外设和系统信息。这些信息页定义为.h、.c文件,内容多为描述设备信息的结构体,同驱动源码一起编译。因此没有设备树的情况下,随着硬件平台的不断产生,linux驱动代码中会增加越来越多的板级描述文件。


  1. 虚拟内存的意义,以及页表管理的流程

意义:

  1. 更大的地址空间:虚拟内存为每个进程提供了一个连续的地址空间,使得每个进程可以拥有比实际物理内存更大的地址空间。这样,每个进程都可以使用比物理内存更大的内存空间,从而支持更大的程序和数据
  2. 内存保护:虚拟内存通过地址映射和权限控制,可以对内存进行保护,防止进程访问未授权的内存区域。例如:操作系统可以将某些内存区域标记为只读或不可访问,以防止进程误写或越界访问内存
  3. 内存共享:虚拟内存允许多个进程共享同一个物理内存页面,从而节省内存空间并提高系统的效率。当多个进程共享相同的代码或数据时,可以将它们映射到同一个物理内存页面,而不是复制多份副本
  4. 内存管理:虚拟内存通过页表管理物理内存的映射,使得操作系统可以更加灵活地管理内存资源。操作系统可以根据需要将内存页面从物理内存中换出到磁盘中,以释放内存空间;当进程需要访问被换出的内存页面时,操作系统可以将其从磁盘中换入到物理内存中。(没懂)

页表管理流程:

  1. 地址转换:当进程访问虚拟地址时,CPU会将虚拟地址发送到内存管理单元(MMU)进行地址转换。MMU根据页表将虚拟地址转换为物理地址。
  2. 页表查询:MMU根据虚拟地址的页表索引查找对应的页表项。页表项包含了虚拟地址与物理地址的映射关系,以及权限位等信息。
  3. 地址映射:如果找到了虚拟地址对应的页表项,MMU将根据页表项中的物理地址字段将虚拟地址映射到物理地址
  4. 权限检查:MMU还会检查页表项中的权限位,确保进程有权访问该内存页面。如果进程试图访问未授权的内存页面。MMU将引发页面错误异常
  5. 页面错误处理:如果发生页面错误,操作系统会介入并处理页面错误。操作系统根据页表中的信息确定错误的原因,并采取相应的措施,如将页面从磁盘中换入到物理内存中。

  1. 怎么判断使用三级页表还是四级页表,它们的区别是什么

在 x86 架构的 Linux 系统中,页表用于将虚拟地址映射到物理地址。x86架构最初采用的是两级页表(二级页表),后来引入了三级页表和四级页表以支持更大的虚拟地址空间。

判断:

  • 32位的x86架构系统使用三级页表,支持的最大虚拟地址空间为4GB
  • 64位的x86架构系统使用四级页表,支持的最大虚拟地址空间为64TB

区别:

  • 层级数目不同: 三级页表包含三级结构,四级页表包含四级结构
  • 页表项大小不同:三级页表中每个页表项的大小为4字节,而司机页表中每个页表项的大小为8字节;
  • 支持的虚拟地址空间不同:四级页表支持更大的虚拟地址空间,64位系统的四级页表可以支持高达64TB的虚拟地址空间
  • 页表遍历的次数不同:三级页表需要三次页表遍历才能完成虚拟地址到物理地址的映射,而四级页表需要四次页表遍历

  1. Linux是怎么启动的,为什么uboot地址要放在芯片cache里而不是内存里

Linux启动过程

  1. 硬件初始化:在系统上电或复位时,CPU会执行预定义的启动代码,启动代码会进行一系列的硬件初始化工作,包括CPU寄存器、初始化内存控制器、配置外设等。
  2. Bootloader加载:初始化完成后,CPU会跳转到bootloader的入口点开始执行。bootloader是一个特殊程序,其主要任务是加载Linux内核映像和设备树文件到内存中,并启动内核。
  3. 内核启动:bootloader加载完毕后,控制权转交给Linux内核,内核开始执行初始化过程,包括解压内核映像、初始化设备、简历内存管理、挂载根文件系统等。
  4. 用户空间启动:内核初始化完成后,会启动用户空间进程,包括init进程,init进程是用户空间的第一个进程,负责初始化系统环境、启动其他用户空间服务和进程。

为什么Bootloader地址要放在芯片的cache中,主要涉及启动速度和系统性能

  1. 启动速度:芯片的缓存比内存访问速度更快,将bootloader放在缓存中可以加快启动速度。在系统上电或复位时,CPU会首先执行缓存中的代码,因此将bootloader放在缓存中可以更快地加载并执行
  2. 系统性能:bootloader的初始化是系统启动过程中的一个关键步骤,对系统性能有较大的影响。通过将bootloader放在缓存中,可以减少对内存带宽的占用,从而提高系统整体的性能。

  1. dtb文件是如何加载进内核的

设备树dtb文件通过bootloader传递给内核,内核启动时会加载并解析dtb文件以配置设备

  1. bootloader加载dtb文件:在启动过程中,bootloader会读取存储在设备中的dtb文件,并将其加载到内存的某个特地位置;
  2. 内核启动时解析dtb文件:当bootloader加载dtb文件后,会将dtb文件的地址传递给内核。内核在启动过程中会从bootloader接收到dtb文件的地址,并在启动时解析该文件;
  3. 设备树解析:内核启动时会解析dtb文件,将其中的设备信息、设备树节点、设备属性等数据结构转换成内核数据结构。这些数据结构包含了系统中所有设备的描述信息,包括设备类型、地址、中断号、驱动程序等;
  4. 设备树的匹配和加载:解析完成后,内核会根据设备树中的描述信息匹配已知的设备驱动程序,并将相应的驱动程序加载到内核中。这样,内核就可以正确地配置和管理系统中的各种硬件设备了。

参考资料

[1] 【正点原子】I.MX6U嵌入式Linux驱区动开发指南 第三十八章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值