嵌入式linux加载引导内核和根文件系统的方法
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多。
嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAND flash),这种方法的缺点是在内核和根文件系统出现修改时我们就不得不得重新对flash进行擦除和烧写工作,这个非常耗时,在产品开发调试阶段非常 不适合,只有在最终成品时才比较适用。哪在开发阶段采用哪种方式比较好呢?先还是看看现在都有些常用的存储设备吧。我们常见的存储设备有:硬盘,U 盘,SD卡,Flash,还有一种其实是借助网络而将其存储到远程机器上的方法,我们常听说的网络硬盘,就是借助TCP/IP协议从远处将数据下载到机器 来进行工作,很多网吧就采用这样的“无盘系统”技术,其实并不是没有盘,而只是这个存储设备不在本地机器上而已。
从上面这些我们可以得出几种加载引导linux内核的方法:
1.网络。即将内核和根文件系统存储在PC机上,通过网络协议来将数据下载到开发板中。内核和根文件系统都可以通过tftp或者ftp下载到目标板上,当然根文件系统其实是没有必要下载到目标板上,我们可以采用NFS文件系统来挂载。
2.SD/MMC 卡引导。将内核和根文件系统存储在SD卡中,在启动时通过读SD卡,来将内核读入到内存中。根文件可以读到内存中,也可以由内核直接将SD卡直接挂载为根 文件系统。这里需要文件系统的支持,常用的有FAT和EXT2。这样在内核和根文件系统更新时,只需要从新写SD卡就可以了。
3.U盘引导。这个需要目标板有USB HOST接口。同时也需要文件系统支持。其操作与SD卡引导类似。
4.硬盘/CF卡引导。这个也前面两个类似,只需要其操作起来也不方便。主要因为硬盘目前不支持热拔插,而且对目标板也有要求,一般的嵌入式设备很少需要硬盘。
5.flash引导。这个就是我们最常用的,可以常用非常多中方式和多种文件系统,包括ext2,jffs2,yaffs2,cramfs等等。
另外一种引导的方式就是通过串口直接下载内核和文件系统到内存中,或者使用调试器与仿真器通过调试通道将内核和根文件系统加载到内核,然后在调试器中通过命令引导内核。
要实现这些引导方式,那么bootloader就必须要支持上面需要的功能,我们来看看这个bootloader可能的需求:
1.支持TCP/IP协议,并实现tftp或者ftp协议。
2.文件系统的支持。可能需要支持fat,ext2,jffs2,yaffs2,cramfs等。
3.SD/MMC协议支持
4.USB Host驱动代码
5.基于MTD的Flash驱动和设备的支持。
6.IDE/CF接口的支持(不必要)。
要完成这些功能并不简单,从零开发的话,可以说是非常大的项目,如果再加一个调度器的话那就是一个小的操作系统了,还是先看看现有的各种bootloader吧。常见的有:
1.uboot
2.redboot
3.vivi
其 实uboot中就已经实现了我们需要的所有功能了,而且它支持非常多的目标板和体系结构。redboot是ecos的一部分,其功能没有uboot那么强 大,而且其移植也并不那么简单,支持的开发板也少,而且资料不怎么太好找。vivi主要从的三星的芯片上,功能也不多,而且局限很多。所以推荐使用 uboot,最新的uboot应该是u-boot-2009.08。其与原来的uboot-1.1.6修改很多,配置方面有所修改。
上面 这几种引导方式,在开发阶段选择一种就好了。把一种调试好了就进行内核和驱动的开发吧。当然花费在其上的时间是不会浪费的。“磨刀不误砍柴工”。推荐使用 网络引导方案,先通过tftp下载内核到内存,再通过NFS挂载根文件系统,调试和开发都方便。如果没有网络可用,可以考虑SD或U盘引导,SD卡引导要 简单点,最后实在没办法那就直接烧写flash吧。对于学习我们可以试尝用这几种方法来比较一下,并好好总结,等到上战场的时候就可以用上了。最好要有积 累。如果我们做的好的话,各种功能都是模块化,就算开发开发一个bootloader也只是一个各种模块的组装和平台相关的移植。
最后当 然也可以自己动手去实现一个bootloader,这个虽然很费时间,但意义还是很重大的。各种功能可以慢慢的加上,先设计可以基本功能的 bootloader,可以边做边参考uboot,你会发现自己在写代码的水平会有一个很大的飞跃。像如何编写平台无关代码;怎样进行代码抽象;如何编写 可移植性,适应性强,健壮的代码;C语言的各种特性的使用特别是指针和函数的使用;学会如何实现程序的可配置等等。
- 顶
- 1
- 踩
嵌入式linux加载引导内核和根文件系统的方法的更多相关文章
- 《Linux内核分析》 week8作业-Linux加载和启动一个可执行程序
一.ELF文件格式 ELF(Executable and Linking Format)是x86 Linux系统下常用的目标文件格式,有三种主要类型: 适于连接的可重定位文件,可与其他目标文件一起创建 ...
- Linux内核与根文件系统的关系1
Linux内核与根文件系统的关系开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用 ...
- Linux内核与根文件系统的关系
开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题! 一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具.这 ...
- Linux加载DTS设备节点的过程(以高通8974平台为例)
DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...
- 【Android】首次进入应用时加载引导界面
参考文章: [1]http://blog.csdn.net/wsscy2004/article/details/7611529 [2]http://www.androidlearner.net/and ...
- Android 首次进入应用时加载引导界面
功能需求:首次进入应用时加载引导界面 思路: 1.首次进入,怎么判断?查看SharedPreferences中某个字段 2.基本上每个应用都有个进入实际功能是的动画加载页面,我们可以在该Activit ...
- linux加载指定目录的so文件
linux加载指定目录的so文件 http://blog.csdn.net/win_lin/article/details/8286125 download urlhttp://download.ch ...
- 如何让linux加载当前目录的动态库
debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin lin ...
- Ztree加载完成默认选中根节点右侧生成表格
需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格: 效果:如下图所示: 思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并 ...
随机推荐
- php微信支付接口开发程序(一)
阅读对象 本文阅读对象:商户系统(在线购物平台.人工收银系统.自动化智能收银系统或其他)集成微信支付涉及的技术架构师,研发工程师,测试工程师,系统运维工程师. 支付模式 1. 刷卡支付 刷卡支付是用户 ...
- 《Web 前端面试指南》2、JavaScript 的 Bind 函数进阶
使用 Bind() 设置方法中 this 对象 //<button>获取随机的人</button> //<input type="text"> ...
- Struts2中OGNL
什么是OGNL OGNL:Object Graph Navigation Language 对象导航图语言 开源项目,取代页面中Java脚本,简化数据访问 和EL同属于表达式语言,但功能更为强大 让 ...
- tyvj1728 普通平衡树
为了彻底理解树状数组,试着用树状数组做了下普通平衡树 而树状数组只能离线做,或者保证值的大小在数组可承受的范围内也是可以的,因为要求离线是因为必须事前对所有数离散化. 然后我们看刘汝佳蓝书上的图 利用 ...
- Hadoop 的子项目
Hadoop Common: 在0.20及以前的版本中,包含HDFS.MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Co ...
- angular2的管道初体验
ng管道是应用里面比较重要的一个技术,他涉及很多功能 包括排序过滤 废话不说 直接上代码 新建个文件夹吧这个samplepipe.ts放进去 然后 你要做什么 在里面写管道代码 然后在app.modu ...
- 獲取 Textarea 的光標位置(摘自網絡)
在任何编辑器中,获取光标位置都是非常重要的,很多人可能认为较难,其实只要处理好浏览器的兼容,还是比较容易实现的.下面我们一起来看看如何获取到 Textarea 元素中的光标位置.首先,我们用 rang ...
- MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
redis 有如标题所示提示, 可从两方面查找原因: 一, 可以看一下,运行redis实例的用户, 是否对redis, 数据保存的目录有写权限(既然是排查错误,不防把redis所在目录权限最大化试一下 ...
- yii 验证码那点事儿
今天要使用yii验证码, 不过, 这个验证码是整站通用的, 也就是说, 有个表单的提交是使用ajax方式来提交, 整站, 不管在哪个地方, 都能点出来此窗口, 来提交信息 关于yii验证码, fram ...
- 制作Android Demo GIF:程序演示效果GIF图录制
[转] 制作Android Demo GIF:程序演示效果GIF图录制 在平时写博客或者分享自己写的程序效果的时候经常需要做成GIF图,以下就是介绍几种常用的GIF录制方法: 一.录制工具 1.( ...