Linux开发板启动流程

目录

一、Linux开发板启动概述

二、引导加载程序(Bootloader)

1. Bootloader的两个阶段

(1)Bootloader第一阶段的功能    

(2)Bootloader第二阶段的功能 

2.  Bootloader的启动方式(三种)

(1)网络启动方式

(2)硬盘启动方式

(3)Flash启动方式

二、 Linux内核

三、文件系统

四、应用程序

  


一、Linux开发板启动概述

        Linux 系统从软件角度看启动流程可以分为四个部分:引导加载程序(Bootloader) 、 Linux 内核、文件系统、应用程序。正常启动过程中,Bootloader首先运行,然后它将内核复制到内存中(也有些内核可以在固态存储设备上直接运行,如NorFlash), 并且在内存某个固定的地址设置好要传递给内核的参数,最后运行内核。 内核启动之后,它会挂接( mount)根文件系统(“Rootfilesystem”),启动文件系统中的应用程序。

二、引导加载程序(Bootloader)

        CPU上电后,处理器会执行一个位于Flash/ROM中的已知位置处的代码(这个地方是在硬件设计时设计好的,一上电它就开始执行这个位置的程序),Bootloader就是这第一段代码,Bootloader 从板子上的某个固态存储设备上将操作系统加载到RAM中运行(也可以在某些固态设备上直接运行,如NorFlash)。

        MIPS结构的CPU一般会从0xBFCO0000取第一条指令

        ARM结构的CPU一般会从地址0x0000000取第一条指令

Bootloader的启动过程可以分为两个阶段和三种启动方式,如下所述

1. Bootloader的两个阶段

(1)Bootloader第一阶段的功能    

  •  硬件设备初始化
  •  为加载Bootloader 的第二阶段代码准备RAM空间
  •  复制 Bootloader 的第二阶段代码到RAM空间中
  •  设置好栈
  •  跳转到第二阶段代码的C入口点

(2)Bootloader第二阶段的功能 

  • 初始化本阶段要使用到的硬件设备(如串口、Flash和网卡等)
  • 检测系统内存映射( memory map )
  • 将内核映象和根文件系统映象从Flash 上读到RAM空间中
  • ·为内核设置启动参数
  • 调用内核

2.  Bootloader的启动方式(三种)

(1)网络启动方式

        网络启动方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。

(2)硬盘启动方式

        传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。

(3)Flash启动方式

        大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区。

二、 Linux内核

        特定于嵌入式板子的定制内核以及内核的启动参数。内核的启动参数可以是内核默认的,或是由Bootloader传递给它的,Bootloader 与内核的交互是单向的,Bootloader将各类参数传给内核,由于它们不能同时运行,传递办法只有一个:Bootloader 将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。

三、文件系统

        包括根文件系统和建立于Flash 内存设备之上的文件系统。里面包含了Linux系统能够运行所必需的应用程序、库等,比如可以给用户提供操作Linux的控制界面的shell程序、动态连接的程序运行时需要的glibc 或uClibc库等。


四、应用程序

        特定于用户的应用程序,它们也存储在文件系统中。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:Qtopia和MiniGUI等,在嵌入系统的固态存储设备上有相应的分区来存储它们。

最后,附一个嵌入系统的固态存储设备典型分区结构图供大家参考:

  

        

        

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux开发板上电启动的过程如下: 1. 开机后,输入root登录,此时可以进入开发板的终端窗口,可以通过该终端窗口进行调试和操作。 2. 在/etc/init.d文件夹中,可以放置你要执行的操作,可以是一个启动脚本或者可执行程序。例如,可以创建一个名为hello的启动脚本,将其放置在/etc/init.d文件夹中。 3. 在/etc/rc3.d文件夹中,创建一个链接文件,将刚刚创建的启动脚本链接到该文件夹中。可以使用以下命令创建链接文件:ln -s /etc/init.d/hello /etc/rc3.d/S05hello。这样,在系统启动时,会按照指定的顺序执行链接文件中的脚本或程序,从而实现自动启动。 4. 在创建的启动脚本中,可以编写自己的逻辑,例如设置环境变量、执行特定的命令或运行可执行程序等。以下是一个示例的启动脚本: #!/bin/bash echo "*****Hello******" cd /lib sleep 30 ./可执行程序 & 在这个示例中,启动脚本会输出一条"*****Hello******"的消息,并进入/lib目录,延迟30秒后运行一个可执行程序。 通过以上步骤和配置,当Linux开发板上电启动时,系统会自动执行指定的启动脚本或程序,完成相应的初始化和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [linux开发板开机自启动应用和部分开发板免登录功能实现](https://blog.csdn.net/weixin_52627168/article/details/129578584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [linux开发板设置自启动脚本](https://blog.csdn.net/qq_45766232/article/details/129934928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrWang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值