内核源代码下载:www.kernel.org

Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。

linux内核代码最好不要在windows下解压,因为同名(大小写)会丢失一些code。

source insight:添加汇编文件:option->Document option 添加.c、.h、.s、.S

内核目录:

arch目录 :内核所支持的每种CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等 。

documentation :内核的文档

drivers目录:设备驱动程序。

做移植时:主要该arch和driver下。

include目录 :内核所需要的头文件。与平台无关的头文件在include/linux 子目录下,与平台相关的头文件则放在相应的子目录中

script:配置内核的脚本。

内核配置与编译: 执行这些命令的位置是在内核代码的顶层目录下

linux内核具有可定制的优点,具体步骤:

1.清除临时文件、中间文件和配置文件(三种命令,删掉不同的类型)

make clean:remove most generated files but keep the config

make mrproper:remove all generated files+config files

make distclean:mrproper+remove editor backup and patch files(最全的)

但不是最全的就是最好的,加入只编译后,只需要删除.o文件,不需要删除配置文件,则make clean(根据需要来删除)

 

2.确定目标系统的软硬件配置情况,比如CPU的类型、网卡的型号、所需支持的网络协议等。

3.配置内核:结果保存在.config文件中。

make config:基于文本模式的交互式配置。
make menuconfig:基于文本模式的菜单型配置 。(推荐使用)

  特点:直观高效,简单。利用空格键,选取值。

make oldconfig:使用已有的配置文件(.config),但会询问新增的配置选项。

make xconfig:图形化配置(需要安装图形化系统,其它前面三个既可以在文本模式下使用,也可以在图形化系统使用)

内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,linux内核提供了一系列可供参考的内核配置文件,位于ARCH/$CPU/configs

如:ARCH/ARM/configs下。。。把这个配置文件拷贝到内核的顶层文件下。

*:y  ;空格:N

 

配置内核文件的原则:

找到一个可以参考的结果文件,基于这个文件再调整。

4.内核编译

make zImage

make bzImage

区别:在X86平台,zImage只能用于小于512K的内核,在其他平台两种方式是没有区别的。

如需要获取详细编译情况,可使用:

make zImage V=1

make bzImage V=1

编译好的内核位于arch/$cpu/boot,

5.编译内核模块:

make modules

6.安装内核模块

make modules_install

将编译好的内核模块从内核源代码目录copy到/lib/modules下

7.制作init ramdisk

mkinitrd  initrd-$version   $version

initrd-$version :取名字

$version:内核的版本

注意:$version通过查询/lib/modules下的目录得到。

安装内核:1、cp arch/x86/boot/bzImage     /boot/vmlinuz-$version   //把内核.img拷贝出来

2、cp initrd-$version /boot/                    //把ramdisk拷贝出来
3、修改/etc/grub.conf

linux内核源代码、配置与编译的更多相关文章

  1. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  2. Ubuntu:编译Linux内核源代码和内核模块

    1. 目的 内核模块需要运行在Linux 3.8.13内核中,因此需要为此内核重新编译内核模块源代码. 2. 步骤 1.在Ubuntu 14.04 64位(内核3.13.0-24-generic)上, ...

  3. linux内核的配置

    以2.6.35.7版本的内核为例 总结:.config决定了Make时的条件编译与连接..config文件由两次配置第一次make XX_defconfig 第二次menuconfig. 1.分析源码 ...

  4. Linux内核源代码

    说明:只供学习交流 一,目录结构 Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具有可读性. 二,目录结构 arch目录 arch是archite ...

  5. Linux内核源代码目录树结构

    Linux内核源代码目录树结构. arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录.和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分).mm(内 ...

  6. Linux 内核源码外编译 linux模块--编译驱动模块的基本方法

    1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...

  7. Linux内核源代码获取教程

    Linux内核源代码获取方法 什么叫Linux 什么叫Linux内核 Linux内核源代码的获取 什么叫Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UN ...

  8. 在windows下解压缩Linux内核源代码出现重复文件原因

    在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

  9. Linux内核源代码情景分析系列

    http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统  5.1 概述 构成一个操作系统最重要的就 ...

随机推荐

  1. Java解析json(二):jackson

    Java解析json(二):jackson   官方参考 Jackson Home Page:https://github.com/FasterXML/jackson Jackson Wiki:htt ...

  2. Thinlphp 模版 foreach 嵌套在 另一个循环出现不能在次循环问题。

    把 foreach 循环改成 volist 就可以重置循环所以的数据.

  3. php if语句判定my查询是否为空

    <?php header("Content-type: text/html; charset=utf-8"); $username=$_GET['username']; $p ...

  4. 经典SQL面试题(转)

    http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录 ...

  5. java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException 异常解决方案

    在SpringMVC中使用Jackson实现json输出时配置如下: <!-- 输出对象转JSON支持 --> <bean id="stringConverter" ...

  6. 如何使用github,简单教程

    前期准备:先行设置SSH KEY(请看我之前发的关于设置添加SSH的文章) 直接上命令: clone 已有仓库到身边的开发环境中 git clone git@github.com:<yourna ...

  7. windows 系统重装之后怎么恢复oracle数据库

    今天单位的服务器系统进不去了,重做了系统,有重要的oracle数据,经理让我恢复一下oracle数据,试着尝试了一下 1.首先,将原来的ORACLE文件夹改名,原来的路径是D:/oracle.我暂时改 ...

  8. POJ2456 Aggressive cows(二分+贪心)

    如果C(d)为满足全部牛之间的距离都不小于d. 先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d. #include<iostream> #include<cstdio> ...

  9. DML语句报错是因为控制文件无法扩大还是另有原因?

    今天处理了一个很有意思的故障问题,来龙去脉是这种: 客户来电咨询控制文件无法扩展,数据库仅仅能查询但不支持DML,须要远程支持.接到电话的第一反应就是CONTROL_FILE_RECORD_KEEP_ ...

  10. shell脚本学习总结11--脚本调试

    参数: -n    不执行脚本,仅检查语法是否错误 -v    将脚本内容输出到屏幕上,然后执行脚本 -x   执行脚本,并将内容输出到屏幕 -n [root@new sbin]# sh -n deb ...