本文转载自: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. Maven构建简单的多模块项目

    复制于http://www.cnblogs.com/luxh/p/3506750.html 做个记录 一般web项目会进行分模块开发.这里简单分为domain(领域层).persist(持久层).se ...

  2. 1047. Student List for Course (25)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the registered course li ...

  3. 普通工程转为mvn工程

    不同类型的工程可以转为mvn工程, 只需要一个插件 You may need to install m2e-eclipse plugin in order to have this simple ut ...

  4. html中隐藏域hidden的作用介绍及使用示例

    基本语法: <input type="hidden" name="field_name" value="value"> 作用:  ...

  5. JAVA生成二维码图片代码

    首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt. ...

  6. linux中,常用的账号管理命令

    创建新用户:adduser 用户名创建新用户并将其加入一个现有组中:adduser 用户名 -G 组名创建新用户并使其只属于该组:adduser 用户名 -g 组名创建用户密码:passwd 用户名创 ...

  7. bind绑定事件,摁回车键提交查询,点击查询也可以提交查询

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. mysql入门教程

    mysql相信大家都非常熟悉,but读音你们都读对了么?MySQL [maɪ ˌɛskjuːˈɛl] [maɪ ˈsiːkwəl] 念 买S奎儿 或 买吸扣 都可以,还有好多容易读错的名词,详情请见I ...

  9. GROUP BY 與 Null 值

    若群組資料行包含了 Null 值,該資料列將變成結果中的一個群組.若群組資料行內包含了多個 Null 值,Null 值將放入單一群組內.此行為定義於 SQL-2003 標準之中. Product 資料 ...

  10. LFS初次成功+如何粘贴复制LFS命令

    搞了几次LFS,终于成功了,总算舒了一口气. 这次搞LFS用到的资料:LFS文档:http://www.ha97.com/book/lfs-book-6.6/index.html  一份简单的指导文章 ...