【1】-x86架构内核的配置和编译

来源:互联网 发布:jquery数组添加 编辑:程序博客网 时间:2024/06/03 21:00

X86-内核

查看内核版本:

1.uname -r

2.cat   /proc/version

系统架构:1.用户空间, 2.内核空间

将其分为两部分空间的原因:ARM系统中有多种使用模式,将 系统架构分为两个空间可以使操作系统得到充分的保护,使用户程序和内核程序在不同的空间上运行,互不干扰。

以串口中断为例

 


广义内核架构

 

SCI:实现系统调用函数的接口(open等)                                                                     

PM:进程管理(进程调度等)  

MM:内存管理                                                                                                     

ARCH:体系架构相关的代码(与CPU相关的代码)                                                      

VFS:虚拟文件管理系统(隐藏各种文件系统的具体细节为文件操作提供统一的接口)      

NS:网络协议栈                                                                                                        

DD:设备驱动(占绝大部分的内核代码,占内核代码的大约70%)

虚拟文件系统(VFS):

 

内核源代码

下载地址:www.kernel.org

管理方式:树状管理方式

内核源代码目录解析

arch:内核所支持的每种CPU体系,在该目录下都有对应的子目录

documentation:内核的文档

driver:设备驱动文档

include:内核所需要的头文件,与平台无关的头文件在include/linux子目录下

fs:存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现

net:存放网络协议的实现代码


Linux内核的配置与编译

1.如何配置内核

1.1为什么要配置内核?

答:因为内核源代码过于庞大,只有通过配置内核,选择所需要的功能才能使内核 变小;


make config:基于文本模式的交互式配置,配置过程中一问一答

make menuconfig:基于文本模式的菜单型配置,图像化界面

<*>【运行在内存中的内核】:A ->  A.c->A.o->ZImage/bzImage->内存

<M>【内核模块】:A ->A.c->A.o->文件夹【.ko文件】->需要时导入内存,不需要时从内存中删除

<>:不选择该功能

内核的配置文件作为隐藏文件保存着,需使用ls -a 来查看,在配置linux内核时可以load已有的内核配置文件,并在其基础上修改

2.如何编译内核

2.1编译内核<*>

a)make zImage (V = 1):在X86平台下,只能用于小于512KB的内核(查看详细的编译选项)

b)make bzImage (V = 1):(查看详细的编译选项)

c)编译好的文件存放在arch/<cpu>/boot目录下

2.2编译内核模块<M>

a)make modules:编译内核模块,编译完的模块散落在内核中的各个部分

b)make modules_install:将散落在内核中各个部分的模块放置到lib/modules中,方便之后的打包

2.3制作init ramdisk(将内核模块打包)

a)mkinitrd  initrd-$version(目标文件)  $version(源文件/夹)

3.安装内核

1.cp arch/x86<cpu>/boot/bzImage/    /boot/vmlinuz-$version

2.cp initrd-$version   /boot/

3.修改/etc/grub.conf(添加linux内核文件,修改linux内核的映像名称,修改内核模块包名称[initrd])

4.清理内核

1. make clean:清理内核源文件中的*.o

2. make distclean:清理内核源文件中*.o和配置文件.config

Tips:

1.修改了内核,其中的文件并不会改变,因为内核中核心的部分是运行在内存中的,修改内核不过是修改内存中的一段程序,并不会改变文件系统(用户空间)的内容。

2./boot/目录是linux启动时去读取的一个文件夹

 

遇到的问题:

1.在第一次更新完内核后重启,出现Error 13 Invalid or 。。。。,找不到问题出在哪里,重新编译完后,在按上述过程走一遍后,内核正常启动了。

 

 

 

 


1 1
原创粉丝点击