Linux嵌入式方向的常见面试题

1、简述Linux内核的启动流程

    Linux内核的启动流程,包含引导过程、内核初始化这2个步骤。

  • 1)引导过程:系统上电,CPU自身初始化;然后是BIOS加电自检,加载内核引导程序,内核引导程序加载已经压缩的内核,再对压缩内核进行解压;
  • 2)内核初始化:调用start_kernel()完成大部分的初始化工作,调用reset_init()启动内核线程,调用kernel_init()完成设备驱动程序的初始化,调用init_post()来启动用户空间的init进程。

2、libudev的使用场景

    libudev是一种函数库,专门用来在Linux上做设备管理的。主要管理/dev目录下的设备节点,同时,也接替devfs、hotplug热插拔的功能,处理添加硬件、删除硬件、加载firmware,以及相关用户空间的行为。
    libudev是udev是一种开源实现库,它能根据系统中硬件设备的状态来动态的更新设备文件,包括设备文件的创建、删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就直包含系统中真正存在的设备。udev同时提供了监视接口,当设备的状态发生改变时,监视接口可以发送对应的事件给应用程序。比如,设备插上,会发送add事件;设备拔除,会发送remove事件。

3、对一个整数,进行因式分解

    使用C语言,对一个整数,进行因式分解,比如,24=2*2*2*3。

int Factor(int num)
{
    for (int i = 2; i < num; i++)
    {
        while( num != i) {
            if(num % i == 0) {
                printf("%d * ",i);
                num = num/i;
            }
            else {
                break;                        
            }
        }
    }
    printf("%d\n",num);
    return num;
}

4、不用中间变量交换整数a和b

a = a+b;
b = a-b;
a = a-b;

5、用条件表达式,判断整数num是否为2的整数幂

((num & (num-1))==0)?true:false; 

6、数字0x6F的第3位设置为1

int num = 0x6F | (0x1<<2);

//扩展,由于索引从0开始,
//将第n位置1,则bit=n-1,范围是[0,n-1]
void SetBit(int& num, int bit)
{
	num |= (0x1<<bit);
}

7、数字0x6F的第3位设置为0

int num = 0x6F & (~(0x1<<2));

//扩展
//将第n位置0,bit=n-1, [b7,b6,b5,b4,b3,b2,b1,b0]
void ClsBit(int& num, int bit)
{
	num &= ~(0x1<<bit);
}

8、运算符new、delete的重载

    在C++中new、delete分别是创建对象、释放对象的运算符。

  • new主要做三件事:初始化对象、分配空间、返回指针;
  • delete主要是删除对象或者指针,释放内存;
#include <iostream>
using namespace std;

class Object{
public:
    //重载new运算符
    void* operator new(std::size_t size)
    {
        return std::malloc(size);
    }

    //重载delete运算符
    void operator delete(void* ptr)
    {
        std::free(ptr);
    }
};

int main(){
    Object* obj = new Object;
    cout<<sizeof(obj)<<endl;
    delete obj;
    return 0;
}
Linux嵌入式工程师的面试中,可能会涉及以下几个方面的问题: 1. Linux操作系统和驱动开发:面试官可能会问一些关于Linux操作系统的基本知识和驱动开发的问题。这些问题可能涉及Linux内核的组成部分、进程管理、内存管理、文件系统等方面的内容。 2. C语言编程:作为嵌入式工程师,熟练的C语言编程是必要的。面试官可能会问一些关于C语言的基本语法、指针、内存管理等方面的问题。 3. 数据结构和算法:对于嵌入式工程师来说,对于数据结构和算法的理解也是很重要的。面试官可能会问一些关于数据结构(如链表、栈、队列)和算法(如排序、查找)的问题,以评估候选人的编程能力和解决问题的能力。 4. 嵌入式系统开发:面试官可能会问一些关于嵌入式系统开发的问题,包括与硬件交互、中断处理、实时操作系统(RTOS)等方面的内容。 5. volatile关键字:volatile关键字在嵌入式开发中经常使用,用于告诉编译器某个变量的值可能会在意料之外的时候被修改。面试官可能会问一些关于volatile关键字的问题,如参数可以是const和volatile吗,指针可以是volatile吗等。 请注意,以上只是一些可能出现的面试题示例,具体的面试题目可能因公司和职位的不同而有所差异。建议您在准备面试时充分掌握Linux操作系统、C语言编程、数据结构和算法等基本知识,并对嵌入式系统开发有一定的了解。此外,保持积极的态度和良好的沟通能力也是成功面试的重要因素。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sanqima

一键三连,多多益善

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

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

打赏作者

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

抵扣说明:

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

余额充值