天天看点

linux-内核-内核基础/内核源码/内核配置和编译

大纲:

1.linux系统构成

2.linux系统划分

3.内核空间和用户空间交互

4.linux内核构成

5.linux内核源码下载和安装步骤

6.linux内核目录结构

7.linux内核编译和配置

一.Linux系统如何构成的?

linux-内核-内核基础/内核源码/内核配置和编译

二.为什么linux系统会被划分成用户空间和内核空间?

为了提高安全性

ARM实现了7种模式:

用户模式(usr),快速中断(fiq),外部中断(irq),管理模式(svc)

数据访问终止(abt),系统模式(sys),未定义指令异常(und)

x86实现了4个级别:ring0-ring3

ring0:可执行特权指令可访问IO口,ring3则有很多限制

三.内核空间和用户空间怎么切换

通过系统调用和硬件中断可以从用户空间转移到内核空间

四.linux内核如何构成?

system call interface(SCI)系统调用接口(提供一套标准的系统调用函数来访问linux内核)

process management(PM)进程管理(创建进程,进程调度,停止进程,进程通信…)

virtual File system(VFS)虚拟文件系统,隐藏各种文件系统具体细节,为操作文件提供统一接口

memory management(MM)内存管理(虚拟地址和位地址转换,内存分配,内存回收…)

arch体系结构相关的代码(与CPU相关)

device driver驱动程序

network stack网络栈(支持网络协议多)

linux-内核-内核基础/内核源码/内核配置和编译

五.linux内核源代码下载地址www.kernel.org

1.下载路径

1).官方下载https://www.kernel.org/pub/linux/kernel/

2).最好使用pcb开发商提供的内核源码

这里我选择的是第二种方式

2.从本地pc传入linux服务器,利用ssh服务,前面有介绍过,这里就不赘述啦

3.解压tar -jxvf linux-imx-emmc-160721.tar.bz2

linux-内核-内核基础/内核源码/内核配置和编译

六.linux目录结构

linux-内核-内核基础/内核源码/内核配置和编译

1)arch 内核所支持的每种cpu体系,在该目录下都有对用的子目录,每个cpu的子目录又进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,

内存管理,系统调用等

2)block部分块设备驱动程序

3)crypto加密压缩,crc校验算法

4)documentation内核文档

5)drivers设备驱动程序

6)fs存放各种文件系统

7)include内核所需头文件

8)lib库代码

9)mm内存管理和体系结构无关

10)net 网络协议的实现代码

11)Samples一些内核编程范例

12)script内核配置的脚本

13)security Selinux的模块

14)sound音频设备驱动程序

15)usr cpio命令实现

16)virt 内核虚拟机

七.linux内核配置和编译(linux内核具有可定制的优点)

1.清除临时文件,中间文件和配置文件

1)make clean

remove most generated file but keep the config

2)make mrproper

remove all generated file +configfiles

3)make distclean

mrproper+remove deitor backup and patch file

例:将内核源码linux-imx.tar.bz2拷贝到/home/imx6目录下

解压#tar -jxvf linux-imx.tar.bz2

进入内核源码目录#cd linux-imx_share

进行清除操作#make…

2.确定目标系统的硬件配置情况,比如cpu类型,网卡型号,所支持的网络协议等

3.使用如下命令之一配置内核

1)make config基于文本模式的交互配置

2)make menuconfig基于文本模式的菜单型配置(菜单在script目录下产生)

3)make oldconfig使用已有配置文件(.config)但是会询问新增加的配置项

4)make xconfig:图形化的配置(必须图形化系统)

4.内核编译步骤

1)make zImage X86上,只能用于小于512k内核

2)make bzImage

如果需要获取详细信息

make zImage/bzmage V=1

编译好的内核位于arch/<cpu>/boot下
           

例:

将内核源码拷贝到linux-imx.tar.bz2拷贝到/home/imx6目录下

解压#tar -jxvf linux-imx.tar.bz2

进入内核源码目录#cd linux-imx_share

内核配置#make ARCH=arm menuconfig

内核编译#./build.sh生成的zimage就是做需要的镜像文件

5.编译内核模块

make modules

6.安装内核模块

make modules_install将编译好的内核模块从内核源代码目录下copy到/lib/modules下

7.制作init ramdisk

mkinitrd initrd - version version($version可以通过查询/lib/modules下目录得到)

继续阅读