一、一般src.rpm包的安装

有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。

src.rpm包=源代码 + specs文件

#specs文件是将源码制作成二进制格式的步骤文件

这类软件包有两种安装方法:

方法一:

1)创建mockbuild普通用户

2)切换至mockbuild用户,而后安装src.rpm包   #会在mockbuild家目录下创建一个rpmbuild目录

rpm -ivh NAME-VERSION.SRC.RPM[root@Note3 ~]# ls rpmbuild/

SOURCES  SPECS

[root@Note3 ~]# cd rpmbuild/

[root@Note3 rpmbuild]# ls SOURCES/

404.html      nginx-1.0.15.tar.gz      nginx-logo.png   ssl.conf

50x.html      nginx-auto-cc-gcc.patch  nginx.logrotate  virtual.conf

default.conf  nginx.conf               nginx.sysconfig

index.html    nginx.init               poweredby.png

[root@Note3 rpmbuild]# ls SPECS/

nginx.spec

3)rpmbuild -bb|-ba ~/rpmbuild/SPECS/PACKAGE_NAME.spec

-ba  编译后做成.rpm和src.rpm(又还原成刚下载的NAME-VERSION.SRC.RPM包格式)-bb  编译后做成.rpm

-bp  只执行spec的%pre 段(解开源码包并打补丁,即只做准备)[root@Note3 rpmbuild]# ls

BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

SOURCES:存放了该包的源码包(压缩格式)[root@Note3 rpmbuild]# ls SOURCES/

404.html      nginx-1.0.15.tar.gz      nginx-logo.png   ssl.conf

50x.html      nginx-auto-cc-gcc.patch  nginx.logrotate  virtual.conf

default.conf  nginx.conf               nginx.sysconfig

index.html    nginx.init               poweredby.png

BUILD:源码包解压后的目录[root@Note3 rpmbuild]# ls BUILD/nginx-1.0.15

auto     CHANGES.ru  configure  html     man     src

CHANGES  conf        contrib    LICENSE  README

RPMS:为生成的.rpm包[root@Note3 rpmbuild]# ls RPMS/x86_64/

nginx-1.0.15-5.el6.x86_64.rpm  nginx-debuginfo-1.0.15-5.el6.x86_64.rpm

SPECS:存放SPECS文件的目录[root@Note3 rpmbuild]# ls SPECS/

nginx.spec

SRPMS:将源码包制作成.src.rpm[root@Note3 rpmbuild]# ls SRPMS/

nginx-1.0.15-5.el6.src.rpm

4)制作完成的rpm包位于:~/rpmbuild/RPMS

方法二:

1)创建mockbuild普通用户,别切换至mockbuild   #不切换也可以,在家目录下生成rpmbuild目录

2)rpm -i your-package.src.rpm

3)rpmbuild -bp your-package.specs

-bp  #只执行spec的%pre 段(解开源码包并打补丁,即只做准备)

4)cd ~/rpmbuild/BUILD/your-package/

5)./configure        #这一步和编译普通的源码软件一样,可以加上参数

6)make

7)make install

二、编译内核

.src.rpm包安装一下就变成.tar.gz的源码包了

可能需要的模块很多,红帽或者centos提供的内核版本更通用(适用的硬件多)

1、获取并解压至/usr/src[root@Note3 ~]# ls /usr/src

debug  kernels

[root@Note3 ~]# tar xf linux-3.16.1.tar.xz -C /usr/src

[root@Note3 ~]# cd /usr/src

[root@Note3 src]# ls

debug  kernels  linux-3.16.1

[root@Note3 src]# ln -sv linux-3.16.1/ linux    #创建一个链接,方便使用

"linux" -> "linux-3.16.1/"

[root@Note3 src]# ls

debug  kernels  linux  linux-3.16.1

[root@Note3 src]# cd linux

[root@Note3 linux]# ls

arch     Documentation  init     lib          README          sound

block    drivers        ipc      MAINTAINERS  REPORTING-BUGS  tools

COPYING  firmware       Kbuild   Makefile     samples         usr

CREDITS  fs             Kconfig  mm           scripts         virt

crypto   include        kernel   net          security

2、配置内核特性

