1. linux内核的文件都在哪儿
linux内核默认存放到/boot下,而/usr/src中可查看内核的信息。
几种linux内核文件的区别:
1、vmlinux 编译出来的最原始的内核文件,未压缩。
2、zImage 是vmlinux经过gzip压缩后的文件。
3、bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
4、uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag(64个字节,说明这个映像文件的类型、加载位置、生成时间、大小等信息)。其实就是一个自动跟手动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要自己手动去搞那些参数。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。
5、vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
6、initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续。
2. linux 下的u-boot 和 kernel里面的 mtd 目录有什么用
“MTD(memory
technology
device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。”
--摘自网络
很明显,就是用来存数据的
MTD
对应的驱动相关内容。
现在嵌入式设备,内置
NAND
存储器的操作一般都是用
MTD
模块实现。
3. 如何确定Linux内核源代码目录即,KBUILD的路径
方法一:
确定内核源代码目录通常==文件系统中内核驱动模块的build路径
即/lib/moles/2.6.25-14.fc9.i686/build,这个build通常为链接文件,连接到
/usr/src/kernels/2.6.25-14.fc9.i686
此方法较准确,通常可以写如下脚本实现:
# KBUILD is the path to the Linux kernel build tree. It is usually the
# same as the kernel source tree, except when the kernel was compiled in
# a separate directory.
KBUILD ?= $(shell readlink -f /lib/moles/$(KVERS)/build)
方法二:
自己下载内核源文件包,自己指定内核的编译目录!
不推荐这种做法,还是按照各大发行版的做法比较好!这样不至于在编译下载的某个设备驱动程序时
4. 深入理解LINUX内核的目录
前言
第一章绪论
Linux与其他类Unix内核的比较
硬件的依赖性
Linux版本
操作系统基本概念
Unix文件系统概述
Unix内核概述
第二章内存寻址
内存地址
硬件中的分段
Linux中的分段
硬件中的分页
Linux中的分页
第三章进程
进程、轻量级进程和线程
进程描述符
进程切换
创建进程
撤消进程
第四章中断和异常
中断信号的作用
中断和异常
中断和异常处理程序的嵌套执行
初始化中断描述符表
异常处理
中断处理
软中断及tasklet
工作队列
从中断和异常返回
第五章内核同步
内核如何为不同的请求提供服务
同步原语
对内核数据结构的同步访问
避免竞争条件的实例
第六章定时测量
时钟和定时器电路
Linux计时体系结构
更新时间和日期
更新系统统计数
软定时器和延迟函数
与定时测量相关的系统调用
第七章进程调度
调度策略
调度算法
调度程序所使用的数据结构
调度程序所使用的函数
多处理器系统中运行队列的平衡
与调度相关的系统调用
第八章内存管理
页框管理
内存区管理
非连续内存区管理
第九章进程地址空间
进程的地址空间
内存描述符
线性区
缺页异常处理程序
创建和删除进程的地址空间
堆的管理
第十章系统调用
POSIXAPI和系统调用
系统调用处理程序及服务例程
进入和退出系统调用
参数传递
内核封装例程
第十一章信号
信号的作用
产生信号
传递信号
与信号处理相关的系统调用
第十二章虚拟文件系统
虚拟文件系统(VFS)的作用
VFS的数据结构
文件系统类型
文件系统处理
路径名查找
VFS系统调用的实现
文件加锁
第十三章I/O体系结构和设备驱动程序
I/O体系结构
设备驱动程序模型
设备文件
设备驱动程序
字符设备驱动程序
第十四章块设备驱动程序
块设备的处理
通用块层
I/O调度程序
块设备驱动程序
打开块设备文件
第十五章页高速缓存
页高速缓存
把块存放在页高速缓存中
把脏页写入磁盘
sync()、fsync()和fdatasync()系统调用
第十六章访问文件
读写文件
内存映射
直接I/O传送
异步I/O
第十七章回收页框
页框回收算法
反向映射
PFRA实现
交换
第十八章Ext2和Ext3文件系统
Ext2的一般特征
Ext2磁盘数据结构
Ext2的内存数据结构
创建Ext2文件系统
Ext2的方法
管理Ext2磁盘空间
Ext3文件系统
第十九章进程通信
管道
FIFO
SystemVIPC
POSIX消息队列
第二十章程序的执行
可执行文件
可执行格式
执行域
exec函数
附录一系统启动
附录二模块
参考文献
源代码索引
……
5. linux 下的内核头文件放在哪里
linux下的内核头文件放在/usr/include/linux/和/usr/include/sys/
linux目录树:
scripts目录
该目录中不包含任何核心代码,该目录下存放了用来配置内核的脚本和应用程序源码。
lib目录
该目录主要包含两部分内容:gnuzip解压缩算法,用于在系统启动过程中将压缩的内核镜像解压缩;剩余的文件用于实现一个C库的子集,主要包括字符串和内存操作等相关函数。
mm目录
该目录包含了体系结构无关的内存管理代码,包括通用的分页模型的框架、伙伴算法的实现和对象缓冲器slab的实现代码。
include目录
这个目录包含了Linux源代码目录树中绝大部分头文件,每个体系架构都在该目录下对应一个子目录,该子目录中包含了给定体系结构所必需的宏定义和内联函数。
init目录
该目录中存放的是系统核心初始化代码,内核初始化入口函数start_kernel就是在该目录中的文件main.c内实现的。
kernel目录
该目录中存放的是Linux内核的最核心的代码,用于实现系统的核心模块,这些模块包括:进程管理、进程调度器、中断处理、系统时钟管理、同步机制等。
arch目录
该目录中的每个子目录中都与某种体系结构相对应,用于存放体系结构相关代码,向平台无关的系统核心模块提供所需的功能接口。每个体系结构对应的子目录下通常至少包含以下几个子目录:kernel子目录、lib子目录、mm子目录、boot子目录。
系统次核心组件包括:
block目录:用于实现块设备的基本框架和块设备的I/O调度算法。
usr目录:该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持
ipc目录:该目录中的文件用于实现System V的进程间通信模块。
driver目录:用于存放各类设备的驱动程序。
sound目录:存放了声音系统架构,如Open Sound System(OSS)、Advanced Linux Sound Architecture(ALSA)的相关代码和具体声卡的设备驱动程序。
security目录:存放了Security-Enhanced Linux(SELinux)安全框架的实现代码
crypto目录:该目录中存放了相关的加密算法的代码。
Documentation目录:存放了与内核相关的文档。
net和fs目录:包含linux内核支持的众多网络协议和文件系统。
6. 怎样进入linux内核文件目录
1、先是输入账号密码进入centos7。
7. 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就该这么学》。
8. linux内核主目录kernel是/home吗
不是的。
/home:是用户家目录。
kernel是内核,内核文件在/boot目录下,一般以vmlinuz开头,vm表示内核支持虚拟内存,z表示image zip是压缩的内核 ,本身里面带有gzip的代码,运行的时候会自行解压的。
9. 一个linux系统里面能有多个kernel吗如果可以应该怎么添加呢
能有多个 kernel 但这是启动系统的东西,只能用一个。
内核在 /boot 里面,vmlinuz 那些个就是,其他的文件都是辅助用的。其中还有用的是 initrd ,这东西是随内核一起被引导器——现在基本就是 GRUB ——一起读取到内存中,内核启动后会读取这里的文件,并且把它作为临时的根文件系统,之后再过渡启动到硬盘。不过 initrd 不是必须存在的,他因为在启动内核时一同读取到内存,所以他的硬件限制很少,可以作为提供驱动的数据文件,也可以实现一些挂载你的硬盘跟分区前的检测工作。
/lib/moles/ 里面都是按内核版本号分别保存的其他内核需要和提供的文件,主要是内核模块。以及针对这个内核的开发需要的相应文件(不光是头文件,虽然开发主要是需要 C Header)。
模块目录具体结构请看一些专业的介绍资料吧。
题外:/usr/src 里面一般存放内核的源代码,如果是自己编译的内核,或者某些特殊情况的内核。这里也会放一些东西。/lib/moles 里面的内核其他数据目录里面会有一些内容连接到这里的。这个规划具体看发行版的设计。不过一般大家的习惯是这里必然有内核源代码,所以很多驱动程序和内核有关的一些应用程序,都会直接来这里找开发数据。所以现在大部分系统偏向于这里保存一些内容。