linux内核_linux内核裁剪 - CSDN
linux内核 订阅
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1]  Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。 展开全文
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1]  Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。
信息
软件授权
免费
软件名称
Linux内核
发明者
Linus Torvalds
使用时间
1991年
软件语言
C语言
Linux内核内核结构
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。Linux内核使用三种不同的版本编号方式。  第一种方式用于1.0版本之前(包括1.0)。第一个版本是0.01,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。第二种方式用于1.0之后到2.6,数字由三部分“A.B.C”,A代表主版本号,B代表次主版本号,C代表较小的末版本号。只有在内核发生很大变化时(历史上只发生过两次,1994年的1.0,1996年的2.0),A才变化。可以通过数字B来判断Linux是否稳定,偶数的B代表稳定版,奇数的B代表开发版。C代表一些bug修复,安全更新,新特性和驱动的次数。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。第三种方式从2004年2.6.0版本开始,使用一种“time-based”的方式。3.0版本之前,是一种“A.B.C.D”的格式。七年里,前两个数字A.B即“2.6”保持不变,C随着新版本的发布而增加,D代表一些bug修复,安全更新,添加新特性和驱动的次数。3.0版本之后是“A.B.C”格式,B随着新版本的发布而增加,C代表一些bug修复,安全更新,新特性和驱动的次数。第三种方式中不再使用偶数代表稳定版,奇数代表开发版这样的命名方式。举个例子:3.7.0代表的不是开发版,而是稳定版!Linux最早是由芬兰人Linus Torvalds设计的。当时由于UNⅨ的 商业化,Andrew Tannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。当时发布在Internet上,免费给全世界的学生使用。Minix具有较多UNⅨ的特点,但与UNⅨ不完全兼容。1991年10月5日,Linus为了给Minix用户设计一个比较有效的UNⅨ PC版本,自己动手写了一个“类Minix”的操作系统。整个故事从两个在终端上打印AAAA...和BBBB...的进程开始的,当时最初的内核版本是0.02。Linus Torvalds将它发到了Minix新闻组,很快就得到了反应。Linus Torvalds在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了Linux的第一个稳定的工作版本。1991年11月,Linux0.10版本推出,0.11版本随后在1991年12月推出,当时将它发布在Internet上,免费供人们使用。当Linux非常接近于一种可靠的/稳定的系统时,Linus决定将0.13版本称为0.95版本。1994年3月,正式的Linux 1.0出现了,这差不多是一种正式的独立宣言。截至那时为止,它的用户基数已经发展得很大,而且Linux的核心开发队伍也建立起来了。在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码。Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供MMU的处理器上运行。Linux 内核的uClinux移植提供了对非 MMU 的支持。核心的开发和规范一直是由Linux社区控制着,版本也是唯一的。实际上,操作系统的内核版本指的是在Linus本人领导下的开发小组开发出的系统内核的版本号。自1994年3月14日发布了第一个正式版本Linux 1.0以来,每隔一段时间就有新的版本或其修订版公布。Linux将标准的GNU许可协议改称Copyleft,以便与Copyright相对照。通用的公共许可(GPL)允许用户销售、拷贝和改变具有Copyleft的应用程序。当然这些程序也可以是Copyright的,但是你必须允许进一步的销售、拷贝和对其代码进行改变,同时也必须使他人可以免费得到修改后的源代码。事实证明,GPL对于Linux的成功起到了极大的作用。它启动了一个十分繁荣的商用Linux阶段,还为编程人员提供了一种凝聚力,诱使大家加入这个充满了慈善精神的Linux运动。
收起全文
精华内容
参与话题
  • Linux 内核编译(三天吐血经历!)

    万次阅读 多人点赞 2018-01-29 16:28:40
    前几天做一个实验:编译Linux内核并向其增加一个系统调用。这个实验实在是太让人无语了,各种坑!昨天这个时候,我还在苦苦煎熬中。在今天凌晨四点才做好。为了让其他人少走一些弯路,鄙人就把自己的经验以及教训写...
    写在前面的话:
    本人大二,东南大学一个软工狗,正在修一门名为《操作系统原理》的坑爹课!前几天做一个实验:编译Linux内核并向其增加一个系统调用。这个实验实在是太让人无语了,各种坑!昨天这个时候,我还在苦苦煎熬中。在今天凌晨四点才做好。为了让其他人少走一些弯路,鄙人就把自己的经验以及教训写下来。里面会有一些不足,希望大家多多指教~

    废话不多说,那就开始吧:

    一、实验前的准备:

    Vmware + ubuntu10.10 (32位)+ linux-2.6.32.71.tar.xz
    安装虚拟机教程:http://jingyan.baidu.com/article/90895e0f95a07564ec6b0bc7.html
    说明:ubuntu 10.10是我试验的最后一个,也是最后成功的那个。当然,更推荐ubuntu 10.04,因为这个支持sudo apt-update 少了一些麻烦。 而由于10.10不支持更新,故我另外新下了linux 2.6.32.71 先将这个文件拖入虚拟机桌面。

    附: ubuntu10.10百度网盘分享:链接:http://pan.baidu.com/s/1bnNr8dD 密码:ybg3
            linux-2.6.32.71.tar.xz 百度网盘分享:链接:http://pan.baidu.com/s/1c1cOOtq 密码:epu9(可能已经失效,大家可以去某度上面进行下载。网上资源很多,造成的不便,很抱歉~)

    二、解压内核

    1、先打开安装好的ubuntu 进入终端 :在桌面按ctrl+alt+T
    2、输入sudo su 获取root权限:(会出现一个输入密码的一个命令行,在终端输入密码时,是不显示星号的。你只管把密码输入回车就行了!用惯了window的小伙伴可能会有些不适应)最后如图:

    3、先把下载好的内核复制到 /usr/src 文件夹中 : 
          终端输入 cd Desktop(定位到桌面) 回车 ; cp  linux-2.6.32.71.tar.xz  /usr/src 回车
    4、解压内核 依次输入以下命令回车执行
          cd /usr/src ;
       xz -d linux-2.6.32.71.tar.xz

         tar xvf  linux-2.6.32.71.tar

    三、增加系统调用

    1、

    打开sys.c文件。

    gedit /usr/src/linux-2.6.32.71/kernel/sys.c

    2、

    在文件末尾增加系统调用。

    asmlinkage intsys_mycall(int number)

    {

     printk("My Student No. is XXXXX,and My Name is XXXXX*** !");

     return number;

    }

    注:printk就是系统调用输出一行文字,你可以自定义里面内容,便于最终检验。

    3、

     注册系统调用:

    gedit /usr/src/linux-2.6.32.71/arch/x86/kernel/syscall_table_32.S

    在.long 类型文件末尾添加:

    .longsys_mycall

    并且按照顺序记住它属于第几个系统调用,在本机中为337。

    4、

    gedit /usr/src/linux-2.6.32.71/arch/x86/include/asm/unistd_32.h

    在一系列#define __NR_之后添加:

     

    # define __NR_mycall 337

    在这里就需要用到之前记住的数字了。


    四、编译内核

    ps:深吸一口气,前面做的只是准备工作!下面才是真正的开始!打好精神,真正的挑战在下面!
    下面的记得一定要一步一步都要做!不要漏掉一步!!!!

    进入解压目录:

    cd /usr/src/linux-2.6.32.71

    make mrproper

    make clean

    make oldconfig

    make bzImage  (这个过程和下面的过程非常非常非常长,亲测,建议泡杯茶,或是看个电影,没有两个小时不行

    make modules

    make modules_install


    五、拷贝内核

    经过了漫长的等待,我们终于到了这一步。
    先检验一下我们的结果:

     


     首先查看一下编译好的内核版本,以便命名 打开 /lib/modules  里面应该多了一个纯数字不带"generic"的文件夹,那就是新内核版本号,我们的是2.62.32.71 如下所示:

    有了这个就代表前面的没有什么错误了。

    接着,就在终端输入: 

    cp /usr/src/linux-2.6.32.71/arch/i386/boot/bzImage  /boot/vmlinuz-2.6.32.71-mykernel


    六、创建initrd文件

    mkinitramfs-o /boot/initrd.img-2.6.32.71


    七、更新grub引导表

    进行到这一步,也许你感觉到自己差不多了,毕竟都这么久了,你也许有些困了,有些疲惫,但是,我告诉你,最难最容易出错的,就在当前这一步!建议你先休息一下,下面需要你投入百分之百的注意力去做,若是出错,你可是要全部重新开始的!
    1.

    gedit /boot/grub/grub.cfg


    2.
    在打开的文件中找到类似如下的字段,并复制并粘贴在前面:

    但必须在同一个

    ### BEGIN /etc/grub.d/10_linux ### 

           ……  

    ### END /etc/grub.d/10_linux ###

    里面

    字段如下:
    menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro   quiet splash
    initrd /boot/initrd.img-2.6.35-22-generic
    }
    menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
    echo 'Loading Linux 2.6.35-22-generic ...'
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro single 
    echo 'Loading initial ramdisk ...'
    initrd /boot/initrd.img-2.6.35-22-generic
    }


    将粘贴后字段里面的
     linux    /boot/vmlinuz-2.6.35-22-generic      initrd    /boot/initrd.img-2.6.35-22-generic  改成你的内核文件地址和initrd 地址:
     linux   /boot/vmlinuz-2.6.32.71-mykernel    initrd    /boot/initrd.img-2.6.32.71

    这一步特别无聊但又必须认认真真做,要不然你就前功尽弃,别问我怎么知道的,我要是牢记这句话,不会到四点才睡觉 ( ╯□╰ )!! 建议全部改完之后,检查几遍。笔者以及室友们都在这步出错,以至于不得不重新开始。全部完成如图所示:

     红框是改过之后的,篮框里面的是你需要复制的内容 可以看到 ,两者在同一个###BEGIN /etc/**** 里面 黄色下划线部分
    (图丑见谅)


    八、收尾工作

    好了,你若已经检查完毕上面的一切工作,那么,扫尾工作就开始了,这时候,也莫要放松 一步一步来,喝点开水,长呼口气,一步一步来,下面的一步一步落实:

    cd /boot

    cp initrd.img-2.6.32.71 initrd-2.6.32.71.old

    depmod–a

    update-initramfs-k 2.6.32.71 –c

    cd /tmp

    gzip-dc /boot/initrd.img-2.6.32.71| cpio –id

    touch lib/modules/2.6.32.71/modules.dep

    find./ | cpio -H newc -o > /boot/initrd.img-2.6.32.71.new

    gzip /boot/initrd.img-2.6.32.71.new

    cd /boot

    mvinitrd.img-2.6.32.71.new.gz initrd.img-2.6.32.71


    九、重启

    终于到了验证结果的一步了,此时你要克制一下自己的激动心情,在终端键入 reboot 点击回车。慢慢等待一会,若是你重启成功,那么恭喜你,你已经要看到胜利的曙光啦!
    重新进入终端,获取权限,过程前面有讲,不再重复。在终端键入 uname -a 回车
    此时若是看到

    linux-2.6.32.71,说明已经成功!

    如下:

    若是看到这个,你就可以大叫一声庆祝一下了,你已经成功啦!!!!

    十、测试自定义系统调用

    打开终端,键入gedit,打开gedit工具,继续键入如下代码:

    #include<stdio.h>

    int main()

    {

           syscall(337, 1);

           return 0;

    }

    保存为mytest.c

    再继续在终端中键入

    gcc-o mytest mytest.c(编译C程序)

    之后 ./mytest

    点击运行编译出来的程序,此时并不会显示出效果,在终端中键入dmesg –c查看系统调用信息。

    此时,你可以看到



    说明之前写的sys_mycall调用成功!
    到这一步,算是全部成功啦!!庆祝一下,去装个逼吧~~~~
     
    写在最后的话:

    由于笔者是新手,里面的步骤有些显得很笨重,希望大手们看到之后多多指教!谢谢!!
    另外,做这个实验一定要有耐心,若是你做的时候一直很小心,每一步都认真做,那么你一次就可以成功!!别像笔者这样做了不知多少遍。
    最后,祝大家成功!!   有不足,也希望大家指出,谢谢@~@
     
    ps:
    参考文档:http://wenku.baidu.com/view/40af3b6727d3240c8447efd8.html?qq-pf-to=pcqq.c2c

    第一篇博文,谢谢大家的浏览o(^▽^)o


    展开全文
  • Linux 内核深度剖析与实践

    千次阅读 2019-07-05 10:04:12
    课程简介 Linux 作为最成功的开源项目,无论是在客户端...然后对内核的设备模型机制进行讲解,让读者理解 Linux 驱动的来龙去脉;接着手把手和读者一起定制一个开发板实践案例;最后和读者分享在工作中常用的调试...

    课程简介

    Linux 作为最成功的开源项目,无论是在客户端还是在服务器端都发挥着无可替代的作用。本课程主要从嵌入式领域对 Linux 架构进行剖析。目前由于网上关于设备树的资料比较少,很多人不会用设备树,所以本课程先从设备树开始深度剖析内核的最底层;然后对内核的设备模型机制进行讲解,让读者理解 Linux 驱动的来龙去脉;接着手把手和读者一起定制一个开发板实践案例;最后和读者分享在工作中常用的调试技巧。本课程课后会留下练习题及源码链接,希望读者能够理论结合实践真实受用。

    具体实践案例:

    • 动手写一个开发板
    • 编写第一个 Linux 驱动
    • 源代码分享

    作者简介

    刘盼,Linux 内核贡献者、CSDN 博客专家,活跃于各大创客社区,个人公众号《人人都是极客》,精通 ARM+Linux+Android 的嵌入式开发。智道科技联合创始人,目前专注于嵌入式领域的人工智能研究。

    课程内容

    导读:课程概要

    为什么要学习 Linux

    image

    首先 Linux 是开源免费的,用户不需要为此交付任何费用,世界各地有数百万志愿者为 Linux 提供了技术支持和软件更新,这使得 Linux 无论是在桌面还是在服务器端都是其他 OS 无法企及的。世界上最快的超级计算机 90% 以上都在用 Linux,说明 Linux 更快。

    占领移动终端半壁江山的 Android 系统,其底层也是基于 Linux 内核实现的。云计算、自动驾驶、物联网等终端基本都是在使用 Linux 系统。可以说 Linux 是在 IT 领域使用最广的一项技术,掌握了 Linux 基本不会太担心技术更新带来的职业困惑,因为 Linux 的职业机会涵盖了桌面应用开发,内核和设备驱动开发,Web 开发和部署等。下从英特尔芯片厂商,上至阿里互联网公司,都会对 Linux 人才有巨大的需求。

    所以如果你喜欢极客精神,可以根据自己的需要修改源代码,DIY 一套操作系统。如果喜欢开源社区的文化,崇尚自由,相信开放的 Linux 是最好的选择。如果你有一颗寻根问底的心,想知道底层内核实现的来龙去脉,那 Linux 就是最接近灵魂深处的地方。

    Linux 的学习路线

    image

    可以将 Linux 的学习路线大体分为以上三级,对于初学者主要是掌握 Linux 系统的操作,熟练使用相应命令。中级阶段可以对 Linux 系统进行网络管理、磁盘管理、安全优化等需求进行操作,算是初级的升级版。高级主要是需要进行 Linux 的开发工作,开发对象分为两个方向,一个是服务器端,如大数据、云计算等都属于这个领域,还有就是终端产品的开发,如手机、汽车等。

    这个课程有什么特色

    有些读者可能会有疑问:Linux 的技术文章网上有很多,为什么非要花钱选择这个系列课程?其实很高兴有这个疑问,说明有此疑问的读者对阅读内容是有要求的。

    • 虽然很多博客专栏都有 Linux 的学习心得,但丰富的网络资源也使得信息碎片化严重,此次教程站在读者容易理解的角度一层一层剖析 Linux,让读者有系统化的深入理解,形成知识体系。

    • 另外,内核每年都在升级,有些使用方式已经发生变化,比如设备树是 Linux 驱动获取资源的最新方式,关于设备树的内容网上几乎没有深入的讲解。本教程全部采用当前最新的正式版本进行教学。

    • 除了理论教程外,每节课程会给读者留几个问题,读者可以通过读者圈与我进行答疑互动。另外课程中提到的示例代码 Github 都会开源给大家。

    本课程大纲

    • Linux 总线、设备、驱动模型的探究
    • Linux 设备树(DTS)的深入理解及练习题
    • Linux 的启动流程
    • Linux 设备和驱动的相遇
    • 动手定制一个开发板案例
    • Linux 调试调优技术
    • 如何向 Linux 内核提交代码

    首先结合总线、设备、驱动模型的探究彻底理清驱动的来龙去脉。然后从设备树入手,模拟一个电路板,上面有中断控制器、GPIO 控制器、I2C 控制器、SPI 控制器、以太网控制器等,并根据这个电路板从头到尾构建一个 DTS 文件。

    接着实践手把手和读者一起定制一个开发板案例,搞清楚进程运行的本质。然后通过系统调用课程的讲解理解应用层是如何访问内核的。

    然后介绍在项目中经常用到的调试手段。

    最后手把手教你如何在内核社区提交自己的 Pathch。

    相信通过此系列的课程讲解,读者会从实际调试操作理解 Linux 从上层是如何一层层调用到内核到驱动的,相信掌握本课程的知识点绝对是你通往架构师的必经之路。

    本教程使用到的学习资源

    内核及库

    微信公众号

    image

    第01课:Linux 总线、设备、驱动模型的探究
    第02课:Linux 设备树(DTS)的深入理解
    第03课:Linux 的启动流程
    第04课:Linux 设备和驱动的相遇
    第05课:动手定制一个开发板案例
    第06课:Linux 调试调优技术
    第07课:如何向 Linux 内核提交代码

    阅读全文: http://gitbook.cn/gitchat/column/5a17839b13c02f4a35ca3d4f

    展开全文
  • 非常好的Linux编译内核详解 - -

    万次阅读 2018-03-21 15:58:36
    转载: http://blog.chinaunix.net/uid-263488-id-2138150.html非常好的Linux编译内核详解 - -一、内核... Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分...

    转载: http://blog.chinaunix.net/uid-263488-id-2138150.html


    非常好的Linux编译内核详解 - -

    一、内核简介 
      内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 
      Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。 
      想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。

    二、内核版本号

      由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.4.18;开发树的最新版本是2.5.10。下载内核版本请访问http://www.kernel.org

    三、为什么重新编译内核

      Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。 
      通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 
      为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 
      l 自己定制编译的内核运行更快(具有更少的代码) 
      l 系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
      l 不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
      l 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些

    四、内核编译模式

      要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

    五、新版本内核的获取和更新

      Linux内核版本发布的官方网站是http://www.kernel.org。新版本的内核...问剑?恢质荈ull Source版本,另外一种是patch文件,即补丁。完整的内核版本比较大,一般是tar.gz或者是.bz2文件,二者分别是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般只有几十K到几百K,但是patch文件是针对于特定的版本的,你需要找到自己对应的版本才能使用。 
      编译内核需要root权限,以下操作都假定你是root用户。请把你需要升级的内核拷贝到/usr/src/下(下文中以2.4.18的内核的linux-2.4.18.tar.gz为例),命令为

    #cp linux-2.4.18.tar.gz /usr/src

      让我们先来查看一下当前/usr/src的内容,注意到有一个linux-2.4的符号链接,指向一个linux-2.4.7-10(以REDHAT7.2为例)的目录。这就是你所装linux的kernel源代码,删除这个链接。

      现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:

    #tar -zxvf linux-2.4.18.tar.gz.tar.gz

      如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令

    #bzip2 -d linux-2.4.18.tar.bz2 
    #tar -xvf linux-2.4.18.tar

      文件将解压到/usr/src/linux目录中,我们把它稍作修改:

    #mv linux linux-2.4.18 
    #ln -s linux-2.4.18 linux

      如果下载的是patch文件,就可以进行patch操作(下面假设patch-2.4.18已经位于/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src下):

    #patch -p0 < patch-2.4.18

       
    六、内核编译

      通常要运行的第一个命令是:

    #cd /usr/src/linux 
    #make mrproper

      该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。 
      确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。如:asm指向/usr/src/linux/include/asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行:

    # cd /usr/include/ 
    # rm -r asm linux scsi 
    # ln -s /usr/src/linux/include/asm-i386 asm 
    # ln -s /usr/src/linux/include/linux linux 
    # ln -s /usr/src/linux/include/scsi scsi

      这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。现在你应该明白为什么我们上面又在/usr/src下"多余"地创建了个名为linux的链接了吧?

      接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。 
       
    配置内核可以根据需要与爱好使用下面命令中的一个:

    #make config(基于文本的最为传统的配置界面,不推荐使用) 
    #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) 
    #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 
    #make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

      这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令,界面如下:

      如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了,下图为make menuconfig的界面:


      选择相应的配置时,有三种选择,它们分别代表的含义如下: 
      Y--将该功能编译进内核 
      N--不将该功能编译进内核 
      M--将该功能编译成可以在需要时动态插入到内核中的模块 
      如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。 
      在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。

    至于选项,因为比较复杂,只是简单做一介绍,编译时应视具体情况,参考帮助的内容再加以选择。

    1. Code maturity level options 
      代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。

    2. Loadable module support 
      对模块的支持。这里面有三项:

      Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 
      Set version inFORMation on all module symbols:可以不选它。 
      Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。

    3. Processor type and features 
      CPU类型。内容蛮多的,不一一介绍了,有关的几个如下:

      Processor family:根据你自己的情况选择CPU类型。 
      High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 
      Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 
      MTTR support:MTTR支持。可不选。 
      Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。

    4. General setup 
      这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:

      Networking support:网络支持。必须,没有网卡也建议你选上。 
      PCI support:PCI支持。如果使用了PCI的卡,当然必选。 
      PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。 
      Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 
      PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。 
      System V IPC 
      BSD Process Accounting 
      Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 
      Power Management support:电源管理支持。 
      Advanced Power Management BIOS support:高级电源管理BIOS支持。

    5. Memory Technology Device(MTD) 
      MTD设备支持。可不选。

    6. Parallel port support 
      并口支持。如果不打算使用串口,就别选了。

    7. Plug and Play configuration 
      即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。

    8. Block devices 
      块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:

      Normal PC floppy disk support:普通PC软盘支持。这个应该必选。 
      XT hard disk support: 
      Compaq SMART2 support: 
      Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。 
      Loopback device support: 
      Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。 
      Logical volume manager(LVM)support:逻辑卷管理支持。 
      Multiple devices driver support:多设备驱动支持。 
      RAM disk support:RAM盘支持。

    9. Networking options 
      网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。

    10. Telephony Support 
      电话支持。Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。

    11. ATA/IDE/MFM/RLL support 
      这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。

    12. SCSI support 
      SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。

    13. Fusion MPT device support 
      需要Fusion MPT兼容PCI适配器,不用选。

    14. I2O device support 
      需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。

    15. Network device support 
      网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。

    16. Amateur Radio support 
      配置业余无线广播。

    17. IrDA(infrared)support 
      红外线支持。

    18. ISDN subsystem 
      如果你使用ISDN上网,这个就必不可少了。

    19. Old CD-ROM drivers(not SCSI、not IDE) 
      做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。

    20. Character devices 
      字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:

      I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。 
      Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。 
      Joysticks:手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。 
      Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。 
      Video For Linux:支持有关的音频/视频卡。 
      Ftape, the floppy tape device driver: 
      PCMCIA character device support:

    21. File systems 
      文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项:

      Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。 
      DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。 
      ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。 
      NTFS file system support:ntfs是NT使用的文件格式。 
      /proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。

      还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。

    22. Console drivers 
      控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。

    23. Sound 
      声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。

    24. USB supprot 
      USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。

    25. Kernel hacking 
      配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。

      配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。

    接下来是编译,输入以下命令。

    #make dep 
    #make clean 
    #make bzImage或make zImage 
    #make modules 
    #make modules_install 
    #depmod -a

      第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;make zImage和make bzImage则实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核。建议大家使用make bzImage命令。 
      后面三个命令只有在你进行配置的过程中,在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。 
      严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。

    更新

      经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动:

    #cp /usr/src/linux/System.map /boot/System.map-2.4.18 
    #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18

      以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:

    #cd /boot;rm -f System.map vmlinuz 
    #ln -s vmlinuz-2.4.18 vmlinuz 
    #ln -s System.map-2.4.18 System.map

    七、修改启动管理器

      如果用LILO,修改/etc/lilo.conf,添加以下项:

    image=/boot/vmlinuz-2.4.18 
    label=linux240 
    read-only 
    root=/dev/hda2

      其中root=/dev/hda2一行要根据需要自行加以修改。 
      运行:

    #/sbin/lilo -v

      确认对/etc/lilo.conf的编辑无误,现在重新启动系统:

    #shutdown -r now

    如果是用Grub启动管理器,则添加如下几项即可。

    title Red Hat Linux (2.4.18) 
    root (hd0,0) 
    kernel /vmlinuz-2.4.18 ro root=/dev/hda2

    Grub不需再次调用命令,自动生效。

    重启以后就可以用新内核了。 


    展开全文
  • Linux内核编译与安装:4.4.0-21→4.14.0

    万次阅读 2018-05-06 22:54:18
    1. 背景从事Linux环境下开发...2. 编译环境zg-Linux etc # uname–a(查看内核Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linuxzg-Linux etc # lsb_re...

    1.     背景

    从事Linux环境下开发工作,一直想自己玩,纯属好奇,没撒背景。

    2.     编译环境

    zg-Linux etc # uname–a(查看内核)

    Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux

    zg-Linux etc # lsb_release–a(查看发布版本)

    No LSB modules are available.

    Distributor ID:   LinuxMint

    Description:    Linux Mint 18 Sarah

    Release:        18

    Codename:       sarah

    3.     编译步骤

    1)  下载内核源代码

    https://www.kernel.org/pub/linux/kernel/网站上下载最新的Linux内核***(我下载的是linux-4.14.tar.xz,也就是4.14稳定版内核的第一个版本,不是最新)。

    2)    部署内核源代码

    打开终端,更改用户权限为root。

    输入mv linux-4.14.tar.gz  /usr/src  ------> 目的是把下载的内核源代码文件移到/usr/src目录;

    输入cd /usr/src切换到该目录下;

    输入tar zxvf linux-4.14.tar.gz ------> 目的是解压内核包,生成的源代码放在linux-4.14目录下;

    说明:如果下载的是的.tar.xz文件:先用 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvfxxx.tar来解包。

    参考:http://blog.csdn.net/rheostat/article/details/7614451

    输入cd linux-4.14,切换到该目录下;

    输入cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config  ------>  目的是使用在boot目录下的原配置文件。

    简单说明:

    1.      操作可能需要root权限;

    2.      将下载的内核源代码拷贝到/usr/src目录并解压

    3.      将当前系统的配置拷贝至待编译的源代码目录,也就是以当前系统的配置编译源代码

    3)    配置内核

    配置内核的方法很多,主要有如下几种:

    1.      #make menuconfig  //基于ncurse库编制的图形工具界面

    2.      #make config  //基于文本命令行工具,不推荐使用

    3.      #make xconfig  //基于X11图形工具界面

    4.      #make gconfig  //基于gtk+的图形工具界面

    由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

    对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

    <*>或[*]——将该功能编译进内核

    []——不将该功能编译进内核

    [M]——将该功能编译成可以在需要时动态插入到内核中的代码

    说明:笔者输入make menuconfig  后并没有配置其他内核编译配置(因为还不是特别懂),只是试了下此流程,是可用的

    4)    编译内核

    这步是时间最长的一个步骤,一般在2个小时左右。
    编译内核只需在终端(目录:/usr/src/linux-4.14) 输入:

    make

    或者make –jN 以多线程编译,N代表线程数,我的电脑是双核4线程,N填了4),然后等待编译的完成。

    5)    编译和安装内核模块

    make –j4  modules_install

    6)    安装内核

    make –j4 install

    7)    生成启动

    1.   产生initramfs image映像

    zglinux src # mkinitramfs-o /boot/initrd.img-4.14.0

    Warning: No support for locale: en_US.utf8

    man解释:

    The mkinitramfs  script  generates an initramfs image.  The initramfs is a compressed cpio archive.The archive can be used on a different box of the  same arch  with  the corresponding  Linux kernel.   mkinitramfs is meant foradvanced usage. On your local box update-initramfs calls mkinitramfs with therelevant parameters.  update-initramfs keepssha1sum of generated initramfs. It takes care to generate backups andeventually runs the bootloader.

    翻译:产生initramfs映像文件,它是一个压缩了cpio包。

    2.    更新initramfs

    zglinux src # update-initramfs-c -k 4.14.0

    update-initramfs: Generating/boot/initrd.img-4.14.0

    W: Possible missing firmware/lib/firmware/radeon/si58_mc.bin for module radeon

    Warning: No support for locale: en_US.utf8

    man解释:

    The update-initramfs script manages your initramfs images on your local box.  Itkeeps track of(记录、追踪) the existing initramfs archives in /boot.  There are three modes of operation create,update or delete.  You must at leastspecify one of those modes.

    3.   产生(更新)启动配置

    zglinux src # update-grub2

    Generating grub configuration file ...

    Warning: Setting GRUB_TIMEOUT to a non-zerovalue when GRUB_HIDDEN_TIMEOUT is set is no longer supported.

    Found linux image: /boot/vmlinuz-4.14.0

    Found initrd image: /boot/initrd.img-4.14.0

    Found linux image:/boot/vmlinuz-4.4.0-21-generic

    Found initrd image:/boot/initrd.img-4.4.0-21-generic

    Found memtest86+ image: /memtest86+.elf

    Found memtest86+ image: /memtest86+.bin

    done

    man解释:

    update-grub is  a stub for runninggrub-mkconfig -o /boot/grub/grub.cfg to generate a grub2 config file.

    4.   查看启动配置文件:/boot/grub/grub.cfg

    用vim搜索出有4.14.0的启动项,到目前为止应该都成功了。

    说明:以上步骤涉及到linux的启动流程,请参阅其他文章:

    https://www.linuxidc.com/Linux/2017-08/146494.htm

    4.     重启

    1)    重启前:

    zglinux grub # uname -a

    Linux zglinux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 1818:34:49 UTC 2016 i686 i686 i686 GNU/Linux

    2)    重启后

    zhaogang@zglinux ~ $ uname -a

    Linux zglinux 4.14.0 #1 SMP Sun Mar 11 00:22:41 CST 2018 i686i686 i686 GNU/Linux

    5.     结果:

    实验成功,之前安装的ssh、smb等都不受影响。整个过程断断续续花费5个小时左右,包括第一次/usr目录爆满导致重新分区装系统。

    6.     可能出错点:

    1)    #make menuconfig(配置内核阶段)

    报错1(重装系统前):

    In file included fromscripts/kconfig/mconf.c:23:0:

      scripts/kconfig/lxdialog/dialog.h:38:20:fatal error: curses.h: No such file or directory

    报错2(装系统后):

    zglinux linux-4.14 # make menuconfig

    HOSTCC scripts/basic/fixdep

    *** Unable to find the ncurses libraries orthe

    *** required header files.

    *** 'make menuconfig' requires the ncurseslibraries.

    ***

    *** Install ncurses (ncurses-devel) and tryagain.

    ***

    scripts/kconfig/Makefile:202: recipe fortarget 'scripts/kconfig/dochecklxdialog' failed

    make[1]: ***[scripts/kconfig/dochecklxdialog] Error 1

    Makefile:548: recipe for target'menuconfig' failed

    make: *** [menuconfig] Error 2

    原因:

    两个错误原因相同,因为make menuconfig是基于ncurse库编制的图形工具界面来配置内核,其依赖ncurses,所以需要安装ncurses包:

    apt-get installlibncurses5-dev

    2)    make编译内核阶段(步骤4)

    报错:

    scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: No suchfile or directory

    原因:

    编译环境没有openssl库,所以需要安装ssl包:

    apt-get installlibssl-dev

    3)    装系统后make编译报错

    报错:

    scripts/basic/fixdep.c:105:23:fatal error: sys/types.h: No such file or directory

    原因:

    没有安装libc的库:

    apt-get installlibc6-dev

    4)    编译告警(可忽略,重装之后的好像没有了,也不太清楚,因为重装系统后的编译过程我没看,直接洗漱去了)

    WARNING: modpost: Found 1 sectionmismatch(es).

    To see full details build your kernel with:

    'make CONFIG_DEBUG_SECTION_MISMATCH=y'

    5)    zg-Linux etc # df -h

    Filesystem       Size Used Avail Use% Mounted on

    udev             1.9G     0 1.9G   0% /dev

    tmpfs            392M   22M 371M   6% /run

    /dev/sda1        14G   13G  623M  96% /                                     ----快用爆了,最后还是用爆了

    最后---确实把/目录用爆了,编译终止,看来要重新换系统了

    ld: final link failed: No space left ondevice

    scripts/Makefile.modpost:125: recipe fortarget 'drivers/net/wireless/p54/p54common.ko' failed

    make[1]: ***[drivers/net/wireless/p54/p54common.ko] Error 1

    此问题导致我重新分区重新装了一次系统,具体分区、重装linux系统请参考其他文章。此处只贴上我重装的分区

    zhaogang@zglinux ~ $ df -h

    Filesystem      Size Used Avail Use% Mounted on

    udev            1.8G     0 1.8G   0% /dev

    tmpfs           392M 6.5M  386M   2% /run

    /dev/sda1        19G 3.0G   15G  18% /

    /dev/sda7      138G   14G 118G  11% /usr

    tmpfs           2.0G 876K  2.0G   1% /dev/shm

    tmpfs           5.0M 4.0K  5.0M   1% /run/lock

    tmpfs           2.0G     0 2.0G   0% /sys/fs/cgroup

    /dev/sda6       9.1G 411M  8.2G   5% /boot

    /dev/sda8       290G  82M  275G   1% /home

    cgmfs           100K     0 100K   0% /run/cgmanager/fs

    tmpfs           392M   16K 392M   1% /run/user/1000

    7.     参考:

    1)    bug解决

    http://blog.csdn.net/chengwei920412/article/details/39379499

    http://blog.csdn.net/MingLLu/article/details/50960576

    2)    编译流程

    http://blog.csdn.net/fjt19900921/article/details/8316481

    http://blog.csdn.net/qq_34247099/article/details/50949720

    8.     附图几张:

    1)    内核编译配置页面(网上抄来,我的也一样,忘记截图了)

    2)    重启后的系统内核---没骗你的。

    展开全文
  • Linux内核的整体架构简介

    万次阅读 多人点赞 2017-10-23 17:46:51
    本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。 注:本文和...
  • Linux内核版本和发行版本

    万次阅读 2017-10-26 12:13:04
    1.1.4 Linux内核版本和发行版本1.内核版本 内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。例如,程序本身不需要了解用户的主板芯片集或...
  • Linux内核简介

    万次阅读 多人点赞 2018-06-16 18:56:29
    大纲:理解Linux内核最好预备的知识点Linux内核的特点Linux内核的任务内核的组成部分哪些地方用到了内核机制?Linux进程 Linux创建新进程的机制Linux线程 内核线程地址空间与特权级别 虚拟地址与物理地址 特权级别...
  • Linux内核组成部分(一)

    千次阅读 2019-01-11 10:31:38
    内核的任务 在纯技术层面上,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址 从应用程序的视角来看,内核可以被认为是一台增强的...
  • 3---Linux内核及内核编程

    千次阅读 2018-12-21 10:59:06
    什么是操作系统? 指在系统中负责完成最基本功能和系统管理的部分, 操作系统有哪些组成部分?...Linux内核源代码目录结构是什么,各目录有什么含义? arch:包含和硬件体系结构相关的代码,每种平台占一...
  • Linux的用户空间与内核空间

    万次阅读 2018-09-03 10:51:23
    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间。两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在...
  • 查看Linux内核版本命令

    万次阅读 2020-08-17 16:35:55
    1.umane -a 2.cat /proc/version 3.lsb_release -a
  • Linux内核源码阅读以及工具(转)

    万次阅读 2020-01-21 18:26:01
    Linux内核源码阅读以及工具(转) 转载地址:Linux内核源码阅读以及工具(转)
  • 查看Linux内核版本的命令

    万次阅读 2008-08-07 22:23:00
    方法一: 命令: uname -a作用: 查看系统内核版本号及系统名称方法二:命令: cat /proc/version作用: 查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称补充说明: /proc文件系统,它...
  • 如何查看linux内核版本

    万次阅读 2018-04-09 09:50:56
    第一种:登录linux,在终端输入 cat /proc/version 运行效果如下图: 第二种:登录linux,在终端输入 uname -a 即列出linux内核版本号 运行效果如下图: 第三种:在Linux终端输入 unmae -a 即可查看linux的...
  • Linux内核下载地址(官方网站)

    万次阅读 2018-03-10 09:25:38
    https://www.kernel.org/pub/linux/kernel/
  • Linux升级内核的正确姿势

    万次阅读 热门讨论 2018-08-21 11:26:10
    Linux升级内核的正确姿势 很多童鞋在玩耍linux发行版的时候,都会遇到各种各样的问题,比如:网卡不能使用,亮度不能调节,触摸板不能识别...Linux内核最早是于1991年由芬兰黑客林纳斯·托瓦兹为自己的个人计算机开...
  • linux内核源码下载地址

    万次阅读 多人点赞 2018-08-25 22:36:38
    官网链接: https://www.kernel.org/ HTTP ... GIT ... 官网下载经常速度太慢,无法下载,提供另一个链接: http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 可以根据需要,下...
  • 删除Ubuntu中不用的内核

    万次阅读 2018-03-20 19:42:37
    最近在学习Linux相关的知识,免不了查看Linux源代码和修改源代码,并且编译Linux内核。下面简单介绍一下如何删除Ubuntu中不用的内核。1、查看Linux中当前使用的内核:使用 uname -a 或者 uname -r 命令2、查看Linux...
  • Linux内核学习笔记(1)—— 什么是Linux内核? 1. 什么是操作系统? 操作系统是负责完成整个系统中最基本功能和系统管理,包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件...
  • Linux内核国内镜像下载地址

    万次阅读 2019-08-02 17:15:44
    http://mirror.bjtu.edu.cn/kernel/linux/kernel/ 苦于官方网站的访问速度,这里记录一下。
1 2 3 4 5 ... 20
收藏数 673,791
精华内容 269,516
关键字:

linux内核