配置内核编译时启用哪些功能(特性或模块),在系统中/boot/目录下有centos编译内核时使用的内核配置文件,我们可以使用这个模版来配置我们编译内核时的配置文件

配置文件中:

y:表示编译进核心

m:编译成模块

no set:不编译

make的选项(生成配置文件):

make config          #一项一项确定是否编译该特性

make allyesconfig      #全ye

make allnoconfig      #能选的都no,值编译必须的

make menuconfig       #使用文本窗口选择

make kconfig         #在KDE桌面环境下,并且安装了qt开发环境

make gconfig         #在gnome桌面环境下,并且安装了gtk开发环境[root@Note3 linux]# make menuconfig       #必须在当前目录下执行,且当前会话的界面足够大

在使用make menuconfig这个命令后,会出现如下的字符界面,我们就可以在这个界面上对内核进行配置。

查看硬件信息(根据硬件信息选择驱动):

lspci#pci设备

hal-device#查看pci设备详细信息

lscpu

lsusb

lsblk#块设备

lshal        #相当于hal-device

dmidecode#查看BIOS中信息

注意:使用make menuconfig设置(如果你不是很熟)生成的配置文件,在内核编译时可能会出错,建议使用系统上的/boot/config 配置文件做模版使用。[root@Note3 linux]# ls /boot/config-2.6.32-431.el6.x86_64

/boot/config-2.6.32-431.el6.x86_64

[root@Note3 linux-3.16.1]# cp /boot/config-2.6.32-431.el6.x86_64 .config

[root@Note3 linux-3.16.1]# make menuconfig    #再使用make menuconfig修改自己需要的配置

3、编译内核

make#默认使用一个线程编译

make -j N  #N为线程数(linux上显示的核心数)[root@Note3 linux]# make -j 4

4、安装模块

make modules_install

5、安装内核

make install[root@Note3 linux]# ls /boot   #安装完成后

config-2.6.32-431.el6.x86_64         System.map

efi                                  System.map-2.6.32-431.el6.x86_64

grub                                 System.map-3.16.1

initramfs-2.6.32-431.el6.x86_64.img  vmlinuz

initramfs-3.16.1.img                 vmlinuz-2.6.32-431.el6.x86_64

lost+found                           vmlinuz-3.16.1

symvers-2.6.32-431.el6.x86_64.gz

[root@Note3 linux]# cat /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda2

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=1

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (3.16.1)

root (hd0,0)

kernel /vmlinuz-3.16.1 ro root=UUID=e0c0bc25-62e5-4896-8749-fce761bc3af7 rd_NO_LUKS rd_NO_LVM LANG=zh_CN.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-3.16.1.img

title CentOS (2.6.32-431.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=e0c0bc25-62e5-4896-8749-fce761bc3af7 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-431.el6.x86_64.img

6、检查、测试

检查grub.conf中是否已经有新内核配置项

重启系统以尝试使用新内核

注意:

1)screen命令的使用

screen可以在一个物理窗口上启动多个虚拟的小窗口

screen:打开一个新的screen

隐藏:Ctrl+a,d

重新打开隐藏的screen:

显示各screen ID:screen -ls

重新打开:screen -r Screen_ID

2)二次编译前要先做清理操作

make clean [all]只清理编译生成的文件,但不删除配置文件.config

make mrproper删除编译生成的文件和.config

make disclean重置源代码树[root@Note3 linux]# ls init    #编译后会生成很多.o文件

built-in.mod.c      do_mounts_initrd.o  initramfs.o  modules.builtin

built-in.o          do_mounts_md.c      init_task.c  modules.order

calibrate.c         do_mounts_md.o      init_task.o  mounts.mod.c

calibrate.o         do_mounts.o         Kconfig      mounts.o

do_mounts.c         do_mounts_rd.c      main.c       noinitramfs.c

do_mounts.h         do_mounts_rd.o      main.o       version.c

do_mounts_initrd.c  initramfs.c         Makefile     version.o

[root@Note3 linux]# make clean

[root@Note3 linux]# ls init/

calibrate.c  do_mounts_initrd.c  initramfs.c  main.c         version.c

do_mounts.c  do_mounts_md.c      init_task.c  Makefile

