A. 什么是linux kernel有什么作用
Linux内核(英语:Linux kernel)是一种开源的类Unix操作系统宏内核。
工作于平板电脑、智能手机及智能手表的Android操作系统同样通过Linux内核提供的服务完成自身功能。
一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。
完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
整个Linux操作系统家族基于该内核部署在传统计算机平台(如个人计算机和服务器,以Linux发行版的形式)和各种嵌入式平台,如路由器、无线接入点、专用小交换机、机顶盒、FTA接收器、智能电视、数字视频录像机、网络附加存储(NAS)等。
工作于平板电脑、智能手机及智能手表的Android操作系统同样通过Linux内核提供的服务完成自身功能。尽管于桌面电脑的占用率较低,基于Linux的操作系统统治了几乎从移动设备到主机的其他全部领域。截至2017年11月,世界前500台最强的超级计算机全部使用Linux。
(1)linuxkernel分析扩展阅读:
编程语言
Linux是用C语言中的GCC版(这种C语言有对标准C进行扩展)写的,还有几个用汇编语言(用的是GCC的"AT&T风格")写的目标架构短段。因为要支持扩展的C语言,GCC在很长的时间里是唯一一个能正确编译Linux的编译器。
有许多其他的语言用在一些方面上,主要集中在内核构建过程中(这里指从源代码创建可引导镜像)。包括Perl、Python和多种脚本语言。有一些驱动可能是用C++、Fortran或其他语言写的,但是这样是强烈不建议的。
编译器兼容性
GCC是Linux内核源代码的缺省编译器。在2004年,Intel主张通过修改内核,以便Intel C++编译器能正确编译内核。在2009年,有通过修改内核2.6.22版而成功编译的报告(并带来平均8-9%性能增长)。
自从2010年,已经开始进行使用Clang建造Linux内核的努力,Clang是一个可作为替代的C语言编译器;截止2014年4月12日,官方内核几乎可以完全用Clang编译。致力于这个目标的计划叫做“LLVMLinux”,得名于Clang所基于的LLVM编译器下部构造。
LLVMLinux不意图复制Linux内核或LLVM,因此它是由最终提交给上游计划的补丁构成的一个元计划。使Linux内核可以用Clang编译最大的好处是比GCC有更快的编译速度,内核开发者可以得益于由此而来的更快的工作流程
B. 分析linux内核崩溃信息
分析kernel比较关键的就是看三点:
1) 内核会给出一个崩溃原因的猜测,这里是,CPU 0 Unable to handle kernel paging request at virtual address 00000000
2) 看pc指针的值,这里是epc == 00000000
3) 看调用栈Call Trace:[ //可惜后面没给出来
通常是根据指针加上偏移值跟反汇编代码对照,找到出问题的指令。
这个panic的原因比较明显,应该是引用了空指针,试图执行0x00000000出的代码。
C. Linux Kernel是什么
Linux kernel 译为linux 内核,其基础为linux平台,linux为C语言编写的内核,基于此内核又衍生出了具体的Red hat linux 、open suse linux等具体的操作系统,一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
对于linux kernel,先看它的目录结构,这里只挑几个重要的说明。
arch 包括所有和体系结构相关的核心代码。从里面我们能看到arm、alpha、i386、mips、ia64这些文件夹,每种处理器架构都有不一样的硬件模块,这里就是要针对不同的架构进行不同的初始化。
init包含内核的初始化代码(不是系统的引导代码),其中有一个main.c文件,用于执行内核所有的初始化工作(包括初始化内存、初始化所有硬件、创建第一个任务task0,设置中断允许标志位),然后移到用户模式调用fork()函数创建新进程,并在控制台运行shell。
kernel 包含内核管理的核心代码,瞅这名就知道,这货是个重量级目录,所有的处理任务的程序,包括fork、exit、调度程序(sched.c)以及一些系统调用(sys.c)、信号处理(signal.c)、时间函数(time.c),还有中断异常处理、电源管理等等一系列调用关系错综复杂的函数。
mm 包含所有的内存管理代码。其中包括实现进程的逻辑地址到实际物理地址的映射,实现分页、分段机制,实现内存页面异常中断处理程序等。
drivers包含系统中所有的设备驱动程序,比如什么cdrom啊bluetooth啊pci、i2c这些。
ipc 包含核心进程间的通信代码。
fs 存放Linux支持的文件系统代码,里面有ext2、ext3、ext4、fat、ntfs等等一堆目录。
net 内核的网络部分代码,其每个子目录对应于网络的一个方面,比如ieee80211、ipv4、ipv6这些目录。
lib 包含核心的库代码,什么strcpy、sprintf、sort这些函数都在里面。更多Linux知识可参考《Linux就该这么学》。