如何获得kernel command line 参数
编程语言是操作, 操作系统是平台
操作系统会识别和接受编程语言发来的信息, 当然, 中间要经过 汇编语言,机器语言。
例如编程语言 发过来的信息是 1*1
不同的操作系统可能会识别成不同的信息 如windows 识别成1+1, linux 识别成1-1(随便举的例子,实际不是这样的)
所以C 在windows和linux下,功能会有些许差别。
操作系统使用一种或多种编程软件编写的,编程语言是运行在操作系统的编程软件所用语言,有各种语言之分。
Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。
Linux的内核参数是以空格分开的一个字符串列表,通常具有如下形式:
name[=value_1][,value_2]...[,value_10]
“name”是关键字,内核用它来识别应该把“关键字”后面的值传递给谁,也就是如何处理这个值,是传递给处理例程还是作为环境变量或者抛给“init”。值的个数限制为10,你可以通过再次使用该关键字使用超过10个的参数。
首先,内核检查关键字是不是 `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”。
常用的设备无关启动时参数。
1、init=...
设置内核执行的初始化进程名,如果该项没有设置,内核会按顺序尝试/etc/init,
/bin/init,/sbin/init, /bin/sh,如果所有的都没找到,内核会抛出 kernel panic:的错误。
2、nfsaddrs=...
设置从网络启动时NFS的启动地址,已字符串的形式给出。
3、nfsroot=...
设置网络启动时的NFS根名字,如果该字符串不是以 "/"、","、"."开始,默认指向“/tftp-boot”。
以上2、3在无盘站中很有用处。
4、no387
该选项仅当定义了CONFIG_BUGi386时才能用,某些i387协处理器芯片使用32位的保护模式时会有BUG,比如一些浮点运算,使用这个参数可以让内核忽略387协处理器。
5、no-hlt
该选项仅当定义了CONFIG_BUGi386时才能用,一些早期的i486DX-100芯片在处理“hlt”指令时会有问题,执行该指令后不能可靠的返回操作系统,使用该选项,可以让linux系统在CPU空闲的时候不要挂起CPU。
6、root=...
该参数告诉内核启动时使用哪个设备作为根文件系统。比如可以指定根文件为hda8:root=/dev/hda8。
7、ro和rw
ro参数告诉内核以只读方式加载根文件系统,以便进行文件系统完整性检查,比如运行fsck;rw参数告诉内核以读写方式加载根文件系统,这是默认值。
8、reserve=...
保留端口号。格式:reserve=iobase,extent[,iobase,extent]...,用来保护一定区域的I/O端口不被设备驱动程序自动探测。在某些机器上,自动探测会失败,或者设备探测错误或者不想让内核初始化设备时会用到该参数;比如: reserve=0x300,32 device=0x300,除device=0x300外所有设备驱动不探测 0x300-0x31f范围的I/O端口。
9、mem=...
限制内核使用的内存数量。早期BIOS设计为只能识别64M以下的内存,如果你的内存数量大于64M,你可以指明,如果你指明的数量超过了实际安装的内存数量,系统崩溃是迟早的事情。如:mem=0x1000000意味着有16M内存,如果是mem=0x6000000,就是96M内存了。
注意:很多机型把部分内存作为BIOS的映射,所以你在指定内存大小的时候一定要预留空间。你也可以在 pentium或者更新的CPU上使用mem=nopentium关闭4M的页表,这要在内核配置时申明。
10、panic=N
默认情况,内核崩溃--kernel panic 后会宕机而不会重启,你可以设置宕机多少秒之后重启机器;也可以在/proc/sys/kernel/panic文件里设置。
11、reboot=[warm cold][,[bios hard]]
该选项仅当定义了CONFIG_BUGi386时才能用。2.0.22的内核重启默认为cool reboot,warm reboot 更快,使用"reboot=bios"可以继承bios的设置。
12、nosmp 和 maxcpus=N
仅当定义了 __SMP__,该选项才可用。可以用来禁用多CPU或者指明最多支持的CPU个数。
内核开发和调试的启动时参数
这些参数主要用在内核的开发和调试上,如果你不进行类似的工作,你可以简单的跳过本小节。
1、debug
linux的日志级别比较多(详细信息可以参看linux/kernel.h),一般地,日志的守护进程klogd只把比DEBUG级别高的日志写进磁盘;如果使用该选项,klogd也把内核的DEBUG信息写进日志。
2、profile=N
在做内核开发的时候,如果想清楚的知道内核在什么地方耗用了多少CPU的时钟周期,可以使用核心的分析函数设置变量prof_shift为非0值,有两种方式可以实现:一种是在编译时指定,另一种就是通过“profile=”来指定; 他给出了一个相当于最小单位--即时钟周期;系统在执行内核代码的时候, profile[address >;>; prof_shift]的值就会累加,你也可以从 /proc/profile得到关于它的一些信息。
3、swap=N1,N2,N3,N4,N5,N6,N7,N8
设置内核交换算法的八个参数:max_page_age, page_advance, page_decline,page_initial_age, age_cluster_fract, age_cluster_min, pageout_weight,bufferout_weight。
4、buff=N1,N2,N3,N4,N5,N6
设置内核缓冲内存管理的六个参数:max_buff_age, buff_advance, buff_decline,buff_initial_age, bufferout_weight, buffermem_grace。
使用 RAMDISK的参数
(仅当内核配置并编译了 CONFIG_BLK_DEV_RAM)。一般的来说,使用ramdisk并不是一件好事,系统自己会更加有效的使用可用的内存;但是,在启动或者制作启动盘时,使用ramdisk可以很方便的装载软盘等设备上的映象(尤其是安装程序、启动过程中),因为在正真使用物理磁盘之前,必须要加载一些必要的模块,比如文件系统模块,scsi驱动等(可以参见我的initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统)。
早期的ramdisk(比如1.3.48的核心)是静态分配的,必须以ramdisk=N来指定ramdisk的大小;现在ramdisk可以动态增加。一共有四个参数,两个布尔型,两个整形。
1、load_ramdisk=N
如果N=1,就加载ramdisk;如果N=0,就不加载ramdisk;默认值为0。
2、prompt_ramdisk=N
N=1,提示插入软盘;N=0,不提示插入软盘;默认为1。
3、ramdisk_size=N或者ramdisk=N
设定ramdisk的最大值为N KB,默认为4096KB。
4、ramdisk_start=N
设置ramdisk的开始块号为N,当ramdisk有内核的映象文件是需要这个参数。
5、noinitrd
(仅当内核配置了选项 CONFIG_BLK_DEV_RAM和CONFIG_BLK_DEV_INITRD)现在的内核都可以支持initrd了,引导进程首先装载内核和一个初始化的ramdisk,然后内核将initrd转换成普通的ramdisk,也就是读写模式的根文件系统设备。然后linuxrc执行,然后装载真正的根文件系统,之后ramdisk被卸载,最后执行启动序列,比如/sbin/init。
选项noinitrd告诉内核不执行上面的步骤,即使内核编译了initrd,而是把initrd的数据写到 /dev/initrd,只是这是一个一次性的设备
如何获得kernel command line 参数
设置内核执行的初始化进程名,如果该项没有设置,内核会按顺序尝试\/etc\/init,\/bin\/init,\/sbin\/init, \/bin\/sh,如果所有的都没找到,内核会抛出 kernel panic:的错误。2、nfsaddrs=...设置从网络启动时NFS的启动地址,已字符串的形式给出。3、nfsroot=...设置网络启动时的NFS根名字,如果该字...
QEMU搭建arm环境1-直接启动kernel
搭建过程中,先要安装交叉编译工具链,从Linaro官网下载并配置环境变量。接着,从Linux官网获取6.6.8版本的kernel源码,注意处理可能的编译依赖库安装问题。编译成功后,将生成kernel文件。对于BusyBox,无需修改配置,编译完成后会在当前目录生成_install文件夹,这部分将在根文件系统构建中发挥作用。手动构...
Linux如何获取内核源码linux获取内核源码
首先,我们可以使用Linux Network Mirroring来获取内核源码。Linux Network mirroring是一种使用HTTP和FTP协议获取Linux内核源码的服务,我们可以在Linux.org上搜索并下载最新内核源码,内核源码包的文件名格式为 linux- . . . . . . . . . . . . . . . . . . . . . . . .-,下载后将文件...
什么是kernel?
然后修改其中的部分内容,再加装一些软体包等等就构成了各种各样的发行版,你这里的other linux 2.6 x kernel 是相对来讲的,你应该是在虚拟机器安装Linux的时候出现的这个错误,这里的意思是除了上面的Linux以外的其他的使用2.6版本核心的其他Linux发行版 ...
什么是内核符号表(Kernel
在内核中通过\/proc\/kallsyms获得符号的地址 Linux内核符号表\/proc\/kallsyms的形成过程 .\/scripts\/kallsyms.c负责生成System.map .\/kernel\/kallsyms.c负责生成\/proc\/kallsyms .\/scripts\/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然后内核编译过程中将kallsyms.S(内核符号表)编...
1.linux系统中使用什么命令来查看kernel版本和补丁
JDK有以下几种方法:1、查找目前所使用的linux下所使用的jdk安装后的目录:echo $JAVA_HOME;2、获得目前所使用的linux下所使用的jdk的版本java -version;3、获得所安装后的jdk的版本,在bin目录下输入 .\/java -version即可;在配置好Java环境的情况下可以使用 java -version查看 ...
操作系统调度的概念
不可剥夺型内核(nan-preemptive kernel)要求每个任务主动放弃CPU的使用权。不可剥夺型调度法也称合作型多任务,各任务彼此合作共享一个CPU。异步事件还是有中断服务来处理。中断服务可使一个高优先级的任务由挂起态变为就绪态,但中断服务以后,CPU使用权还是回到了原来被中断的那个任务,直到该任务主动...
怎么查看Linux的内核kernel版本
1、# cat \/proc\/version (Linux查看当前操作系统版本信息)Linux version 2.4.20-8 (bhcompile@porky.devel.redhat.com)(gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003 2、# cat \/etc\/issue 或cat \/etc\/redhat-release(Linux查看版本当前...
什么是linux kernel?有什么作用
Linux内核(英语:Linux kernel)是一种开源的类Unix操作系统宏内核。工作于平板电脑、智能手机及智能手表的Android操作系统同样通过Linux内核提供的服务完成自身功能。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机...
打通Framework与Kernel-谈谈我对进程管理的理解
一个应用程序进程由zygote copy-on-write 地fork孵化,孵化出来的进程在user space封装为ProcessRecord,而在kernel space同样会有个task_struct与之一一对应。ProcessRecord会由AMS来统一管理,怎么管理?通过进程的生命周期以及内部的四大组件生命周期来确定你的优先级,而这个优先级专门定义了一套adj类型来...
将姚衡韵: 1、第一条命令没问题;2、第二条命令:#mkfs.ext2 myfs myfs is not a block special device.无路如何也要继续?(y,n) 这时要输入y3、第三条命令,linux kernel不支持myext2文件系统.我猜你是想要在红帽或ubuntu上mount一个ext2文件系统的...
蓬溪县17291763535: 如何修复Linux引导 - ?
将姚衡韵: 修复Linux操作系统的GRUB方法如下: 1.首先我们从BIOS里把启动顺序改为从CD-ROM启动,放入LINUX的第一张盘 2.在重启后,在boot:提示符下输入linuxrescue然后回车 3.接着就会提示选择鼠标和键盘,一般选择系统默认的即可;还有是不是从网络启动,一般不用从网路启动. 4.以上的步骤大家按提示操作即可,不要作什么改动 5.这样,在进入命令提示界面后键入:grub-install/dev/hda后回车进行安装MRB 6.安装完后重起就可以正常启动了!
蓬溪县17291763535: Linux 单用户模式修改密码 - ?
将姚衡韵: 解决方法:进入单用户模式: 1. grub 进入启动画面之后,敲入“e”,把光标移动到kernel ...那一行,再敲入“e”,在kernel 一行的结尾加上空格single,回车 敲入“b”,启动系统,即进入单用户模式, 这个时刻就能够用passwd命令改密码了. passwd root 改完以后reboot重启.2. lilo 进入lilo命令行模式,敲入linux single,即进入单用户模式. passwd ... 假如grub/lilo设了密码,必须要记得才行.
蓬溪县17291763535: shell script 一定要写path吗 - ?
将姚衡韵: 变量读取例:echo $PATH echo $(PATH) 2、变量赋值:aa=asdf 注:等号左右没有空格
蓬溪县17291763535: 如何查看自己U盘是否支持启动 - ?
将姚衡韵: 应该说4G盘做启动盘一般方法不容易成功,量产还容易出很多麻烦,用如下方法制作估计不会有问题,但要认真一步步按说去做. 4-8G启动盘制作方法: 先去下载一个flashboot的软件(版本1.4.0.175),然后,打开,下一步,选择:其它\创造...
蓬溪县17291763535: 如何在 Linux 中使用一个命令升级所有软件 - ?
将姚衡韵: 1、可以使用apt-get升级软件.2、apt-get是可以直接使用的,格式为$ sudo apt-get install/delete package$ sudo apt-get -f install #修复安装$ sudo apt-get dist-upgrade #升级系统$ sudo apt-get upgrade #更新已安装的包$ apt-get source package #下载该包的源代码$ sudo apt-get build-dep package #安装相关的编译环境
蓬溪县17291763535: 请问Java中获得CPU使用率的办法?windows系统 - ?
将姚衡韵: 1、确定当前系统安装的jdk是1.6版本以上2、windows系统中有获取cpu使用率的可执行文件exe,只要在java中获取该文件的执行路径,通过Java调用即可.3、获取操作系统可执行文件目录procCmd4、调用java的Runtime.getRuntime().exec执...
蓬溪县17291763535: 上网时CPU占用率超级大 - ?
将姚衡韵: CPU资源占用100%解决方法[推荐]1、驱动没有经过认证,造成CPU资源占用100%.大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因. 2、防杀毒软件造成故障.由于新版的KV、金山、瑞星都...
蓬溪县17291763535: cpu使用率总是忽高忽低,甚至100%,是什么原因呢 - ?
将姚衡韵: 我们在使用Windows XP操作系统的时候,用着用着系统就变慢了,一看“ 任务管理器 ”才发现CPU占用达到100%.这是怎么回事情呢?遇到病毒了,硬件有问题,还是系统设置...
蓬溪县17291763535: grub命令行下可以用dir或者cd命令吗? - ?
将姚衡韵: grub不是dos,没有这些命令的.grub>提示符后输入help,回车就可以查看grub能用的所有命令,help 可以进一步得到相关命令的用法,如help kernel.grub和grub2命令有所不同,具体自行搜索查阅grub官方网站文档.