Linux内核的裁剪

合集下载

Linux课程介绍-第五章(1)

Linux课程介绍-第五章(1)

2.进程系统堆栈 每个进程都有一个系统堆栈,用来保存中断现场信息和进 程进入内核模式后执行子程序(函数)嵌套调用的返回现 场信息。 每个进程的系统堆栈和task_struct数据结构之间存在 紧密联系,因而二者物理存储空间也连在一起 系统堆栈的大小静态确定,用户堆栈可在运行时动态扩展
5.2.3 对进程的操作 1.进程的创建 各个进程构成了树形的进程族系 内核在引导并完成了基本的初始化以后,就有 了系统的第一个进程(即初始化进程,实际上 是内核线程)。除此之外,所有其他的进程和 内核线程都由这个原始进程或其子孙进程所创 建。 除初始化进程外,其他进程都是用系统调用 fork( )和clone( )创建的。 fork( )是全部复制 ,而clone( ) 有选择地 复制
●进程控制系统用于进程管理、进程同步、进程通 信、进程调度和内存管理等。 ●内存管理控制内存分配与回收。
●文件系统管理文件、分配文件空间、管理空闲空 间、控制对文件的访问并为用户检索数据。 ●Linux系统支持三种类型的硬件设备:字符设备、 块设备和网络设备。 ●核心底层的硬件控制负责处理中断以及与机器通 信。
• 内核所在的地址空间称作内核空间 • 其他应用程序称为外部管理程序,大部分是对外围设 备进行管理和界面操作,外部管理程序和用户进程所 占据的地址空间成为外部空间
Linux内核概述
Unix内核用C语言写成 单一内核:所有的操作系统功能均被封装 在内核中,与外部程序处于不同的地址空 间。外部程序智能通过功能调用来访问内 核 微内核:内核只提供最基本、最核心的一 部分操作,如创建和删除任务、中断管理、 进程管理、存储器管理、进程间通信等, 而其他功能如文件系统、网络协议栈则在 内核外操作。
3.进程的终止

linux实验四内核裁减和编译实验报告

linux实验四内核裁减和编译实验报告

实验四内核裁减和编译一、实验目的1.了解和掌握内核源代码的目录结构;2.了解内核系统配置方式,了解Makefile和config.in脚本文件的作用;3.了解内核各项内容;4.熟悉make命令的使用。

二、实验环境预装redhat9.0(内核版本2.4.x)的PC机一台,XScale嵌入式实验箱一台(已构建嵌入式linux系统),以太网线一根,交叉编译工具链。

三、实验步骤①察看和了解Linux内核的目录及内容;②察看和了解Linux内核的Makefile文件及作用;③察看和了解Linux内核的config.in文件及作用;④使用menuconfig或xconfig察看内核编译选项及作用;⑤开关某些编译选项,自己裁剪一个Linux内核;A.[root @localhost ~]# cd XSBASE/xsbase/Kernel/2.4.18-rmk-pxal-XSBASE[root @localhost 2.4.18-rmk-pxal-XSBASE]# make menuconfigB.设置开发板上的鼠标不能操作。

进入Input Core device,然后敲空格键,取消屏幕上的鼠标操作。

退出时并保存。

C.[root @localhost 2.4.18-rmk-pxal-XSBASE]# make dep[root @localhost 2.4.18-rmk-pxal-XSBASE]# make zImage[root @localhost 2.4.18-rmk-pxal-XSBASE]# cd arch/arm/boot/[root @localhost 2.4.18-rmk-pxal-XSBASE]# cp zImage /tftpD.启动mini终端。

XSBase255> boot[root @XSBASE /root]$ tfp 192.168.0.77ftp>cd /ftp>get /tftp/zImageE.这个时候在重启板子一下,板子就不能执行触摸屏上的鼠标操作了。

基于ARM的嵌入式linux内核的裁剪与移植

基于ARM的嵌入式linux内核的裁剪与移植
ARCH

