Kernel--试题

Posted Felizño

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kernel--试题相关的知识,希望对你有一定的参考价值。

1. 内核堆栈区别:

    1.栈自动分配回收,函数里面声明的变量;2.堆:malloc kmalloc申请的空间,需要自己释放

https://blog.csdn.net/tainjau/article/details/79430905

https://www.cnblogs.com/alantu2018/p/8994603.html

https://blog.csdn.net/yaowangII/article/details/79851968

https://blog.csdn.net/thisway_diy/article/details/80857621

2. https://blog.csdn.net/lee244868149/article/details/80635411

http://www.wowotech.net/irq_subsystem/soft-irq.html

3. kernel 如何访问外围设备寄存器

http://blog.chinaunix.net/uid-25017441-id-3080023.html

ioremap (MMU打开后)iowrite32(uint32 val, void*addr)

*(volatile unsigned char*)address  //

4. 写一个驱动:https://blog.csdn.net/hanp_linux/article/details/90474432

https://blog.csdn.net/qwaszx523/article/details/65635071

5. workque(可睡眠,可调度) tasklet https://www.cnblogs.com/bbsno1/p/3280004.html 

6.中断上文:ARM CPU会自动保存CPSR 到SPSR, 改变CPU模式到IRQ,保存返回地址到LR_IRQ, PC设成异常向量表对应的函数(irq_handle)

   中断下文:SPSR->CPSR, LR_IRQ->LR, ARM 切回模式

   https://blog.csdn.net/m0_37884601/article/details/81583551

   进程上下文:所谓的“进程上下文”,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 

     一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

    (1)用户级上下文: 正文、数据、用户堆栈以及共享存储区;
    (2)寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
    (3)系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。
       当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。

      各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等

      其中处理器总处于以下状态中的一种: 

      内核态,运行于进程上下文,内核代表进程运行于内核空间;

      内核态,运行于中断上下文,内核代表硬件运行于内核空间;

      用户态,运行于用户空间。

      英文解释: http://blog.itpub.net/31561984/viewspace-2220145/

      https://www.cnblogs.com/Anker/p/3269106.html

      https://blog.csdn.net/qq_38500662/article/details/80598486

7. spin lock:这是一个内核态概念。spin lock与semaphore的主要区别是spin lock是busy waiting,而semaphore是sleep。 http://blog.sina.com.cn/s/blog_8af6bbd10100xalu.html

   https://www.cnblogs.com/tureno/articles/6067441.html***

    mutex可以睡眠、调度

8. ARM 睡眠、唤醒的cpu实现http://blog.sina.com.cn/s/blog_5d1f66570102x2b6.html

   http://www.wowotech.net/linux_kenrel/suspend_and_resume.html

9. Kernel 下的检测工具: 

1. protex代码release前检查, coverity
2. findbugs gerrit提交检查(Hudson-build/kernel/scripts/checkpatch.pl/autoconfig.pl/copyright_claim/commit message/ DMS tag check),cpplint(google的) 
3. scripts dtc(Device tree生成文件的解析)工具 

10. 

内核抢占API函数
在中断或临界区代码中,线程需要关闭内核抢占,因此,互斥机制(如:自旋锁(spinlock)、RCU等)、中断代码、链表数据遍历等需要关闭内 核抢占,临界代码运行完时,需要开启内核抢占。关闭/开启内核抢占需要使用内核抢占API函数preempt_disable和 preempt_enable。
内核抢占API函数说明如下(在include/linux/preempt.h中):
preempt_enable() //内核抢占计数preempt_count减1
preempt_disable() //内核抢占计数preempt_count加1

11. 内核在线源码:https://code.woboq.org/linux/linux/include/linux/spinlock_api_smp.h.html#__raw_spin_lock_irqsave

  spin_lock_irqsave->local_irq_save(关中断 保存中断到flags)

http://ishare.iask.sina.com.cn/f/bsYIWltJK13.html

https://www.cnblogs.com/sky-heaven/p/5746730.html

https://blog.csdn.net/changexhao/article/details/78287730

12. Bringup

defconfig: copy of msm8974-perf_defconfig
gpiomux  : copy of board-8974-gpiomux.c
dts      : copy of msm8974pro-ac-pm8941-mtp.dts

高通dsi display驱动:

https://cloud.tencent.com/developer/article/1149260
MDSS : 高通平台lcd multimedia Display sub system
DSI: Display Serial Interface

13. container_of

#ifndef offsetof
#define offsetof(type, md) ((unsigned long)&((type *)0)->md)
#endif

#ifndef container_of
#define container_of(ptr, type, member) \\
  ((type *)((char *)(ptr) - offsetof(type, member)))
#endif

14. bit revert

0110 1100 
0011 0110

unsigned char revertBit(unsigned char a){
    unsigned char ret=0;
    int i=0;
    while(i<8){
        ret = ret<<1;
        ret |= (a&0x1);
        a = a>>1;
        i++;
    }
    
    return ret;
}

//
// vector< vector<int> > b(10, vector<int>(5, 0)) ; //创建一个10*5的int型二维向量
int main()(
    cout<<"xxxx"<<endl;
}
//按bit位反转unsigned int(32)
unsigned int revertUnsignedint(unsigned int val){
  unsigned int ret=0;
   for(int i=0; i<32; i++){
    ret = ret<<1;
    ret |= val&0x1;
    val = val>>1;
  }
  return ret;
}

 

  

  

 

以上是关于Kernel--试题的主要内容,如果未能解决你的问题,请参考以下文章

Kernel--试题

"arch/arm/kernel/head.S"里面一点片段的理解

C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段

前端试题-小试牛刀

86/88汇编代码的执行调试

华为OD机试 - 单词反转(JavaScript) | 机试题算法思路 2023