linux内核启动时几个关键地址

合集下载

Linux内核参数配置

Linux内核参数配置

Linux内核参数配置Linux在系统运⾏时修改内核参数(/proc/sys与/etc/sysctl.conf),⽽不需要重新引导系统,这个功能是通过/proc虚拟⽂件系统实现的。

在/proc/sys⽬录下存放着⼤多数的内核参数,并且设计成可以在系统运⾏的同时进⾏更改, 可以通过更改/proc/sys中内核参数对应的⽂件达到修改内核参数的⽬的(修改过后,保存配置⽂件就马上⾃动⽣效),不过重新启动机器后之前修改的参数值会失效,所以只能是⼀种临时参数变更⽅案。

(适合调试内核参数优化值的时候使⽤,如果设置值有问题,重启服务器还原原来的设置参数值了。

简单⽅便。

)但是如果调试内核参数优化值结束后,需要永久保存参数值,就要通过修改/etc/sysctl.conf内的内核参数来永久保存更改。

但只是修改sysctl⽂件内的参数值,确认保存修改⽂件后,设定的参数值并不会马上⽣效,如果想使参数值修改马上⽣效,并且不重启服务器,可以执⾏下⾯的命令:#sysctl –p下⾯介绍⼀下/proc/sys下内核⽂件与配置⽂件sysctl.conf中变量的对应关系:由于可以修改的内核参数都在/proc/sys⽬录下,所以sysctl.conf的变量名省略了⽬录的前⾯部分(/proc/sys)。

即将/proc/sys中的⽂件转换成sysctl中的变量依据下⾯两个简单的规则:1.去掉前⾯部分/proc/sys2.将⽂件名中的斜杠变为点这两条规则可以将/proc/sys中的任⼀⽂件名转换成sysctl中的变量名。

例如:/proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward/proc/sys/kernel/hostname =》 kernel.hostname可以使⽤下⾯命令查询所有可修改的变量名# sysctl –a、linux内核参数注释以下表格中红⾊字体为常⽤优化参数根据参数⽂件所处⽬录不同⽽进⾏分表整理下列⽂件所在⽬录:/proc/sys/net/ipv4/名称默认值建议值描述tcp_syn_retries51对于⼀个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。

linux,内核的物理内存分配的基本方式

linux,内核的物理内存分配的基本方式

Linux内核的物理内存分配基本方式在Linux内核中,物理内存分配的基本方式可以通过以下几个方面进行解释。

1. 内核启动阶段的物理内存分配在Linux内核启动阶段,内核需要为自身和各个子系统分配物理内存。

这个过程包括以下几个步骤:•内核从BIOS或者bootloader中获取系统的物理内存信息。

•内核根据系统的内存布局,将物理内存分成多个区域,如低端内存、高端内存等。

•内核为自身分配一部分物理内存,包括内核代码、数据、堆栈等。

•内核为各个子系统分配物理内存,如设备驱动、文件系统等。

2. 动态分配物理内存在运行时,Linux内核还需要动态分配物理内存来满足进程和内核的需求。

这个过程包括以下几个关键点:页框分配:内核使用页框作为最小的内存分配单位。

当一个进程或内核需要分配物理内存时,内核会使用页框分配算法来选择可用的物理页框。

页框可以通过使用位图或者链表等数据结构来管理。

伙伴系统:为了高效地管理和分配物理内存,Linux内核采用了伙伴系统。

伙伴系统将整个物理内存空间分成不同大小的块(通常是2的幂次方),每个块称为一个伙伴块。

当一个进程需要分配内存时,内核会在合适的伙伴块中找到一个合适大小的块来满足需求。

页面回收:当物理内存不足时,Linux内核会使用页面回收机制来回收部分物理内存。

页面回收可以通过将不再使用的内存页面写回硬盘,或者将内存页面移动到交换分区来实现。

回收后的物理内存可以重新分配给其他进程或内核使用。

3. 内存管理算法为了高效地管理物理内存,Linux内核采用了一些内存管理算法。

其中一些重要的算法包括:最先适应算法(First Fit):内核首先查找第一个满足分配要求的伙伴块。

这个算法简单直观,但可能导致伙伴块的碎片化。

最佳适应算法(Best Fit):内核在所有可用的伙伴块中选择最小的一个来满足分配需求。

这个算法可以减少碎片化,但需要更多的搜索开销。

循环首次适应算法(Next Fit):内核在上一次分配的位置开始搜索,直到找到第一个满足分配要求的伙伴块。

linux 系统启动相关路径

linux 系统启动相关路径

linux 系统启动相关路径
在Linux 系统中,启动相关的路径通常包括以下几个:
1. /etc/init.d/:这个目录存放了系统中的服务脚本文件,这些脚本文件可以通过chkconfig 命令设置服务的运行级别,从而控制服务的启动和停止。

2. /etc/rc.d/:这个目录也存放了系统中的服务脚本文件,与/etc/init.d/ 目录类似,这些脚本文件也可以通过chkconfig 命令设置服务的运行级别。

3. /etc/rc.local/:这个文件是一个特殊的脚本文件,它在系统启动时自动执行,可以用来执行一些在启动过程中需要执行的操作,如挂载磁盘分区、启动网络等。

4. /etc/fstab/:这个文件记录了系统中需要挂载的文件系统信息,包括磁盘分区的设备名称、挂载点、文件系统类型、挂载选项等。

5. /etc/sysconfig/network-scripts/:这个目录存放了系统中网络服务的配置文件,包括网络接口、DNS 服务器、网关等信息。

6. /usr/bin/:这个目录通常包含了一些用户和应用程序使用的工具和脚本文件,例如ssh、scp、wget 等。

7. /usr/local/bin/:这个目录通常存放了用户自定义的命令和脚本文件,例如一些自己编写的工具和脚本文件。

8. /var/run/:这个目录存放了系统中运行的进程的信息,包括进程ID、父进程ID、挂载点等。

9. /var/log/:这个目录存放了系统中的日志文件,包括系统日志、应用程序日志等。

以上是一些常见的Linux 系统启动相关的路径和文件,具体路径和文件可能会因Linux 发行版和版本而有所不同。

linux中的绝对路径和相对路径

linux中的绝对路径和相对路径

linux中的绝对路径和相对路径绝对路径和相对路径是在Linux系统中用于指定文件或目录位置的两种不同方式。

它们在文件系统中起到了重要的作用,并且在命令行操作和脚本编写中经常使用。

首先,绝对路径是从文件系统的根目录开始的路径表示方法。

根目录在Linux系统中用“/”表示,所有的文件和目录都是从根目录开始的。

绝对路径可以完整地指定一个文件或目录的位置,不会受到当前工作目录的影响。

例如,/home/user/Documents表示用户“user”在根目录下的“Documents”目录。

相对路径是相对于当前工作目录的路径表示方法。

当前工作目录是命令行或脚本运行时所在的目录。

相对路径是相对于当前工作目录的位置来指定的,因此它们不需要完整的路径信息。

相对路径的使用方式取决于当前工作目录和所要操作的文件或目录的相对关系。

例如,假设当前工作目录是/home/user,一个文件在当前工作目录下的子目录“Documents”中,我们可以使用相对路径“Documents/file.txt”来表示该文件的位置。

绝对路径和相对路径在文件定位和执行命令时都有重要的应用。

当需要精确地引用一个文件或目录时,绝对路径是非常有用的选择。

它们提供了一种标准的、不受当前工作目录变化的方法。

比如,当我们需要访问系统文件或一些固定位置的配置文件时,绝对路径就派上用场了。

相对路径更适用于对于当前工作目录已知或已假定的情况下。

当我们处于一个特定的工作目录中,要操作或引用与该目录相关的文件时,使用相对路径更加方便。

相对路径可以让我们更快速地定位到文件或目录,无需关心绝对路径的长度和复杂性。

此外,相对路径也为脚本编写提供了一种灵活的方式。

当脚本需要引用多个文件或目录时,使用相对路径可以简化脚本的编写。

相对路径可以使脚本可移植性更强,因为它们不依赖于具体的文件系统结构。

为了更好地理解绝对路径和相对路径的使用,下面列举了一些常见的示例:1. 绝对路径示例:- /usr/bin:表示根目录下的usr目录中的bin目录。

linux内核启用参数

linux内核启用参数

linux内核启用参数Linux内核启用参数是指在Linux系统启动时,可以通过设置参数来改变内核的行为和配置。

这些参数可以通过修改启动脚本或者在引导时通过命令行参数传递给内核。

我们来介绍一些常用的Linux内核启用参数。

1. root:指定根文件系统所在的设备或分区。

在启动时,内核会将根文件系统挂载到这个设备上,成为系统的根目录。

可以使用设备名称(如/dev/sda1)或者UUID(Universally Unique Identifier)来指定。

2. init:指定系统初始化进程的路径。

这个进程是系统启动后的第一个用户空间进程,负责初始化系统环境、启动其他进程等。

一般情况下,它的路径是/bin/init。

3. quiet:禁用内核启动时的冗长输出信息。

默认情况下,内核会将启动过程中的详细信息输出到控制台上,使用quiet参数可以减少这些输出,使启动过程更加简洁。

4. vga:指定启动时的图形模式。

可以通过设置不同的参数值来改变显示分辨率和颜色深度。

例如,vga=791表示使用1024x768分辨率,颜色深度为16位。

