加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

Bootloader 技术问答

时间:2013-09-08  来源:123485.com  作者:9stone

Bootloader的功能决定了在引导Linux系统时,必须使用bootloader,除非你对linux内核进行了修改。
Bootloader有两个主要功能:

  1. 在发布模式,自动引导linux系统,为系统初始化各种参数。
  2. 在调试模式,要能够方便的下载内核,引导内核。

Linux系统一定要bootloader支持吗?
答:是的。通用的Linux内核,启动时需要很多参数,这些参数必须通过bootloader传递。而且内核一般是压缩存放到外存上的,从外存到内存的拷贝也是由bootloader完成。

Bootloader为什么不和kernel放到一起呢?
答:不可以这样做。从bootloader的第二个功能就知道,bootloader是不能和内核放到一起。当然,在发布模式时,是可以集成到一起的,通常没必要。

从哪里可以得到bootloader?
答:目前通用的bootloader很多,不论是嵌入式还是桌面系统,比如lilo,grub,blob等。桌面用的bootloader我们就不讨论了,重点说一下嵌入式领域用的bootloader。采用通用的bootloader功能强大,开发容易,而且由专人维护升级,不过多是针对特定的CPU或者特定开发板的。如果是学习,推荐自己开发bootloader。

如何编写自己的bootloader?
答:编写一个bootloader只要能够完成前面提到的两个功能就可以了。分别描述一下这两个功能的实现:

  1. 该功能比较简单,就是从FLASH中拷贝数据到RAM。如果内核的存放不是基于文件系统的,直接采用汇编就可以完成块拷贝。然而如果内核存放在文件系统之上,比如内核存放到了基于ext2文件系统的CF卡上。首先我们的bootloader要能够访问CF卡,然后要能够识别文件系统,只有这样才能正确找到内核文件并拷贝到内存中。
  2. 该功能一般通过串口实现。对于ARM来说,驱动串口比较容易,直接从主机的串口接收内核数据存放到RAM中,就可以启动内核了。如果需要发布,还要实现把内核从RAM烧写到外存的能力。

       为了提高速度,充分挖掘开发板和CPU的潜力,出现了许多用网口和USB接口下载内核的bootloader。使用网口,bootloader必须提供网卡驱动和TCP/IP协议的支持。使用USB接口,需要提高大容量存储类驱动。
       为了拓展思路,你也可以使用红外,存储卡接口进行数据下载。使用红外接口,和串口基本一样,无非就是没有了连线。使用存储卡,通常需要文件系统的支持。比如,我们使用XD卡存放内核,在主机交叉编译好内核后,把内核存放到XD卡上。然后将XD卡插到目标板的插槽中,bootloader必须有能力把XD卡上的内核拷贝的RAM中,过程参考功能1的实现。


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门