3 内核 配置 过 程
提供 用 户程 序所 使 用 的一些
自行 搭建 交叉 编译 环境 通 常 比较 复 杂 ,而 且 很 容易 出错 。本 文使 用 的是 开 发板 自带 的交 叉 编 译 器 ,即cos 33 交 叉 编译 器 ,该 编 译 只 需 将 rs一 .. 4
光 盘 中 的 am—iu 33 . r z 用 tr xf n — r l x一 .. b . 2 a v n n 4 ab i a
及 下 栽 内核 映像 到 开发 板 等设 计 ,给 出了以sc 4 O 3 2 l 为核 心 的嵌 入 式Ln x iu 内核 的裁 剪 与移植
过程。
关键词 :AR M;嵌 入式Ln x 3 2 1 ;裁剪 ;移植 iu ;¥ C 4 0
0 引 言
微 处 理 器 的产 生 为价 格 低 廉 、结 构 小 巧 的 C U和外 设 的 连接 提 供 了稳 定 可靠 的硬 件 架构 。 P 这 样 。限制嵌 入式 系统 发展 的瓶 颈就 突 出表 现在
第 1卷 1
第 1期 1
电手元 器 件 盔 用
Elcr n cCo o e t D v c p ia in et i o mp n n & e i eAp l t s c o
V . 1 I1 No 1 .l
NO V.2 9 0o
2 0 年 1 Y 09 ll
d i O3 6 /i n1 6 - 7 5 0 91 .2 o: .9 9js .5 3 4 9 . 0 .10 0 l .s 2
以在 另 一个 平 台上执 行 的程 序代 码 。不 同的C U P
需要 有 不 同 的编译 器 。交叉 编 译 如 同 翻译 一 样 ,

Linux操作系统内核裁剪的分析

Linux操作系统内核裁剪的分析
中国民航飞行学院学报操作系统内核裁剪的分析黄义文广州民航职业技术学院招生办公室广东广州摘要通过对操作系统进行裁剪使嵌入式系统和操作系统有机结合起来成为嵌入式操作系统本文对操作系统裁剪的目的和裁剪的重要环节进行了描述并描述了具体实现内核配置与编译的过程操作系统裁剪是嵌入式系统开发的重要环节关键词内核裁剪交叉编译操作系统内核具备源代码开放稳定性高可修改性强支持多种体系结构具有非常好的网络性能丰富的开发工具等优点使得它适合于嵌入式开发和应用
Ln x操 作 系统进 行裁剪 修 改 ,使 之能在 嵌入 i u 式 系统 上 运 行 的操 作 系 统 。 目前嵌入式 Ln x i u 操作系统在移动 电话 、个人数字助理 ) 、媒体 播放器 、工业控制 以及航空航天等领域有着广泛
的应用 。Ln x操作 系统 内核 的裁剪 是嵌 入式 系统 iu 开 发的重要 环节 ,对 嵌入式 系统 的开发具有 重要 意
VO . 1 . 1 No3 2
在 某 一 具 体 应 用 中 是 多 余 的 ,裁 剪 时只 需 保 留对
入 内核 ,也 可 以卸 载 释 放 所 占有 的 资源 。这 样 的 设计 方 式 可 以灵 活 、动 态 地 分 配 内核 空 间资 源 ,
嵌入式 系统应 用 程序 提供对 应 的系 统支 持 的功 能;最后是完整性和可靠性 ,裁剪后 的操作系统 在结构和功能上要具有完整性和可靠性 。
能 都 不 一 样 。 以Ln x 作 系 统 为例 ,Ln x .是 iu 操 iu 20 第一 个 支持 S 体 系 的内核版 本 ;L u 22 MP n i x .极大 地 提 升 了S MP系 统 性 能 , 同 时支 持 更 多 的 硬 件 ;
方 面 是 开 发它 的实 时 性 能 。对 标准 的操 作 系 统

