Centos 源代码以及编译过程

Centos的源代码

http://vault.centos.org//7.0.1406/os/Source/SPackages/

标准的Linux Kernel

https://www.kernel.org/

下载源代码:

wget http://vault.centos.org//7.0.1406/os/Source/SPackages/kernel-3.10.0-123.el7.src.rpm

解压:

rpm2cpio kernel-3.10.0-123.el7.src.rpm |cpio -div

默认在/usr/src放有一份kernel的头文件,这样在不需要下载整个内核源代码的情况下就可以编译自己编写的内核模块。

获取系统当前的config

cp /boot/config-3.10.0-123.el7.x86_64  .config  和make oldconfig生产的config一致

也可以make menuconfig来配置。

打补丁

patch -p1 < scst_exec_req_fifo-3.10.patch

编译&安装

make -j8;make modules; make modules_install;make install;

make modules_install 会把编译的ko放到/lib/modules/3.10.0-123.el7.x86_64/下

查看某个模块在那个路径下:

[[email protected] 2.6.32-358.18.1.el6.x86_64]# modinfo qla2xxx

filename:       /lib/modules/2.6.32-131.0.15.el6.x86_64/kernel/drivers/scsi/qla2xxx/qla2xxx.ko

将自己编译的ko放到/lib/modules/2.6.32-131.0.15.el6.x86_64/kernel/drivers/scsi/qla2xxx/qla2xxx.ko;

make install的output

[[email protected] linux-3.10.0-123.el7]# make install

sh /root/SCST/linux-3.10.0-123.el7/arch/x86/boot/install.sh 3.10.0 arch/x86/boot/bzImage \

System.map "/boot

/root/SCST/linux-3.10.0-123.el7/arch/x86/boot/install.sh 这个脚本做的事情很简单,把bzImage和System.map放到放到boot下。

安装内核的过程主要完成了以下的工作:

1.将编译内核时生成的内核镜像bzImage拷贝到/boot目录下,并将这个镜像命名为vmlinuz-3.0.4。如果使用x86的cpu,则该镜像位于arch/x86/boot/目录下(处于正在编译的内核源码下)。

2.将~/linux-3.0.4/目录下的System.map拷贝到/boot/目录下,重新命名为System.map-3.0.4。该文件中存放了内核的符号表。

3.将~/linux-3.0.4/目录下的.config拷贝到/boot/目录下,重新命名为config-3.0.4。

4. 安装内核modules到/lib/modules下

5.创建initrd.img

initrd.img即为初始化的ramdisk文件,它是一个镜像文件,将一些最基本的驱动程序和命令工具打包到镜像文件里。该镜像文件的作用是在系统还没有挂载根分区前,系统需要执行一些操作,比如挂载scsi驱动,此时将initrd文件释放到内存中,作为一个虚拟的根分区,然后执行相关脚本,运行insmod命令加载需要的模块。

mkinitramfs 3.0.4 -o /boot/initrd.img-3.0.4

6. 更新grub

update-grub2

关于GRUB

默认安装会更新grub

/etc/grub2.cfg -> ../boot/grub2/grub.cfg

至于启动那个linux镜像,由/etc/default/grub的GRUB_DEFAULT=saved来决定;

其意思是上一次使用的value;

修改内核默认启动项

grub2-set-default 0

注:默认新安装的内核是第0项

清理编译的配置和文件

# make clean     Delete most generated files  Leave enough to build external modules

# make mrproper  Delete the current configuration, and all generated files

# make distclean Remove editor backup files, patch leftover files and the like

启动之后查看大的patch是否成功,可以通过查看内核符号表来

cat /proc/kallsyms |grep blk_rq_map_kern_sg

编译一部分内核代码

make driver/usb/serial

make M=driver/usb/serial

make drivers/usb/serial/visor.ko

或者指定内核路径

make -C /home/user/rpmbuild/BUILD/kernel-3.10.0-123.el7/linux-3.10.0-123.el7.x86_64/ M=`pwd` modules

#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int __init hello_init(void){
    printk(KERN_ALERT "hello from hello world/n");
    return 0;
}
static void __exit hello_exit(void){
    printk(KERN_ALERT "goodbye from hello world/n");
}
module_init(hello_init);
module_exit(hello_exit);
--------------------------------------------------------
编写一个Makefile,内容如下:
-------------------Makefile-----------------------
obj-m:=hello.o
----------------------------------------------------
然后使用如下命令编译
$make -C $HOME/Software/linux-kernel-2.6.31 M=`pwd` modules

时间: 2024-12-18 02:48:24

Centos 源代码以及编译过程的相关文章

CentOS下的编译源代码安装软件( 以安装python3为例 )

在 CentOS 下安装软件,可以使用 rpm软件包.yum工具.自行下载源代码进行编译安装,其中编译安装的定制性较高 对于一些在软件,自行下载源代码进行编译安装较为方便 程序:源代码 --> 编译 --> 链接 --> 运行 执行编译安装步骤: 获取源代码并解压 #tar xf xxx.tar.gz //或者: #tar xf xxx.tar.bz2 在解压完的源代码目录下执行 configure 脚本 #./configure [options] 选项: --help 查看该脚本帮助

3DSlicer源代码编译过程vs2008+windows xp [转]

一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 开发环境开发,调试 QT 程序:2. 所需程序   VS2008以及VS2008Sp1                                  //  VS2008 的安装程序:   qt-everywhere-opensource-src-4.7.4.tar.gz          /

CentOS 6.5 编译安装 gcc-4.8.0(转)

CentOS 6.5 编译安装 gcc-4.8.0 1.首先下载源代码 wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2 2.解压 tar -jxvf  gcc-4.8.0.tar.bz2 3.下载编译所需的依赖项 cd gcc-4.8.0 ./contrib/download_prerequisites cd .. 4.建立编译输出目录 mkdir gcc-build-4.8.0 5.进入此目录,执行以下命令,生成makef

CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13

CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接服务器 二.配置防火墙,开启80端口.3306端口1    vi/etc/sysconfig/iptables #编辑防火墙配置文件1    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80

centos 6.3 编译安装 nginx +mysql + php

一篇文章是对另一篇文章的整理,作为记录收藏 1,配置防火墙,开启80端口.3306端口 配置iptables,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口

CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境

准备篇 一.防火墙配置 CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.安装iptables防火墙 yum install iptables-services #安装 vi /etc/sysconfig/iptables #编辑

2.4、uboot配置和编译过程详解

2.4.1.uboot主Makefile分析1 2.4.1.1.uboot version分析 (1)uboot版本号分为3个级别: VERSION:主版本号 PATCHLEVEL:次版本号 SUBLEVEL:再次版本号 EXTRAVERSION:另外附加的版本信息 这四个用.隔开共同构成了最终的版本号. (2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号 (3)include/version_autogenerated.h

FFmpeg在Linux下安装编译过程

转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下安装编译过程,用的是CentOS, 总体过程比较顺利,就是在ffmpeg等的时间稍长点.没什么技术难点.仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包

编译过程中,termcap.h 文件找不到路径 licli.a终于生成

编译过程中,termcap.h      文件找不到路径 查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termcap.h  发现一篇文章,如下 ----------------------------------------------------------------------------------------- 安装minicom2.3出现termcap.h错误解决方法 2010-05-06 17:12: