详解嵌入式linux启动信息
- 格式:pdf
- 大小:722.36 KB
- 文档页数:18
Linux终端中的系统启动和关机命令Linux作为一个开源的操作系统,具有强大的灵活性和自定义性。
在Linux终端中,我们可以使用一些命令来控制系统的启动和关机。
本文将详细介绍一些常用的系统启动和关机命令,并探讨它们的功能和使用方法。
一、系统启动命令1. rebootreboot命令用于重新启动系统。
在终端中输入reboot后,系统将会立即重启。
这个命令非常有用,尤其是在需要迅速重启系统的情况下,如在安装软件或更新内核后。
2. shutdownshutdown命令用于正常关机系统。
默认情况下,输入shutdown命令后系统将在一分钟后执行关机操作。
如果需要设置关机时间,可以使用“shutdown -h now”命令来立即关机,或者使用“shutdown -h +分钟数”命令来设置延迟关机的时间。
除了关机命令,shutdown还可以用于重启系统。
例如,使用“shutdown -r now”命令将会立即重启系统。
3. initinit命令是Linux系统的初始化命令,用于切换系统的运行级别。
运行级别是电脑中一种特定的工作状态,对应着一组特定的功能服务。
Linux系统共有七个运行级别,分别是0-6。
其中,0表示关机,6表示重启。
要切换运行级别,可以使用“init 数字”命令进行操作。
例如,“init 3”将将系统切换到文本模式,而“init 5”则进入图形模式。
二、系统关机命令1. halthalt命令用于立即关机系统。
它会发送一个信号给内核,告诉系统立即关闭。
输入“halt”命令后,系统将会停止所有进程并关机。
2. poweroffpoweroff命令用于正常关机系统。
它会先发送一个信号给所有运行的进程,告诉它们系统即将关机。
这个命令会在关机前允许进程的保存和关闭操作,确保数据的完整性。
3. init在上一节中我们已经介绍了init命令的用途。
当我们使用“init 0”或“init 6”命令时,系统将会执行关机或重启操作。
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式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. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
petalinux-build -c u-boot的编译流程概述说明1. 引言1.1 概述本文旨在介绍petalinux-build -c u-boot命令的编译流程。
Petalinux是一款面向嵌入式Linux开发的工具,而U-Boot是一款应用于嵌入式系统的开源引导加载程序。
通过深入了解这两个工具,并对petalinux-build -c u-boot命令进行详细分析,我们可以更好地理解和掌握其编译流程。
1.2 文章结构本文主要分为五个部分:引言、编译流程概述、编译流程详解、注意事项和常见问题解答以及结论。
在引言中,我们将简要介绍文章的内容和目的。
接下来,在第二部分中,我们将概述Petalinux和U-Boot,并重点介绍petalinux-build -c u-boot命令的作用。
第三部分将详细解释编译流程,并包括准备工作、设置环境变量和构建U-Boot镜像等步骤。
在第四部分,我们将讨论常见错误和解决方法,提供编译优化技巧和建议,并指出其他注意事项。
最后,在结论部分,我们将对编译流程进行总结,并展望未来发展。
1.3 目的本文旨在帮助读者全面了解petalinux-build -c u-boot命令的编译流程。
通过讲解Petalinux和U-Boot的基本知识以及具体的编译步骤,读者可以深入了解如何正确地使用该命令,并解决在编译过程中可能遇到的问题。
同时,本文还将提供一些实用的编译优化技巧和建议,以帮助读者提高工作效率。
希望通过本文的阅读,读者能够更好地掌握petalinux-build -c u-boot命令的使用技巧,并在嵌入式Linux开发中取得更好的成果。
2. 编译流程概述:2.1 Petalinux简介:Petalinux是由Xilinx开发的一种嵌入式Linux开发工具套件,用于构建、定制和部署基于Xilinx处理器系统的嵌入式Linux系统。
它提供了一系列工具和文档,方便开发人员进行Linux镜像的配置、编译和调试。
嵌入式Linux应用开发十分钟入门[介绍]嵌入式linux开发因其门槛高,初学者要想快速入门上手有相当难度,从而导致很多初学者半途而废。
本文介绍了基于Eclipse的在MS Windows环境下运行的嵌入式linux集成开发环境EzEmbedded。
有了它快速入门嵌入式linux开发并上手就成为可能!嵌入式linux应用开发为什么门槛高▲开发环境搭建难需要熟练使用发行版的linux系统,并在此上搭建开发环境。
▲开发过程繁琐需要熟练使用Vi等命令行编辑工具编辑代码、makefile。
▲程序下载调试复杂目前最常用的方式是在目标板上运行nfs服务器,在开发主机上将编译好的可执行文件挂载到目标板上,进行调试,并且调试要么采用printf方式,要么采用命令行的GDB,这种调试下载过程难于搭建和操作,开发效率低下。
▲需要买一块开发板虽然目前嵌入式Linux开发板价格已经很便宜了,但这个开销却不能省略。
对学生朋友这也是考虑因素之一。
综上所述,传统方式学习嵌入式Linux的门槛还真的不低,要求学习者要成为一个linux 系统的专家,从而导致很多初学者不能如愿。
EzEmbedded有什么特点▲EzEmbedded是一个专业级的图形界面的集成开发环境,工程创建、代码编写、编译、下载调试都在图形界面上进行,动动鼠标绝大部分工作就可以轻松完成。
除了工程创建过程的配置和下载调试的配置外,整个开发过程与VS开发本地程序或keil开发单片机程序非常类似。
▲在windows环境下运行,初学者只需要会10个左右的linux命令,其他操作基本上由鼠标就可以完成。
▲EzEmbedded是一个完整的开发环境,不需要其他依赖。
这一点与Eclipse不一样,只要安装了EzEmbedded,开发嵌入式linux的所有工具和组件都已经具备了。
▲EzEmbedded本身带有一个ARM9虚拟开发板,在安装好EzEmbedded后,就可以用鼠标开启开发板,并以之作为目标板进行程序运行和调试。
嵌入式Linux 启动时间优化1 简介本章包含的话题有启动时间的测量、分析、人因工程(human factors)、初始化技术和优化技巧等。
产品花在启动方面的时间直接影响终端用户对该产品的第一印象。
一个消费电子设备不管如何引人注目或者设计得怎么好,设备从关机状态到可交互的使用状态所需的时间对于获得正面的用户体验尤为关键。
案例#1 就是在关机状态从头启动一个设备的例子。
启动一个设备涉及到许多步骤和一系列的事件。
为了使用前后一致的术语,消费电子Linux 论坛(CE Linux Forum)的启动时间优化工作组起草了一个术语词汇表,该表包括了相关术语在该领域内通用的定义。
该词汇表如下:启动时间相关的词汇表2 技术/项目主页下面主要介绍与减少Linux 启动时间有关的各种技术。
有一部分描述了 上可以下载的本地补丁,而其余部分则介绍了在其他地方维护的项目或者补丁。
2.1 测量启动时间Printk Times –用于显示每个printk 的执行时间内核函数跟踪(Ftrace)–用于报告内核中每个函数的调用时间Linux 跟踪工具箱(LTT)–用于报告确切的内核和进程事件的时间数据Oprofile(译注:最新替代品是perf)–通用的Linux 分析器(Profile)Bootchart –用于Linux 启动过程的性能分析和数据展示。
收集启动过程中的用户空间部分的资源使用情况和进程信息,然后渲染成PNG、SVG 或者EPS 格式的图表。
Bootprobe –一组用于分析系统启动过程的System Tap 脚本当然,别忘了cat /proc/uptime (译注:统计系统已经运行的时间)grabserial –Tim Bird (译注:CE Linux Forum 主席)写的一个非常赞的工具用于记录控制台输出并打上时间戳进程跟踪–同样是Tim Bird 写的一个简单补丁,用于记录exec、fork 和exit 系统调用。
一、BusyBoxBusyBox 是标准Linux 工具的一个单个可执行实现。
BusyBox 包含了一些简单的工具,例如cat 和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount 以及telnet。
有些人将BusyBox 称为Linux 工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux 的许多工具和命令。
嵌入式根目录下的bin、sbin和usr目录以及linuxrc通常就是BusyBox。
在构建嵌入式linux的根文件系统的时候,会根据目标平台配置BusyBox源码,编译生成这三个目录和一个文件。
根目录下的目录和文件需要自行建立或者从BusyBox的example中拷贝修改。
二、嵌入式中的BusyBox的启动流程脚本执行顺序如下:/sbin/init -> /etc/inittab -> /etc/init.d/rcS1、在kernel/init/main.c的init函数中有代码if (execute_command)execve(execute_command,argv_init,envp_init);execve("/sbin/init",argv_init,envp_init);bootloader会给内核的main函数init=/linuxrc 这个参数,于是就有了execute_command = "/linuxrc",busybox中_install目录下的linuxrc 是busybox的一个软链接,指向/bin/busybox,而/sbin/init也是/bin/busybox的符号链接,因此这个linuxrc基本没什么用处,我们不要这个linuxrc脚本可以直接通过/sbin/init执行busybox的初始化,或者重写linuxrc,添加自己的一些初始化的东西。
嵌入式Linux必学文件处理命令嵌入式Linux必学文件处理指令Linux系统信息存放在文件里,文件与一般的公务文件类似。
每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。
以下是我整理的嵌入式Linux 必学文件处理指令,期望大家认真阅读!file——1.作用file通过探测文件内容推断文件类型,使用权限是全部用户。
2.格式file[options]文件名3.[options]主要参数-v:在标准输出后显示版本信息,并且退出。
-z:探测压缩过的文件类型。
-L:允许符合连接。
-fname:从文件namefile中读取要分析的文件名列表。
4.简洁说明使用file指令可以知道某个文件到底是二进制(ELF格式)的可执行文件,还是Shell Script文件,或者是其它的什么格式。
file能识别的文件类型知名目、Shell脚本、英文文本、二进制可执行文件、C 语言源文件、文本文件、DOS的可执行文件。
5.应用实例假设我们看到一个没有后缀的文件grap,可以使用下面指令: $ file grapgrap:English text此时系统显示这是一个英文文本文件。
需要说明的是,file指令不能探测包括图形、音频、视频等多媒体文件类型。
mkdir——1.作用mkdir指令的作用是建立名称为dirname的子名目,与MS DOS下的md指令类似,它的使用权限是全部用户。
2.格式mkdir[options]名目名3.[options]主要参数-m,--mode=模式:设定权限模式;,与chmod类似。
-p,--parents:需要时创立上层名目;假设名目早已存在,那么不当作错误。
-v,--verbose:每次创立新名目都显示信息。
--version:显示版本信息后离开。
4.应用实例在进展名目创立时可以设置名目的权限,此时使用的参数是“-m〞。
假设要创立的名目名是“tsk〞,让全部用户都有rwx(即读、写、执行的权限),那么可以使用以下指令:$mkdir-m 777 tskgrep——1.作用grep指令可以指定文件中搜寻特定的内容,并将含有这些内容的行标准输出。
linux 基本操作指令集-概述说明以及解释1.引言1.1 概述Linux 是一种自由和开放源代码的操作系统,它是基于类UNIX 操作系统的。
Linux 操作系统主要用于服务器应用领域,但也逐渐在桌面和嵌入式系统中得到广泛应用。
Linux 操作系统具有高度的稳定性、安全性和灵活性,因此备受广大用户的青睐。
在Linux 系统中,我们可以通过命令行终端执行一系列操作指令来完成各种任务。
本文将介绍Linux 中一些基本的操作指令集,包括文件和目录操作、用户和权限管理以及系统管理等内容。
通过学习这些基本操作指令,读者将能够更加熟练地使用Linux 系统,提高工作效率和系统管理能力。
本文将从文件和目录操作开始介绍,然后逐步深入到用户和权限管理以及系统管理等内容,帮助读者全面了解和掌握Linux 操作系统中的基本操作指令,从而更好地利用Linux 系统进行工作和学习。
1.2 文章结构本文将分为三个主要部分,分别介绍了linux基本操作指令集的相关内容。
具体包括:- 文件和目录操作: 介绍如何在linux系统中进行文件和目录的创建、查看、复制、删除等操作。
包括常用的文件操作指令如ls、cp、mv、rm 等。
- 用户和权限管理: 介绍如何管理linux系统中的用户和权限。
涵盖了用户创建、用户组管理、权限设置等内容。
常用的指令包括useradd、passwd、chown、chmod等。
- 系统管理: 介绍如何管理linux系统的状态和信息。
包括查看系统信息、进程管理、服务管理等内容。
常用的指令有ps、top、systemctl等。
通过这三个主要部分的介绍,读者可以对linux系统中常用的操作指令有一个全面的了解,从而更加熟练地操作linux系统。
1.3 目的本文的目的是帮助读者了解和掌握Linux基本操作指令集,包括文件和目录操作、用户和权限管理以及系统管理。
通过学习这些基本操作指令,读者可以提高对Linux操作系统的使用效率,快速地完成常见任务,提高工作效率和生产力。
linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。
执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。
执⾏该跳转(⼆跳)。
阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。
执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。
执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。
具体过程见下⽂“操作系统启动过程”部分。
整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。
BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。
启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。
往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。
若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。
可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。
因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
简述linux启动流程Linux系统启动的过程可以分为以下几个步骤:BIOS自检、引导加载程序、内核初始化、系统初始化和登录。
当计算机启动时,BIOS(Basic Input/Output System,基本输入/输出系统)会自检硬件设备,确保它们正常工作。
BIOS还会检查启动设备的设置,并寻找引导加载程序。
接下来,引导加载程序(Boot Loader)会被加载到计算机的内存中。
引导加载程序的作用是在计算机启动时加载操作系统内核。
常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(LInux LOader)。
引导加载程序加载内核后,内核开始初始化。
内核是操作系统的核心,负责管理计算机的硬件和软件资源。
内核初始化的过程包括设置内核参数、初始化进程、加载驱动程序等。
在这个阶段,内核还会挂载根文件系统,以便后续的系统初始化和运行。
系统初始化是Linux启动过程的下一个阶段。
在系统初始化过程中,Linux会启动各种系统服务和进程,包括网络服务、文件系统服务、用户管理服务等。
此外,系统还会进行一些配置操作,如加载配置文件、设置环境变量等。
系统初始化的过程可能会涉及到一些启动脚本和配置文件,以确保系统能够正确地启动和运行。
当系统初始化完成后,用户可以通过登录界面或命令行界面登录到Linux系统。
在登录之前,系统可能会要求用户输入用户名和密码进行身份验证。
一旦验证通过,用户就可以开始使用Linux系统提供的各种功能和应用程序了。
总结起来,Linux启动流程包括BIOS自检、引导加载程序、内核初始化、系统初始化和登录。
这个过程确保了Linux操作系统能够正常启动并提供各种功能和服务。
通过了解Linux启动流程,我们可以更好地理解Linux系统的运行机制,并能够更好地管理和使用Linux操作系统。
详解嵌入式linux启动信息(推荐)作者:佚名来源:不详发布时间:2006-10-27 8:12:31 发布人:zangyl摘要我们在这里讨论的是对嵌入式linux系统的启动过程的输出信息的注释,通过我们的讨论,大家会对嵌入式linux启动过程中出现的、以前感觉熟悉的、但却又似是而非的东西有一个确切的了解,并且能了解到这些输出信息的来龙去脉。
嵌入式linux的启动信息是一个很值得我们去好好研究的东西,它能将一幅缩影图呈现在我们面前,来指导我们更加深入地理解linux内核。
关键字:linux,嵌入式,启动,bootloader正文作为一名嵌入系统开发者,你一定遇到过下面的情景:在某论坛上看到一篇帖子,上面贴着嵌入式linux开发板启动时的有关信息,然后大家在帖子里讨论着这个启动过程中出现的问题,随机举例如下:Linux version 2.4.20-uc0 (root@Local) (gcc version 2.95.320010315 (release)(ColdFire patches - 20010318 from http://f/(uClinux XIP and shared lib patches from /)) #20 三6月 18 00:58:31 CST 2003Processor: Samsung S3C4510B revision 6Architecture: SNDS100On node 0 totalpages: 4096zone(0): 0 pages.zone(1): 4096 pages.zone(2): 0 pages.Kernel command line: root=/dev/rom0Calibrating delay loop... 49.76 BogoMIPSMemory: 16MB = 16MB totalMemory: 14348KB available (1615K code, 156K data, 40K init)Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)Inode cache hash table entries: 1024 (order: 1,Mount-cache hash table entries: 512 (order: 0, 4096 bytes)Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)Page-cache hash table entries: 4096 (order: 2, 16384 bytes)POSIX conformance testing by UNIFIXLinux NET4.0 for Linux 2.4Based upon Swansea University Computer Society NET3.039Initializing RT netlink socketStarting kswapdSamsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options en abledttyS00 at 0x3ffd000 (irq = 5) is a S3C4510BttyS01 at 0x3ffe000 (irq = 7) is a S3C451Blkmem copyright 1998,1999 D. Jeff DionneBlkmem copyright 1998 Kenneth AlbanowskiBlkmem 1 disk images:0: BE558-1A5D57 [VIRTUAL BE558-1A5D57] (RO)RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksizeSamsung S3C4510 Ethernet driver version 0.1 (2002-02-20) <mac@.tw>eth0: 00:40:95:36:35:34NET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCPIP: routing cache hash table of 512 buckets, 4KbytesTCP: Hash tables configured (established 1024 bind 1024)VFS: Mounted root (romfsFreeing init memory: 40K上面的这些输出信息,也可能包括你自己正在做的嵌入式linux开发板的输出信息,其中的每一行,每一个字的含义,你是否深究过,或者说大部分的含义你能确切地知道的?本人想在这里结合本人在实践中一些体会来和广大嵌入式linux的开发者一起读懂这些信息。
我们在这里将以一个真实的嵌入式linux系统的启动过程为例,来分析这些输出信息。
启动信息的原始内容将用标记标出,以区别与注释。
嵌入式linux的启动主要分为两个阶段:①第一部分bootloader启动阶段②第二部分linux 内核初始化和启动阶段第一节:start_kernel第二节:用户模式( user_mode )开始,start_kernel结束第三节:加载linux内核完毕,转入cpu_idle进程第一部分 : bootloader启动Boot loader v0.12NOTE: this boot loader is designed to boot kernels made with the2.4.xx releasesbootloader for XVBuilt at Nov 20 2005 10:12:35Bootloader头信息,版本,编译时间等,这个因不同的bootloader的设计而有所不同,由此你能看出bootloader的版本信息,有很多使用的是通用的bootloader,如u-boot,redboot等。
Loaded to 0x90060000将bootloader加载到内存ram中的0x90060000处,即将bootloader加载到内存的高端地址处。
Linux内核将被bootloader加载到0x90090000处。
Found boot configuration查找到了启动boot的配置信息Booted from parallel flash从flash中启动代码,此处的flash为并行闪存。
Flash的分类列举如下:闪存分三类:并行,串行,不可擦除。
①并行Parallel flash ,Intel于1988年发明.随机读取的速度比较快,随机按字节写,每次可以传NOR Flash输8Bit。
一般适合应用于数据/程序的存贮应用中.NOR还可以片内执行(execute-in-place)X IP.写入和擦除速度很低。
,1989年,东芝公司发明.是以块和页为单位来读写的,不能随机访问某个NAND Flash指定的点.因而相对来说读取速度较慢,而擦除和写入的速度则比较快,每次可以传输16Bit,一般适用在大容量的多媒体应用中,容量大。
如:CF,SM.②串行Serial Flash 是以字节进行传输的,每次可以传输1-2Bit.如:MMC,SD,MS卡.串行闪存器件体积小,引脚也少,成本相对也更低廉。
③不可擦除Mask Rom Flash的特点是一次性录入数据,具有不可更改性,经常运用于游戏和需版权保护文件等的录入。
其显著特点是成本低。
注意:任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
从上面的信息,我们可以对flash类型特点有个比较明确的了解。
CPU clock rate: 200 MHz开发板上所使用的CPU的主频为200MHZ.DRAM size is 128MB (128MB/0MB)动态内存ram大小为128M。
这里我们列举一下内存的类型及工作原理。
根据内存的工作原理可以划分出两种内存:DRAM和SRAM①DRAM表示动态随机存取存储器。
这是一种以电荷形式进行存储的半导体存储器。
D RAM中的每个存储单元由一个晶体管和一个电容器组成。
数据存储在电容器中。
电容器会由于漏电而导致电荷丢失,因而DRAM器件是不稳定的。
为了将数据保存在存储器中,DR AM器件必须有规律地进行刷新。
②SRAM是静态的,因此只要供电它就会保持一个值。
一般而言,SRAM 比DRAM要快,这是因为SRAM没有刷新周期。
每个SRAM存储单元由6个晶体管组成,而DRAM 存储单元由一个晶体管和一个电容器组成。
相比而言,DRAM比SRAM每个存储单元的成本要高。
照此推理,可以断定在给定的固定区域内DRAM的密度比SRAM 的密度要大。
SRAM常常用于高速缓冲存储器,因为它有更高的速率;而DRAM常常用于PC中的主存储器,因为其拥有更高的密度。
在嵌入式系统中使用DRAM内存的设计比较广泛。
地址辅助说明:先说明一下内存地址数字情况,主要是为了方便记忆。
可以访问的内存为4G。
0x40000000是1GB处;0x00040000是256K处,0x00020000是128K处,0x90000000是2 GB多的地方。
1M->0x00100000,2M->0x00200000,8M->0x0080000016M->0x01000000,32M->0x02000000256M->0x1000000064K->0x000100004K->0x00001000这个是个快速记忆的方法,你可以根据地址中1的位置和其后0的个数来快速知道换算后的地址是在多少兆的地方。
比如,1的后面5个0,代表1M的大小,6个0,代表16M,以此类推。
ROMFS found at 0x46040000, V olume name = rom 43f291aaromfs,只读文件系统所在的地址为:0x46040000 (flash映射后的第3分区)。
卷名为rom。
romfs和rootfs概念上有所区别。
flash在内存中的的起始地址为0x46000000,而ROMFS在flash分区上的起始位置为0x00040 000,所以ROMFS在内存地址中的位置就为0x46040000。