从事嵌入式linux工作也几年了,如果算上大学期间的自学,那么也算是个工程师了。期间写过底层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也就这些东东,不过要学好这些,所需要积累的和学习的还是有很多很多的。

嵌入式Linux框架的理解的更多相关文章

  1. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  2. 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】

    转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...

  3. 自己动手设计并实现一个linux嵌入式UI框架(设计)

    看了"自己动手设计并实现一个linux嵌入式UI框架"显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景.如:C语言基础知识,尤其是指针.函数指针 ...

  4. 自己动手设计并实现一个linux嵌入式UI框架

    一直以来都是使用现成的UI框架,如微软的window.QT等,因为它有各种控件(如button.window.edit等)都已经封装实现好了.我们只要拿来用就是了,也一直认为它很神圣,没有深入了解它背 ...

  5. 作为一个新人,怎样学习嵌入式Linux,(韦东山)

    很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学到什 ...

  6. 作为一个新人,如何学习嵌入式Linux?

    作为一个新人.如何学习嵌入式Linux?我一直在问太多次,特写文章来回答这个问题. 在学习嵌入式Linux之前.肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).C语言要 ...

  7. 作为一个新人,怎样学习嵌入式Linux

    作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...

  8. (转)作为一个新人,怎样学习嵌入式Linux?(韦东山)

    被问过太多次,特写这篇文章来回答一下.   在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).C语言要学到什么程度呢?越熟当然越好,不熟的话也 ...

  9. 作为一个新人,怎样学习嵌入式Linux?

        作为一个新人,怎样学习嵌入式Linux?   在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).尝试着写一些C语言竞赛的题目.它们是纯 ...

随机推荐

  1. (原)关于OpenSL ES播放音频数据的一个奇怪的问题

    关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...

  2. 使用Javascript从Google Places搜索api获取纬度和经度

    如何使用谷歌地图搜索框api从搜索到的位置获取经度和纬度. 我使用与谷歌演示相同的代码 – https://developers.google.com/maps/documentation/javas ...

  3. Android 问题解决 HorizontalScrollView显示不全(转)

    原链接:https://www.jianshu.com/p/003adbcaff9d Android 问题解决 HorizontalScrollView显示不全 <HorizontalScrol ...

  4. es查询和更新 语句示例

    文档目录: https://www.elastic.co/guide/index.html GET _search { "query": { "match_all&quo ...

  5. spark + hive

    1.如何让 spark-sql 能够访问hive? 只需将hive-site.xml 放到 spark/conf 下即可,hive-site.xml 内容请参照hive集群搭建 2.要在spark 代 ...

  6. [转帖]关于4A(统一安全管理平台)系统的理解

    雪山上的蒲公英 https://www.cnblogs.com/zjfjava/p/10674577.html 关于4A(统一安全管理平台)系统的理解   1. 4A系统的需求分析 近年来企业用户的业 ...

  7. Python实现树

    树 (tree) 是一种非常高效的非线性存储结构.树,可以很形象的理解,有根,有叶子,对应在数据结构中就是根节点.叶子节点,同一层的叶子叫兄弟节点,邻近不同层的叫父子节点,非常好理解. 注:定义来自百 ...

  8. Mysql 中 int(3) 和 int(11) 的区别

    [1]int(3) 和 int(11)的区别(思维惯性认知错误) 这里的3或11代表的是存储在数据库中的具体的长度,总以为int(3)只能存储3个长度的数字,int(11)只会存储11个长度的数字. ...

  9. Nginx静态服务配置---详解root和alias指令

    Nginx静态服务配置---详解root和alias指令 静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器.同时nginx也是一个高性能的静态文件服务器.通常都会把应用的静态文件使用ng ...

  10. PB 获取或操作数据窗口语句的方法

    1.setsqlselect用法: ls_select=getsqlselect    //通过getsqlselect取得当前数据窗口的查询语句 ls_where="  "    ...