第4章 Linux内核裁剪与移植 Linux系统移植(第2版) 教学课件

第4章  Linux内核裁剪与移植 Linux系统移植(第2版) 教学课件
第4章 Linux内核裁剪与移植
4.1 Linux内核结构 4.2 内核配置选项 4.3 内核裁剪及编译 4.4 内 核 升 级
4.1.2 内核源码目录介绍
Linux内核代码以源码树的形式存放,如 果在安装系统的时候已经安装了源码树, 其源码树就在/usr/src/linux下。
1.arch目录
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它 的实现方式有多种,可以由OS实现,也可以由运行库实现,也可以在一个 栈中来实现一个堆)
Choose SLAB allocator Profiling support Kprobes
选择内存分配管理器,建议选择 支持系统评测,建议不选 探测工具,开发人员可以选择,建议不选
5.init目录
init子目录包含核心的初始化代码(注意, 不是系统的引导代码)。它包含两个文件 main.c和version.c,这是研究核心如何工 作的一个非常好的起点。
6.ipc目录
ipc子目录包含核心进程间的通信代码。 Linux下进程间通信机制主要包括管道、 信号、消息队列、共享内存、信号量、套 接口。
Physical 选择XIP后,内核存放的物理地址
Kexec system call
Kexec系统调用
4.2.4 网络协议支持相关选项
菜单选项(Networking Support)的子菜 单中包含一些网络协议支持的选项。
选项名 Networking options Amateur Radio support
arch子目录包括了所有和体系结构相关的 核心代码。它的每一个子目录都代表一种 支持的体系结构,例如arm子目录是关于 ARM平台下各种芯片兼容的代码。

学习嵌入式之Linux内核裁剪的具体过程和方法-精品文档

学习嵌入式之Linux内核裁剪的具体过程和方法-精品文档


千锋3G嵌入式移动互联网技术研发培训中心


Loadable module support ---> 可引导模块支持 建议作为模块 加入内核 [] Enable loadable module support 这个选项可以让你的内核支 持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行 时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。 一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在 运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以 移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系 统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时 就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了, 否在无法启动系统。 []Automatic kernel module loading 一般情况下,如果我们的内 核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使 用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个 选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需 要的模块,这是个很棒的特性,当然要选Y喽。

千锋3G嵌入式移动互联网技术研发培训中心



Power management options (ACPI, APM) --> 电源管理选项 [ ] Power Management Debug Support 电源管 理的调试信息支持,如果不是要调试内核有关电源管理 部份,请不要选择这项。 ACPI Support ---〉高级电源接口配置支持,如 果BIOS支持,建议选上这项 []Button 这个选项用于注册基于电源按钮的事件, 比如power, sleep等,当你按下按钮时事件将发生,一 个守护程序将读取/proc/acpi/event,并执行用户在 这些事件上定义的动作比如让系统关机。可以不选择, 根据自己的需求。

基于ARM的嵌入式linux内核裁剪及移植

基于ARM的嵌入式linux内核裁剪及移植
第 2 卷第 6 ( 5 期 总第 1 8 ) 1期
V 1 5 N .( U o1 8 o. o S M N . 1 ) 2 6
机 械 管 理 开 发
M ECHANI CAL M AN AGEM ENT AND DEVEL0PM ENT
2 0年 1 01 2月
D e .0l c2 0
b nuis 2.5. rb 2、 c 一 3. trbz i t - 1 t . z g c 3. 6. . 2、g i - 2-. . r l a a lbc 3 2t . a
b2 l c l utra s232t . 和 l u -ic ha — z 、g b —i x ed - ...r i n h ag i x l - ed n b
2 B ola e 的 移 植 . 2 ot dr o .
基础上经过裁剪 、 修改 , 适用于嵌入式系统并应用于特 定 嵌入 式场 合 的专 用 Lnx 作 系统 。与其 它 的嵌 入 iu 操 式 操作 系统 相 比, 入 式 Ln x 有 以下 特点 : 有 开 嵌 iu 具 具 放源代 码 , 系统 内核较小 、 效率 高 、 内核 网络结 构完整 , 针对 嵌入 式 的存 储方 案 , 供 实 时版 本和 完 善 的嵌入 提 式解决方 案 、 备一 整套 工具链 , 易搭建嵌 入式 系统 具 容 的 开发环 境 , 减后 的 系统 适用 于诸 如信 息 家 电等嵌 裁 入式 系统 的开发 。