do_mounts.h  do_mounts_rd.c      Kconfig      noinitramfs.c

3)将编译后生成的文件放置于源码不同的路径

mkdir /path/to/somewhere

cd  /path/to/somewhere

./configure --ksource=/usr/src/linux   # --ksource指定源码文件目录,很少用这种方式

三、如何实现内核的部分编译

1.只编译某子目录下的相关代码

cd /usr/src/linux

make 子目录文件    例如:make drivers/net/

或者:

make SUBDIR=arch/#指定子目录

2.只编译部分模块

make M=path/to/dir/例如:make M=drivers/net/

3.只编译某一个模块

make path/to/dir/module_name.ko例如:make drivers/net/e1000/e1000.ko

4.将编译后的结果放置于别的目录中

make O=/path/to/somewhere#大写的字母O

交叉编译

编译后的文件不是在本机使用,而是在别的机器上使用

make ARCH=架构

以arm为例:

make ARCH=arm 默认编译文件

四、内核参数的查看与配置

可配置的内核参数都在/proc/sys/目录下:

kernel,net,vm(虚拟内存),fs

配置参数:

echo "String" > /proc/sys/path/to/some_parameter

sysctl -w variable=value[root@Note3 ~]# cd /proc/sys/

[root@Note3 sys]# ls

abi  crypto  debug  dev  fs  kernel  net  vm

[root@Note3 sys]# ls net/ipv

ipv4/ ipv6/

[root@Note3 sys]# ls net/ipv4/icmp_echo_ignore_

icmp_echo_ignore_all         icmp_echo_ignore_broadcasts

[root@Note3 sys]# cat net/ipv4/icmp_echo_ignore_all

0

[root@Note3 sys]# echo 1 > net/ipv4/icmp_echo_ignore_all

[root@Note3 sys]# cat net/ipv4/icmp_echo_ignore_all       #重启失效

1

[root@Note3 sys]# sysctl -w net.ipv4.icmp_echo_ignore_all=0

net.ipv4.icmp_echo_ignore_all = 0

[root@Note3 sys]# cat net/ipv4/icmp_echo_ignore_all

0

配置文件:/etc/sysctl.conf

让修改后的结果生效的方式:sysctl -p

kernel.hostname           设置主机名

net.ipv4.ip_forward        是否打开网络间转发,默认0,不打开

net.ipv4.icmp_echo_ignore_all是否关闭ICMP包回应功能,默认0,回应

vm.drop_caches是否清空buffers,cached,默认0,不清空,1表示都清空

五、硬件设备

硬件设备文件是如何产生的?

硬件设备:设备文件

在内核2.4版本之前,设备文件都是在装系统时事先生成的总共有数万个(2W+),硬件探测是在内核展开,装载完成后就开始的,此时还没有根文件系统更没有/dev目录,

大大浪费

udev:是用户空间程序

kenrel硬件探测过程在根文件系统挂载前就已经结束,启动udev daemon程序,要求内核重新探测硬件信息,并输出/sys目录,由此udevadm工具就可以根据/sys目录中硬件信息给每个硬件创建设备文件了

udev rules:udev规则文件,用于定义udev如何创建设备文件的,/etc/udev/rules.d/

kernel+initramfs(根文件系统所在设备的设备驱动模块)-->devtmps(用于在内核初始化时为基本设备创建设备文件的临时文件系统)

如何手动创建设备文件:

mknod

mknod [option]... NAME YTPE [MAJOR MINOR]

MAJOR:主设备号,表示设备类型

MINOR:同一设备的不同文件

选项:

-m MODE:指定权限

例子:

mknod -m 660 /dev/testdev b 100 0

