zoukankan      html  css  js  c++  java
  • linux内核入门(1)——基本简介和编译

    获取linux内核源码,自己选择版本(我下载的是linux-3.1.10.tar.gz ,我是直接下载到/usr/src文件夹的)
    下载地址传送门 https://www.kernel.org/pub/linux/kernel/
    也可以去我的网盘下载: https://pan.baidu.com/s/1i5dyfkT
    甚至直接在命令行下载 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.1.tar.gz
    进入/usr/src进行解压
    tar -zxvf linux-3.1.10.tar.gz 到当前文件夹

    [root@bogon src]# ls
    debug  kernels  linux-2.6.1  linux-3.10.1  linux-3.10.1.tar.gz  linux-3.4.16
    [root@bogon src]# cd linux-3.10.1
    [root@bogon linux-3.10.1]# ls
    arch  //特定体系结构的源码    
    Documentation //内核源码文档 
    init //内核引导和初始化    
    lib    //通用内核函数     
    README          
    sound   //声音子系统
    block //块设备I/O层   
    drivers //设备驱动程序       
    ipc //进程间通信代码     
    MAINTAINERS  //维护者列表,它们负责维护内核子系统和驱动程序
    REPORTING-BUGS  
    tools   //在linux开发中有用的工具
    COPYING  //内核许可证
    firmware  //使用某些驱动程序而需要的设备固件     
    Kbuild   
    Makefile  //基本内核的Makefile   
    samples //示例代码        
    usr //早期用户空间代码(所谓的initramfs)
    CREDITS  //开发了很多内核代码的开发者列表
    fs //vfs和各种文件系统            
    Kconfig  
    mm //内存光里子系统和VM          
    scripts  //编译内核所用的脚本       
    virt    //虚拟化基础结构
    crypto //加密API  
    include  //内核头文件      
    kernel //像调度程序这样的核心子系统  
    net //网络子系统         
    security //linux安全模块
    

    编译时需要对内核进行配置
    配置项要么是二选一,要么三选一,yes or no,yes or no or module。module是指以模块的形式生成,该选项一般用于驱动程序。

    在上面的基础上我们已经进入linux-3.10.1文件夹了
    现在开始进行配置(在命令行输入下列任一命令)
    make config 最简单的配置,需要人工逐一进行选择,非常耗时
    make menuconfig 图形化的配置方式
    make gconfig 也是图形化的配置方式
    make defconfig 选择默认配置

    我们使用第二种方法。使用make menuconfig可能会提示失败,执行下面这条语句即可
    yum install -y ncurses-devel
    如果使用该种方法的话,需要配置几个地方。
    往下找到filesystem回车
    往下空格选中XFS realtime subvolume support
    继续往下空格选中 NILFS2那个选项
    继续往下空格选择DOS FAT NT filesystem
    然后找到空格选中NTFS filesystem,选中之后下面会多两个选项,选择最后一个NTFS write support空格选择,接下来就是保存,然后一直退出退出

    
    [root@bogon linux-3.10.1]# ls -a
    .        COPYING        firmware    ipc      .mailmap     README          sound
    ..       CREDITS        fs          Kbuild   MAINTAINERS  REPORTING-BUGS  tools
    arch     crypto         .gitignore  Kconfig  Makefile     samples         usr
    block    Documentation  include     kernel   mm           scripts         virt
    .config  drivers        init        lib      net          security
    [root@bogon linux-3.10.1]# 
    

    执行make defconfig 后会在当前目录下看到.config文件,该文件存放者配置项,可以在这个文件里直接查找和修改内核选项,修改完成后输入命令 make oldconfig进行更新配置(ls -a也没有显示出来这个文件,但是可以成功执行)

    内核按照上面的配置配置好之后,进行编译,只需要输入命令make,回车之后就是一直在刷新的编译信息,如果只想显示警告和错误,可以把make修改为make > /dev/null (/dev/null是黑洞)

    其实上一个make命令只能产生一个作业,如果你的内核够多,可以使用命令 make -jn,该命令会同时产生多个作业,加速编译(不过需要在Makefile编码没有错误的情况下才能正常进行多作业编译),其中n是作业数,理论每个处理器可以产生一个或者两个编译作业,编译内核过程挺耗费时间的

    make命令执行完后,进行安装模块

    [root@bogon linux-3.10.1]# make modules_install
      INSTALL net/ipv4/netfilter/ipt_MASQUERADE.ko
      INSTALL net/ipv4/netfilter/iptable_nat.ko
      INSTALL net/ipv4/netfilter/nf_nat_ipv4.ko
      INSTALL net/netfilter/nf_nat.ko
      INSTALL net/netfilter/nf_nat_ftp.ko
      INSTALL net/netfilter/nf_nat_irc.ko
      INSTALL net/netfilter/nf_nat_sip.ko
      INSTALL net/netfilter/xt_LOG.ko
      INSTALL net/netfilter/xt_mark.ko
      INSTALL net/netfilter/xt_nat.ko
      DEPMOD  3.10.1
    [root@bogon linux-3.10.1]# make install     //直接安装内核
    sh /usr/src/linux-3.10.1/arch/x86/boot/install.sh 3.10.1 arch/x86/boot/bzImage 
        System.map "/boot"
    [root@bogon linux-3.10.1]# grub2-mkconfig

    很遗憾,我第一次失败,重启后提示api文件系统挂载失败。没关系,再来一次
    清除垃圾(这一步:一般是在就内核重新编译时使用,在编译新的内核是不需要)
    make clean及make mrproper;

    [root@bogon linux-3.10.1]# make clean
      CLEAN   .
      CLEAN   arch/x86/kernel/cpu
      CLEAN   arch/x86/kernel
      CLEAN   arch/x86/realmode/rm
      CLEAN   arch/x86/vdso
      CLEAN   arch/x86/lib
      CLEAN   drivers/tty/vt
      CLEAN   drivers/video/logo
      CLEAN   firmware
      CLEAN   kernel
      CLEAN   lib
      CLEAN   security/selinux
      CLEAN   usr
      CLEAN   arch/x86/boot/compressed
      CLEAN   arch/x86/boot
      CLEAN   arch/x86/tools
      CLEAN   .tmp_versions
    [root@bogon linux-3.10.1]# make mrproper
      CLEAN   scripts/basic
      CLEAN   scripts/kconfig
      CLEAN   scripts/mod
      CLEAN   scripts/selinux/genheaders
      CLEAN   scripts/selinux/mdp
      CLEAN   scripts
      CLEAN   include/config include/generated arch/x86/include/generated
      CLEAN   .config .config.old .version include/generated/uapi/linux/version.h Module.symvers
    [root@bogon linux-3.10.1]# 
    

    然后再重复执行上面的命令,最后重启

    第二次,终于可以进入系统,不过不知道是哪里出问题了,各种命令都无法使用,之可以uname -r 然后显示版本,还有其他几个命令,像ifconfig,ping,lsmod之类命令一概执行失败。等我找出问题了再继续更新帖子

  • 相关阅读:
    PHP中常用的字符串格式化函数总结
    php格式化金额函数分享
    PHP获取当前日期和时间及格式化方法参数
    CSS 中如何把 Span 标签设置为固定宽度
    css中 Span 元素的 width 属性无效果原因及多种解决方案
    js网页如何获取手机屏幕宽度
    HTML meta viewport属性详细说明
    Android onLowMemory()和onTrimMemory()
    Qt 拷贝文件目录
    QT5.1 调用https
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730595.html
Copyright © 2011-2022 走看看