引 言
目前 , 种嵌 入式 Lnx 各 iu 操作 系统迅 速 发展 , 已形 成 了 能 与 Widw C no s E等嵌 入 式操 作 系统 进行 有 力 竞 争 的局 面 。嵌 入 式 Lnx 作 系统 的迅 速 崛 起 , iu 操 主要

6第六部分 嵌入式linux内核裁剪

6第六部分 嵌入式linux内核裁剪

2
如何升级内核
• 添加进内核的方式:
– 将新增加部分编译到内核中(build-in) – 把新增加部分编译成模块(module),动态加载。
• 各自特点:
– 编译到内核中,在内核启动时就可以自动支持相应部 分的功能,这样的优点是方便、速度快,机器一启动, 用户就可以使用这部分功能了;缺点是会使内核变得 庞大起来,不管你是否需要这部分功能,它都会存在。 建议经常使用的部分直接编译到内核中,比如网卡。 – 如果编译成模块,就会生成对应的.o文件,在使用的 时候可以动态加载,优点是不会使内核过分庞大,缺 点是你得自己来调用这些模块。
19
/* interrupt handling */ EXPORT_SYMBOL(add_timer); EXPORT_SYMBOL(del_timer); EXPORT_SYMBOL(request_irq); EXPORT_SYMBOL(free_irq); #if !defined(CONFIG_IA64) /* irq_stat is part of struct cpuinfo_ia64 */ EXPORT_SYMBOL(irq_stat); #endif
20
模块的依赖关系
• 模块依赖 如前所述,内核符号表记录了所有模块可以 访问的符号及相应的地址。当一个新的 模块被装 入内核后,它所声明的某些符号就会被登记到这 个表中,使这些符号可能被其 他模块所引用,这 就引出了模块依赖问题。 一个模块A引用从另 一个模块B中移出的符号,叫做模块B被模块A引 用,或者 模块A依赖模块B。如果要链接模块A, 必须先链接模块B。这种模块间相互依赖文件及宏定义 #define __KERNEL__ #define MODULE #include<linux/module.h> #include<linux/kernel.h> • module_init():模块的初始化函数, module_exit():模块的卸载函数, 初始化函数和卸载函数必须成对出现。 • 模块常用信息:作者、描述、版权等, MODULE_AUTHOR("author"); MODULE_DESCRIPTION("the description"); MODULE_LICENSE("GPL");
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核裁剪步骤详述在menuconfig中配置:详细介绍内核配置选项及删改情况第一部分:全部删除Code maturity level options--->代码成熟等级选项[]Prompt for development and/or incomplete code/drivers默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。

