本文转载自:http://blog.csdn.net/coding__madman/article/details/51291316

1. Linux体系结构

从整体上来分,linux可以分为User Space和Kernel Space构成,即用户空间和内核空间

用户空间:应用程序 C库 系统配置文件等

内核空间:在内存中,用户一般不能直接接触到(系统调用接口,体系结构相关的一些代码等等)

这样划分的的好处:

其实内核空间与用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间

转移。

下面来了解一下Linux内核架构

从上图中可以看到内核架构是有七个子系统组成的。

1. 系统调用接口模块

2. 进程管理模块

3. 内存管理子系统

4. 体系结构相关的子系统(和CPU密切相关)

5. 虚拟文件系统

6. 网络协议栈子系统

7. 设备驱动程序模块

这七个部分就组成linux内核了

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

下面简要介绍linux内核源码下几个重要的目录文件:

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

documentation目录:内核的文档(比如一些驱动的使用方法,一些内核的更新记录等等都是放在这个目录里面)

drivers目录:设备驱动程序

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

fs目录:存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统VFS

上面初步了解了linux内核的一些相关的概念之后!下面来体会一下如何把linux内核源码变成可以在开发板上运行的程序!这里就涉及到了内核的配置和编译部分了!

内核配置方法:

下载解压内核源码,在内核源码目录下,有两个命令可以配置内核

1. make config: 基于文本模式的交互式配置

2. make menuconfig: 基于文本模式的菜单型配置(这个配置方法更直观、简单、高效)这个进入菜单后如何配置自己查下资料每个选项的选中的符号所代表的意义,这个操作两次就会了。

这里简要介绍下三个选项所代表的意义:

<*>选择该功能,该功能会被编译进内核,运行在内存中

<M>选中该功能,内核模块,不编译进内核,会将相应的模块编译成.O文件,然后放到相应的目录下存放在硬盘里面,当要用到该功能时,内核会把该功能加载到内存中,不用的时候从内存中删除,这样可以节省内存,提高内存利用率

< >本次编译不选中该功能

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

编译内核:

编译内核模块:

这个是针对X86上安装linux内核的

内核清理:

make clean 是清除产生的.o文件 但是不会清除掉.config文件

make disclean 同时清除.o文件和.config文件

以上是更新PC机上linux内核的一些相关步骤,下面来详细重点介绍嵌入式linux制作!

制作嵌入式平台使用的linux内核,方法和制作PC平台的Linux内核基本一致

1. 清除原有配置和中间文件

X86:    make distclean

arm:    make distclean

内核制作步骤

2. 配置内核

X86: make menuconfig

arm: make menuconfig ARCH=arm

3. 编译内核

X86: make bzImage

arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-

tar xvzf  filename.tar.gz解压文件到当前目录

然后make distclean命令做清除工作

然后执行make menuconfig ARCH=arm

执行完后可以看到进图图像配置界面:

下面来就可以愉快的配置linux内核了(这里使用一个开发厂商提供的.config配置文件)

这里把配置文件config-file改成.config 并且复制到上面解压的目录下

然后在make menuconfig ARCH=arm(当然这里不用改什么,不过这里用国嵌提供的后边编译会出错,这里需要修改一个地方)

这里需要把配置文件的一个地方的路径改为上面fs目录所在的路径,不过视频中老师用的和自己用的肯定不一样

老师的用的是这个路径:CONFIG_INITRAMFS_SOURCE="/home/S5-driver/lesson8/rootfs"

下面红色部分是我自己的路径,但是我改了后发现还是编译不过!后来对比着其他的资料看把这里面的路径删除去掉就OK了,记得第一次学到这里的时候是看了后边的视频然后才搞清楚这里为什么错了!这个编译之前已经make distclean 了,但拷贝进去的.config文件的路径都是上面老师视频里面的路径!

把上图红色部分引号里面的路径全部去掉,然后编译,就OK了

这里贴一张编译成功后的截图:

在 /arch/arm/boot/目录下 uImage编译成功!

红色部分改成我自己fs目录所在的路径,这个编译的时间稍微长一点,大概十分钟左右吧!

编译通过后然后下载到开发板运行看效果!

嵌入式Linux内核制作【转】的更多相关文章

  1. 嵌入式linux内核制作、根文件系统制作

    嵌入式系统构成: 主要由bootloader.kernel.以及根文件系统三部分组成. 内核制作步骤: 制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致 1.清除原有配置 ...

  2. [国嵌攻略][100][嵌入式Linux内核制作]

    Linux内核制作步骤 1.清除原有配置 make distclean 2.配置内核 选择一个已有的配置文件简化配置 make menuconfig ARCH=arm 3.编译内核 ARCH指明处理器 ...

  3. 嵌入式linux内核制作

    今天来总结一下mini2440的内核制作过程. 一. 将内核文件拷贝至目标目录,解压. 二.清除中间文件 命令:make distclean 三.配置内核文件 将开发板厂商制作好的内核文件拷贝至内核文 ...

  4. 制作嵌入式linux内核

    拿到一个嵌入式linux内核代码,首先make distclean 接下来,如果在x86平台,就直接make menuconfig,如果是在ARM平台,就直接make menuconfig ARCH= ...

  5. 嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导【转】

    本文转载自:https://my.oschina.net/freeblues/blog/596448 嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导 buildroot 是 ...

  6. 嵌入式linux内核和根目录制作

    系统组成:Bootloader, Boot parameters, Kernel, Root filesystem嵌入式linux系统有linux内核与根文件系统两部分构成,两者缺一不可. 内核制作: ...

  7. 嵌入式linux内核是什么?

    linux内核是一种可以被内核动态加载(insmode)和卸载(rmmod)的可执行二进制代码 最简单的内核 #include <linux/module.h> #include < ...

  8. 嵌入式Linux内核tasklet机制(附实测代码)

    Linux 中断编程分为中断顶半部,中断底半部 中断顶半部: 做紧急,耗时短的事情,同时还启动中断底半部. 中断底半部: 做耗时的事件,这个事件在执行过程可以被中断. 中断底半部实现方法: taskl ...

  9. 【内核】嵌入式linux内核的五个子系统

    Perface Linux内核主要由进程调度(SCHED).内存管理(MM).虚拟文件系统(VFS).网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示. 图1 Linux内核的组成部 ...

随机推荐

  1. [LintCode] Submatrix Sum 子矩阵之和

    Given an integer matrix, find a submatrix where the sum of numbers is zero. Your code should return ...

  2. [LintCode] Maximal Rectangle 最大矩形

    Given a 2D boolean matrix filled with False and True, find the largest rectangle containing all True ...

  3. Android:The connection to adb is down, and a severe error has occured.解决方法一

    在自己机上打安桌虚拟机,竟然提示“The connection to adb is down, and a severe error has occured.please ensure ......” ...

  4. web实验指导书和课后习题参考答案

    实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ...

  5. php内网探测脚本&简单代理访问

    <?php $url = isset($_REQUEST['u'])?$_REQUEST['u']:null; $ip = isset($_REQUEST['i'])?$_REQUEST['i' ...

  6. 一些变态的PHP一句话后门收集

    这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用404页面隐藏PHP小马 ...

  7. 加盐加密salt

    加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联. 加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“( ...

  8. Java开发搜索引擎爬虫

    package com.peidon.html; import java.io.BufferedReader; import java.io.File; import java.io.FileOutp ...

  9. vs2013如何在C++中调用Lua(二)

    Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...

  10. JS验证只允许输入数字

    1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafter ...