ARM体系结构:
1.最常用的方式,就是在make config里修改“General Setup”子菜单中的“Default kernel command string” 选项,通过修改这个选项来修改include/linux/autoconf.h文件中的CONFIG_CMDLINE宏
2.有的时候为了省去make menuconfig的时间,并且内核命令也是固定的,就可以写死内核arch/arm/setup.c文件default_command_line,这个变量本来是初始化为CONFIG_CMDLINE的
3.除了方法1之外,另外一种正规的方法就是将内核命令写入内核参数表中,然后通过 start_kernel()->setup_arch()->parse_tags()->parse_tag() ->parse_tag_cmdline()函数来将内核参数表中的内核命令覆盖default_command_line变量(当然你首先得有内核参数表)
4.最后,有的板子会采取直接将内核命令通过bootloader传递给内核。
本篇文章来源于 站长资讯网 原文链接:http://www.chinahtml.com/0706/Linux118253330414524.html
在Linux中,给kernel传递参数以控制其行为总共有三种方法:
1.build kernel之时的各个configuration选项。
2.当kernel启动之时,可以参数在kernel被GRUB或LILO等启动程序调用之时传递给kernel。
3.在kernel运行时,修改/proc或/sys目录下的文件。
这里我简单讲的就是第二种方式了,kernel在grub中配置的启动参数。
首先,kernel有哪些参数呢? 在linux的源代码中,有这样的一个文档Documentation/kernel-parameters.txt,它介绍了kernel的各个参数及其意义。
其次,kernel启动参数以空格分隔,而且是严格区分大小写的(如:mem和MEM是不一样的)。
再次,对于module特有的kernel参数写法是这样的,[module name].[parameter=XX],例如,igb.max_vfs=7这个kernel启动参数的效果就是相当于这样来动态加载module: modprobe igb max_vfs=7
另外,kernel是怎样处理这些启动参数的呢? 启动参数通常是这样的形式: name[=value_1][,value_2]...[,value_10]
"name"是关键字,内核用它来识别应该把"关键字"后面的值传递给谁,也就是如何处理这个值,是传递给处理进程还是作为环境变量或者抛给"init"。值的个数限制为10,你可以通过再次使用该关键字使用超过10个的参数。 首先,kernel检查关键字是不是 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug'或'init',然后内核在bootsetups数组里搜索于该关键字相关联的已注册的处理函数,如果找到相关的已注册的处理函数,则调用这些函数并把关键字后面的值作为参数传递给这些函数。比如,你在启动时设置参数name=a,b,c,d,内核搜索bootsetups数组,如果发现"name"已注册,则调用"name"的设置函数如name_setup(),并把a,b,c,d传递给name_setup()执行。 所有型如"name=value"参数,如果没有被上面所述的设置函数接收,将被解释为系统启动后的环境变量,比如"TERM=vt100"启动参数就会被作为一个启动后的环境变量。所有没有被内核设置函数接收也没又被设置成环境变量的参数都将留给init进程处理,比如"single"。
下面简单总结一下我在工作中常用到的一些kernel启动参数吧。
根磁盘相关启动参数:
root #指出启动的根文件系统 如:root=/dev/sda1
ro #指定根设备在启动过程中为read-only,默认情况下一般都是这样配的
rw #和ro类似,它是规定为read-write,可写
rootfstype #根文件系统类型,如:rootfstype=ext4
Console和kernel log相关启动参数:
console #console的设备和选项,如:console=tty0 console=ttyS0
debug #enable kernel debugging 启动中的所有debug信息都会打印到console上
quiet #disable all log messages 将kernel log level设置为KERN_WARNING,在启动中只非常严重的信息
loglevel #设置默认的console日志级别,如:loglevel=7 (0~7的数字分别为:KERN_EMERG,..,KERN_DEBUG)
time #设置在每条kernel log信息前加一个时间戳
内存相关的启动参数:
mem #指定kernel使用的内存量,mem=n[KMG]
hugepages #设置大页表页(4MB大小)的最多个数,hugepages=n
CPU相关的启动参数:
mce # Enable the machine check exception feature.
nosmp #Run as a single-processor machine. 不使用SMP(多处理器)
max_cpus #max_cpus=n, SMP系统最多能使用的CPU个数(即使系统中有大于n个的CPU)
Ramdisk相关的启动参数:
initrd #指定初始化ramdisk的位置,initrd=filename
noinitrd #不使用initrd的配置,即使配置了initrd参数
初始化相关启动参数:
init #在启动时去执行的程序,init=filename,默认值为/sbin/init
PCI相关的启动参数:
pci #pci相关的选项,我常使用pci=assign_buses,也使用过pci=nomsi
SELinux相关启动参数:
enforcing #SELinux enforcing状态的开关,enforcing=0表示仅仅是记录危险而不是阻止访问,enforcing=1完全enable,默认值是0
selinux #在启动时关闭或开启SELinux,selinux=0表示关闭,selinux=1表示开启selinux
另外,还是用max_loop来指定最多可使用的回路设备。
在Redhat的系统中,还有个经常看到的kernel启动参数——rhgb,rhgb表示redhat graphics boot,就是会看到图片来代替启动过程中显示的文本信息,这些信息在启动后用dmesg也可以看到
rhgb = redhat graphical boot - This is a GUI mode booting screen with most of the information hidden while the user sees a rotating activity icon spining and brief information as to what the computer is doing.
quiet = hides the majority of boot messages before rhgb starts. These are supposed to make the common user more comfortable. They get alarmed about seeing the kernel and initializing messages, so they hide them for their comfort.
分享到:
相关推荐
Linux内核启动过程是操作系统加载和初始化的关键环节,它涉及了一系列复杂的步骤,使得硬件设备得以初始化,系统服务得以启动,并最终准备好用户空间程序的运行环境。以下是对Linux内核启动过程的详细分析: 1. ...
通过编辑`/boot/grub/grub.cfg`文件来指定内核的位置和其他启动参数。 - **LILO**(LInux LOader)是早期的启动加载器,虽然现在使用较少,但仍然适用于某些场景。 **内核启动参数** - **传递给内核的参数**:在...
- 在Linux内核构建过程中,可以通过修改`make menuconfig`中的“General Setup”子菜单下的“Default kernel command string”选项来设置默认的内核启动参数。 - 这个选项允许用户自定义内核启动时所使用的命令行...
在 Linux Kernel 中,boot 参数用于控制内核的启动过程,而 kernel 参数用于控制内核的初始化过程。 内核模块编程 内核模块编程是 Linux Kernel 中的一种机制,用于开发和加载内核模块。内核模块编程可以分为三个...
《深入理解Linux内核》——从启动到运行 在探讨《Linux Kernel Internals.pdf》时,我们实际上是在深入了解操作系统的核心部分——Linux内核的工作机制。这份文档由Tigran Aivazian撰写,旨在为读者提供Linux 2.4...
Linux 启动 bootargs 参数分析 在 Linux 启动过程中,bootargs 参数扮演着重要的角色,该参数用于传递启动选项和配置信息给内核。Linux 内核在启动时对 bootargs 参数的解析可以分为两大块:setup_arch 函数和 ...
- **模块特定选项**:列举了与特定模块相关的启动参数。 - **控制台选项**:配置控制台的行为和显示方式。 - **中断选项**:管理中断控制器和设备的配置。 - **内存选项**:控制内核如何使用和分配内存资源。 -...
而对于动态加载的模块,因为它们在内核启动时不驻留在内存中,因此不能作为启动参数传递,而是通过`modprobe`命令在运行时加载并设置参数。 ### 参数的可用性与依赖性 并非所有列出的参数在任何情况下都是可用的。...
### Linux Kernel启动过程详解——基于ARM架构 #### 引言 Linux内核的启动过程是一项复杂而精细的操作,尤其在ARM架构下,由于其广泛应用于嵌入式系统中,因此了解ARM Linux内核如何初始化变得尤为重要。本篇将...
### Linux Kernel技术手册知识点概述 #### 一、书籍简介与适用范围 《Linux Kernel in a Nutshell》是一本深入浅出地介绍了Linux内核构建、配置及使用的实用指南。本书适用于希望深入了解Linux内核工作原理的技术...
- 所有进程都在独立的虚拟地址空间运行,只有内核执行一个进程(通常是init)在启动时。 - 所有其他进程都是从init派生出来的。 - 内核负责调度和抢占进程,以实现公平的CPU时间分配。 - 进程通过系统调用来调用内核...
为了启用Diskdump,需要配置内核启动参数,比如设置`crashkernel`选项,然后配置相应的服务或守护进程来触发和保存崩溃转储。 总结来说,Linux内核崩溃调试是一个复杂的过程,涉及到内核对象文件、崩溃转储和正确...
### Linux Kernel 2.4 Internals #### Booting **1.1 Building the Linux Kernel Image** 构建Linux内核镜像涉及多个步骤。首先,需要获取Linux内核源代码,这通常通过git或tarball的形式获得。之后,配置过程至...
《Linux Kernel Nut Shell》是一本专注于Linux内核构建和编译的教程,主要针对的是2.6.18版本的内核。这个版本在Linux发展史上占有重要地位,是许多服务器和嵌入式设备的基础。了解如何构建和编译内核对于深入理解...
《ARM架构下的Linux Kernel启动过程与核心结构解析》 在深入理解Linux内核的过程中,了解其启动过程和核心结构是至关重要的第一步。特别是在ARM架构下,由于硬件平台的特性和设计,内核的启动和组织方式有其独特的...
### S3C6410 移植 Linux Kernel 2.6.36 步骤详解 #### 一、概述 本文档详细介绍了如何在 S3C6410 平台上移植 Linux Kernel 2.6.36 的具体步骤。S3C6410 是一款基于 ARM1176JZF-S 处理器核心的高性能嵌入式微处理器...
《QEMU启动的Aarch64 Linux Kernel Image详解》 在深入探讨QEMU启动的Aarch64架构Linux内核Image之前,我们首先要理解几个关键术语。QEMU是一款强大的开源模拟器,它允许用户在一台计算机上运行多种操作系统,而...