5. acpi:启用或禁用ACPI(Advanced Configuration and PowerInterface)功能。

ACPI是一种能够管理电源、温度、风扇等硬件的标准,通过设置acpi参数,可以控制是否启用ACPI功能。

6. noapic:禁用APIC(Advanced Programmable Interrupt Controller)功能。

APIC是用于处理系统中断的硬件设备,通过设置noapic参数,可以禁用APIC功能,解决一些不兼容的硬件问题。

7. nomodeset:禁用内核对图形模式的自动设置。

有些显卡驱动在启动时可能会导致系统冻结或无法启动,通过设置nomodeset参数,可以强制内核使用基本的VGA模式运行。

8. mem:指定系统可用的物理内存大小。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。

在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。

本文将详细介绍ARM版本Linux系统的启动流程。

一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。

在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。

引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。

二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。

内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。

内核需要设置异常向量表,以便正确处理异常。

2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。

3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。

init进程是系统中所有其他进程的父进程,负责系统的初始化工作。

三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。

在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。

设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。

它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。

四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。

启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。

2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

Linux启动过程详解_MBR和GRUB概述

Linux启动过程详解_MBR和GRUB概述

MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。

本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。

常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。

1)reboot 重启(2)init 6 重启(3)logo

1)reboot 重启(2)init 6 重启(3)logo

1)reboot 重启(2)init 6 重启(3)logo1.1一般在linux中,我们重启会用到这三个命令:1.2 reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。

因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。

所以使用reboot命令的场合主要是在单用户模式。

'reboot'并不执行这些过程,reboot更是一个kernel级别的命令,不对应用使用shutdown脚本。

1.3 init是所有进程的祖先他是Linux系统操作中不可缺少的程序之一。

它的进程号始终为1所以发送TERM信号给init 会终止所有的用户进程守护进程等。

shutdown 就是使用这种机制。

init定义了7个运行级别(runlevel)init 0为关机init 6为重启。

’init 6‘基于一系列/etc/inittab文件,并且每个应用都会有一个相应shutdown脚本。

'init 6' 调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统正常关机;1.4 shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。

该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。

精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。

系统执行该命令后会自动进行数据同步的工作。

该命令的一般格式: shutdown [选项] [时间] [警告信息]命令中各选项的含义为:- k 并不真正关机而只是发出警告信息给所有用户- r 关机后立即重新启动- h 关机后不重新启动- f 快速关机重启动时跳过fsck- n 快速关机不经过init 程序- c 取消一个已经运行的shutdown请注意,该命令只能由超级用户使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux内核启动时几个关键地址
1、名词解释
ZTEXTADDR
解压代码运行的开始地址。

没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。

这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。

ZRELADDR
内核启动在RAM中的物理地址。

压缩的内核映像被解压到这个地址,然后执行。

This is the address where the decompressed kernel will be written, and eventually executed. The following constraint must be valid:
__virt_to_phys(TEXTADDR) == ZRELADDR
The initial part of the kernel is carefully coded to be position independent.
TEXTADDR
内核启动的虚拟地址,与ZRELADDR相对应。

一般内核启动的虚拟地址为RAM的第一个bank地址加上0x8000。

TEXTADDR = PAGE_OFFSET + TEXTOFFST
Virtual start address of kernel, normally PAGE_OFFSET + 0x8000.This is where the kernel image ends up. With the latest kernels, it must be located at 32768 bytes into a 128MB region. Previous kernels placed a restriction of 256MB here.
TEXT_OFFSET
内核偏移地址,即内核起始位置相对于内存起始位置的偏移,对于相对于物理内存还是相对于虚拟内存都是一样的结果。

在arch/arm/makefile中设定。

PHYS_OFFSET
RAM第一个bank的物理起始地址,即物理内存的起始地址。

Physical start address of the first bank of RAM.
PAGE_OFFSET
RAM第一个bank的虚拟起始地址,即内核虚拟地址空间的起始地址。

2、小结
从上面分析可知道,linux内核被bootloader拷贝到RAM后,解压代码从ZTEXTADDR开始运行(这段代码是与位置无关的PIC)。

内核被解压缩到ZREALADDR处,也就是内核启动的物理地址处。

相应地,内核启动的虚拟地址被设定为TEXTADDR,满足如下条件:
TEXTADDR = PAGE_OFFSET + TEXT_OFFSET
内核启动的物理地址和虚拟地址满足入下条件:
ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)= virt_to_phys(TEXTADDR)
假定开发板为smdk2410,则有:
内核启动的虚拟地址
TEXTADDR = 0xC0008000
内核启动的物理地址
ZRELADDR = 0x30008000
如果直接从flash中启动还需要设置ZTEXTADDR地址。

相关文档
最新文档