2、vivi的启动过程分析
WINDOWS操作系统启动过程详解
WINDOWS操作系统启动过程详解基本上,操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。
预引导阶段:当我们打开计算机电源后,预引导过程就开始运行了。
在这个过程中,计算机硬件首先要完成通电自检(Power-On Self Test,POST),这一步主要会对计算机中安装的处理器、内存等硬件进行检测,如果一切正常,则会继续下面的过程。
如果计算机BIOS是支持即插即用的(基本上,现阶段能够买到的计算机和硬件都是支持这一标准的),而且所有硬件设备都已经被自动识别和配置,接下来计算机将会定位引导设备(例如第一块硬盘,设备的引导顺序可以在计算机的BIOS设置中修改),然后从引导设备中读取并运行主引导记录(Master Boot Record,MBR)。
至此,预引导阶段成功完成。
引导阶段:引导阶段又可以分为:初始化引导载入程序、操作系统选择、硬件检测、硬件配置文件选择这四个步骤。
在这一过程中需要使用的文件包括:Ntldr、Boot.ini、、Ntoskrnl.exe、Ntbootdd.sys、Bootsect.dos(非必须)。
初始化引导载入程序:在这一阶段,首先出场的是ntldr,该程序会将处理器由实模式(Real Mode)切换为32位平坦内存模式(32-bit Flat Memory Mode)。
不使用实模式的主要?因是,在实模式下,内存中的前640KB是为MS-DOS保留的,而剩余内存则会被当作扩展内存使用,这样Windows XP将无法使用全部的物理内存。
而32位平坦内存模式下就好多了,Windows XP自身将能使用计算机上安装的所有内存(其实最多也只能用2GB,这是32位操作系统的设计缺陷)。
接下来ntldr会寻找系统自带的一个微型的文件系统驱动。
大家都知道,DOS和Windows 9x操作系统是无法读写NTFS文件系统分区的,那么Windows XP的安装程序为什么可以读写NTFS分区?其实这就是微型文件系统驱动的功劳了。
课件演示微机的启动过程
学院:数信学院 系别:计算机系 班级:2004级乙班 姓名:韩三宝 学号:200471030104
微机的启动意味着将存于硬盘或软盘的操 作系统装入微机内存
一台正常的微机的启动过程大至分为九个阶段: 第一阶段:电源工作,Cpu复位 第二阶段:硬盘检查与设置检查 第三阶段:读取分区记录和主引导记录 第四阶段:读取Dos引导记录 第五阶段:装载系统隐含文件 第六阶段:执行Dos的引导过程 第七阶段:装入Dos的引导过程 第八阶段:执行批处理文件 第九阶段:启动完成
The end
谢谢收看!Βιβλιοθήκη 微机的启动过程总线
系统区域
1 CPU 3
ROM 易失性
OS 用户区
BIOS
内存
.OS
Word
Game
Etc
2
自检
引导
ROM
硬盘 ,外存(辅存)
当微机启动后,CPU执行 “取指令 ,只执行 指令”程序 ,该程 序为内存中ROM中的BIOS它包括 自检和引导 两部分 。 检查计算机 硬件无问题 后,引导操作系统的一部分从硬盘进入 内存,等待命令。当有新的程序进入时,从一个等待状态跳出, 执行新的指令。
Widows操作系统启动过程分析
以及他们所依赖的模块 ➢ 加载注册表中的System Hive并加载其中 的Boot类
型(SERVICE_BOOT_START(0)) ➢ 执行NTOSKRNL.EXE的入口函数
NTOSKRNL.EXE
InbvUpdateProgressBar(90)
Phase1Initialization(100%)
RtlCreateUserProcess
➢ 创建SMSS进程
FinalizeBootLogo ZwResumeThread InbvUpdateProgressBar(100) InbvEnableDisplayString(1) ZwWaitForSingleObject
➢ 释放启动过程所使用的内存
如果是以安全模式启动,则些信息写入注 册表
InbvUpdateProgressBar(80)
Phase1Initialization(85%)
KeI386VdmInitialize
➢ DOS虚拟机初始化
KiLogMcaErrors
➢ 检查和记录MCA(Machine Check Architecture)
Hibernate ➢ 打开Boot.ini文件,读取其中的设置,如果有多个OS,
则显示菜单 ➢ 如果用户按过F8,则显示选项菜单
NTLDR (2/2)
工作过程(续)
➢ 加载,调用BIOS中收集的基本的硬件 信息(时间,总线类型,硬盘,输入设备,端口,显 卡)并保存到注册表中 HKLM\Hardware\Description
PoInitSystem(1)
linux系统启动的具体流程
Linux系统的启动过程可以分为以下五个阶段:
内核引导:当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入/boot目录下的内核文件。
运行init:init进程是系统所有进程的起点,可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init程序首先需要读取配置文件/etc/inittab。
系统初始化:在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit,它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
建立终端:rc执行完毕后,返回init。
这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。
用户登录系统:命令行登录、ssh登录、图形界面登录3种方式。
Windows启动过程详解
Windows启动过程详解1.MBR 阶段(16 位实模式):BIOS 在完成通电自检后,将控制权移交给位于硬盘前63 个扇区的MBR(Master Boot Record),MBR 将自己的镜像加载到内存,然后执行对分区表的搜索,然后将控制权转移给第一个活动分区的PBR(Partition Boot Record);2.PBR 阶段(16 位实模式):PBR 是因操作系统而异的分区引导记录,它将自身加载到内存并加载基本的磁盘驱动,通过BIOS INT 中断的方式查找此分区上的引导文件,也就是我们的Bootmgr,并将其加载到内存;3.Bootmgr 阶段(16 位实模式和32 位无分页内存):读取BCD 信息,显示启动菜单,如果安装有多个版本的Windows 引导记录,能在这里选择要启动的系统,或者执行内存测试等操作,在选定操作系统后,将Windows BootLoader——Winload.exe 加载到内存;4.Winload.exe 阶段(32 位或64 位保护模式,有内存分页):加载Windows 内核Ntoskrnl.exe 和它的依赖项Kdcom.dll(Kernel Debugger),Ci.dll,Clfs.sys,Pshed.dll,HAL.dll(硬件抽象层,其实就是主板驱动),并将注册表中HKLM\SYSTEM 子键内容加载到内存,如果检测到页面文件Hiberfil.sys 则启动Winresume.exe 恢复休眠文件;5.Ntoskrnl.exe 阶段(保护模式):初始化Windows 执行体并一一加载注册在HKLM\SYSTEM\CurrentControlSet\Services 下标记为System 的系统驱动程序,运行会话管理器smss.exe,准备运行native code 所需的环境;6.Smss.exe 阶段(Native 程序):初始化环境变量和Windows 图形子系统(Win32k.sys),初始化Windows API(csrss.exe)和Windows 初始化进程(WinInit.exe)和登陆进程(WinLogon.exe);7.WinInit.exe 阶段(Windows 程序):初始化服务管理器(SCM),本地安全鉴定进程(LSASS)和本地会话管理器(LSM),初始化剩余的注册表中的启动项内容,以用户态运行启动项任务;8.Winlogon.exe 阶段:显示登陆画面,处理与用户登录相关的安全鉴定任务;9.Services.exe 阶段:完成加载在HKLM\SYSTEM\CurrentControlSet\Services 下标记为AutoStart 的驱动程序和Windows 服务;10.Explorer.exe 阶段:在创建Windows Shell(Explorer.exe)时,初始化桌面窗口管理器(DWM)进程,Explorer.exe 加载自身和相关启动项。
Widows操作系统启动过程分析
Windows操作系统启动过程二○一一年九月专业班级:网络工程1班姓名:指导教师:李辉信息科学技术学院内容摘要当我们打开计算机的电源之后,开始了windows操作系统的引导过程。
该引导过程细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。
我们按下电源按钮,BIOS自检程序开始运行,并且找到主引导记录MBR,将系统控制全交给引导记录。
接着主引导记录被装入内存,并且程序开始执行,活动分区的引导扇区被装入内存,NTLDR从引导扇区被装入并初始化,并将处理器的实模式改为32位平滑内存模式。
NTLDR开始运行适当的小文件系统驱动程序(小文件系统驱动程序是建立在NTLDR内部的,它能读FAT或NTFS)。
由于所有的windows操作系统记录都会被boot.imi文件中,所以NTLDR必须找到并读boot.ini文件,并且装载所选操作系统。
与此同时, 会搜索计算机硬件并将列表传送给NTLDR,以便将这些信息写进HKEY_LOCAL_MACHINE/HARDWARE中。
然后NTLDR装载windows XP的内核文件Ntoskrnl.exe和硬件抽象层Hal.dll,完成载入内核阶段。
随后开始初始化内核,在这一阶段中会完成四个任务:创建Hardware注册表键、对ControlSet 注册表键进行复制、载入和初始化设备驱动,以及启动服务。
当前三个个任务完成之后,系统内核成功载入,接着启动Win32子系统。
当所有操作都完成之后,Windows的图形界面就可以显示出来了。
最后winlogon.exe进程将启动本地安全性授权子系统,这时候就可以顺利登陆了。
ABSTRACTWhen we open the computer power after, began operating system Windows of the guide process. This guide process for the lead and guide the subdivision, load the kernel, initialize kernel, and login this five stages.We press the power button, the BIOS self-inspection program started running, and find the master boot record MBR, will control system to guide the record. Then the master boot record loaded into memory, and the program started, the boot sector of the active partition loaded into memory, NTLDR from the boot sector was loaded and initialization, and will be the real mode to processor 32-bit memory smooth mode. NTLDR began to run the proper small file system driver (small file system driver is based on NTLDR internal, it can read FAT or NTFS). Because all the Windows operating system records will be drive imi file., so NTLDR must find and read drive. Ini file, and load the selected operating system. At the same time, would search for computer HARDWARE and will send NTLDR list, so that the information written into HKEY_LOCAL_MACHINE/HARDWARE. And then NTLDR load Windows XP kernel file. Ntoskrnl exe and the hardware abstraction layer (Hal. DLL loaded, complete kernel stage. Then began to initialize kernel, at this stage will be completed in four mission: create Hardware registry keys, ControlSet registry keys to reproduction, load and initialization device drivers, and startup services. The current three tasks completed, system kernel loaded, then start success Win32 subsystem. When all the operation after completion of all, the graphical interface of the Windows can be displayed. Finally winlogon. Exe process will start local security authorized, by this time can smoothly subsystem landed.目录1 预引导 (6)1.1 上电 (6)1.2 通电自检 (6)1.3定位引导设备 (6)2 引导阶段 (6)2.1 初始化引导载入程序 (6)2.2 操作系统选择 (7)2.3 硬件检测 (7)2.4 配置文件选择 (7)3 载入内核阶段 (7)4 初始化内核 (8)4.1 创建Hardware注册表键 (8)4.2 对Control Set注册表键进行复制 (8)4.3 载入和初始化设备驱动 (8)4.4 启动服务 (9)5 登录阶段 (9)Windows操作系统启动过程打我们开电源之后,开始操作系统的引导过程。
vivi 的实现分析
vivi boot loader的实现参考资料:1.嵌入式系统 Boot Loader 技术内幕, 詹荣开 (zhanrk@)2.Getting started with VIVI, Janhoon Lyu, nandy@3.嵌入式设备上的Linux 系统开发,A. Santhanam etc.4.Linux system development on an embedded device, A. Santhanam5.vivi 有关资料/developer/s3c2410x/index.html6.smdk2410的硬件和软件/linux相关资料 search 2410说明:本文文字结构照抄”嵌入式系统 Boot Loader 技术内幕, 詹荣开(zhanrk@)”一文,以vivi中head.S作为stage1, main()作为stage2,解释了VIVI for SMDK2410 (based on S3C2410) 开发系统的bootloader的实现。
将原文放在这里是为了方便读者。
注意,VIVI的实现并非完全跟原文一致。
多谢原文作者詹大侠的详细解释。
附录有一节__SETUP在kernel的作用来自jeppeter (member) from http:// 文中对MTD subsystem linux没作解释。
Google “MTD linux subsystem 文件系统JFSS2 ”可以获得足够的解释。
如有错误,烦请email jonesxu@告知。
多些Ver.0.95Jones S Z Xujonesxu@2004-09-29Chapter 1 Boot loader基本结构由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为stage1 和 stage2 两大部分。
依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
Vivibootloader的执行过程
Vivibootloader的执行过程Vivi bootloader的执行过程vivi bootloader中的Makefileall:arm-linux-gcc -mabi=aapcs-linux -mno-thumb-interwork -Os -Wall -c head.S 244x_lib.c nand.c main.carm-linux-ld -T mem.lds -Bstatic head.o 244x_lib.o nand.o main.o arm-linux-objcopy -O binary -S a.out vboot.bin -R .comment -R .stab -R .stabstrrm *.o a.outclean:rm vboot.bin(1)、Makefile中做的第一个事情就是编译所有的文件,-mabi=nameGenerate code for the specified ABI. Permissible values are:`apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.GNU官网上给出的选项-mabi=name的解释:生成指定ABI(Application Binary Interface)的代码,其中aapcs-linux为参数值。
-mthumb-interworkGenerate code which supports calling between the ARM and Thumbinstruction sets. Without this option the two instruction sets cannot be reliably used inside one program. The default is-mno-thumb-interwork, since slightly larger code is generated when -mthumb-interwork is specified.GNU官网上给出的选项-mthumb-interwork的解释:生成支持在ARM和Thumb指令集间相互调用的代码。
Linux系统启动流程分析-电脑资料
Linux系统启动流程分析-电脑资料一系统上电和启动ROMNOR Flash作为启动ROM的系统启动过程NOR Flash开头处存放启动代码,程序从NOR Flash开始处启动,。
配置EMI寄存器,设置好各存储器的地址和存取规则。
配置电源管理模块,各模块上电。
启动代码将位于NOR Flash中的正式执行代码复制到内存中,以提高执行效率。
设置PC指针,指向NOR Flash中固定地址。
设置地址映射,用0地址映射到内存RAM空间。
设置PC指针,指向RAM中初始化代码,开始执行代码。
NAND Flash作为启动ROM的系统启动流程上电初始,DMA默认设置将存储在NAND Flash中第一页的数据搬运到内部RAM中,然后设置PC到内部RAM开始处的地址,开始执行代码,电脑资料《Linux系统启动流程分析》(https://www.)。
在启动代码中设置中断向量和硬件配置等。
将执行代码搬运到外部SDRAM或DDR=RAM,留出启动代码的位置。
将启动代码搬运到SDRAM或DDR-RAM中首址。
设置Remap,将0地址重新映射到SDRAM或DDR-RAM首地址。
设置PC指针,开始执行正式的执行代码。
二 Bootloader引导三 Linux内核引导非压缩内核:Image压缩内核:zImage内核初始化设备初始化启动内核挂载文件系统启动用户空间进程四 init初始化系统服务初始化log系统解析/init.rc和/init.%hardware%.rc文件,执行early-init,并执行解析出的init动作、early-boot动作、boot动作和execute property动作。
进行设备初始化,属性服务器初始化并开启属性服务。
进入无线循环以等待属性设置或子进程退出事件。
如何启动内核(vivi与Linux kernel的参数传递情景分析)
vivi开发笔记(十七):vivi与Linux kernel的参数传递情景分析(上)在上一部分提到过了,vivi作为bootloader,向内核传递启动参数是其本职工作之一。
要把这个情景分析清楚,不仅仅需要分析vivi的参数机制,而且要分析Linux kernel的接收机制。
因为这是一个简单的通信过程,比起本科所学习的TCP/IP来简单的多,但是因为简单,所以在协议上并不规范,理解上反而不如TCP/IP协议。
下面就分为两个方面对此情景分析。
一、综述内核参数传递机制现在内核参数传递机制有两种:一种是基于struct param_struct,这种已经比较老了。
缺点是该结构每个成员的位置是固定的,受限比较大。
另外一种就是新的struct tag way。
说新是相对的,Linux kernel 2.4.x都希望采用这种tag的方式。
关于这方面的资料,可以有如下参考(所给出的目录是基于linux-2.4.18的内核,以顶层Makefile所在目录为当前目录。
这里基于ARM架构的S3C2410,其他的SoC可以类比很容易得到):1、关于bootloader的理解--【Documentation/arm/booting】此文档详细的讲述了bootloader的作用,具体内容如下:主要就是三步工作。
· 获取media_type。
上面就是vivi支持的media_type,现在此开发板是MT_SMC_S3C2410,也就是nand flash memory的选择部分。
·获取nand flash的kernel分区信息,为下载做好准备(2)把kernel映象从nand flash复制到sdram的固定位置· R1 machine type number(193)· R2 内核的第一条指令的起始地址(注意,这里并非参数表的首地址)为了对参数传递这个情景分析清楚,所以还必须分析Linux kernel如何启动。
基于ARM平台的引导程序分析与移植研究
基于ARM平台的引导程序分析与移植研究摘要:以S3C2440处理器和嵌入式Linux为平台,对嵌入式系统中的引导程序vivi进行分析和移植研究,总结了vivi在S3C2440A 处理器上的移植方法和步骤,通过了具体测试,取得了较好效果。
关键词:引导程序;嵌入式系统;vivi;部署和移植1.1嵌入式系统软件结构嵌入式平台是一种软硬件结合的平台,其特点是具有专门的嵌入式操作系统和专门的硬件构架,如:比较流行的Linux和Android系统。
嵌入式系统软件结构所划分的层次如图1所示。
用户应用程序文件系统嵌入式操作系统内核(Kernel)引导加载程序(Bootloader)图1嵌入式系统软件层次结构引导加载程序:即Bootloader程序,它是固化在硬件FLASH 上的一段程序,用于完成硬件的一些基本配置和初始化,引导嵌入式操作系统启动。
嵌入式操作系统内核:它是为众多应用程序提供对计算机硬件安全访问的一部分软件,这种访问是有权限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
文件系统:操作系统中负责管理和存储文件信息的软件机构由3部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。
文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。
用户应用程序:针对具体应用、为实现特定功能开发的应用程序。
1.2BootLoader在嵌入式平台的重要性分析引导程序是系统上电后运行的第一段软件代码,嵌入式系统的BootLoader类似于普通PC机的BIOS程序,在完成硬件检测和资源分配后,BootLoader的主要运行任务就是将内核映象从存储上读取到RAM 中,然后跳转到内核的入口点运行,即开始启动操作系统。
嵌入式平台通常没有像PC体系结构下BIOS那样的固件程序,因此整个系统加载启动任务就完全由BootLoader来完成。
在基于ARM920T构架的S3C2440的系统中,系统上电或复位是从0X00000000处开始执行,而在这个地址存放的就是的BootLoader程序。
1、bootloader概述
2、第十三讲bootloader的原理和vivi的移植
有以下几个内容:1、bootloader概述 2、vivi的启动过程分析 3、vivi的配置移植 4、vivi命令详解一个嵌入式Linux系统从软件的角度看通常分为4个层次:1、bootloader 2、Linux内核 3、文件系统 4、用户应用程序 bootloader是系统上电后执行的第一个程序,它用来初始化硬件,引导操作系统,也就是加载Linux内核,让系统跑起来,然后要挂载文件系统,这个用来管理操作系统硬件和应用程序,最后我们要实现特定的应用程序就是用户应用程序,那这些就涵盖了我们后面要讲的所有内容,这个图表示的是Flash设备上的磁盘分区,首先是bootloader,boot Parameters分区是系统的启动参数,它可以存放bootloader向内核kernel传递的命令行参数等等,然后是linux内核kernel、文件系统
1、第五部分嵌入式系统移植之Bootloader
从这一讲开始后面讲的都是和嵌入式操作系统相关的,也都是软件层面的,我们不用关心具体的硬件,因为我们的开发板已经做好了完善的硬件平台,我们现在要做的就是在这个硬件平台上跑操作系统,运行应用程序,所以现在大家要转变一下思想,不能像以前学习单片机那样纯粹的操作硬件,一定要把重点放在嵌入式操作系统和应用程序的开发上,不要以为操作系统对你来说不重要,如果给你台电脑,上面没有操作系统,只有一些硬件程序,那你会用吗,嵌入式也是一样,操作系统是它的核心,嵌入式的操作系统不像在PC机上安装Windows那样简单,是通过一点一点的配置、修改移植过来的,嵌入式移植有三部分,这一部分主要讲解bootloader
4、bootloader的操作模式
大多数bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,bootloader的作用就是加载操作系统,这就像我们使用的uboot一样,在开发板上电时会先运行uboot,那如果在几秒钟内,我在串口终端里按下了空格键,那么就会进入下载模式,我们可以下载内核和文件系统,或做一些其它的事,但这些都是我们开发人员需要做的,那用户需要用的是一个产品,是我们已经开发好的,就不需要用下载的功能,他们只需要系统上电后自动运行操作系统和应用程序,那也就是启动加载模式,通常bootloader对于硬件的依赖性非常强,建立一个通用的bootloader几乎是不可能的,它除了依赖于CPU的体系结构外,还依赖于嵌入式的硬件配置,所以不可能有一个bootloader支持所有的CPU和电路板
分析Windows启动过程
分析Windows启动过程作者:丁志云来源:《电脑知识与技术》2009年第32期摘要:对Windows的启动过程进行了研究,描述了计算机启动过程需要经过的步骤,并分析了各个进程负责的工作。
关键词:启动过程;NTLDR工作过程;登陆过程中图分类号:TP391文献标识码:A文章编号:1009-3044(2009)32-9090-02Analysis of Windows Startup ProcessDING Zhi-yun(Jiangsu Yancheng Technician College, Yancheng 224002, China)Abstract:About the Windows startup process research, described thesteps of computer’s startup process, and analysis of the work of the various processes.Key words: startup process; NTLDR work process; Log-in processWindows启动是一个非常复杂的过程,我们每天都在和Windows打交道,很多人甚至可能在一天当中要面对多次Windows的启动过程,可是你知道在Windows的启动过程背后隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在这些步骤中计算机中发生了什么事情?本文将试图为你解释上述的疑惑。
以Windows XP为例详细分析下启动过程。
大体启动过程如图1。
1 概述首先按下电源开关时,主板开始加电,主板上的芯片组会接收到电信号,此时CPU开始复位(RESET),CPU每次复位都会执行0xFFFFFFF0这个地址的程序,此地址指向的就是BIOS,然后BIOS会检测电脑的硬件,比如硬盘,光驱,网卡等等,检测完毕BIOS会将操作权转交给MBR(MAIN BOOT RECORD)既主引导扇区,其为512字节,其中有446为引导程序和出错信息,另外64字节为分区表,最后两个字节为55AA,代表主引导分区,MBR会从分区表中搜索引导分区既活动分区,找到活动分区后系统会加载活动分区引导扇区的引导代码,此引导代码会加载NTLDR(在操作系统初次安装时活动分区就写入了加载NTLDR这段代码),NTLDR通常在c盘根目录下,NTLDR完成一些基本操作后会将控制权交给内核文件NTOSKRNL,NTOSKRNL依赖于HAL.dll,BOOTVID.dll,和KDCOM.dll等几个文件,固NTLDR会将它们一同加载。
Vivi(Bootloader)源代码分析与移植
Bootloader(Vivi)源代码分析----基于S3C2410处理器目录第一章绪论 (3)1.1 Vivi简介 (3)1.2 Vivi 源码树 (4)1.3 Vivi 支持的主要功能 (5)第二章Vivi源代码详细分析 (6)2.1 Vivi的启动流程 (6)2.1.1 第一阶段(Stage 1) (6)2.1.2 第二阶段(Stage 2) (11)2.2 Vivi 的初始化 (14)2.2.1 设置异常向量 (14)2.2.2 初始化 (15)2.2.3中断向量表 (24)2.2.4 关于vivi magic number (27)2.2.5 实际完成的主要任务: (28)2.3 stage 2:【init/main.c】 (29)2.3.1 step1打印版本信息 (29)2.3.2 step2初始化GPIO (31)2.3.3 step3MMU初始化 (32)2.3.4 step4 堆初始化 (32)2.3.5 step5 MTD设备初始化 (35)2.3.6 step 6私有参数都放在预先规划的内存区域 (43)2.3.7 step7调用add_command()函数,增加vivi作为终端时命令的相应处理函数 (48)2.3.8 step8要么进入vivi的命令行交互界面,要么直接启动内核 (50)第三章U-boot 在S3C2410 上的移植分析 (52)3. 1 对ARM-920T内核的支持 (52)3. 2 配置自己的开发板 (52)3. 3 实现网卡的驱动程序 (54)3.4 从NAND Flash启动 (55)3.4.1 修改cpu/arm920t/start.s 添加NAND Flash启动跳转代码 (55)3.4.2 添加从NAND Flash启动代码 (57)3.4.3 添加上述代码中引用的宏定义 (59)3. 5 修改Makefile 文件 (59)3.6 搭建编译环境 (60)3. 7 生成目标文件并进行测试 (61)3. 8 测试 (63)第一章绪论1.1 Vivi简介Vivi 来自韩国是由mizi 公司开发的bootloader, 适用于ARM9处理器,它是三星官方板SMDK2410采用的Bootloader,通过修改后可以支持S3C2440等处理器。
基于S3C2440 的VIVI bootloader扩展命令基本方法
基于S3C2440 的VIVI bootloader扩展命令基本方法【摘要】vivi是一款轻量级的bootloader程序,性能稳定,扩展方便。
对s3c24x0系列的arm9处理器作了优化,一直s3c2440上得到广泛的应用。
本文介绍了vivi的启动流程和基本功能配置,以及如何在vivi的中扩展命令。
使用vivi提供的命令注册函数和注册流程,定制用户的命令,增强vivi bootloader的功能。
【关键词】vivi;bootloader;s3c2440;命令扩展0 引言vivi 是由韩国mizi公司开发的一款开源bootloader程序。
虽然mizi公司已经停止了vivi版本的更新,但目前很多s3c2410、s3c2440等处理器一直使用vivi作为bootloader程序(或基于vivi 的衍生)。
对于s3c2410、s3c2440等系列的处理器,vivi有较好的稳定性和扩展性。
这里我们基于s3c2440处理器平台,介绍一下vivi 的使用和命令扩展方法。
1)bootloader 作用简介bootloader 是嵌入式系统在引导操作系统内核或用户应用程序之前运行的一段程序。
主要完成芯片上电到系统引导前的一系列初始化功能,和提供一些辅助功能。
由于嵌入式操作系统越来越复杂,操作系统和处理器也呈现多样化的发展趋势。
嵌入式操作系统很难实现对所有处理器的上电初始化的适用,而且随着处理器的集成度越来越高,系统引导的工作差异也越来越大。
bootloader的主要功能可以归纳为以下几点[1]:(1)初始化存储器,包括操作系统启动是使用到的rom和ram;(2)处理器芯片类型的检测,并最终将此参数交给操作系统;操作系统内核会识别处理器架构等,并作特殊化处理;(3)初始化必要的外设,不同系统有不同需求,但最好至少留一个通信串口作调试;(4)加载操作系统内核。
2)几种常见的bootloader比较常见的几种开源bootloader有:u-boot、redboot和vivi。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、bootloader的stage2阶段
初始化一个串口,以便和用户进行交互 2、检测系统内存映射,因为后面要将Flash中的内核镜像 加载到RAM空间,那就要在这之前检查系统的内存映射情况 3、将kernel映像和根文件系统映像从Flash上读到RAM空间 4、为内核设置启动参数,把这些参数传递给内核 5、调用内核,那这些程序都在/vivi_2440/arch/lib目录下,由这个文件夹下的文件实现的,第二阶段stage2的入口函数就是main函数,它在\vivi_2440\vivi_2440\init这个文件夹main.c文件中,就是由main函数来调用lib目录下的函数来实现第二阶段的工作,看一下vivi的源码目录结构,arch文件夹中包含了执行目标板的子目录,这里就有一个s3c2440子目录,drivers文件夹包含引导系统需要的设备驱动程序,比如serial子目录的串口和/mtd/nand子目录下的nandflash及/mtd/nor子目录下的norflash等等,include文件夹是公共的头文件目录,init文件夹中就有main.c和version.c这两个文件,lib文件夹下第二阶段的初始化代码和vivi常用命令的实现,net文件夹是一些网络文件,scripts文件夹是一些脚本文件,usb文件夹是usb的驱动代码,关于vivi源码分析,我们这里还有一篇文章,就是天祥电子S3C2440开发平台光盘→资料盘→TX-2440A盘20111012更新→嵌入式学习资料压缩包→bootloader文件夹下的vivi-bootloader.pdf即vivi-bootloader的实现,这篇文章把源码分析的非常详细,那我就不领大家分析了,大家可以参考这些资料自己去学习vivi的源码,理解它的启动过程
1、vivi的启动过程分析
这里我们主要是用vivi的源码来进行分析,因为vivi的源码都是从Linux内核的源码中抠出来的,所以理解了vivi的启动过程,那么对于理解Linux操作系统也是很有帮助的,bootloader的启动过程大多是分两个阶段,即stage1和stage2,依赖CPU体系结构的代码通常放在stage1中,而且通常用汇编语言实现,stage2中的代码通常用C语言实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和移植性,这个可以看一下祥电子S3C2440开发平台光盘→资料盘→TX-2440A盘20111012更新→嵌入式学习资料压缩包中的bootloader技术内幕这篇文章,这里很详细的介绍了bootloader的启动过程,3.1.Boot Loader 的stage1所完成的工作是基本硬件的初始化,3.1.2.为加载stage2准备RAM空间,3.1.3.拷贝stage2代码到RAM中,3.1.4.设置堆栈指针sp,3.1.5.跳转到第二阶段stage2的C程序入口点,我们可以看一下vivi的源码,在天祥电子S3C2440开发平台光盘→资料盘→TX-2440A盘20111012更新→源码包→bootloader源码压缩包的vivi源码→vivi_2440文件夹中,第一阶段的代码是在/arch/s3c2440文件夹head.S这个文件中,我们用Notepad++文本编辑器打开head.S文件,看一下发现这里都是用汇编语言写的