zoukankan      html  css  js  c++  java
  • 嵌入式linux那点东东之整体框架

           从事嵌入式linux工作也1年有余了,如果算上大学期间的自学,那么也有两年多光景了。期间也写过底层bootloader、内核的驱动和上层应用程序。对于芯片内部的模块也在大学时候用fpga的verilog玩过,所以对于整个嵌入式的框架也算是有点小小的理解吧。一直想整理下,都忙于工作。上个周六打球不小心把脚给扭伤了,唉,现在还打着石膏。趁此之际,就谈谈个人理解。如有偏差,请不吝赐教!

     

    首先还是看下最简单的整个框架。

     

    关于bootloader

    1、当板子一上电,因为芯片有boot的功能,自动会从flash搬启动代码并执行处理。这里的代码其实就是bootloader的第一个阶段。其实bootloader就是具有boot和loarder的功能。Boot就是搬代码,引导,loarder就是加载各个需要的驱动。

    2、bootloader第一个阶段做的事情,具体做了什么可以看下图。


    3、 bootloader的第一阶段主要是汇编的代码,接着的第二阶段基本是c代码。这里主要是初始化了需要的外围设备,比如说网卡驱动,串口驱动等等,然后启动内核。

    4、 启动内核可以从网络启动,也可以sd/emmc卡启动。其主要就是把内核的代码给loard进DDR中,然后执行。

    Bootloader的内存分布如下:


    关于芯片内的IP核(各模块控制器)

          对于芯片内的一些IP核,也就是各个模块的控制器了,其实都是通过FPGA来实现的。FPGA就是现场可编程门阵列。比如拿I2C控制器来说吧。I2C主要就是SDA和SCL两根线了,实现的功能就是传输数据了。在IP核的内部可以实现很多的逻辑,比如说当要发送一个设备地址的时候,主要配一下寄存器,该模块的状态机获取这个数据,然后发送了SDA线的数据是从设备的设备地址,那么从设备就会回应一个低电平,这时这个模块的SDA线有了这个低电平,那么就可以知道这个设备地址发送正确了。而我们不需要知道IP核内部是怎么去处理的,只需要配置个数据给一个寄存器,然后该模块就会做相应的处理。当然可以用模拟的方法,所以这就是IP核的作用了,用配寄存器来实现功能,从而隐藏了内部的工作时序,封装的很好。

           至于其他的模块也是同一个原理。

     

    关于内核

    当bootloader把内核代码loard进了DDR之后,那么就要启动内核了。内核的启动简单的如下所示:


    当内核启动完成后,就会调用用户的init守护进程了。

     

    关于linux文件系统

    当内核调用到linux的文件系统后,那么在控制台终端就可以运行你要的程序。具体和linux操作系统无多大差异。

     

    关于android文件系统

           当找到了android的init程序后。下面的图很好的分析了android的启动过程。

     

    由以上就可以知道我们用得手机或者pad到底是怎么实现的。其实嵌入式linux也就这些东东,不过要学好这些,所需要积累的和学习的还是有很多很多的。

    不过先通览全局,然后逐步深入,那么学习起来目标性更强,才更有兴趣和信心学好它。

  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300015.html
Copyright © 2011-2022 走看看