注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 应用方案

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:douweishg 发表时间:2012/9/16 17:08:00  

 

 本栏论题: 嵌入式系统的启动的有关问题  [1282]

    嵌入式Linux启动分为两个部分,系统引导与Linux启动。系统引导将完成Linux装入内存前,初始化CPU和相关IO设备,并将Linux调入内存的工作。系统引导主要由BootLoader实现。在BootLoader将Linux内核调入内存之后,将权力交给LinuxKernel,进入Linux的启动部分。以下详细分析启动的过程与使用的文件。
   
    一、系统引导与BootLoader
    BootLoader因嵌入式系统的不同与PC机有很大不同,这里将以Hyper250(Inter Xscale GDPXA250)的启动为例来分析。由于没有BIOS驱动主板,EnbeddedOS必须由bootloader驱动所有的硬件,并完成硬件的初始化工作。
    所有的初始化文件在hyper250/Bootloader目录下。
   
    首先分析开机运行的分件:
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/start_xscale.S
    文件包含两个库文件:
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/config.h
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/start_xscale.h
    文件config.h主要完成系统各硬件的宏定义与设定,xscale.h主要完成对系统芯片的及系统操作的设定。
   
    以下分析config.h文件:
    (1)存储总线设备的宏定义:定义Flash的大小、字长等信息,定义SRAM的基址、大小和块大小。
    (2)动态内存设定:定义DRAM的大小、基址。
    (3)软件包信息:包名称、版本号。
    (4)设定BOOT LOADER的位置:在DRAM和SRAM的最大值、DRAM装入位置、栈的基址。
    (5)设定kernel的位置:在DRAM和SRAM的基址、KERNEL的最大值、KERNEL中块的数量。
    (6)设定文件系统的位置:根目录在DRAM和SRAM的基址、文件系统的最大值、文件系统中块的数量。
    (7)设定LOADER程序:LOADER程序的静态内存基址、LOADER程序的最大值、块的数量。
    (8)网络设定
   
    以下分析start_xcalse.h文件:
    (1)定义内存基址(A0000000)
    (2)定义中断基址(40D00000)和中断保护栈的偏移量
    (3)定义时钟管理基址(41300000)和寄存器偏移及其初始值
    (4)定义GPIO接口寄存器基址(40E00000)及各寄存器的偏移
    (5)定义GPIO接口各寄存器的初始值
    (6)定义内存控制寄存器基址(48000000)和各寄存器的偏移
    (7)定义内存控制寄存器的初始值
    (8)定义电源管理寄存器的参数
    (9)定义FFUART寄存器的基址(40100000)和各寄存器的偏移
    (10)定义FFUART各寄存器的初始值
   
    以下分析start_xcalse.S文件:
    (1)设定中断基址(40D00000),完成中断保护栈的初始化
    (2)初始化GPIO接口
    (3)初始化内存SDRAM
    (4)将Bootloader从Flash拷贝到SDRAM中
    (5)装入Linux内核镜像,将内核从Flash(000C 0000)装入SDRAM(A0008000)中.
    (6)设定保护栈
    (7)调用main.c的主函数c_main()
   
    以上start_xcalse.S通过APCS的编程标准书写的汇编文件初始化了系统相关的硬件,并且完成了BootLoader的装入内存和Linux内核的装入,最后将权力转交给main.c。
    以下将分析main.c文件:
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/main.c
    以及两个库文件
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/main.h
    hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/scc.h
   
    #2
   
    二、Linux启动过程分析
   
    1.Makefile分析:
    在分析arch/arm/boot/compressed目录下的文件的时候,对于Makefile的分析是很重要的,因为内核将在这个目录相产生。这里主要工作是对内核的压缩和解压工作。本目录在编译完成后将产生vmlinux、head.o、misc.o、head-xscale.o、piggy.o这几个文件。其中vmlinux是没有压缩过的内核。head.o是内核的头部文件,负责初始设置。misc.o将主要负责内核的解压工作,它在head.o之后。head-xscale.o文件主要针对Xscale的初始化,将在链接时与head.o合并。piggy.o是一个中间文件,其实是一个压缩的内核,只不过没有和初始化文件及解压文件链接而已。
   
    2.Decompress分析:
    在BootLoader完成系统的引导以后并将Linux内核调入内存之后,调用bootLinux(),这个函数将跳转到kernel的起始位置。如果kernel没有压缩,就可以启动了。如果kernel压缩过,则要进行解压,在压缩过的kernel头部有解压程序。压缩过得kernel入口第一个文件源码位置在arch/arm/boot/compressed/head.S。它将调用函数decompress_kernel(),这个函数在文件arch/arm/boot/compressed/misc.c中,decompress_kernel()又调用proc_decomp_setup(),arch_decomp_setup()进行设置,然后使用在打印出信息“Uncompressing Linux...”后,调用gunzip()。将内核

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