在《什么是boot loader》一文中我抛出了一个问题,这个问题如下:

我们说boot loader通常采用汇编和C语言相结合来编写的,那能不能全部用C语言来进行编写呢?为什么?

对于这一问题的答案是:不能。C程序中所有的代码都是以函数的形式出现的。可能有人要说在C中也可以嵌入汇编代码,能不能用这种方式来实现整个boot loader呢?再看看题目,这里只考虑所有的代码只能是以函数的形式出现。那C程序中函数调用要一个什么样的环境呢?堆栈!我们写C程序时在函数名的后面,就是用花括号将代码括起来的,开始的花括号其实可以理解为有一段汇编代码(具体细节以后会有文章进行解释)对堆栈进行操作。那堆栈从哪来呢?显然,堆栈是一块内存区,也就是说我们用C程序写代码之前,必须保证内存已经初始化好了、可以用了。回忆一下,我们在《什么是boot loader》一文中提到,SDRAM内存芯片的初始化是boot loader中很重要的一步。也就是说,我们必须保证初始化好了SDRAM内存芯片后,才能进行C函数调用。因此,完全用C语言来实现boot loader是不可行的。

如果你觉得本文的哪些地方需要改进或是存在一些不明白的地方,请留言。如果你想参与讨论嵌入式系统开发相关的话题,请加入技术圈(g.51cto.com/UltraEmbedded)。

boot loader能全部用C程序编写吗相关推荐

  1. 什么是Boot Loader

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yunli.blog.51cto.com/831344/181630 在嵌入式系统 ...

  2. Boot Loader的启动流程和开发经验总结

    Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统.在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成.  ...

  3. Linux学习-Boot Loader: Grub2

    boot loader 的两个 stage 在 BIOS 读完信息后,接下来就是会到第一个开机装置 的 MBR 去读取 boot loader 了.这个 boot loader 可以具有选单功能.直接 ...

  4. Usb Boot Loader(1)

    此前一直参考<一个操作系统的实现>这本书,遗憾的是书里面是以FAT12文件系统为例讲解的,于是打算用我FAT32格式的U盘实现一个Boot Loader. 这样就造成了一个问题,不能进行单 ...

  5. boot loader:Grub

    boot loader是载入内核的重要工具,没有boot loader的话,kernel根本没办法被内核加载的 MBR是整个硬盘的第一个sector内的一个块,大小只有446bytes.但loader ...

  6. 嵌入式系统 Boot Loader 技术内幕-目前看到介绍Boot loader最通俗明了的文章

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  7. 嵌入式系统 Boot Loader 技术内幕

    转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经 ...

  8. MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)

    未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...

  9. standalone应用_具有Spring Boot的Spring Integration Standalone应用程序

    standalone应用 我之前在博客中写过一种编写独立的Spring Integration应用程序的方法. Spring Boot使创建此独立应用程序变得更加简单. 简单的流程是轮询USGS服务, ...

最新文章

  1. 正确生成浮点型的方法,解决sqlachemy Float浮点型的坑,生成float类型时,长度和精度均为0,导致查询不到结果!...
  2. PCIE 硬件接口那点屁事
  3. 澳大利亚悉尼大学徐畅教授招收深度学习方向全奖博士生
  4. linux系统管理工具sar(一)
  5. CF 1098 C. Construct a tree
  6. Python gevent学习笔记 1
  7. throws java_基于Java中throw和throws的区别(详解)
  8. pythonlambda菜鸟教程-Python reduce() 函数
  9. 维基媒体宣布采用 Vue.js 进行前端开发
  10. OSI七层模型:TCP/IP HTTP WebSocket MQTT
  11. ncbi下载数据sra和转换fastq流程
  12. 乐高大颗粒作品23:磁悬浮列车
  13. TYPE g_date_tbl_typ IS TABLE OF DATE INDEX BY VARCHAR2(1000);
  14. 【深度学习】Yolo记录
  15. 传奇私服服务端制作详细教程
  16. (翻译)社会认同模式(Social proof)
  17. 深入解析Javascript异步编程
  18. Android moudle库使用aar的方法
  19. 苹果手机怎么备份所有数据_ORICO手机备份宝,数据备份更轻松
  20. Unity3D 开关按钮Toggle (可以做单选按钮)

热门文章

  1. MySQL分组查询—简单使用
  2. MySQL高级 - InnoDB特性
  3. container常见操作
  4. Zookeeper数据的同步流程
  5. Java领域的对象如何传输-基于 socket 进行对象传输
  6. 简单分析ComponentScan
  7. EJB和JavaBean的区别
  8. 日志规范之阿里巴巴开发手册中的其它规范讲解
  9. 多租户数据库设计方法:共享数据库表
  10. 多租户数据库设计方法:独立数据库