嵌入式linux那点东东之整体框架
2013-03-04 12:37
288 查看
从事嵌入式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也就这些东东,不过要学好这些,所需要积累的和学习的还是有很多很多的。
不过先通览全局,然后逐步深入,那么学习起来目标性更强,才更有兴趣和信心学好它。
首先还是看下最简单的整个框架。
关于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那点东东之整体框架
- QT学习笔记(七):嵌入式Linux下的QT框架
- 嵌入式linux之Nand flash驱动程序框架
- 嵌入式Linux WEB服务器整体设计
- linux0.12之内存管理(1)-整体框架思路
- 11-S3C2440驱动学习(七)嵌入式linux-字符设备的另一种写法及RTC驱动程序分析和字符设备驱动框架总结
- 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl
- 嵌入式Linux驱动笔记(七)------浅析tty与uart框架
- Linux 终端设备驱动整体框架(1)
- 嵌入式linux之触摸屏驱动框架
- linux日志服务(2): syslog日志整体框架原理
- 09-S3C2440驱动学习(三)嵌入式linux-platform平台总线驱动程序及分离分层构建驱动框架
- 自己动手设计并实现一个linux嵌入式UI框架
- linux XFRM整体框架简单分析
- 自我总结--嵌入式 Linux 系统一般框架
- 嵌入式Linux驱动笔记(十四)------详解clock时钟(CCF)框架及clk_get函数
- linux XFRM整体框架简单分析
- 嵌入式Linux驱动学习之路(九)Linux系统调用、驱动程序框架
- QT学习笔记(五):嵌入式Linux下的QT框架
- 嵌入式Linux驱动笔记(十二)------通俗易懂式分析了解spi框架