第二部分:除以下选项,其它全部删除General setup—〉System V IPC(IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。

某些程序以及DOS模拟环境都需要它。

为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。

有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。

第三部分:除以下选项,其它全部删除Loadable module support--->可引导模块支持建议作为模块加入内核[]Enable loadable module support这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。

一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。

在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。

一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。

[]Automatic kernel module loading一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。

不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。

第四部分:全部删除Block layer-----〉块设备第五部分:除以下选项,其它全部删除Processor type and features--->处理器类型Subarchitecture Type(PC-compatible)--->这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结PC-compatible e 构(pc/at)。

这个选项可以让你选择一些其它架构。

我们一般选择PC-compatibl 就可以了。

Processor family(386):它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。

我选的是386,这样内核会省下不少空间第六部分:除以下选项,其它全部删除Power management options(ACPI,APM)--->电源管理选项[]Power Management Debug Support电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。

ACPI Support---〉高级电源接口配置支持,如果BIOS支持,建议选上这项[]Button这个选项用于注册基于电源按钮的事件,比如power,sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。

可以不选择,根据自己的需求。

第七部分:除以下选项,其它全部删除Bus options(PCI,PCMCIA,EISA,MCA,ISA)--->总线选项[]PCI supportPCI access mode(Any)--->PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。

第八部分:除以下选项,其它全部删除Executable file formats--->Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。

一定要选。

第九部分:除以下选项,其它全部删除NetworkingNetworking options--->[]Unix domain sockets[]TCP/IP networking第十部分:除以下选项,其它全部删除Device Drivers--->设备驱动Block devices-------〉[]Compaq SMART2support[]Compaq Smart Array5xxx support[]Loopback device support大部分的人这一个选项都选N,因为没有必要。

但是如果你要mount iso文件的话,你得选上Y。

这个选项的意思是说,可以将一个文件挂成一个文件系统。

如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。

而且,可以对这个文件系统加以保护。

不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。

而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。

注意:此处与网络无关。

建议编译成模块[]RAM disk supportSCSI device support--->里面有关于USB支持的,要选择[]SCSI device support USB要用,必须选择[]legacy/proc/scsi/support USB要用,必须选择[]SCSI disk support USB要用,必须选择SCSI Low-level drivers[]Serial ATA(SATA)support[]Intel PIIX/ICH SATA support这个必须选择,否则无法产生引导文件[]Via SATA supportNetworking device support--->这个下面是选网卡驱动,一定要选Ethernet(1000mbit)-&#61664;我的电脑是千兆网卡所以就选这个[]broadcom Tigon3supportInput device support--->这个里面要设置你的鼠标键盘什么的[]Provide legacy/dev/psaux deviceGraphics support--->[]Support for frame buffer devices支持Frame buffer的,一定要选择USB support--->[]USB device filesystem这个好象是用U盘必须的[]EHCI HCD(USB2.0)support有usb2.0就选上把,编译成模块[]OHCI HCD support必须选择,编译成模块[]UHCI HCD(most Intel and VIA)support必须选择,编译成模块[]USB Mass Storage support用U盘必须选择USB Human Interface Device(full HID)support里面选择usb鼠标和ususb b 键盘,如果你有一定选上这个必需选HID input layer support应该选择/dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择第十一部分:除以下选项,其它全部删除file systems--->文件系统Second extended fs supportExt2extended attributesExt2POSIX Access Control ListsExt2Security LabelsExt3journalling file system supportExt3extended attributesExt3POSIX Access Control ListsExt3Security Labels以上这些肯定是要选择的,linux的标准文件系统Kernel automounter support内核自动挂载的,当然要选Kernel automounter version4support(also supports v3)当然要选DOS/FAT/NT Filesystems--->DOS FAT fs supportMSDOS fs supportVFAT(Windows-95)fs supportNTFS file system supportNative language support&#61664;语言支持,这里就支持英语和汉语就行了,不多说了[]NLS ISO8859-1必须选择,这个是关于U盘挂载的。

CD-ROM/DVD Filesystems--->这个是关于挂载ISO文件的,用的话就选。

ISO9660CDROM file system support第十二部分:全部删除Instrumentation support第十三部分:全部删除Kernel hacking--->破解核心?可不是当骸客啦,不选第十四部分:全部删除Security options--->第十五部分:全部删除Cryptographic options--->这是核心支持加密的选项第十六部分:全部删除Library routines--->附:内核配置内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。

这里用的是make menuconfig。

需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。

具体步骤如下:首先确定shell是bash。

然后$make menuconfig有一些默认的符号其含义如下:y:加载n:不加载m:作为模块加载可以配置的选项有以下一些:1)code maturity level option代码成熟度prompt for development and/or incomplete code/drivers[N/y/?]如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。

相关文档
最新文档