Linux下编译build的命令,【linux基础】20、内核的编译相关推荐

  1. Linux下编译build的命令,Linux内核编译中build目录设置

    配置参数 最近在分析yocto中名为poky的嵌入式自动构建系统.在对内核进行定制的时候,看到了一个在进行内核编译时挺有用的特性,之前(作为野生程序员的我)一直没有发现. 该特性就是将源码与编译工作目 ...

  2. linux下mq通道的命令,Linux下MQ的安装

    Linux下MQ的安装 如果MQ的安装包是ISO,所以需要将ISO文件mount到Linux的一个目录下面,具体操作如下: 假如你选定的mount目录为根目录下mnt/下面,或者下面你新建一个目录可以 ...

  3. linux下的删除文件命令,Linux下删除文件命令

    在linux中删除文件与文件夹我们可以直接使用rm就可以删除了,彻底删除文件或文件夹我们可以使用shred命令来完成,接下来是小编为大家收集的Linux下删除文件命令,希望能帮到大家. Linux下删 ...

  4. linux 下删除批量文件命令,linux 批量删除文件与空文件删除命令linux操作系统 -电脑资料...

    在linux中删除文件与删除目录及删除空文章都是使用rm 命令了,执行rm指令可删除文件或目录,如欲删除目录必须加上参数\"-r\",否则预设仅会删除文件,下面我来介绍在linux ...

  5. linux 下删除批量文件命令,linux系统中批量删除文件与空文件删除的命令

    linux命令在系统中有两种类型:内置Shell命令和Linux命令.接下来是小编为大家收集的linux系统中批量删除文件与空文件删除的命令,希望能帮到大家. linux系统中批量删除文件与空文件删除 ...

  6. linux下unzip解压命令,linux的unzip解压命令的详细解释

    Linux中的unzip命令主要是用来解压zip格式的压缩文件.下面由学习啦小编为大家整理了Linux的unzip解压命令的详细解释,希望对大家有帮助! linux的unzip解压命令的详细解释 命令 ...

  7. linux 下安装gnu aspell命令,Linux spell命令

    Linux spell命令 Linux spell命令可建立拼写检查程序. spell可从标准输入设备读取字符串,结束后显示拼错的词汇. 语法spell 实例 检查文件testfile是否有拼写错误, ...

  8. linux下的wc -l命令,Linux下wc工具的简单实现

    wc工具是Linux下一款强大的统计字符数,单词数,行数的工具.其实实现挺简单的.我做了一简单的实现: #include #include #define LEN 4096 int text_c(FI ...

  9. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码

    这几天琢磨写一个Android的Runtime用来加速HTML5 Canvas,让GameBuilder+CanTK 不但开发速度快,运行速度也能接近原生应用.所以花了点时间研究Android NDK ...

  10. linux下有关phy的命令,linux – 如何为Debian安装b43-lpphy-installer?

    b43-lpphy-installer是Ubuntu的包的名称,而不是Debian的包. 你可以在jessie(Debian 8)中使用命令安装它: sudo apt-get install firm ...

最新文章

  1. java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
  2. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955
  3. windows10下pip安装速度慢的解决办法
  4. 报告 | 中国科学院发布地球大数据报告
  5. HBase参数配置及说明
  6. 太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
  7. https://www.npmjs.com/package/lifecycle-webpack-plugin
  8. 视频会议平台Zoom市值近1200亿美元,投资人李嘉诚赚翻了
  9. 在线摩尔斯密码加密解密工具
  10. Siamese-RPN论文阅读
  11. 表格对角线两边打字_word单元格斜线 word表格中斜线表头制作过程及表头斜线两边打字怎么操作...
  12. Linux使用PulseAudio设置音频card的默认profile
  13. 系统内核溢出漏洞提权分析和防范
  14. 怎么用QQ截取右击出来的内容
  15. 加班费计算(节假日、补班)
  16. 最新计算机专业毕业设计论文选题源码演示录像下载(开题报告任务书PPT毕业答辩模板jsp352 cs拼图游戏的设计与实现
  17. qt window release 打包的方法及常见问题,不同路径的差异
  18. Python中的getter、setter、deleter
  19. matlab主要功能,matlab一些基本函数的功能
  20. Java给PDF文件生成骑缝章

热门文章

  1. idea基于spring boot的依赖分开打包
  2. 微信支付H5支付开发文档
  3. 常用正则表达 (转)
  4. Unity 游戏框架搭建 (七) 减少加班利器-QApp类
  5. Data Warehouse Hardware - DW硬件需求计算
  6. An internal error occurred during: “AppXray Indexing
  7. Writing for Myself.part2
  8. 在Visual Studio 2010中创建多项目(解决方案)模板之关键步骤【四】
  9. LeetCode-Add Binary
  10. VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法