设为首页 收藏本站
查看: 553|回复: 0

[经验分享] Centos 源代码以及编译过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-5 08:12:48 | 显示全部楼层 |阅读模式
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/下
查看某个模块在那个路径下:

[iyunv@bogon 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

[iyunv@localhost 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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41955-1-1.html 上篇帖子: IPTABLS命令详解及使用 下篇帖子: linux设置文件最大打开数 源代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表