嵌入式Linux内核制作【转】

本文转载自: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目录所在的路径,这个编译的时间稍微长一点,大概十分钟左右吧!

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

时间: 2024-10-23 01:11:34

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

嵌入式Linux内核制作

一.Linux内核简介 Linux系统架构分为内核空间和用户空间.它们之间切换条件:1.系统调用 2.硬件中断. 内核架构:1.系统调用接口 2.进程管理块 3.内存管理 4.体系结构相关代码 4.虚拟文件系统 5.网络栈 6.设备驱动 二.制作Linux内核 1.修改配置文件 make config --文本模式交互式的配置 make menuconfig --基于文本模式的菜单型配置(直观.简单.高效.推荐) 配置文件的选择:1.默认   2.已有的配置文件,Linux系统下的/boot/目

7、嵌入式linux内核制作

前面我们已经制作了uboot,接下来是制作kernel. 首先进入内核源码,执行make distclean.清除先前编译产生的文件. 注意配置内核的时候多了一个ARCH=arm的条件. 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会去找一个配置好的配置文件: 把config-file拷贝到我们的内核代码目录下: 然后把config-file拷贝成.config. 重新进入配置界面,发现配置生效了. 接下来就是内核的编译: 在编译的过程中会出现这样的一个错误: 这

3.4.嵌入式linux内核制作

? ? ? 前面我们已经制作了uboot,接下来是制作kernel. 首先进入内核源码,执行make distclean.清除先前编译产生的文件. 注意配置内核的时候多了一个ARCH=arm的条件. 回车之后会进入arm的配置菜单: 就像我们前面配置linux内核一样,我们也会去找一个配置好的配置文件: 把config-file拷贝到我们的内核代码目录下: 然后把config-file拷贝成.config. 重新进入配置界面,发现配置生效了. 接下来就是内核的编译: ? ? ? 在编译的过程中会

第四季-专题3-嵌入式Linux内核制作

专题3-嵌入式Linux内核制作 一.linux内核简介 系统架构 (1)Linux系统是怎么构成的? (2)为什么linux系统分为了用户空间和内核空间? 现代CPU通常实现了不同的工作模式,以ARM为例,就实现了7中工作模式: 用户模式(usr),快速中断(fiq),外部中断(irq).管理模式(svc),数据访问中止(abt),系统模式(sys),未定义指令异常(und). X86也实现了4个不同的级别:Ring0-Ring3.Ring0下,可以执行特权指令,可以访问IO设备等,在RIng

嵌入式linux 内核关机函数实现

arch/arm/kernel/process.c 实现pm_power_off = 关机函数 参考 board-omap3touchbook.c 文件中 pm_power_off = omap3_touchbook_poweroff; static void omap3_touchbook_poweroff(void) { int pwr_off = TB_KILL_POWER_GPIO; if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "D

维护嵌入式 Linux 内核——So Easy

安全漏洞只发生在 Windows 上的好日子正在快速过去.恶意软件黑客和拒绝服务老手们正在越来越多地瞄准过时的嵌入式 Linux 设备,因此在 10 月的欧洲嵌入式 Linux 会议(ELCE)上的几个演讲的主题就与修复 Linux 安全漏洞相关. 最值得去听的讲演之一是 Pengutronix 内核黑客 Jan Lübbe 的<长期维护或管理(或免管理)嵌入式系统 10 年以上>.在总结嵌入式 Linux 中不断增长的安全威胁后,Lübbe 制定了一项计划,以确保长期设备的安全和功能完整.

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

Linux 中断编程分为中断顶半部,中断底半部 中断顶半部: 做紧急,耗时短的事情,同时还启动中断底半部.中断底半部: 做耗时的事件,这个事件在执行过程可以被中断.中断底半部实现方法: tasklet,工作队列,软中断等机制实现.实际上是把耗时事件推后执行,不在中断程序执行. 什么是tasklet? Tasklet 一词的原意是"小片任务"的意思,这里是指一小段可执行的代码,且通常以函数的形式出现.这个 tasklet 绑定的函数在一个时刻只能在一个 CPU 上运行 ,tasklet(

【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】

本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加内核启动Hello World 任务: 内核启动的时候加载Hello驱动,并打印出Hello World 步骤: (1)在drivers目录下新建hello文件夹,在里面实现相应的hello.c.Makefile.Kconfig (2)修改上一级(Linux-3.4.2/drivers下)的Make

linux内核---嵌入式linux内核的五个子系统

转自:https://blog.csdn.net/qq_27522735/article/details/63251168 Linux内核主要由进程调度(SCHED).内存管理(MM).虚拟文件系统(VFS).网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示. 图1 Linux内核的组成部分与关系 1.进程调度 进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中"微观串行,宏观并行"地执行.进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为