本文转载自: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. 淘宝玉伯引发Web前后端研发模式讨论

    淘宝玉伯是是前端基础类库 Arale 的创始人,Arale 基于 SeaJS 和 jQuery.不久前,淘宝玉伯在 Github 的 Arale 讨论页面上抛出了自己对于Web 前后端研发模式的思考. ...

  2. [Android] adb.exe换了位置

    好久没有做android开发了,今天重新下载了新的sdk,发现adb.exe从sdk/tools里面消失了,添加了系统环境变量的路径就还是没法调动adb.exe命令,网上搜了一下原理是存在了新版的sd ...

  3. [LintCode] Ugly Number 丑陋数

    Write a program to check whether a given number is an ugly number`. Ugly numbers are positive number ...

  4. Centos Odoo Service Config

    #!/bin/sh ### BEGIN INIT INFO # Provides: openerp-server # Required-Start: $remote_fs $syslog # Requ ...

  5. hdu 小希的迷宫

    真是被这道并查集的水题给坑哭了...忘记给uset数组初始化我也是醉了. 题目意思是找到判断是不是连通无环的图,首先想到的就是并查集. 1判断成环的时候,只要判断输入边的两个点.有一个共同的父节点,那 ...

  6. jquery 多选框的问题

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 继续畅通工程-Floyd

    畅通工程续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  8. GIT与SVN的区别

    1.GIT是分布式的,SVN不是: 这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别.如果你能理解这个概念,那么你就已经上手一半了.需要做一点声明,GIT并不是目前第一个或唯 ...

  9. Oracle-01033错误处理

    今天电脑非常卡,强制重启后,发现oracle 11g启动不了了,提示错误: ERROR - ORA-01033 oracle initialization or shutdown in progres ...

  10. Fisher-Yates 乱序算法

    这两篇博客[1][2]的模式是我心仪的一种科技博客的方式,提供源代码,显示运行图形结果,通俗地介绍理论原理. 直接把结论摘录下来吧. 随机算法如果写成如下形式 randomIndex = random ...